Met
e od
o y
y s
ym
y u
m la
l c
a y
c j
y ne
JĘZYK SYMULACYJNY MODSIM
bi
b b
i l
b i
l o
i t
o eki
Plan p
reze
z nta
t cj
c i
Wybrane biblioteki:
– IOMod – operacje wejścia/wyjścia
– RandMod – generowanie liczb pseudolosowych
– StatMod – monitory statystyczne
– ListMod – zarządzanie złożonymi strukturami z rekordami
– GrpMod –zarządzanie złożonymi strukturami z obiektami
– SimMod – operacje związane z symulacją
IOMo
M d
o – op
o er
e ac
a j
c e
e w
ej
e śc
ś i
c a
i /
a w
/ yj
y śc
ś i
c a
i
a (
1
( /4
/ )
Typ wyliczeniowy dla trybu pracy strumienia danych
FileUseType = (Input, Output, InOut, Append, Update, CreateBinary);
– tr
t y
r b
y
b te
t kst
s o
t wy
y st
s r
t u
r m
u i
m e
i ni
n a
i da
d ny
n c
y h:
h
: InP
n u
P t
u ,
, Ou
O t
u P
t u
P t
u ,
,
InOut, Append,
– tryb binarny: Update, CreateBinary,
IOMo
M d
o – op
o er
e ac
a j
c e
e w
ej
e śc
ś i
c a
i /
a w
/ yj
y śc
ś i
c a
i
a (
2
( /4
/ )
PROCEDURE ReadKey() : CHAR;
PROCEDURE FileExists(IN fname: STRING) : BOOLEAN; PROCEDURE DeleteFile(IN fname: STRING);
PROCEDURE FileSize(IN fname: STRING) : INTEGER; Stre
r a
e mO
m bj =
= O
BJE
J CT
C
eof: BOOLEAN;
ioResult: INTEGER;
fileName: STRING;
ASK METHOD Open(IN fname: STRING; IN ioDirection: FileUseType); ASK METHOD Close;
ASK METHOD Delete;
ASK METHOD IsOpen() : BOOLEAN;
IOMo
M d
o – op
o er
e ac
a j
c e
e w
ej
e śc
ś i
c a
i /
a w
/ yj
y śc
ś i
c a
i
a (
3
( /4
/ )
ASK METHOD ReadChar(OUT ch: CHAR);
ASK METHOD ReadInt(OUT n: INTEGER);
ASK METHOD ReadReal(OUT x: REAL);
ASK METHOD ReadString(OUT str: STRING);
ASK M
ETH
T O
H D R
ea
e dLi
L n
i e(OUT
U
T st
s r:
r STR
T IN
I G)
G ;
ASK METHOD ReadBlock(IN buffer: ANYREC; IN size: INTEGER; IN blocknum : INTEGER);
IOMo
M d
o – op
o er
e ac
a j
c e
e w
ej
e śc
ś i
c a
i /
a w
/ yj
y śc
ś i
c a
i
a (
4
( /4)
ASK METHOD WriteChar(IN ch: CHAR);
ASK METHOD WriteInt(IN num, fieldwidth: INTEGER); ASK METHOD WriteHex(IN num, fieldwidth: INTEGER); ASK METHOD WriteReal(IN num: REAL; IN fieldwidth, precision: INTEGER); ASK METHOD WriteExp(IN num: REAL; IN fieldwidth, precision: INTEGER); ASK M
ETH
T O
H D W
ri
r t
i eS
e tri
r n
i g(IN
I s
t
s r:
r STR
T IN
I G)
G ;
ASK METHOD WriteLn;
ASK METHOD WriteBlock(IN buffer : ANYREC; IN size: INTEGER; IN blocknum: INTEGER);
ASK METHOD GetPosition() : INTEGER;
ASK METHOD Position(IN moveTo: INTEGER);
END OBJECT;
Ra
R ndMo
M d
o – ge
g n
e e
n r
e o
r w
o a
w n
a i
n e
i
e l i
l c
i z
c b
z
b
pseudol
o os
o ow
o y
w c
y h
c (
1
( /3
/ )
PROCEDURE Random() : REAL;
PROCEDURE FetchSeed(IN SimscriptSeedNumber: INTEGER) : INTEGER; RandomObj = OBJECT
originalSeed,
curr
r e
r n
e tSee
e d
e : IN
I TE
T GE
G R;
antithetic: BOOLEAN;
ASK METHOD Sample() : REAL;
ASK METHOD SetSeed(IN NewSeed: INTEGER);
ASK METHOD Reset();
Ra
R ndMo
M d
o – ge
g n
e e
n r
e o
r w
o a
w n
a i
n e
i
e l i
l c
i z
c b
z
b
pseudol
o os
o ow
o y
w c
y h
c (
2
( /3
/ )
ASK METHOD UniformReal(IN lo, hi: REAL) : REAL; ASK METHOD UniformInt (IN lo, hi: INTEGER) : INTEGER; ASK METHOD Exponential(IN mean: REAL) : REAL;
{mean > 0}
ASK METHOD Normal(IN mean, sigma: REAL) : REAL;
{sig
i ma
m >
> 0}
ASK METHOD Gamma(IN mean, alpha : REAL) : REAL;
{mean, alpha > 0}
ASK METHOD Beta(IN alpha1, alpha2 : REAL) : REAL;
{alpha1, alpha2 > 0}
ASK METHOD Triangular(IN min, mean, max : REAL) : REAL;
{min < mean < max}
Ra
R ndMo
M d
o – ge
g n
e e
n r
e o
r w
o a
w n
a i
n e
i
e l i
l c
i z
c b
z
b
pseudol
o os
o ow
o y
w c
y h
c (
3
( /3)
ASK METHOD Erlang(IN mean : REAL; IN K : INTEGER): REAL;
{mean, K > 0}
ASK METHOD LogNormal(IN SDev, Mean : REAL): REAL;
{mean > 0}
ASK METHOD Weibull(IN shape,scale : REAL) : REAL;
{shape,
e s
ca
c le
l >
> 0}
ASK METHOD Poisson(IN mu : REAL) : INTEGER;
{mu > 0}
ASK METHOD Binomial( IN n : INTEGER; IN p : REAL) : INTEGER;
{n (liczba prób) and p (prawdopodobieństwo) n, p > 0}
END OBJECT;
Sta
t tM
t o
M d
o – mo
m n
o it
i o
t r
o y
y s
t
s a
t t
a y
t s
y t
s y
t c
y z
c n
z e
e (1
( /
1 4
/ )
4
Typ tablicowy dla histogramów
histogram = ARRAY INTEGER OF REAL;
Klasa bazowa dla monitorów statystycznych
StatObj = OBJECT
Cou
o n
u t
n : I
N
I T
N E
T GE
G R;
Sum : REAL;
SumOfSquares : REAL;
low, high, interval: INTEGER;
ASK METHOD SetHistogram(IN Low: INTEGER;
IN High: INTEGER; IN Interval : INTEGER);
Sta
t tM
t o
M d
o – mo
m n
o it
i o
t r
o y
y s
t
s a
t t
a y
t s
y t
s y
t c
y z
c n
z e
e (2
( /
2 4
/ )
4
ASK METHOD GetHistogram() : histogram;
ASK METHOD Mean() : REAL;
ASK METHOD MeanSquare() : REAL;
ASK METHOD Variance() : REAL;
ASK ME
TH
T OD
O
D StdD
d e
D v(
v ) :
R
EAL;
L
ASK METHOD Reset;
PRIVATE
Histogram : histogram;
END OBJECT;
Sta
t tM
t o
M d
o – mo
m n
o it
i o
t r
o y
y s
t
s a
t t
a y
t s
y t
s y
t c
y z
c n
z e
e (3
( /
3 4
/ )
4
Typy monitorów statystycznych
IStatObj – monitor statystyczny zmiennych typu INTEGER
ITimedStatObj – monitor statystyczny (ważony czasem) zmiennych typu INTEGER
RStatOb
O j
b – mon
o i
n tor
o s
t
s atyst
s yczny
zn zm
ienn
n y
n ch
h t
ypu
p
u R
EAL
RTimedStatObj – monitor statystyczny (ważony czasem) zmiennych typu REAL
Sta
t tM
t o
M d
o – mo
m n
o it
i o
t r
o y
y s
t
s a
t t
a y
t s
y t
s y
t c
y z
c n
z e
e (4
( /
4 4)
Typy liczbowe monitorowane (statystycznie)
SINTEGER = LMONITORED INTEGER BY IStatObj;
TSINTEGER = LMONITORED INTEGER BY ITimedStatObj;
BINTEGER = LMONITORED INTEGER BY IStatObj, IT
I i
T medS
d tatOb
O j
b ;
SREAL = LMONITORED REAL BY RStatObj;
TSREAL = LMONITORED REAL BY RTimedStatObj;
BREAL = LMONITORED REAL BY RStatObj, RTimedStatObj;
Li
L stM
t o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e z
ł
z o
ł ż
o o
ż n
o y
n m
y i
m
i
str
t ukt
k u
t rami
m z
z reko
k r
o dami
m (
1
( /3
/ )
Klasy kontenerów:
– QueueList
– StackList
– RankedList
– BTreeList
– StatQueueList
– StatStackList
– StatRankedList
– StatBTreeList
Li
L stM
t o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e z
ł
z o
ł ż
o o
ż n
o y
n m
y i
m
i
str
t ukt
k u
t rami
m z
z reko
k r
o dami
m (
2
( /3
/ )
Metody wszystkich klas:
ASK METHOD Includes(IN candidate: ANYREC) : BOOLEAN;
ASK METHOD Add(IN NewMember : ANYREC);
ASK METHOD Remove() : ANYREC;
ASK
S
K M
E
M T
E H
T O
H D
O Fir
F st(
t )
(
) : ANY
N R
Y E
R C
E ;
ASK METHOD Last() : ANYREC;
ASK METHOD Next(IN candidate: ANYREC) : ANYREC;
ASK METHOD Prev(IN candidate: ANYREC) : ANYREC;
ASK METHOD RemoveThis(IN member: ANYREC);
ASK METHOD AddBefore(IN ExistingMember, NewMember:ANYREC);
ASK METHOD AddAfter(IN ExistingMember, NewMember: ANYREC);
Li
L stM
t o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e z
ł
z o
ł ż
o o
ż n
o y
n m
y i
m
i
str
t ukt
k u
t rami
m z
z reko
k r
o dami
m (
3
( /3)
Metody tylko dla list uporządkowanych:
ASK METHOD Rank (IN a, b : ANYREC) : INTEGER;
{metoda musi być nadpisana}
Metody tylko dla klas BTree:
ASK ME
TH
T OD
O
D SetOr
O de
d r(IN
I
N d
e
d gr
g ee :
I
N
I T
N E
T GE
G R);
{ustawia porządek, gdy nie ma elementów w strukturze}
ASK METHOD Key(IN object : ANYREC) : STRING;
{metoda musi być nadpisana}
ASK METHOD Find(IN key : STRING) : ANYREC;
SimM
m o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e s
y
s m
y u
m l
u a
l c
a j
c ą
j
ą (1
( /
1 4
/ )
4
Obiekt do synchronizacji procesów:
TriggerObj = OBJECT
WAITFOR METHOD Fire;
TELL METHOD Trigger;
ASK ME
TH
T OD
O
D Release
s ;
ASK METHOD InterruptTrigger;
ASK METHOD NumWaiting() : INTEGER;
PRIVATE
triggerList: ANYOBJ;
END OBJECT;
SimM
m o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e s
y
s m
y u
m l
u a
l c
a j
c ą
j
ą (2
( /
2 4
/ )
4
Procedury:
PROCEDURE StartSimulation;
PROCEDURE StopSimulation;
{anuluje wszystkie oczekujące aktywności i zwraca sterowanie do p
ierwszej i
nstrukcj
c i p
o St
S artSi
S mu
m lation}
PROCEDURE NumActivities(IN object : ANYOBJ) : INTEGER;
PROCEDURE NumObjPending() : INTEGER;
PROCEDURE NumActPending() : INTEGER;
PROCEDURE NumWAITFOR() : INTEGER;
PROCEDURE ResetSimTime(IN newtime : REAL);
PROCEDURE ActivityOwner(IN activity : ACTID) : ANYOBJ;
SimM
m o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e s
y
s m
y u
m l
u a
l c
a j
c ą
j
ą (3
( /
3 4
/ )
4
PROCEDURE ScheduledTime(IN activity : ACTID) : REAL;
{zwraca chwilę wznowienia podanej aktywności}
PROCEDURE ActivityName(IN activity: ACTID) : STRING;
PROCEDURE InterruptMethod(IN activity : ACTID);
PR
P OC
O EDU
D R
U E I
n
I t
n errup
u t
p (IN
I
N o
b
o j
b ect
:
A
NY
N O
Y B
O J;
IN methName : STRING);
PROCEDURE InterruptWaitingFor(IN activity : ANYREC);
{interrupts the most imminent activity with that method name}
SimM
m o
M d
o – za
z r
a z
r ą
z d
ą z
d a
z n
a i
n e
i
e s
y
s m
y u
m l
u a
l c
a j
c ą
j
ą (4
( /
4 4)
PROCEDURE InterruptAll(IN object : ANYOBJ);
PROCEDURE PendingListDump(IN DoActList: BOOLEAN);
{dumps the pending list showing each object on it. if DoActList is true, it also dumps each object's activity list}
PROCEDURE PendingListDumpToStream(IN doActivityList : BOO
O L
O E
L AN;
N IN
I
N s
t
s ream :
S
treamOb
O j
b );
PROCEDURE ActivityListDump(IN ProcObj: ANYOBJ);
PROCEDURE SimTime() : REAL;