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