Konrad Czupryn, Gr: I8C1S1 Warszawa, dn. 29.01.2011r.
Wojskowa Akademia Techniczna
Im. Jarosława Dąbrowskiego
w Warszawie
Laboratorium z przedmiotu
Podstawy symulacji
TEMAT: Napisać program symulujący działanie sieci SMO.
Słuchacz: Konrad Czupryn
Grupa: I8C1S1
Rok akademicki: 2010/2011
Semestr: V
Zestaw: 1
Prowadzący: dr inż. Jarosław Rulka
1. Treść zadania
Napisać program symulujący działanie sieci SMO jak na rysunku:
Przy realizacji zadania należy przyjąć następujące dane z listy przedstawionej
poniżej:
a) rozkład zmiennych Tj: (nrDz + i) mod 6 + 1;
b) rozkład zmiennych Oi: (nrDz + i + 1) mod 6 + 1;
c) Li: (nrDz + i) mod 2 + 1;
d) ALi: (nrDz + i + 2) mod 3 + 1;
e) Rj = (nrDz + i + 5) mod 3 + 1;
f) Mi = (nrDz + i + 2) mod 4 + 1;
g) Blokowanie zgłoszeń 1. SMO;
h) Klienci niecierpliwi w SMOi : Ni = (nrDz + i) mod 4 (ograniczony czas oczekiwania
na rozpoczęcie obsługi);
gdzie:
i
– numer SMO;
j
– numer strumienia;
Tj
– zmienna losowa oznaczająca czas pomiędzy kolejnymi napływami zgłoszeń do
systemu;
Oi
– zmienna losowa oznaczająca czas obsługi pojedynczego zgłoszenia
wgnieździe;
Ni
– zmienna losowa oznaczająca czas niecierpliwości zgłoszenia (gdy i = 0 =>
zgłoszenia cierpliwe);
Rj
– zmienna losowa oznaczająca wielkość paczki zgłoszeń (wchodzących w tej
samej chwili) j-tego strumienia;
pk
– prawdopodobieństwa przemieszczenia się zgłoszenia po danym łuku;
Li
– długość kolejki i-tego SMO;
AL.i
– algorytmy kolejek (w przypadku istnienia kolejki z priorytetami należyprzyjąć,
że zgłoszenia posiadają priorytety);
1. Rozkłady zmiennych losowych:
1.1. Wykładniczy
1.2. Erlanga
1.3. Normalny
1.4. Jednostajny
1.5. Trókątny
1.6. Weibulla
2. Długości kolejek pojedynczych SMO
2.1. ograniczone (możliwe straty)
2.2. nieograniczone
3. Algorytm kolejek:
3.1. FIFO
3.2. LIFO
3.3. Z priorytetami
4. Liczba stanowisk obsługi w gniazdach (1-M)
5. Ilość zgłoszeń jednocześnie napływających do systemu (1-R) Pozostałe dane
należy określać na początku symulacji.
2. Dane do zadania:
1. Numer z dziennika - 4.
2. Zmienna losowa oznaczająca czas pomiędzy kolejnymi napływami zgłoszeń do
systemu Tj: (nrDz + i) mod 6 + 1
• T1=6 Rozkład Weibulla
• T2=1 Rozkład wykładniczy
3. Zmienna losowa oznaczająca czas obsługi pojedynczego zgłoszenia w gnieździe
Oi: (nrDz + i + 1) mod 6 + 1
• O1=1 Rozkład wykładniczy
• O2=2 Rozkład Erlanga
• O3=3 Rozkład normalny
4. Długość kolejki i-tego SMO Li: (nrDz + i) mod 2 + 1
• L1=2 nieograniczona
• L2=1 ograniczona
• L3=2 nieograniczona
5. Algorytmy kolejek (w przypadku istnienia kolejki z priorytetami należy przyjąć, że
zgłoszenia posiadają priorytety ALi: (nrDz + i + 2) mod 3 + 1
• AL1=2 LIFO
• AL2=3 Z priorytetem
• AL3=1 FIFO
6. Zmienna losowa oznaczająca wielkość paczki zgłoszeń (wchodzących w tej samej
chwili) j-tego strumienia Rj = (nrDz + i + 5) mod 3 + 1
• R1=2 Rozkład Erlanga
• R2=3 Rozkład normalny
7. Liczba
stanowisk obsługi w gniazdach Mi = (nrDz + i + 2) mod 4 + 1
• M1=4
• M2=1
• M3=2
8. Zmienna losowa oznaczająca czas niecierpliwości zgłoszenia (gdy i = 0 =>
zgłoszenia cierpliwe) Ni = (nrDz + i) mod 4
• N1=1 Rozkład wykładniczy
• N2=2 Rozkład Erlanga
• N3=3 Rozkład normalny
3. Rozwiązanie: Obiekty potrzebne do zasymulowania zadanego obiektu zostały
zaimplementowane i nazwane:
KliOb j-klienta,
GniOb j-
gniazda obsługi,
MonObj -obiekt do monitorowania systemu,
Kolejka[numer]Obj - kolejka d
o stanowisk obsługi,
GeneratorObj
– generator klientów.
Wykorzystane wzory, których użyto do monitorowania systemu:
Średnia z próby n-elementowej:
Odchylenie standardowe z próby n-elementowej:
Estymator wartości średniej ważony czasem:
Estymator odchylenia standardowego ważony czasem:
MAIN MODULE konradC;
FROM RandMod IMPORT RandomObj;
FROM SimMod IMPORT StartSimulation, SimTime,ResetSimTime, StopSimulation;
FROM GrpMod IMPORT QueueObj, StackObj,RankedObj,BasicGroupObj;
FROM StatMod IMPORT
RStatObj,SREAL,ITimedStatObj,IStatObj,TSINTEGER,SINTEGER,TSREAL;
FROM SimMod IMPORT Interrupt,TriggerObj;
FROM IOMod IMPORT
StreamObj,FileUseType(Input),FileUseType(Output),ReadKey;
TYPE
KliObj = OBJECT;
FORWARD;
GniObj = OBJECT;
FORWARD;
MonObj = OBJECT;
FORWARD;
kol1Obj = OBJECT;
FORWARD;
kol2Obj = OBJECT;
FORWARD;
kol3Obj = OBJECT;
FORWARD;
GenObj = OBJECT;
FORWARD;
VAR
w: INTEGER;
monn: MonObj;
kol1: kol1Obj;
kol2: kol2Obj;
kol3: kol3Obj;
GenT: ARRAY INTEGER OF GenObj;
GniT: ARRAY INTEGER OF GniObj;
TYPE
MonObj = OBJECT
nr: INTEGER;
obsluzeni: INTEGER;
wejsznieci: INTEGER;
wejs1: REAL;
obs1: REAL;
srCzas: SREAL; {czas przebywania}
srCzas1: SREAL;
srCzas2: SREAL;
srCzas3: SREAL;
licz: TSINTEGER; {liczi zgloszen smo}
licz1: TSINTEGER;
licz2: TSINTEGER;
licz3: TSINTEGER;
liczKli: TSINTEGER;
srKan: TSINTEGER;
srKan1: TSINTEGER;
srKan2: TSINTEGER;
srKan3: TSINTEGER;
klKol: TSINTEGER;
{liczi zgloszen kolejki}
klKol1: TSINTEGER;
klKol2: TSINTEGER;
klKol3: TSINTEGER;
pstwo: REAL;
pstwo1: REAL;
pstwo2: REAL;
pstwo3: REAL;
KlWe: INTEGER;{ile wchodzi}
KlWe1: INTEGER;
KlWe2: INTEGER;
KlWe3: INTEGER;
KlWy: INTEGER;{ile wychodzi}
KlWy1: INTEGER;
KlWy2: INTEGER;
KlWy3: INTEGER;
uzyCzas: SREAL;{srend czas przebywania}
uzyCzas1: SREAL;
uzyCzas2: SREAL;
uzyCzas3: SREAL;
uzyCzasDev: SREAL;
uzyCzasDev1: SREAL;
uzyCzasDev2: SREAL;
uzyCzasDev3: SREAL;
uzylicz: SREAL;{srednia liczba zgloszen}
uzylicz1: SREAL;
uzylicz2: SREAL;
uzylicz3: SREAL;
uzyliczDev: SREAL;
uzyliczDev1: SREAL;
uzyliczDev2: SREAL;
uzyliczDev3: SREAL;
uzyKan: SREAL; {srednia liczba zajetych Kanw}
uzyKan1: SREAL;
uzyKan2: SREAL;
uzyKan3: SREAL;
uzyKanDev: SREAL;
uzyKanDev1: SREAL;
uzyKanDev2: SREAL;
uzyKanDev3: SREAL;
uzyklKol: SREAL; {srednia liczba zgloszen w kolejkach}
uzyklKol1: SREAL;
uzyklKol2: SREAL;
uzyklKol3: SREAL;
uzyklKolDev: SREAL;
uzyklKolDev1: SREAL;
uzyklKolDev2: SREAL;
uzyklKolDev3: SREAL;
uzyPstwo: SREAL;{srednie prawdopodobienstwo obsluzenia zgloszenia}
uzyPstwo1: SREAL;
uzyPstwo2: SREAL;
uzyPstwo3: SREAL;
ASK METHOD liczkli(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD odchkli(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD srCzasKli(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD sreCzasOdch(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD sreZajKan(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD sreZajKanOdch(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD sreLiczKliKol(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD sreLiczKliKolOdch(IN nrSmo: INTEGER; IN licz: REAL);
ASK METHOD prawdopodobienstwoObs(IN nrSmo:INTEGER;IN licz:REAL);
ASK METHOD licznikStart(IN nrSmo: INTEGER);
ASK METHOD licznikStop(IN nrSmo:INTEGER);
ASK METHOD licznikPraw(IN nrSmo: INTEGER);
ASK METHOD liczKliMinus(IN nrSmo: INTEGER);
ASK METHOD liczKliPlus(IN nrSmo: INTEGER);
ASK METHOD liczKanMinus(IN nrSmo: INTEGER);
ASK METHOD liczKanPlus(IN nrSmo: INTEGER);
ASK METHOD czasPrzebyKli(IN numer:INTEGER; IN czas:REAL);
ASK METHOD liczKliKolPlus(IN nrSmo: INTEGER);
ASK METHOD liczKliKolMinus(IN nrSmo: INTEGER);
ASK METHOD MonPocz();
ASK METHOD licznikZero(IN nrSmo:INTEGER);
ASK METHOD SredniCzasZero(IN nrSmo:INTEGER);
ASK METHOD LiczZajKanZero(IN nrSmo:INTEGER);
ASK METHOD liczKliKolZero(IN nrSmo: INTEGER);
END OBJECT;
GenObj = OBJECT(RandomObj);{generator}
ParametrRozkladuGeneratora1: REAL;
ParametrRozkladuGeneratora2: REAL;
Czas:REAL;
ParametrRozkladuPaczki1: REAL;
ParametrRozkladuPaczki2: REAL;
Monitor: MonObj;
Kli: KliObj;
NrGeneratora: INTEGER;
LiczbaKliowDoWygenerowania: INTEGER;
TELL METHOD Generowanie();
ASK METHOD Init(IN prg1: REAL; IN prg2: REAL; IN lk: INTEGER; IN prp1:REAL;
IN prp2:REAL; IN m: MonObj; IN nrgen: INTEGER);
END OBJECT;
GniObj = OBJECT(RandomObj);{gniazdo}
NrGniT: INTEGER;
ParametrRozkladuGniT1: REAL;
ParametrRozkladuGniT2: REAL;
ParametrRozkladuGniT3: REAL;
Kany: INTEGER;
Aktywne: INTEGER;
CzasWyjscia: REAL;
CzasWyjsciaMaksymalny: SREAL;
p: REAL;
Trigger: TriggerObj;
Monitor: MonObj;
obs1: INTEGER;
TELL METHOD Obsluga(IN kol: BasicGroupObj);
ASK METHOD Init(IN prg1: REAL; IN prg2: REAL; IN prg3: REAL; IN kan:
INTEGER; IN akt: INTEGER; IN pstwo: REAL; IN trig: TriggerObj; IN m: MonObj; IN
nrg: INTEGER);
END OBJECT;
kol1Obj = OBJECT(StackObj); {kolejak 1 LIFO}
NrKolejki: INTEGER;
Pojemnosc: INTEGER;
licz: TSINTEGER;
LiczbaKliow:TSINTEGER;
Random: RandomObj;
Trigger: TriggerObj;
Monitor: MonObj;
CzasWejscia:REAL;
CzasWejsciaMax:SREAL;
ASK METHOD Wstaw(INOUT elem: KliObj);
ASK METHOD Init(IN ra: RandomObj; IN poj: INTEGER; IN trig: TriggerObj; IN m:
MonObj; IN nrk: INTEGER);
OVERRIDE
ASK METHOD ObjTerminate();
ASK METHOD Remove():ANYOBJ;
ASK METHOD RemoveThis(IN kto: ANYOBJ);
END OBJECT;
kol2Obj = OBJECT(RankedObj); {kolejka 2 priorytety}
NrKolejki: INTEGER;
Pojemnosc: INTEGER;
licz: TSINTEGER;
LiczbaKliow:TSINTEGER;
Random: RandomObj;
Trigger: TriggerObj;
Monitor: MonObj;
CzasWejscia:REAL;
CzasWejsciaMax:SREAL;
ASK METHOD Wstaw(INOUT elem: KliObj);
ASK METHOD Init(IN ra: RandomObj; IN poj: INTEGER; IN trig: TriggerObj; IN m:
MonObj; IN nrk: INTEGER);
OVERRIDE
ASK METHOD Rank(IN a:ANYOBJ;IN b:ANYOBJ):INTEGER;
ASK METHOD ObjTerminate();
ASK METHOD Remove():ANYOBJ;
ASK METHOD RemoveThis(IN kto: ANYOBJ);
END OBJECT;
kol3Obj = OBJECT(QueueObj);{kolejka 3 fifo}
NrKolejki: INTEGER;
Pojemnosc: INTEGER;
licz: TSINTEGER;
LiczbaKliow:TSINTEGER;
Random: RandomObj;
Trigger: TriggerObj;
Monitor: MonObj;
CzasWejscia:REAL;
CzasWejsciaMax:SREAL;
ASK METHOD Wstaw(INOUT elem: KliObj);
ASK METHOD Init(IN ra: RandomObj; IN poj: INTEGER; IN trig: TriggerObj; IN m:
MonObj; IN nrk: INTEGER);
OVERRIDE
ASK METHOD ObjTerminate();
ASK METHOD Remove():ANYOBJ;
ASK METHOD RemoveThis(IN kto: ANYOBJ);
END OBJECT;
KliObj = OBJECT{Kli}
Priorytet: INTEGER;
czasWe: REAL;
czasWe1: REAL;
czasWe2: REAL;
czasWe3: REAL;
nr: INTEGER;
Monitor: MonObj;
ASK METHOD Init(IN m: MonObj);
ASK METHOD NadajPriorytet(IN priorytet: INTEGER);
TELL METHOD Niecierpliwosc(IN nrSMO: INTEGER; IN czas: REAL; IN kol:
BasicGroupObj);
ASK METHOD zapiszCzas(IN nrSMO: INTEGER; IN taj: REAL);
END OBJECT;
OBJECT MonObj;
ASK METHOD licznikStart(IN nrSmo: INTEGER); {do zliczania Klientow
wchodzoncych do systemu}
BEGIN
nr:=nrSmo;
IF nr = 0
KlWe:=KlWe+1;
ELSIF nr = 1
KlWe1:=KlWe1+1;
ELSIF nr = 2
KlWe2:=KlWe2+1;
ELSIF nr = 3
KlWe3:=KlWe3+1;
END IF;
END METHOD;
ASK METHOD licznikStop(IN nrSmo: INTEGER); {do zliczania Klientow
wychodzoncych z systemu}
BEGIN
nr:=nrSmo;
IF nr = 0
KlWy:=KlWy+1;
ELSIF nr = 1
KlWy1:=KlWy1+1;
ELSIF nr = 2
KlWy2:=KlWy2+1;
ELSIF nr = 3
KlWy3:=KlWy3+1;
END IF;
END METHOD;
ASK METHOD licznikPraw(IN nrSmo: INTEGER);
BEGIN
nr:=nrSmo;
IF nr = 0
pstwo:=FLOAT(KlWy)/FLOAT(KlWe);
ELSIF nr = 1
pstwo1:=FLOAT(KlWy1)/FLOAT(KlWe1);
ELSIF nr = 2
pstwo2:=FLOAT(KlWy2)/FLOAT(KlWe2);
ELSIF nr = 3
pstwo3:=FLOAT(KlWy3)/FLOAT(KlWe3);
END IF;
END METHOD;
ASK METHOD liczKliMinus(IN nrSmo: INTEGER);{zmniejsza licznikow Klientow}
BEGIN
nr:=nrSmo;
IF nr = 0
licz:=licz-1;
ELSIF nr = 1
licz1:=licz1-1;
ELSIF nr = 2
licz2:=licz2-1;
ELSIF nr = 3
licz3:=licz3-1;
END IF;
END METHOD;
ASK METHOD liczKliPlus(IN nrSmo: INTEGER); {zwieksza licz Klientow}
BEGIN
nr:=nrSmo;
IF nr = 0
licz:=licz+1;
ELSIF nr = 1
licz1:=licz1+1;
ELSIF nr = 2
licz2:=licz2+1;
ELSIF nr = 3
licz3:=licz3+1;
END IF;
END METHOD;
ASK METHOD liczKliKolPlus(IN nrSmo: INTEGER); {zwiekszenie licza Klientow z
kolejki}
BEGIN
nr:=nrSmo;
IF nr = 0
klKol:=klKol+1;
ELSIF nr = 1
klKol1:=klKol1+1;
ELSIF nr = 2
klKol2:=klKol2+1;
ELSIF nr = 3
klKol3:=klKol3+1;
END IF;
END METHOD;
ASK METHOD liczKliKolMinus(IN nrSmo: INTEGER); {zmniejszenie licznika Klientow
z kolejki}
BEGIN
nr:=nrSmo;
IF nr = 0
klKol:=klKol-1;
ELSIF nr = 1
klKol1:=klKol1-1;
ELSIF nr = 2
klKol2:=klKol2-1;
ELSIF nr = 3
klKol3:=klKol3-1;
END IF;
END METHOD;
ASK METHOD liczKanMinus(IN nrSmo: INTEGER); {zmniejszenie licznika zajetych
Kanalow}
BEGIN
nr:=nrSmo;
IF nr = 0
srKan:=srKan-1;
ELSIF nr = 1
srKan1:=srKan1-1;
ELSIF nr = 2
srKan2:=srKan2-1;
ELSIF nr = 3
srKan3:=srKan3-1;
END IF;
END METHOD;
ASK METHOD liczKanPlus(IN nrSmo: INTEGER); {zwiekszenie licznika zajetych
Kanalow}
BEGIN
nr:=nrSmo;
IF nr = 0
srKan:=srKan+1;
ELSIF nr = 1
srKan1:=srKan1+1;
ELSIF nr = 2
srKan2:=srKan2+1;
ELSIF nr = 3
srKan3:=srKan3+1;
END IF;
END METHOD;
ASK METHOD MonPocz(); {inicjalizacja monitora}
BEGIN
licz:=0;
licz1:=0;
licz2:=0;
licz3:=0;
END METHOD;
ASK METHOD czasPrzebyKli(IN nrSmo: INTEGER; IN czas:REAL); {zliczanie czasu
przebywania kienta w semo}
BEGIN
nr := nrSmo;
IF (nr = 0)
srCzas:= czas;
ELSIF (nr = 1)
srCzas1:= czas;
ELSIF (nr = 2)
srCzas2:= czas;
ELSIF nr = 3
srCzas3:= czas;
END IF;
END METHOD;
ASK METHOD liczkli(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF (nr = 0)
uzylicz:=licz;
ELSIF nr = 1
uzylicz1:=licz;
ELSIF nr = 2
uzylicz2:=licz;
ELSIF nr = 3
uzylicz3:=licz;
END IF;
END METHOD;
ASK METHOD odchkli(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF (nr = 0)
uzyliczDev:=licz;
ELSIF nr = 1
uzyliczDev1:=licz;
ELSIF nr = 2
uzyliczDev2:=licz;
ELSIF nr = 3
uzyliczDev3:=licz;
END IF;
END METHOD;
ASK METHOD srCzasKli(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyCzas:=licz;
ELSIF nr = 1
uzyCzas1:=licz;
ELSIF nr = 2
uzyCzas2:=licz;
ELSIF nr = 3
uzyCzas3:=licz;
END IF;
END METHOD;
ASK METHOD sreCzasOdch(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyCzasDev:=licz;
ELSIF nr = 1
uzyCzasDev1:=licz;
ELSIF nr = 2
uzyCzasDev2:=licz;
ELSIF nr = 3
uzyCzasDev3:=licz;
END IF;
END METHOD;
ASK METHOD sreZajKan(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyKan:=licz;
ELSIF nr = 1
uzyKan1:=licz;
ELSIF nr = 2
uzyKan2:=licz;
ELSIF nr = 3
uzyKan3:=licz;
END IF;
END METHOD;
ASK METHOD sreZajKanOdch(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyKanDev:=licz;
ELSIF nr = 1
uzyKanDev1:=licz;
ELSIF nr = 2
uzyKanDev2:=licz;
ELSIF nr = 3
uzyKanDev3:=licz;
END IF;
END METHOD;
ASK METHOD sreLiczKliKol(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyklKol:=licz;
ELSIF nr = 1
uzyklKol1:=licz;
ELSIF nr = 2
uzyklKol2:=licz;
ELSIF nr = 3
uzyklKol3:=licz;
END IF;
END METHOD;
ASK METHOD sreLiczKliKolOdch(IN nrSmo: INTEGER; IN licz: REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyklKolDev:=licz;
ELSIF nr = 1
uzyklKolDev1:=licz;
ELSIF nr = 2
uzyklKolDev2:=licz;
ELSIF nr = 3
uzyklKolDev3:=licz;
END IF;
END METHOD;
ASK METHOD prawdopodobienstwoObs(IN nrSmo:INTEGER;IN licz:REAL);
BEGIN
nr:=nrSmo;
IF nr = 0
uzyPstwo:=licz;
ELSIF nr = 1
uzyPstwo1:=licz;
ELSIF nr = 2
uzyPstwo2:=licz;
ELSIF nr = 3
uzyPstwo3:=licz;
END IF;
END METHOD;
ASK METHOD licznikZero(IN nrSmo:INTEGER); {zerowanie licza}
BEGIN
nr:=nrSmo;
IF nr = 0
licz:=0;
ELSIF nr = 1
licz1:=0;
ELSIF nr = 2
licz2:=0;
ELSIF nr = 3
licz3:=0;
END IF;
END METHOD;
ASK METHOD SredniCzasZero(IN nrSmo:INTEGER); {zerowanie czasu
przebywania w smo}
BEGIN
nr:=nrSmo;
IF nr = 0
srCzas:=0.0;
ELSIF nr = 1
srCzas1:=0.0;
ELSIF nr = 2
srCzas2:=0.0;
ELSIF nr = 3
srCzas3:=0.0;
END IF;
END METHOD;
ASK METHOD LiczZajKanZero(IN nrSmo:INTEGER); {zerowanie licznika zajetych
kanalow}
BEGIN
nr:=nrSmo;
IF nr = 0
srKan:=0;
ELSIF nr = 1
srKan1:=0;
ELSIF nr = 2
srKan2:=0;
ELSIF nr = 3
srKan3:=0;
END IF;
END METHOD;
ASK METHOD liczKliKolZero(IN nrSmo: INTEGER); {zerowanie licznika klienta w
kolejkach}
BEGIN
nr:=nrSmo;
IF nr = 0
klKol:=0;
ELSIF nr = 1
klKol1:=0;
ELSIF nr = 2
klKol2:=0;
ELSIF nr = 3
klKol3:=0;
END IF;
END METHOD;
END OBJECT;
OBJECT KliObj;{Kli}
ASK METHOD Init(IN m: MonObj);
BEGIN
Monitor:= m;
END METHOD;
ASK METHOD NadajPriorytet(IN priorytet: INTEGER);
BEGIN
Priorytet:=priorytet;
END METHOD;
TELL METHOD Niecierpliwosc(IN nrSMO: INTEGER; IN czas: REAL; IN kol:
BasicGroupObj);
BEGIN
nr:=nrSMO;
WAIT DURATION czas;
ASK kol TO RemoveThis(SELF);
ASK Monitor TO liczKliMinus(nrSMO);
ASK Monitor TO liczKliKolMinus(nrSMO);
ASK Monitor TO liczKliMinus(0);
ASK Monitor TO liczKliKolMinus(0);
IF (w = 1)
OUTPUT("Gniazdo ",nrSMO,"->Kli zniecierpliwiony opuscil. Czas= ", SimTime);
END IF;
DISPOSE(SELF);
ON INTERRUPT;
END WAIT;
END METHOD;
ASK METHOD zapiszCzas(IN nrSMO: INTEGER; IN czas: REAL);
BEGIN
nr:=nrSMO;
IF (nr = 0)
czasWe:=czas;
ELSIF nr=1
czasWe1:=czas;
ELSIF nr=2
czasWe2:=czas;
ELSIF nr=3
czasWe3:=czas;
END IF;
END METHOD;
END OBJECT;
OBJECT GniObj;{gniazdo}
TELL METHOD Obsluga(IN kol: BasicGroupObj);
VAR
t: REAL;
Kli: KliObj;
BEGIN
WHILE ASK kol TO numberIn > 0
Kli:= ASK kol TO Remove;
ASK Monitor TO liczKliKolMinus(0);
ASK Monitor TO liczKliKolMinus(NrGniT);
Aktywne:=Aktywne+1;
ASK Monitor TO liczKanPlus(NrGniT);
ASK Monitor TO liczKanPlus(0);
IF NrGniT=1
t:=Exponential(ParametrRozkladuGniT1);
t:=ABS(t);
WAIT DURATION t;
ON INTERRUPT
END WAIT;
IF (UniformReal(0.0, 1.0)>p);
ASK Monitor TO liczKliMinus(0);
ASK Monitor TO liczKliMinus(1);
ASK kol1 TO Wstaw(Kli);
Aktywne:=Aktywne-1;
ASK Monitor TO liczKanMinus(1);
ASK Monitor TO liczKanMinus(0);
ELSE
ASK Monitor TO licznikStop(1);
ASK Monitor TO czasPrzebyKli(1,SimTime-ASK Kli TO czasWe1);
ASK Monitor TO liczKliMinus(1);
Aktywne:=Aktywne-1;
ASK Monitor TO liczKanMinus(1);
ASK Monitor TO liczKanMinus(0);
IF w=1
OUTPUT("Gniazdo ",NrGniT,"->obsluzylo Klia Czas= ",
SimTime);
END IF;
ASK kol3 TO Wstaw(Kli);
END IF;
ELSIF NrGniT=2
Interrupt(Kli,"Niecierpliwosc");
t:=Erlang(ParametrRozkladuGniT1, TRUNC(ParametrRozkladuGniT2));
t:=ABS(t);
WAIT DURATION t;
ON INTERRUPT
END WAIT;
ASK Monitor TO licznikStop(2);
ASK Monitor TO czasPrzebyKli(2,SimTime-ASK Kli TO czasWe1);
ASK Monitor TO liczKliMinus(2);
Aktywne:=Aktywne-1;
ASK Monitor TO liczKanMinus(2);
ASK Monitor TO liczKanMinus(0);
IF w=1
OUTPUT("Gniazdo ",NrGniT,"->obsluzylo Klia Czas= ", SimTime);
END IF;
ASK kol3 TO Wstaw(Kli);
ELSIF NrGniT=3
Interrupt(Kli,"Niecierpliwosc");
t:=Normal(ParametrRozkladuGniT1, ParametrRozkladuGniT2);
t:=ABS(t);
WAIT DURATION t;
ON INTERRUPT
END WAIT;
IF (UniformReal(0.0, 1.0)>p);
ASK Monitor TO liczKliMinus(0);
ASK Monitor TO liczKliMinus(3);
Aktywne:=Aktywne-1;
ASK Monitor TO liczKanMinus(3);
ASK Monitor TO liczKanMinus(0);
ASK kol2 TO Wstaw(Kli);
ELSE
ASK Monitor TO licznikStop(3);
ASK Monitor TO licznikStop(0);
ASK Monitor TO czasPrzebyKli(3,SimTime-ASK Kli TO czasWe1);
ASK Monitor TO czasPrzebyKli(0,SimTime-ASK Kli TO czasWe);
DISPOSE(Kli);
ASK Monitor TO liczKliMinus(3);
Aktywne:=Aktywne-1;
ASK Monitor TO liczKanMinus(3);
ASK Monitor TO liczKanMinus(0);
IF w=1
OUTPUT("Gniazdo ",NrGniT,"->obsluzylo Klia Czas= ", SimTime);
END IF;
END IF;
END IF;
END WHILE;
END METHOD;
ASK METHOD Init(IN prg1: REAL; IN prg2: REAL; IN prg3: REAL; IN kan: INTEGER;
IN akt: INTEGER; IN pstwo: REAL; IN trig: TriggerObj; IN m: MonObj;IN nrg:
INTEGER);
BEGIN
ParametrRozkladuGniT1:=prg1;
ParametrRozkladuGniT2:=prg2;
ParametrRozkladuGniT3:=prg3;
Kany:= kan;
Aktywne:= akt;
Trigger := trig;
Monitor:=m;
p:=pstwo;
NrGniT:=nrg;
END METHOD;
END OBJECT;
OBJECT GenObj; {generator}
ASK METHOD Init(IN prg1: REAL; IN prg2: REAL; IN lk: INTEGER; IN prp1:REAL;
IN prp2:REAL; IN m: MonObj; IN nrgen: INTEGER);
BEGIN
ParametrRozkladuPaczki1:= prp1;
ParametrRozkladuPaczki2:=prp2;
Monitor:=m;
ParametrRozkladuGeneratora1:= prg1;
ParametrRozkladuGeneratora2:= prg2;
LiczbaKliowDoWygenerowania:= lk;
NrGeneratora:=nrgen;
END METHOD;
TELL METHOD Generowanie;
VAR
Kli: KliObj;
paczkaInt1: INTEGER;
ileDoKonca1: INTEGER;
paczkaReal1: REAL;
i: INTEGER;
j: INTEGER;
sumaWygenerowanych: INTEGER;
czas1: REAL;
BEGIN
sumaWygenerowanych:=0;
WHILE (sumaWygenerowanych<LiczbaKliowDoWygenerowania)
IF (NrGeneratora=1)
paczkaReal1:=Erlang(ParametrRozkladuPaczki1,
TRUNC(ParametrRozkladuPaczki2));
paczkaReal1:=ABS(paczkaReal1);
ELSIF (NrGeneratora=2)
paczkaReal1:=Normal(ParametrRozkladuPaczki1,
ParametrRozkladuPaczki2);
paczkaReal1:=ABS(paczkaReal1);
END IF;
paczkaInt1:=TRUNC(paczkaReal1);
sumaWygenerowanych:=sumaWygenerowanych+paczkaInt1;
ileDoKonca1:=LiczbaKliowDoWygenerowania-sumaWygenerowanych;
IF ileDoKonca1<0
paczkaInt1:=paczkaInt1+ileDoKonca1;
END IF;
IF (NrGeneratora=1)
czas1:=Weibull(ParametrRozkladuGeneratora1,ParametrRozkladuGeneratora
2);
czas1:=ABS(czas1);
ELSIF (NrGeneratora=2)
czas1:=Exponential(ParametrRozkladuPaczki1);
czas1:=ABS(czas1);
END IF;
WAIT DURATION czas1
ON INTERRUPT
END WAIT;
FOR j:=1 TO paczkaInt1
NEW (Kli);
ASK Monitor TO licznikStart(0);
ASK Kli TO NadajPriorytet(UniformInt(0,10));
ASK Kli TO Init(monn);
Czas:=SimTime;
ASK Kli TO zapiszCzas(0,Czas);
IF w=1
OUTPUT("Generator ",NrGeneratora,"->wygenerowal Klia
Czas= ", SimTime);
END IF;
IF NrGeneratora=1
ASK kol1 TO Wstaw(Kli);
ELSIF NrGeneratora=2
ASK kol2 TO Wstaw(Kli);
END IF;
END FOR;
END WHILE;
END METHOD;
END OBJECT;
OBJECT kol1Obj;{kolejka 1}
ASK METHOD Wstaw(INOUT elem: KliObj);
VAR
czasNiecierpliwosci:REAL;
BEGIN
Add(elem);
ASK Monitor TO licznikStart(1);
ASK Monitor TO liczKliKolPlus(0);
ASK Monitor TO liczKliKolPlus(1);
ASK elem TO zapiszCzas(1,SimTime);
ASK Monitor TO liczKliPlus(0);
ASK Monitor TO liczKliPlus(1);
licz:=licz+1;
czasNiecierpliwosci:= ASK Random TO Exponential(1.0/50.5);
czasNiecierpliwosci:=ABS(czasNiecierpliwosci);
IF ASK GniT[NrKolejki] TO Aktywne < ASK GniT[NrKolejki] TO Kany
TELL GniT[NrKolejki] TO Obsluga(SELF);
END IF;
END METHOD;
ASK METHOD Init(IN ra: RandomObj; IN poj: INTEGER; IN trig: TriggerObj; IN m:
MonObj; IN nrk: INTEGER);
BEGIN
Pojemnosc:=poj;
Random := ra;
Monitor:=m;
licz:= 0;
Trigger:=trig;
NrKolejki:=nrk;
END METHOD;
ASK METHOD ObjTerminate();
VAR
elem:ANYOBJ;
BEGIN
FOREACH elem IN SELF
RemoveThis(elem);
DISPOSE(elem);
END FOREACH;
INHERITED ObjTerminate();
END METHOD;
ASK METHOD RemoveThis(IN kto: ANYOBJ);
BEGIN
INHERITED RemoveThis(kto);
END METHOD;
ASK METHOD Remove():ANYOBJ;
BEGIN
ASK Trigger TO Release;
RETURN INHERITED Remove();
END METHOD;
END OBJECT;
OBJECT kol2Obj;{kolejka 2}
ASK METHOD Wstaw(INOUT elem: KliObj);
VAR
czasNiecierpliwosci:REAL;
BEGIN
IF numberIn < Pojemnosc
Add(elem);
ASK Monitor TO licznikStart(2);
ASK Monitor TO liczKliKolPlus(0);
ASK Monitor TO liczKliKolPlus(2);
ASK elem TO zapiszCzas(2,SimTime);
ASK Monitor TO liczKliPlus(0);
ASK Monitor TO liczKliPlus(2);
licz:=licz+1;
czasNiecierpliwosci:=ASK Random TO Erlang(20.0,TRUNC(1.0));
czasNiecierpliwosci:=ABS(czasNiecierpliwosci);
IF ASK GniT[NrKolejki] TO Aktywne < ASK GniT[NrKolejki] TO Kany
TELL GniT[NrKolejki] TO Obsluga(SELF);
END IF;
ELSE
DISPOSE(elem);
END IF;
END METHOD;
ASK METHOD Rank(IN a:ANYOBJ;IN b:ANYOBJ):INTEGER;
VAR
Kli1:KliObj;
Kli2:KliObj;
BEGIN
Kli1:=a;
Kli2:=b;
IF ASK Kli1 TO Priorytet < ASK Kli2 TO Priorytet
RETURN -1;
END IF;
IF ASK Kli1 TO Priorytet > ASK Kli2 TO Priorytet
RETURN 1;
END IF;
RETURN 0;
END METHOD;
ASK METHOD Init(IN ra: RandomObj; IN poj: INTEGER; IN trig: TriggerObj; IN m:
MonObj; IN nrk: INTEGER);
BEGIN
Pojemnosc:=poj;
Random := ra;
Monitor:=m;
Trigger:=trig;
licz:= 0;
NrKolejki:=nrk;
END METHOD;
ASK METHOD ObjTerminate();
VAR
elem:ANYOBJ;
BEGIN
FOREACH elem IN SELF
RemoveThis(elem);
DISPOSE(elem);
END FOREACH;
INHERITED ObjTerminate();
END METHOD;
ASK METHOD RemoveThis(IN kto: ANYOBJ);
BEGIN
INHERITED RemoveThis(kto);
END METHOD;
ASK METHOD Remove():ANYOBJ;
BEGIN
ASK Trigger TO Release;
RETURN INHERITED Remove();
END METHOD;
END OBJECT;
OBJECT kol3Obj;{kolejka 3}
ASK METHOD Wstaw(INOUT elem: KliObj);
VAR
czasNiecierpliwosci:REAL;
BEGIN
Add(elem);
ASK Monitor TO licznikStart(3);
ASK Monitor TO liczKliKolPlus(0);
ASK Monitor TO liczKliKolPlus(3);
ASK elem TO zapiszCzas(3,SimTime);
ASK Monitor TO liczKliPlus(0);
ASK Monitor TO liczKliPlus(3);
licz:=licz+1;
czasNiecierpliwosci:= ASK Random TO Normal(1.0,50.0);
czasNiecierpliwosci:=ABS(czasNiecierpliwosci);
IF ASK GniT[NrKolejki] TO Aktywne < ASK GniT[NrKolejki] TO Kany
TELL GniT[NrKolejki] TO Obsluga(SELF);
END IF;
END METHOD;
ASK METHOD Init(IN ra: RandomObj; IN poj: INTEGER; IN trig: TriggerObj; IN m:
MonObj; IN nrk: INTEGER);
BEGIN
Pojemnosc:=poj;
Random := ra;
Trigger:=trig;
Monitor:=m;
licz:= 0;
NrKolejki:=nrk;
END METHOD;
ASK METHOD ObjTerminate();
VAR
elem:ANYOBJ;
BEGIN
FOREACH elem IN SELF
RemoveThis(elem);
DISPOSE(elem);
END FOREACH;
INHERITED ObjTerminate();
END METHOD;
ASK METHOD RemoveThis(IN kto: ANYOBJ);
BEGIN
INHERITED RemoveThis(kto);
END METHOD;
ASK METHOD Remove():ANYOBJ;
BEGIN
ASK Trigger TO Release;
RETURN INHERITED Remove();
END METHOD;
END OBJECT;
VAR
ran: RandomObj;
trigg:TriggerObj;
io: StreamObj;
znak:CHAR;
textLine:STRING;
daneWej:INTEGER;
ile:INTEGER;
a: INTEGER;
i: INTEGER;
p1rg1:REAL;{ Generator 1}
p2rg1:REAL;
lkg1:INTEGER;
p1rp1:REAL;
p2rp1:REAL;
p1rg2:REAL;{ Generator 2}
p2rg2:REAL;
lkg2:INTEGER;
p1rp2:REAL;
p2rp2:REAL;
p1rgn1: REAL;{ Gniazdo 1}
p2rgn1: REAL;
p3rgn1: REAL;
p1rgn2: REAL;{ Gniazdo 2}
p2rgn2: REAL;
p3rgn2: REAL;
p1rgn3: REAL;{ Gniazdo 3}
p2rgn3: REAL;
p3rgn3: REAL;
pojemnosck2:INTEGER;{Kolejka 2}
BEGIN
NEW(trigg);
NEW(monn);
NEW(ran);
NEW(GenT, 1..2);
NEW(GenT[1]);
NEW(GenT[2]);
NEW(GniT, 1..3);
NEW(GniT[1]);
NEW(GniT[2]);
NEW(GniT[3]);
NEW(kol1);
NEW(kol2);
NEW(kol3);
NEW(io);
ASK io TO Open("data.txt",Input);
WHILE NOT (ASK io eof)
ASK io TO ReadLine(textLine);
p1rg1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rg1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p1rp1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rp1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
lkg1:=STRTOINT(textLine);
ASK io TO ReadLine(textLine);
p1rg2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rg2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p1rp2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rp2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
lkg2:=STRTOINT(textLine);
ASK io TO ReadLine(textLine);
p1rgn1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rgn1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p3rgn1:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p1rgn2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rgn2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p3rgn2:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p1rgn3:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p2rgn3:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
p3rgn3:=STRTOREAL(textLine);
ASK io TO ReadLine(textLine);
pojemnosck2:=STRTOINT(textLine);
ASK io TO ReadLine(textLine);
ile:=STRTOINT(textLine);
ASK io TO ReadLine(textLine);
w:=STRTOINT(textLine);
END WHILE;
ASK io TO Close;
DISPOSE(io);
OUTPUT("");
ASK monn TO MonPocz();
ASK GenT[1] TO Init(p1rg1, p2rg1, lkg1, p1rp1, p2rp1, monn,1);
ASK GenT[2] TO Init(p1rg2, p2rg2, lkg2, p1rp2, p2rp2, monn,2);
ASK GniT[1] TO Init(p1rgn1,p2rgn1,p3rgn1,4,0,0.5,trigg, monn,1);
ASK GniT[2] TO Init(p1rgn2,p2rgn2,p3rgn2,1,0,1.0,trigg, monn,2);
ASK GniT[3] TO Init(p1rgn3,p2rgn3,p3rgn3,2,0,0.5,trigg, monn,3);
ASK kol1 TO Init(ran, 0, trigg, monn,1);
ASK kol2 TO Init(ran, pojemnosck2, trigg, monn,2);
ASK kol3 TO Init(ran, 0, trigg, monn,3);
FOR i:=0 TO ile
TELL GenT[1] TO Generowanie();
TELL GenT[2] TO Generowanie();
StartSimulation();
ResetSimTime(0.0);
ASK monn TO liczkli(0,ASK GETMONITOR(ASK monn TO licz,ITimedStatObj)
TO Mean());
ASK monn TO odchkli(0,ASK GETMONITOR(ASK monn TO
licz,ITimedStatObj) TO StdDev());
ASK monn TO liczkli(1,ASK GETMONITOR(ASK monn TO
licz1,ITimedStatObj) TO Mean());
ASK monn TO odchkli(1,ASK GETMONITOR(ASK monn TO
licz1,ITimedStatObj) TO StdDev());
ASK monn TO liczkli(2,ASK GETMONITOR(ASK monn TO
licz2,ITimedStatObj) TO Mean());
ASK monn TO odchkli(2,ASK GETMONITOR(ASK monn TO
licz2,ITimedStatObj) TO StdDev());
ASK monn TO liczkli(3,ASK GETMONITOR(ASK monn TO
licz3,ITimedStatObj) TO Mean());
ASK monn TO odchkli(3,ASK GETMONITOR(ASK monn TO
licz3,ITimedStatObj) TO StdDev());
ASK monn TO srCzasKli(0,ASK GETMONITOR(ASK monn TO
srCzas,RStatObj) TO Mean());
ASK monn TO sreCzasOdch(0,ASK GETMONITOR(ASK monn TO
srCzas,RStatObj) TO StdDev());
ASK monn TO srCzasKli(1,ASK GETMONITOR(ASK monn TO
srCzas1,RStatObj) TO Mean());
ASK monn TO sreCzasOdch(1,ASK GETMONITOR(ASK monn TO
srCzas1,RStatObj) TO StdDev());
ASK monn TO srCzasKli(2,ASK GETMONITOR(ASK monn TO
srCzas2,RStatObj) TO Mean());
ASK monn TO sreCzasOdch(2,ASK GETMONITOR(ASK monn TO
srCzas2,RStatObj) TO StdDev());
ASK monn TO srCzasKli(3,ASK GETMONITOR(ASK monn TO
srCzas3,RStatObj) TO Mean());
ASK monn TO sreCzasOdch(3,ASK GETMONITOR(ASK monn TO
srCzas3,RStatObj) TO StdDev());
ASK monn TO sreZajKan(0,ASK GETMONITOR(ASK monn TO
srKan,ITimedStatObj) TO Mean());
ASK monn TO sreZajKanOdch(0,ASK GETMONITOR(ASK monn TO
srKan,ITimedStatObj) TO StdDev());
ASK monn TO sreZajKan(1,ASK GETMONITOR(ASK monn TO
srKan1,ITimedStatObj) TO Mean());
ASK monn TO sreZajKanOdch(1,ASK GETMONITOR(ASK monn TO
srKan1,ITimedStatObj) TO StdDev());
ASK monn TO sreZajKan(2,ASK GETMONITOR(ASK monn TO
srKan2,ITimedStatObj) TO Mean());
ASK monn TO sreZajKanOdch(2,ASK GETMONITOR(ASK monn TO
srKan2,ITimedStatObj) TO StdDev());
ASK monn TO sreZajKan(3,ASK GETMONITOR(ASK monn TO
srKan3,ITimedStatObj) TO Mean());
ASK monn TO sreZajKanOdch(3,ASK GETMONITOR(ASK monn TO
srKan3,ITimedStatObj) TO StdDev());
ASK monn TO sreLiczKliKol(0,ASK GETMONITOR(ASK monn TO
klKol,ITimedStatObj) TO Mean());
ASK monn TO sreLiczKliKolOdch(0,ASK GETMONITOR(ASK monn TO
klKol,ITimedStatObj) TO StdDev());
ASK monn TO sreLiczKliKol(1,ASK GETMONITOR(ASK monn TO
klKol1,ITimedStatObj) TO Mean());
ASK monn TO sreLiczKliKolOdch(1,ASK GETMONITOR(ASK monn TO
klKol1,ITimedStatObj) TO StdDev());
ASK monn TO sreLiczKliKol(2,ASK GETMONITOR(ASK monn TO
klKol2,ITimedStatObj) TO Mean());
ASK monn TO sreLiczKliKolOdch(2,ASK GETMONITOR(ASK monn TO
klKol2,ITimedStatObj) TO StdDev());
ASK monn TO sreLiczKliKol(3,ASK GETMONITOR(ASK monn TO
klKol3,ITimedStatObj) TO Mean());
ASK monn TO sreLiczKliKolOdch(3,ASK GETMONITOR(ASK monn TO
klKol3,ITimedStatObj) TO StdDev());
ASK monn TO licznikPraw(1);
ASK monn TO prawdopodobienstwoObs(1,ASK monn TO pstwo1);
ASK monn TO licznikPraw(2);
ASK monn TO prawdopodobienstwoObs(2,ASK monn TO pstwo2);
ASK monn TO licznikPraw(0);
ASK monn TO licznikPraw(3);
ASK monn TO prawdopodobienstwoObs(0,ASK monn TO pstwo);
ASK monn TO prawdopodobienstwoObs(3,ASK monn TO pstwo3);
ASK (GETMONITOR(ASK monn TO licz,ITimedStatObj)) TO Reset();
ASK monn TO licznikZero(0);
ASK (GETMONITOR(ASK monn TO licz1,ITimedStatObj)) TO Reset();
ASK monn TO licznikZero(1);
ASK (GETMONITOR(ASK monn TO licz2,ITimedStatObj)) TO Reset();
ASK monn TO licznikZero(2);
ASK (GETMONITOR(ASK monn TO licz3,ITimedStatObj)) TO Reset();
ASK monn TO licznikZero(3);
ASK (GETMONITOR(ASK monn TO srCzas,RStatObj)) TO Reset();
ASK monn TO SredniCzasZero(0);
ASK (GETMONITOR(ASK monn TO srCzas1,RStatObj)) TO Reset();
ASK monn TO SredniCzasZero(1);
ASK (GETMONITOR(ASK monn TO srCzas2,RStatObj)) TO Reset();
ASK monn TO SredniCzasZero(2);
ASK (GETMONITOR(ASK monn TO srCzas3,RStatObj)) TO Reset();
ASK monn TO SredniCzasZero(3);
ASK (GETMONITOR(ASK monn TO srKan,ITimedStatObj)) TO Reset();
ASK monn TO LiczZajKanZero(0);
ASK (GETMONITOR(ASK monn TO srKan1,ITimedStatObj)) TO Reset();
ASK monn TO LiczZajKanZero(1);
ASK (GETMONITOR(ASK monn TO srKan2,ITimedStatObj)) TO Reset();
ASK monn TO LiczZajKanZero(2);
ASK (GETMONITOR(ASK monn TO srKan3,ITimedStatObj)) TO Reset();
ASK monn TO LiczZajKanZero(3);
ASK (GETMONITOR(ASK monn TO klKol,ITimedStatObj)) TO Reset();
ASK monn TO liczKliKolZero(0);
ASK (GETMONITOR(ASK monn TO klKol1,ITimedStatObj)) TO Reset();
ASK monn TO liczKliKolZero(1);
ASK (GETMONITOR(ASK monn TO klKol2,ITimedStatObj)) TO Reset();
ASK monn TO liczKliKolZero(2);
ASK (GETMONITOR(ASK monn TO klKol3,ITimedStatObj)) TO Reset();
ASK monn TO liczKliKolZero(3);
END FOR;
znak:= ReadKey();
END MODULE.