awaria naprawa


MAIN MODULE SMOAwar;
FROM SimMod IMPORT StartSimulation, SimTime, StopSimulation, TriggerObj, Interrupt;
FROM RandMod IMPORT RandomObj;
FROM StatMod IMPORT IStatObj, ITimedStatObj, TSINTEGER, SREAL, RStatObj;
FROM IOMod IMPORT StreamObj, ALL FileUseType;
FROM ListMod IMPORT QueueList;
TYPE
KolejkaObj = OBJECT; FORWARD;
OtoczenieObj = OBJECT(RandomObj);
lambda: REAL;
kolejka: KolejkaObj;
liczbaKlientow: INTEGER;
koniecSym: BOOLEAN;
ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj; IN lk: INTEGER);
TELL METHOD GenerujKlientow();
END OBJECT;
GniazdoObj = OBJECT(RandomObj);
mi: REAL;
kolejka: KolejkaObj;
zajete: BOOLEAN;
czasObslugi: SREAL;
wNaprawiono: TriggerObj;
otoczenie: OtoczenieObj;
zdatne: BOOLEAN;
czasPracy: REAL;
czasNaprawy: REAL;
ASK METHOD Init(IN m: REAL; IN kol: KolejkaObj; IN oto: OtoczenieObj; IN pra: REAL; IN nap: REAL);
TELL METHOD Obsluguj();
TELL METHOD AwariaNaprawa(IN raport: StreamObj);
END OBJECT;
KlientRec = RECORD
czasWej: REAL;
nr: INTEGER;
END RECORD;
KolejkaObj = OBJECT(QueueList);
maxDlugosc: INTEGER;
gniazdo: GniazdoObj;
wyzwalacz: TriggerObj;
dlugosc: TSINTEGER;
raport: StreamObj;
nrPocz: INTEGER;
ASK METHOD Init(IN maxdl: INTEGER; IN gnd: GniazdoObj; IN plikWy: StreamObj; IN wyzw: TriggerObj);
ASK METHOD Wstaw(IN klient: KlientRec);
ASK METHOD Usun(): KlientRec;
END OBJECT;

OBJECT OtoczenieObj;
ASK METHOD Init(IN lbd: REAL; IN kol: KolejkaObj; IN lk: INTEGER);
BEGIN
lambda := lbd;
liczbaKlientow := lk;
kolejka := kol;
koniecSym := FALSE;
END METHOD;
TELL METHOD GenerujKlientow();
VAR
i: INTEGER;
kl: KlientRec;
BEGIN
FOR i := 1 TO liczbaKlientow
WAIT DURATION Exponential(1.0 / lambda)
ON INTERRUPT
END WAIT;
NEW(kl);
ASK kolejka TO Wstaw(kl);
END FOR;
koniecSym := TRUE;

