| |
Sterowanie przebiegiem
wykonania programu: IL, ILC, JMP, JME
|
| |
Copyright
flaga_st@agh.edu.pl |
| |
Pomimo tego, że program
aplikacyjny użytkownika jest wykonywany cyklicznie przez system
operacyjny sterownika, to nie wszystkie jego części muszą być
wykonywane w każdym cyklu. Umożliwiają to instrukcje pozwalające na
ryglowanie części programu, skoków i zakończenia programu |
| |
Ryglowanie części programu IL, ILC
|
| |

Instrukcja ryglowania IL (InterLock) występuje
zawsze w powiązaniu z instrukcją ILC (InterLock
Clear). Głównym celem jej stosowania jest rozgałęzienie
struktury programu. Instrukcje programu zawarte pomiędzy IL
i ILC zachowują się zgodnie z zestawieniem w tabeli przy
założeniu, że warunek
wykonywalności S jest wyłączony (stan OFF)
Ryglowanie pomiędzy IL i ILC następuje przy WYŁĄCZONYM warunku wykonywalności S.
Stan ON warunku S powoduje, że program zachowuje się w
sposób standardowy (jakby IL i ILC nie występowały).
|
| |
|
Zestawienie się instrukcji i ich zachowania
w zaryglowanej części programu |
|
Instrukcja |
Zachowanie przy
wyłączonym warunku wykonywalności |
|
OUT, OUT NOT |
Przyjmują stan OFF
niezależnie od stanu warunku wykonywalności (patrz rys.
4.69) |
|
TIM, TIMH |
Zegary są wyzerowane (powrót do
stanu z przed rozpoczęcia odmierzania czasu) |
|
CNT, CNTR |
Zachowana zostaje wartość bieżąca
PV bez możliwości odliczania impulsów i
wyzerowania |
|
KEEP |
Stan podtrzymywanego bitu zostaje
zachowany bez możliwości skorzystania z wejścia
zerującego do czasu odryglowania programu |
|
DIFU, DIFD |
Nie są wykonywane |
|
pozostałe |
Nie są wykonywane |
|
| |
|
| |

Powyższa uwaga jest bardzo istotna wziąwszy pod uwagę, że
zdecydowana większość pozostałych instrukcji wykonuje akcje przy
włączonym warunku wykonywalności. Podobnie jak SBN i RET
instrukcja ILC jest instrukcją bezwarunkową.
Instrukcje IL i ILC
nie muszą występować parami. Instrukcja
IL użyta kilkakrotnie
rygluje fragmenty programu, aż do wystąpienia ILC (jedna
instrukcja ILC może być poprzedzona wieloma instrukcjami
IL). Nie jest jednak możliwe zagnieżdżanie instrukcji
ryglujących. Oznacza to, że po użyciu jednej instrukcji ILC,
nawet po wielu wystąpieniach IL, nie możemy ponownie wykonać
instrukcji ILC jeśli pomiędzy nimi nie było przynajmniej
jednego wystąpienia IL.
Rysunek przedstawia sytuację ze
stanem
OFF warunku wykonywalności instrukcji
IL.
Oznacza to, że fragment programu, aż do wystąpienia instrukcji
ILC jest zaryglowany. Jak widać na rysunku pomimo podania stanu
ON na bit 10.00 (OUT) pozostaje on w stanie OFF
(brak wypełnienia symbolu cewki).
Analogicznie sytuacja przedstawia
się z instrukcją OUT NOT (cewka o adresie 10.01 na
którą podawany jest stan OFF).
Pomimo zaryglowania bit 10.02
pamiętany przez instrukcję KEEP pozostaje w stanie ON
i do czasu zmiany stanu S na ON nie można go wyzerować
wysokim stanem zmiennej R.
Zegar
TIM1 pomimo wysokiego stanu na wejściu nie odmierza czasu (PV=SV=50)
czego do końca nie można przedstawić na statycznym rysunku.
Licznik CNT2 zachował stan PV=5, po wartości
SV=10
widzimy, że mimo zaryglowania nie został on wyzerowany. Pozostałe
instrukcje umieszczone w części zaryglowanej nie są wykonywane.
Przedstawione instrukcje nie wpływają na stan żadnych znaczników.
|
| |
Skok bezwarunkowy JMP, JME
|
| |

