background image

WOJSKOWA AKADEMIA TECHNICZNA 

Im. Jarosława Dąbrowskiego w Warszawie 

 

INSTYTUT SYSTEMÓW INFORMATYCZNYCH 

 

 

 

 

 

 

 

 

 

Laboratorium z przedmiotu 

Podstawy symulacji 

 

 

 

Temat: 

Napisać program symulujący działanie sieci SMO

 

 

 
Prowadzący:  

 

 

 

 

 

Wykonała: 

dr inż. Jarosław Rulka   

       

 

 

 

Elżbieta Oknińska, gr.I7G2S1 

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 w 

gnieź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ży 

przyjąć, że zgłoszenia  posiadają priorytety); 
 
 

background image

 

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 stan

owisk 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 

background image

 

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

owania zadanego obiektu zostały 

zaimplementowane i nazwane:  

KliOb j-klienta,  
GniOb j-

gniazda obsługi,  

MonObj -obiekt do monitorowania systemu,  
Kolejka[numer]Obj 

kolejka do 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 main; 
 
  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);  
 
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; 

background image

 

  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; 

background image

 

  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} 

background image

 

 
  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; 

background image

 

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

background image

 

10 

  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 

background image

 

11 

   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 

background image

 

12 

    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; 

background image

 

13 

 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; 

background image

 

14 

  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 

background image

 

15 

    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 

background image

 

16 

    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; 

background image

 

17 

 
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; 
 

background image

 

18 

 
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; 

background image

 

19 

 
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; 
 

    

background image

 

20 

 

    

 

    

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

background image

 

21 

      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; 

background image

 

22 

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

             czas1:=ABS(czas1); 
 

  ELSIF (NrGeneratora=2) 

 

 

czas1:=Exponential(ParametrRozkladuPaczki1);  

           czas1:=ABS(czas1); 
 
 

END IF; 

        WAIT DURATION czas1 
        ON INTERRUPT 

background image

 

23 

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

background image

 

24 

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

background image

 

25 

      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; 

background image

 

26 

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

background image

 

27 

      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; 

background image

 

28 

  io: StreamObj; 
 
  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); 
 
           
 

background image

 

29 

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

background image

 

30 

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

 

background image

 

31 

 
 

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

background image

 

32 

 

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

 

background image

 

33 

 

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;  
 
w:=0; 
 
OUTPUT(""); 
OUTPUT("   Czas przebywania zgloszenia"); 
OUTPUT("  sredni czas przebywania w SMO 1        : ",ASK GETMONITOR(ASK monn TO 
uzyCzas1,RStatObj) TO Mean()); 
OUTPUT("  sredni czas przebywania w SMO 2        : ",ASK GETMONITOR(ASK monn TO 
uzyCzas2,RStatObj) TO Mean()); 
OUTPUT("  sredni czas przebywania w SMO 3        : ",ASK GETMONITOR(ASK monn TO 
uzyCzas3,RStatObj) TO Mean()); 
OUTPUT("  sredni czas przebywania w calym systemie   : ",ASK GETMONITOR(ASK monn TO 
uzyCzas,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe czasu w SMO 1    : ",ASK GETMONITOR(ASK monn TO 
uzyCzasDev1,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe czasu w SMO 2    : ",ASK GETMONITOR(ASK monn TO 
uzyCzasDev2,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe czasu w SMO 3    : ",ASK GETMONITOR(ASK monn TO 
uzyCzasDev3,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe czasu w calym systemie: ",ASK GETMONITOR(ASK monn TO 
uzyCzasDev,RStatObj) TO Mean()); 
OUTPUT(""); 
 
OUTPUT("Liczba zgloszen:"); 
OUTPUT("  srednio zgloszen w SMO 1        : ",ASK GETMONITOR(ASK monn TO uzylicz1,RStatObj) 
TO Mean()); 
OUTPUT("  srednio zgloszen w SMO 2        : ",ASK GETMONITOR(ASK monn TO uzylicz2,RStatObj) 
TO Mean()); 
OUTPUT("  srednio zgloszen w SMO 3        : ",ASK GETMONITOR(ASK monn TO uzylicz3,RStatObj) 
TO Mean()); 
OUTPUT("  srednio zgloszen w calym systemie    : ",ASK GETMONITOR(ASK monn TO 
uzylicz,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w SMO 1    : ",ASK GETMONITOR(ASK monn TO 
uzyliczDev1,RStatObj) TO Mean()); 