END METHOD;
END OBJECT;
OBJECT GniazdoObj;
ASK METHOD Init(IN m: REAL; IN kol: KolejkaObj; IN oto: OtoczenieObj; IN pra: REAL; IN nap: REAL);
BEGIN
mi := m;
kolejka := kol;
otoczenie := oto;
zdatne := TRUE;
czasPracy := pra;
czasNaprawy := nap;
NEW(wNaprawiono);
END METHOD;
TELL METHOD Obsluguj();
VAR
kl: KlientRec;
BEGIN
zajete := TRUE;
WHILE NOT ASK otoczenie TO koniecSym
WHILE ASK kolejka TO numberIn > 0
kl := ASK kolejka TO Usun();
WAIT DURATION Exponential(1.0 / mi)
ON INTERRUPT
END WAIT;
czasObslugi := SimTime - kl.czasWej;
DISPOSE(kl);
IF NOT zdatne
WAIT FOR wNaprawiono TO Fire()
ON INTERRUPT
IF ASK otoczenie TO koniecSym
TERMINATE;
END IF;
END WAIT;
END IF;
END WHILE;
zajete := FALSE;
IF NOT ASK otoczenie TO koniecSym
WAIT FOR ASK kolejka TO wyzwalacz TO Fire()
ON INTERRUPT
END WAIT;
END IF;
END WHILE;
END METHOD;
TELL METHOD AwariaNaprawa(IN raport: StreamObj);
BEGIN
WHILE NOT ASK otoczenie TO koniecSym
zdatne := TRUE;
WAIT DURATION Exponential(czasPracy)
ON INTERRUPT
END WAIT;
ASK raport TO WriteLn;
ASK raport TO WriteReal(SimTime, 3, 3);
ASK raport TO WriteString(": AWARIA OKIENKA!");
ASK raport TO WriteLn;
zdatne := FALSE;
Interrupt(SELF, "Obsluguj");
WAIT DURATION Exponential(czasNaprawy)
ON INTERRUPT
END WAIT;
ASK raport TO WriteLn;
ASK raport TO WriteReal(SimTime, 3, 3);
ASK raport TO WriteString(": OKIENKO ZNOWU DZIALA!");
ASK raport TO WriteLn;
ASK wNaprawiono TO Release();
END WHILE;
END METHOD;
END OBJECT;
OBJECT KolejkaObj;
ASK METHOD Init(IN maxdl: INTEGER; IN gnd: GniazdoObj; IN plikWy: StreamObj; IN wyzw: TriggerObj);
BEGIN
maxDlugosc := maxdl;
gniazdo := gnd;
raport := plikWy;
nrPocz := 0;
wyzwalacz := wyzw;
END METHOD;
ASK METHOD Wstaw(IN klient: KlientRec);
BEGIN
IF maxDlugosc > numberIn
INC(dlugosc);
klient.czasWej := SimTime;
INC(nrPocz);
klient.nr := nrPocz;
ASK raport TO WriteReal(SimTime, 3, 3);
ASK raport TO WriteString(": nowy klient nr " );
ASK raport TO WriteInt(klient.nr, 3);
ASK raport TO WriteString(" w kolejce; oczekuje klientow: ");
Add(klient);
ASK raport TO WriteInt(numberIn, 3);
ASK raport TO WriteLn;
IF NOT ASK gniazdo TO zajete
ASK wyzwalacz TO Release();
END IF;
ELSE
ASK raport TO WriteReal(SimTime, 3, 3);
ASK raport TO WriteString(": kolejka za dluga, klient rezygnuje");
ASK raport TO WriteLn;
DISPOSE(klient);
END IF;
END METHOD;
ASK METHOD Usun(): KlientRec;
VAR
kl: KlientRec;
BEGIN
kl := Remove();
ASK raport TO WriteReal(SimTime, 3, 3);
ASK raport TO WriteString(": klient nr " );
ASK raport TO WriteInt(kl.nr, 3);
ASK raport TO WriteString(" jest obslugiwany");
ASK raport TO WriteLn;
DEC(dlugosc);
RETURN kl;
END METHOD;
END OBJECT;
VAR
otoczenie: OtoczenieObj;
gniazdo: GniazdoObj;
kol: KolejkaObj;
plik: StreamObj;
monITS: ITimedStatObj;
monRS: RStatObj;
wyzwalacz: TriggerObj;
BEGIN
NEW(otoczenie);
NEW(gniazdo);
NEW(kol);
NEW(plik);
NEW(wyzwalacz);
ASK plik TO Open("wyniki.txt", Output);
ASK otoczenie TO Init(1.5, kol, 250);
ASK gniazdo TO Init(2.0, kol, otoczenie, 10.0, 4.0);
ASK kol TO Init(5, gniazdo, plik, wyzwalacz);
TELL otoczenie TO GenerujKlientow();
TELL gniazdo TO Obsluguj();
TELL gniazdo TO AwariaNaprawa(plik);
StartSimulation;
ASK plik TO WriteString("srednia dlugosc kolejki: ");
monITS := GETMONITOR(ASK kol TO dlugosc, ITimedStatObj);
ASK plik TO WriteReal(ASK monITS TO Mean, 10, 4);
ASK plik TO WriteLn;
ASK plik TO WriteString("sredni czas obslugi klienta: ");
monRS := GETMONITOR(ASK gniazdo TO czasObslugi, RStatObj);
ASK plik TO WriteReal(ASK monRS TO Mean, 10, 4);
ASK plik TO WriteLn;
ASK plik TO Close;
DISPOSE(plik);
DISPOSE(otoczenie);
DISPOSE(gniazdo);
DISPOSE(kol);
END MODULE.


Wyszukiwarka

Podobne podstrony:
edukomp kl 3?u przy naprawcze
[Audi A4 8E ] Zestaw naprawczy do luzujacej sie rolety w Avancie B6 i B7
Tylko ciebie naprawdę kochałem Stachursky
Naprawa przełącznika kierunkowskazów
Naprawa GDFS
52 Naprawa telefonu po zalaniu(bitnova info) M2TPQPWCYPE46EKWRHZE3ZL64NUV6GT6B4CL7MQ
Komunikacja naprawde skuteczna Niezawodny sposob dotarcia do klientow pracownikow i znajomych dyresp
iCare Format Recovery naprawa systemu plikow
Instrukcja naprawy Air Top 3500ST?
Naprawa skrzyni biegów Na czym polega, ile kosztuje i jak jej uniknąc
Struktura chromatyny a powstawanie i naprawa uszkodzień DNA
Polonez Fiat Poradnik Napraw
materiały do napraw w instalacji
awaria04
06 Podolski B i inni Awaria oraz sposob wzmocnienia zelbetowego, wielokomorowego zbiornika oczyszcza

więcej podobnych podstron