background image

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  

background image

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: 

– numer SMO;  

– 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; 

background image

 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  

background image

• 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: 

 

background image

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  

background image

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; 

background image

  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} 

 

background image

  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;  

background image

 

 

  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); 

 

 

 

 

background image

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; 

background image

  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  

background image

   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; 

 

 

background image

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; 

background image

  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 

background image

 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; 

 

 

background image

 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; 

background image

 

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 

background image

    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; 

background image

 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; 

background image

 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 

background image

    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; 

background image

  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; 

background image

  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 

background image

    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; 

background image

  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; 

background image

  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; 

 

 

background image

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); 

background image

    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 

background image

  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); 

background image

          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); 

background image

    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); 

background image

      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; 

background image

     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; 

background image

     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;    

background image

        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); 

background image

 

 

         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; 

background image

 

  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); 

background image

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)); 

background image

 

   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; 

background image

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); 

background image

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); 

background image

 

 

      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; 

background image

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; 

background image

  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); 

background image

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); 

background image

         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); 

background image

         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);  

 

     

background image

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()); 

background image

 

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()); 

background image

 

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); 

background image

 

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(); 

background image

 

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.