Symulacja komputerowa
Mechanizm monitorowania
zmiennych w MODSIM’ie
Monitory - idea
Monitorowanie polega na ścisłym powiązaniu
pewnych (zdefiniowanych) zachowań
(działań) z operacjami dostępu do
zmiennych i ich modyfikacji. Powiązanie to
ma charakter ukryty i automatyczny
(działania te są uruchamiane w sposób
automatyczny i niejawny).
Operacje monitorujące są odseparowane od
operacji przetwarzania dotyczących
monitorowanych zmiennych.
Monitory - zastosowanie
śledzenie zmian wartości wybranej
zmiennej i zobrazowanie tych zmian na
wykresie
debagowanie – obserwacja wartości
kluczowych zmiennych programu bez
zmiany logiki programu (głównego
przepływu sterowania w programie)
gromadzenie statystyk
dotyczących
wyników symulacji (odseparowanie tych
operacji od „czystej” symulacji)
Co możemy monitorować?
zmienne dowolnego typu:
(wyliczeniowy,
INTEGER
,
REAL
, STRING,
BOOLEAN, typ okrojony, obiektowy,
rekordowy, tablicowy)
pola w obiektach
pola w rekordach
Składnia deklaracji obiektu monitora
Składnia definicji metod monitorujących
Własności monitorów
tylko monitor może zawierać metody typu:
LMONITOR i RMONITOR;
monitor może posiadać dowolną liczbę metod:
left-hand i right-hand. Jeśli jest więcej niż jedna
metoda określonego rodzaju, wtedy są one
wywoływane w kolejności zadeklarowania;
monitor może dziedziczyć z innych obiektów, przy
czym obiektem bazowym może być zarówno typ
monitorowy lub nie;
obiekt, który dziedziczy z obiektu będącego
monitorem musi być koniecznie monitorem tego
samego typu danych monitorowanych;
monitor może być statyczny lub dynamiczny;
Struktura obiektu monitora
Trzy specjalne wielkości zdefiniowane w
monitorze:
VALUE – dostępna ze wszystkich metod
monitorujących
NEWVALUE – dostępna z metod typu
LMONITOR
UPDATEVALUE – funkcja wywoływana z
metod typu LMONITOR i modyfikująca
wartość zmiennej NEWVALUE
Deklaracja zmiennych monitorowanych
VAR
dlugosc : LMONITORED INTEGER;
czas : LRMONITORED REAL BY MonitorType;
Uwaga: w ten sam sposób deklarujemy monitorowane pola
obiektów i rekordów.
Deklaracja typów monitorowanych
TYPE
TypMonit1 = LMONITORED INTEGER;
TypMonit2 = LRMONITORED REAL;
Uwaga: typ obiektu monitora musi być zgodny z typem monitorowanej
zmiennej.
Kolejność wywołania metod
TYPE MonitorSample = MONITOR INTEGER OBJECT
LMONITOR METHOD SetNewValue;
RMONITOR METHOD GetOldValue;
END ONJECT;
OBJECT MonitorSample
LMONITOR METHOD SetNewValue;
BEGIN
OUTPUT(„SetNewValue to „, NEWVALUE);
END METHOD;
RMONITOR METHOD GetOldValue;
BEGIN
OUTPUT(„GetOldValue, which is „, VALUE);
END METHOD;
END OBJECT;
VAR queuelen : LRMONITORED INTEGER BY MonitorSample;
BEGIN
queuelen:=0;
queuelen:= queuelen + 1;
END MODULE.
SetNewValue to 0
GetOldValue, which is 0
SetNewValue to 1
Monitory - typy bazowe
MODSIM dostarcza cztery podstawowe typy
monitorów statystycznych typów liczbowych:
Dla zmiennych typu całkowitoliczbowego
IStatObj
;
ITimedStatObj
;
Dla zmiennych typu rzeczywistego
RStatObj
;
RTimedStatObj
;
Uwaga: obiekty zdefiniowane w module StatMod.
Monitory - typy bazowe
Sześć monitorowanych typów danych liczbowych:
SINTEGER
= LMONITORED INTEGER BY IStatObj;
TSINTEGER
= LMONITORED INTEGER BY
ITimedStatObj;
BINTEGER
= LMONITORED INTEGER BY IStatObj,
ITimedStatObj;
SREAL
= LMONITORED REAL BY RStatObj;
TSREAL
= LMONITORED REAL BY RTimedStatObj;
BREAL
= LMONITORED REAL BY RStatObj,
RTimedStatObj;
Uwaga: obiekty zdefiniowane w module StatMod.
Rodzaje zbieranych statystyk
Do statystyk wyznaczanych automatycznie należą:
Licznik (liczba obserwacji)
Count
Maksimum
Maximum
Minimum
Minimum
Suma
Sum
Wartość średnia
Mean
Suma kwadratów
SumOfSquares
Średnia kwadratowa
MeanSquare
Wariancja
Variance
Odchylenie standardowe
StdDev
Histogram
Histogram
Statystyki ważone czasem
1
3
2
1
0
1
1
n
i
i
n
x
n
X
n
i
i
n
i
i
i
n
t
T
t
x
T
X
1
1
*
6
,
1
100
70
2
20
1
10
0
1
t
0
1
2
10
30
100
x
i
Przebieg zmian liczby zadań w kolejce
Wbudowane procedury i funkcje
ADDMONITOR
(IN monvar : AnyMonitoredVar;
IN monobj : AnyMonitorObjectVar)
REMOVEMONITOR
(IN monvar : AnyMonitoredVar;
IN monobj : AnyMonitorObjectVar)
ACTIVATE
(IN monvar : AnyMonitoredVar;
IN montype : AnyMonitorObjectType):
<montype> object reference
DEACTIVATE
(IN monvar : AnyMonitoredVar;
IN montype : AnyMonitorObjectType):
<montype> object reference
GETMONITOR
(IN monvar : AnyMonitoredVar;
IN montype : AnyMonitorObjectType):
<montype> object reference
Sposób wykorzystania
TYPE
MyMonitoredType = LMONITORED REAL;
VAR
monVar1 : MyMonitoredType;
monVar2 : SREAL; {LMONITORED REAL BY RStatObj}
mon1, mon2 : RStatObj;
BEGIN
. . .
monVar2 := 10.0;
NEW(mon1);
ADDMONITOR
(monVar1, mon1); {automatycznie zostaje aktywowany}
monVar1 := 20.0;
. . .
OUTPUT(ASK
GETMONITOR
(monVar2, RStatObj) TO Mean);
OUTPUT(ASK mon1 TO StdDev);
DEACTIVATE
(mon1);
. . .
REMOVEMONITOR
(monVar1, mon1);
DISPOSE(mon1);