Instrukcje JMP i JME których schematy drabinkowe
pokazuje rysunek stanowią pary z których pierwszy element jest
instrukcją skoku do etykiety ETKIETA, a drugi
definiuje
etykietę czyli miejsce skoku. Etykiety numerowane są w zakresie od
00 do 99. Etykieta
o numerze
00 umożliwia
wielokrotne jej wykorzystanie. Jeżeli w programie użyjemy instrukcji
JMP 00 to skok zostanie oddany do najbliższej instrukcji
JME 00. Pozostałe etykiety z zakresu od
1 do
99 w obrębie programu mogą być wykorzystane tylko jeden raz.
Stosowanie JMP 00 wydłuża czas cyklu, ponieważ system
operacyjny sterownika musi wyszukać najbliższą sekwencję JME
00.
Skok wykonywany jest wtedy gdy
warunek wykonywalności S jest wyłączony. Przy
włączonym warunku S instrukcja JMP nie wykonuje
żadnej akcji.
Stany zegarów, liczników, bitów sterowanych przez instrukcje
znajdujące się pomiędzy instrukcjami JMP i JME
nie ulegają zmianie.
Różnice pomiędzy zachowaniem się instrukcji w zaryglowanej części
programu, a zachowaniem się w blokach ograniczonych instrukcjami
JMP – JME pokazują rysunki (porównaj z materiałem na temat
IL) . |
| |
Na rysunku widzimy sytuację w której
wykonywany jest skok (warunek
wykonania instrukcji JMP w stanie OFF) do JME
etykieta. Instrukcje znajdujące się wewnątrz przeskoczonego
obszaru zachowują się następująco:
OUT (bit 10.0) zachował stan ON który pojawił
się przy stanie ON warunku S,
OUT NOT (bit 10.1) zachował stan ON który
pojawił się przy stanie ON warunku S,
KEEP (bit 10.2) zachował stan ON który pojawił
się przy stanie ON warunku S, dopóki S nie
przejdzie w stan OFF wejście R nie ma wpływu na stan
bitu 10.2,
TIM1 zachował wartość PV (w tym przypadku 20) i
przestał odmierzać czas do chwili przejścia S w stan ON,
CNT2 zachowuje się analogicznie jak w zaryglowanej części
programu. |
| |
Odrębnego
omówienia wymaga wystąpienie jednej z instrukcji detekcji przejść:
dodatniego (DIFU) lub ujemnego (DIFD) wewnątrz bloku
ograniczonego omawianymi instrukcjami.
Należy wyobrazić
sobie sytuację której najprostszą wersję przedstawiono na rysunku. Wewnątrz bloku ograniczonego instrukcjami
JMP – JME
znajduje się instrukcja DIFU wykrywająca przejście dodatnie
sygnału pochodzącego z wejścia 0.2.
Znacznik pojawienia się
przejścia dodatniego (tutaj bit 200.00) ma wpływ (w tym
przypadku dla uproszczenia, bezpośredni) na warunek wykonywalności
instrukcji JMP. W związku z tym przy stanie ON bitu
0.3 (nie jest wykonywany skok) pojawienie się przejścia
dodatniego na bicie 0.2 spowoduje zmianę stanu bitu 200.0
na ON i utrzymanie go w tym stanie przez czas jednego cyklu
sterownika.
Jeśli jednak bit 0.3
będzie się znajdował w stanie OFF to warunek uaktywnienia
instrukcji JMP będzie zależał tylko od stanu bitu 200.0
(tutaj sprawdzono czy bit ten jest w stanie niskim OFF).
Zakładając, że w fazie początkowej bit 200.0 jest wyzerowany
to instrukcja JMP nie będzie wykonywała skoku. Wówczas
przejście dodatnie na bicie 0.2 spowoduje przejście znacznika
200.0 w stan wysoki co, przy konstrukcji programu jak na
rysunku 4.72, spowoduje że w następnym cyklu sterownika zacznie się
wykonywanie skoków do etykieta, a bit 200.0 pozostanie
w stanie ON aż do następnego wykonania instrukcji DIFU
co w prezentowanym przykładzie stanie się po zmianie stanu warunku
wykonywalności JMP na ON.
W tym
przykładzie umożliwiono przywrócenie wartości początkowych przez
ustawienie stanu ON bitu
0.3, natomiast w przykładach
rzeczywistych programista musi wykazać się wiedzą na temat ubocznych
skutków wykorzystania instrukcji skoku. |
| |

|
| |
|