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 ILILC 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 JMPJME 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.