background image

 

34 

OUTPUT("  od. standardowe zgloszen w SMO 2    : ",ASK GETMONITOR(ASK monn TO 
uzyliczDev2,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w SMO 3    : ",ASK GETMONITOR(ASK monn TO 
uzyliczDev3,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w calym systemie: ",ASK GETMONITOR(ASK monn TO 
uzyliczDev,RStatObj) TO Mean()); 
OUTPUT(""); 
 
OUTPUT("Liczba zajetych Kanow:"); 
OUTPUT("  srednio zajetych Kanow w SMO 1        : ",ASK GETMONITOR(ASK monn TO 
uzyKan1,RStatObj) TO Mean()); 
OUTPUT("  srednio zajetych Kanow w SMO 2        : ",ASK GETMONITOR(ASK monn TO 
uzyKan2,RStatObj) TO Mean()); 
OUTPUT("  srednio zajetych Kanow w SMO 3        : ",ASK GETMONITOR(ASK monn TO 
uzyKan3,RStatObj) TO Mean()); 
OUTPUT("  srednio zajetych Kanow w calym systemie    : ",ASK GETMONITOR(ASK monn TO 
uzyKan,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zajętych Kanow w SMO 1    : ",ASK GETMONITOR(ASK monn TO 
uzyKanDev1,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zajętych Kanow w SMO 2    : ",ASK GETMONITOR(ASK monn TO 
uzyKanDev2,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zajętych Kanow w SMO 3    : ",ASK GETMONITOR(ASK monn TO 
uzyKanDev3,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zajętych Kanow w calym systemie: ",ASK GETMONITOR(ASK monn 
TO uzyKanDev,RStatObj) TO Mean()); 
OUTPUT(""); 
 
OUTPUT("Liczba zgloszen w kolejce"); 
OUTPUT("  srednio zgloszen w kolejce 1        : ",ASK GETMONITOR(ASK monn TO 
uzyklKol1,RStatObj) TO Mean()); 
OUTPUT("  srednio zgloszen w kolejce 2        : ",ASK GETMONITOR(ASK monn TO 
uzyklKol2,RStatObj) TO Mean()); 
OUTPUT("  srednio zgloszen w kolejce 3        : ",ASK GETMONITOR(ASK monn TO 
uzyklKol3,RStatObj) TO Mean()); 
OUTPUT("  srednio zgloszen w calym systemie   : ",ASK GETMONITOR(ASK monn TO 
uzyklKol,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w kolejce 1    : ",ASK GETMONITOR(ASK monn TO 
uzyklKolDev1,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w kolejce 2    : ",ASK GETMONITOR(ASK monn TO 
uzyklKolDev2,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w kolejce 3    : ",ASK GETMONITOR(ASK monn TO 
uzyklKolDev3,RStatObj) TO Mean()); 
OUTPUT("  od. standardowe zgloszen w calym sytemie: ",ASK GETMONITOR(ASK monn TO 
uzyklKolDev,RStatObj) TO Mean()); 
OUTPUT(""); 

background image

 

35 

 
OUTPUT("Prawdopodobienstwo obsluzenia zgloszenia:"); 
OUTPUT("  w SMO 1               : ",ASK GETMONITOR(ASK monn TO uzyPstwo1,RStatObj) TO 
Mean()); 
OUTPUT("  w SMO 2               : ",ASK GETMONITOR(ASK monn TO uzyPstwo2,RStatObj) TO 
Mean()); 
OUTPUT("  w SMO 3               : ",ASK GETMONITOR(ASK monn TO uzyPstwo3,RStatObj) TO 
Mean()); 
OUTPUT("  w calym systemie           : ",ASK GETMONITOR(ASK monn TO uzyPstwo,RStatObj) TO 
Mean()); 
 
INPUT(a); 
 
DISPOSE(monn); 
DISPOSE(GenT[1]); 
DISPOSE(GenT[2]); 
DISPOSE(kol1); 
DISPOSE(kol2); 
DISPOSE(kol3); 
DISPOSE(GniT[1]); 
DISPOSE(GniT[2]); 
DISPOSE(GniT[3]); 
DISPOSE(ran); 
DISPOSE(trigg); 
 
END MODULE.