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