Metody symulacyjne
Zaawansowane metody symulacji
dyskretnej
Elementy mechanizmu
symulacyjnego w MODSIM
II
Kluczowymi elementami mechanizmu
symulacji są:
procedura upływu czasu
Pending List
czas symulacyjny
metody i instrukcje umożliwiające upływ
czasu
symulacyjnego
Procedura upływu czasu
Start symulacji
Wybierz obiekt
z najmniejszym
czasem planowanej
czynności tp
Ustaw ’ts’ na ’tp’
Zidentyfikuj
metodę
dla planowanej
czynności
Usuń czynność
z listy planowanych
aktywności obiektu
Wykonaj metodę
planowanej
czynności
Ko
ni
ec
sy
m
ul
ac
ji
Czy koniec?
NIE
TAK
Pending List
rozszerzona lista planowanych czynności
zestawiona z obiektów uporządkowanych
rosnąco wg czasu najbliższej planowanej
czynności
z każdym obiektem skojarzona kolejka
uporządkowanych czynności (tzw. lista
aktywności)
Pending List
reorganizowana każdorazowo:
po zaplanowaniu nowej czynności
po rozpoczęciu/wznowieniu wykonania
dowolnej czynności
po wstrzymaniu wykonywania dowolnej
czynności
po zakończeniu wykonywania dowolnej
czynności
po przerwaniu dowolnej czynności
na zakończenie symulacji
Pending List
Ob. A
Ob. D
Ob. C
Ob. B
Akt. 1 - 5
Akt. 5 - 25
Akt. 3 - 120
Akt. 11 - 15
Akt. 4 - 45
Akt. 22 - 26
Akt. 30 - 35
Akt. 7 - 46
Akt. 40 - 100
L
i
s
t
a
a
k
t
y
w
n
o
ś
c
i
Przykład funkcjonowania
Akt. 1 - 5
Aktualny czas symulacji :
5
Pending List
Ob. D
Ob. A
Ob. C
Ob. B
Akt. 5 - 25
Akt. 3 - 120
Akt. 11 - 15
Akt. 4 - 45
Akt. 22 - 26
Akt. 30 - 35
Akt. 7 - 46
Akt. 40 - 100
L
i
s
t
a
a
k
t
y
w
n
o
ś
c
i
Przykład funkcjonowania
Aktualny czas symulacji : 5
Akt. 11 - 15
Aktualny czas symulacji :
15
Pending List
Ob. D
Akt. 4 - 45
Ob. A
Akt. 5 - 25
Akt. 3 - 120
Ob. C
Akt. 22 - 26
Akt. 30 - 35
Akt. 7 - 46
L
i
s
t
a
a
k
t
y
w
n
o
ś
c
i
Przykład funkcjonowania
Aktualny czas symulacji : 15
Aktualny czas symulacji :
25
Ob. B
Akt. 40 - 100
Akt. 5 - 25
Czas symulacyjny
zazwyczaj różny od astronomicznego
wewnętrzne sterowanie zegarem
modyfikowanie wartości przez procedurę
upływu czasu
umowna (zależna od interpretacji) jednostka
czasu
możliwość realizacji wielu czynności w jednej
chwili
brak możliwości zmniejszania wartości czasu
symulacji
(nie ma powrotów do przeszłości)
Procedury sterowania
symulacją
Uruchomienie upływu czasu (rozpoczęcie
symulacji):
StartSimulation;
Wymuszenie zakończenia symulacji:
StopSimulation;
Odczytanie aktualnej wartości czasu
symulacyjnego:
SimTime(): REAL;
Ustalenie wartości początkowej czasu:
ResetSimTime (IN newTime: REAL);
Odczytanie liczby zaplanowanych czynności:
NumActivities (IN object: ANYOBJ): INTEGER;
Procedury sterowania
symulacją
Odczytanie liczby obiektów w Pending List:
NumObjPending() : INTEGER;
Odczytanie liczby wszystkich zaplanowanych
czynności w listach aktywności obiektów Pending List:
NumActPending() : INTEGER;
Odczytanie liczby aktywności związanych z
sekwencją WAIT FOR …:
NumWAITFOR() : INTEGER;
Odczytanie zawartości Pending List (opcjonalnie
także list aktywności obiektów):
PendingListDump(IN DoActList: BOOLEAN);
Zmienna
Timescale : REAL
(dostępna przez import)
określająca
liczbę rzeczywistych sekund / jednostkę
czasu symulacji
Realizacja upływu czasu
Asynchroniczne uruchomienie metody
...
TELL obiekt TO metoda (lista argumentów ’IN’)
[IN czas]
kolejne instrukcje
...
W wyniku takiego wywołania następuje
wstawienie referencji do ’obiektu’ w Pending
List
wstawienie identyfikatora wywołanej metody
do listy aktywności ’obiektu’
bezzwłoczne przejście do kolejnych instrukcji
kodu programu
(bez rozpoczęcia wykonywania
metody)
Realizacja upływu czasu
Wywołanie takie stosuje się:
we wszystkich metodach (ASK, TELL i
WAITFOR)
można podać tylko parametry wejściowe IN
Ciało metody TELL może zawierać sekwencję
upływu czasu:
…
WAIT DURATION czas
{stan aktywności, płynie
czas}
{po „odczekaniu” czasu}
sekwencja instrukcji
ON INTERRUPT
{po przerwaniu oczekiwania}
sekwencja instrukcji
END WAIT;
…
Realizacja upływu czasu
Instrukcje sterujące upływem czasu:
WAIT DURATION czas
{stan aktywności, płynie
czas}
{po „odczekaniu” czasu}
sekwencja instrukcji
ON INTERRUPT
{po przerwaniu oczekiwania}
sekwencja instrukcji
END WAIT;
WAIT FOR obiekt TO metoda
{stan aktywności, płynie
czas}
{po „normalnym” zakończeniu procesu}
sekwencja instrukcji
ON INTERRUPT
{po wymuszeniu zakończenia procesu}
sekwencja instrukcji
END WAIT;
Realizacja upływu czasu
Synchroniczne wywołanie metody
(procesu)
Gdy dwie lub więcej aktywności obiektu
wzajemnie zależą od siebie, można je
synchronizować poprzez sekwencję:
...
TELL obiekt TO metoda (lista argumentów ’IN’)
[IN czas]
...
a w kodzie źródłowym metody umieszczenie bloku
instrukcji:
WAIT FOR obiekt2 TO metoda2 (lista
argumentów ’IN’)
...instrukcje do wykonania po przejęciu
sterowania
END WAIT;
{’obiekt’ oczekuje na wykonanie przez ’obiekt2’
’metody2’
następnie realizuje określone wewnątrz
instrukcje}
Realizacja upływu czasu
Synchroniczne wywołanie metody
(procesu) c.d.
Analogiczny efekt po wywołaniu w instrukcji
WAIT
FOR
metody typu WAITFOR:
Różnica
- ’WAITFOR’ można wywoływać tylko w
powyższej sekwencji, natomiast ’TELL’ ma tylko
parametry wejściowe IN
Sterowanie procesami
Odwołania do metod
każda wywołana metoda otrzymuje swój
niepowtarzalny identyfikator typu rekordowego
ACTID
VAR
actid : ACTID;
...
BEGIN
actid := TELL obiekt TO Metoda();
...
wykorzystanie ACTID w bloku
WAIT FOR actid .... END WAIT;
wykorzystanie ACTID w sekwencji INTERRUPT
Sterowanie procesami
Przerywanie aktywności (oczekiwania metod)
Przerwanie wszystkich aktywności w obiekcie
object
:
InterruptAll(IN object : ANYOBJ);
Przerwanie konkretnej aktywności o identyfikatorze
activity:
InterruptMethod(IN activity : ACTID);
Przerwanie pierwszej napotkanej w Pending List
aktywności o nazwie
methName
w obiekcie
object:
Interrupt(IN object : ANYOBJ; IN methName :
STRING);
Uwaga :
próba przerwania nieistniejącej czynności nie
powoduje błędu
’runtime error’ generowany jest przy braku
sekwencji ’ON INTERRUPT’ w przerywanej
aktywności metody
Sterowanie procesami
Przykład
TELL METHOD Ladowanie;
...
WAIT DURATION 10.0
...
ON INTERRUPT
...
END WAIT;
END METHOD;
id := TELL samolot TO Ladowanie;
InterruptMethod (id);
{przerwie dokładnie ’id’}
Interrupt (samolot, „Ladowanie”); {przerwie pierwszą
napotkaną}
Sterowanie procesami
Synchronizacja procesów symulacyjnych
Klasa TriggerObj
Metody:
WAITFOR METOD Fire()
ASK METHOD Release()
ASK METHOD NumWaiting():INTEGER
// Proces 1
…
WAITFOR tr TO Fire
ON INTERRUPT
END WAIT;
…
// Proces 2
…
ASK tr TO
Release();
…
Sterowanie metodami
Wymuszone wewnątrz metody zakończenie
czynności
Realizowane przez instrukcję:
Terminate;
Przykład:
…
IF SimTime() > czasStop
Terminate;
END IF;
…