Element oprogramowania sterownika może być zorganizowany w postaci grafu sekwencji SFC (Sequential Function Chart), który składa się z wzajemnie sprzężonych etapów (steps) i przejść (transitions). Z każdym etapem jest skojarzony zbiór odpowiednich działań (actions) a każdemu przejściu miedzy etapami towarzyszy warunek przejścia (transition condition).
Ponieważ wymienione elementy SFC wymagają pamięci dla przechowania informacji o stanie systemu, jedynymi elementami oprogramowania, które mogą być z nich zbudowane są bloki funkcyjne i programy. Jeżeli jakakolwiek cześć takiego elementu jest programowana przy użyciu SFC, to w ten sam sposób powinien być programowany cały element. Jeżeli element oprogramowania nie jest zorganizowany w postaci grafu SFC, to powinien być traktowany jako pojedyncze działanie wykonywane pod kontrolą jednostki wywołujące ją.
Etap określa sytuacje, w której zachowanie się elementu oprogramowania w odniesieniu do jego wejść i wyjść jest zdefiniowane przez skojarzony z etapem zestaw działań. Etap może być aktywny (active) lub nieaktywny (inactive). W każdej chwili stan elementu oprogramowania jest określony przez zestaw aktywnych etapów oraz wartości zmiennych wewnętrznych i wyjściowych tego elementu.
Etap jest przedstawiany graficznie jako prostokąt zawierający nazwę etapu lub w postaci tekstowej za pomocą konstrukcji STEP ... END_STEP. Łączenie kolejnych etapów wykonuje się za pomocą linii pionowych (wejście u góry, wyjście na dole) lub odpowiednio, za pomocą zestawu deklaracji TRANSITION ... END_TRANSITION.
Aktywność etapu określa wskaźnik etapu (step flag), który jest reprezentowany przez zmienną logiczną ***.X, gdzie *** jest nazwą etapu. Przyjmuje on wartość 1 dla etapu aktywnego i 0 dla etapu nieaktywnego.
Czas aktywności etapu (step elapsed time) jest określony przez zmienną ***.T typu TIME . Wartość tej zmiennej pozostaje bez zmian, gdy etap przechodzi w stan nieaktywny.
Zakres stosowania nazw etapów, ich wskaźników i czasów aktywności jest lokalny w ramach elementu oprogramowania, w którym się pojawiają.
Stan początkowy elementu oprogramowania jest określony przez wartości początkowe jego zmiennych wewnętrznych i wyjściowych oraz zbiór etapów początkowych (initial steps), tj. etapów aktywnych w chwili początkowej. Każda siec SFC lub jej tekstowy odpowiednik powinny zawierać tylko jeden etap początkowy. Etap początkowy zaznacza się jako prostokąt rysowany podwójną linią, a w przypadku reprezentacji tekstowej jako konstrukcje INITIAL_STEP ... END_STEP. Zmienne ***.X oraz ***.T nie mogą być modyfikowane przez program użytkownika, ich wartości mogą być tylko odczytywane.
Domyślną wartością początkową dla czasu aktywności etapu jest t#0s, a dla wskaźnika etapu logiczne FALSE, za wyjątkiem etapu początkowego, którego wskaźnik z chwilą inicjalizacji przyjmuje wartość TRUE.
Przejście (transition) przedstawia warunki logiczne, których spełnienie jest wymagane do przeniesienia sterowania z etapu poprzedzającego przejście, do etapu lub etapów występujących za przejściem. Przejście przedstawiane jest graficznie jako poziomy odcinek przecinający linię łączącą etapy.
Z każdym przejściem jest skojarzony warunek przejścia (transition condition), który jest wynikiem rozwiązania pojedynczego wyrażenia logicznego. Warunek przejścia zawsze prawdziwy oznacza się symbolem 1 lub słowem kluczowym TRUE.
Sposoby kojarzenia warunków przejścia z przejściem z wykorzystaniem rożnych języków opisanych w normie IEC 1131-3 przedstawiono poniższej tabeli.
Tabela 5.2. Sposoby kojarzenia warunków przejścia z przejściem
Lp. | Przykład | opis |
1 | Krok poprzedzający
Warunek przejścia w języku ST Krok następny | |
2 | Krok poprzedzający
Warunek przejścia w języku LD Krok następny | |
3 | Krok poprzedzający
Warunek przejścia w języku FBD Krok nastepny | |
4 | Użycie łącznika:
Krok poprzedzający Łącznik przejścia Krok następny | |
4a | Warunek przejścia w języku LD | |
4b | Warunek przejścia w języku FBD | |
5 | Użycie nazwy przejścia: Krok poprzedzający Nazwa przejścia Krok następny | |
5a | Warunek przejścia w języku LD | |
5b | Warunek przejścia w języku FBD | |
5c | TRANSITION TRAN23:
LD %I1 AND %I2 END TRANSITION | Warunek przejścia w języku IL |
5d | TRANSITION TRAN23:=
%I1 & %I2 END TRANSITION | Warunek przejścia w języku ST |
Warunki początkowe grafu SFC są określone przez krok początkowy (ang. initial step), który jest w stanie aktywnym z chwilą inicjowania programu. Zmiana stanu procesu polega na przechodzeniu między krokami aktywnymi a kolejnymi, bezpośrednio połączonymi z nimi krokami, i zależy od spełnienia warunków przejścia.
Przejście (tranzycja) jest dozwolone (ang. enabled) tylko wtedy, gdy wszystkie bezpośrednio
poprzedzające je kroki są aktywne. Jeżeli przejście jest dozwolone i jednocześnie jest
spełniony związany z nim warunek przejścia, to następuje kasowanie przejścia oraz
dezaktywacja (lub reset) wszystkich bezpośrednio poprzedzających je kroków i aktywacja
wszystkich kroków występujących bezpośrednio po symbolu przejścia. Taki sposób działania,
w którym atrybut stanu aktywnego jest przekazywany do kolejnych kroków, przypomina
przekazywanie żetonu (ang. token passing) między kolejnymi stacjami w sieci, i bywa też
czasem tak nazywany.
Kolejne kroki i przejścia muszą zawsze występować naprzemiennie w połączeniach
elementów SFC, tzn.:
Dwa kroki nie mogą być bezpośrednio połączone – muszą być zawsze rozdzielone przejściem;
Dwa przejścia nie mogą być bezpośrednio połączone – muszą być zawsze rozdzielone krokiem.
Przejście może mieć większą liczbę kroków poprzedzających lub występujących za nim.
Prosta kombinacja kroków i przejść jest nazywana sekwencją. Po wykonaniu kroku można
wybrać jedną z kilku różnych sekwencji albo dokonać aktywacji kilku sekwencji
równocześnie.
Podsumowanie własności języka SFC
Jednostka POU napisana w SFC składa się z jednej lub kilku sieci, w których występują kroki, przejścia i połączenia między nimi:
Kroki i przejścia muszą występować naprzemiennie, nie można łączyć kroku z krokiem lub przejścia z przejściem;
Z każdym przejściem związane są warunki przejścia;
Z krokami kojarzone są za pomocą bloków akcji odpowiednie akcje. Kojarzenie takie polega na podaniu nazwy akcji oraz opcjonalnie dodatkowych warunków jej wykonania w postaci kwalifikatorów (np. czas trwania, opóźnienie itp.). Blok akcji może także zawierać nazwy zmiennych wskaźnikowych w celu przedstawienia na zewnątrz informacji o stanie wykonania kroku (np. błąd wykonania, przekroczenie limitu czasu itp.). W najprostszym przypadku akcję może stanowić zmienna boolowska, ale może ją tworzyć także zestaw instrukcji w dowolnym języku.
Z chwilą wywołania POU zawierającego strukturę SFC aktywny jest krok początkowy sieci. W każdej sieci może znajdować się tylko jeden krok początkowy. Dalszy rozwój sieci polega na przechodzeniu między kolejnymi krokami według następujących zasad:
Dla każdego aktywnego kroku, po wykonaniu przypisanych mu akcji, następuje sprawdzenie warunków przejścia dla przejścia znajdującego się bezpośrednio po kroku. Przejście występujące za krokiem aktywnym nosi nazwę przejścia dozwolonego.
Jeżeli warunki przejścia dla przejścia dozwolonego są spełnione (wynik sprawdzenia ma wartość TRUE), to krok poprzedzający przejście staje się nieaktywny, przejście jest kasowane a krok występujący za przejściem jest aktywizowany.
Jeżeli warunki przejścia są niespełnione, to krok poprzedzający pozostaje aktywny.
Wykonywanie kroków aktywnych podlega następującym regułom:
Każdy krok z chwilą aktywacji jest wykonany co najmniej raz, włączając w to skojarzone z nim akcje.
Po dezaktywacji kroku, wszystkie skojarzone z nim akcje są wykonywane ostatni raz w celu zapewnienia właściwego zakończenia akcji, np. zatrzymania czasomierzy, wyzerowania zmiennych itp. Flaga kroku ma wartość TRUE dla każdego wykonania kroku aktywnego, z wyjątkiem właśnie tego ostatniego wykonania.
W klasycznych językach programowania jednostka POU zawiera sekwencje instrukcji
(w językach graficznych występujących w postaci obwodów), które wykonywane są jedna za
drugą, tak jak występują w programie. Sekwencja instrukcji może zostać przerwana przez
użycie instrukcji skoku lub wywołania innego POU. Mechanizm sterowania wykonywaniem
sekwencji w SFC jest inny. W sieci SFC nie występuje bowiem sekwencyjne wykonywanie
instrukcji, ale cykliczne ustalanie wartości statusu kroków i przejść.
Język schematów drabinkowych LD należy do grupy języków graficznych i umożliwia realizacje zadania sterowania za pomocą standaryzowanych symboli graficznych. Symbole te umieszcza się w obwodach schematów drabinkowych dla przekaźnikowych układów sterowania.
Obwód (network) jest definiowany jako zbiór wzajemnie połączonych elementów graficznych. Z obwodem może być skojarzona etykieta (nazwa lub liczba dziesiętna bez znaku zakończona dwukropkiem) Stosowanie etykiety jest lokalne w zakresie elementu organizacyjnego oprogramowania w którym występuje. Obwód LD ograniczony jest z lewej i prawej strony przez szyny prądowe, nie będące elementami obwodu. Języki graficzne są używane do przedstawiania przepływu odpowiednich wielkości przez kolejne obwody reprezentujące pewną strategie sterowania. W przypadku języka LD wykonywanie programu polega na „przepływie prądu” , analogicznie jak w schematach przekaźników elektromechanicznych . Obowiązują przy tym następujące zasady:
Wartości żadnego elementu obwodu nie powinny być wyznaczone przed wyznaczenie wartości jego wejść.
Wyznaczenie wartości elementu nie może być zakończone przed wyznaczeniem wszystkich wartości wyjść.
Wykonywanie programu dla całego obwodu nie jest zakończone dopóki nie wyznaczono wartości wyjść dla wszystkich elementów tego obwodu.
W ramach elementu oprogramowania kolejne obwody powinny być wyznaczane z kolejności z góry na dół. Kolejność ta może ulec zmianie po wprowadzeniu elementów kontrolnych.
Tabela 5.3. Elementy języka LD sterujące wykonywaniem programu.
Skok bezwarunkowy | |
Skok warunkowy Warunek skoku Miejsce docelowe skoku | |
Powrót warunkowy | |
Powrót bezwarunkowy |
Elementy obwodu mogą być łączone poziomo lub pionowo. Stan elementów łączących oznacza się jako ON lub OFF. Określenie stanu połączeń jest synonimem określenia „przepływ prądu”. Stan lewej szyny powinien być uważany za ON, o ile nie występuje ona w nieaktywnym etapie grafu SFC. Nie definiuje się stanu dla prawej szyny. Połączenie poziome przekazuje stan elementu znajdującego się bezpośrednio po stronie lewej do elementu po stronie prawej.
Połączenie pionowe odpowiada sumie logicznej OR dla stanów połączeń poziomych występujących po lewej stronie połączenia pionowego, tzn.:
Jeśli wszystkie stany połączeń poziomych po lewej stronie połączenia pionowego są OFF to stan tego połączenia jest OFF.
Jeżeli przynajmniej jedno połączenie poziome po lewej stronie połączenia pionowego jest ON, to całe połączenie pionowe jest także ON.
W języku LD dostępne są następujące elementy logiczne:
Styk (contact) – jest elementem przekazującym do połączenia poziomego stan będący wynikiem mnożenia logicznego AND stanu linii łączącej po lewej stronie styku oraz wartość przypisanej mu logicznej zmiennej wejściowej wyjściowej lub pamięciowej. Styk nie modyfikuje wartości skojarzonej z nim zmiennej. W środowisku WAGO-IO-PRO dysponujemy dwoma rodzajami styków :
Styk zwierny (normalnie otwarty)
Stan połączenia styku z lewej strony jest przenoszony na prawą stronę jeżeli skojarzona z nim zmienna logiczna ma wartość „1”, w przeciwnym wypadku stan połączenia jest jako OFF.
Styk rozwierny (normalnie zamknięty)
Stan połączenia styku z lewej strony jest przenoszony na prawą stronę jeżeli skojarzona z nim zmienna logiczna ma wartość „0”, w przeciwnym wypadku stan połączenia jest jako OFF.
Cewka (coil) – przekazuje stan połączeń z lewej strony na prawa stronę bez zmian, powodując jednoczesne zapamiętanie stanu połączenia po swej lewej stronie przez przypisaną jej zmienną logiczna.
Cewka normalna – stan połączenia z lewej strony cewki jest przenoszony na prawą stronę i zapamiętywany w skojarzonej z nią zmiennej logicznej
Cewka negująca – Stan połączenia z lewej strony jest przenoszony na prawą stronę a jego odwrotność zapamiętywana jest w skojarzonej z nią zmiennej logicznej.
Cewka ustawiająca (SET Coil) - skojarzona zmienna przyjmuje wartość „1” jeżeli połączenie z lewej strony jest w stanie ON i nie zmieni się do chwili wyzerowania przez cewkę kasującą.
Cewka kasująca (Reset Coil)- Skojarzona zmienna przyjmuje wartość „0” jeżeli połączenie z lewej strony jest w stanie ON i nie zmieni się do chwili ustawienia przez cewkę ustawiającą.
W schematach drabinkowych funkcja przerzutnika RS może być zrealizowana albo z użyciem styku przekaźnika w obwodzie wzbudzenia jego cewki, albo w postaci pary cewek sprzężonych przypisanych do jednej zmiennej, z których jedna umożliwia tylko ustawianie (cewka S) a druga tylko zerowanie zmiennej (cewka R). Obydwa sposoby są przedstawione na rysunkach 5.1 i 5.2.
Rysunek 5.1. Pierwszy sposób realizacji przerzutnika RS w języku schematów drabinkowych
Rysunek 5.2. Drugi sposób realizacji przerzutnika RS w języku schematów drabinkowych
Lp. | Przykład | Reguła |
1 | Sekwencja pojedyncza
Kroki przejścia są powtarzane kolejno po sobie Przykład: Przejście z kroku S2 do S3 jest możliwe tylko wtedy , gdy krok S2 jest aktywny i jest spełniony warunek a | |
2a |
| Wybór sekwencji - rozbieżność
Wybór między różnymi sekwencjami jest reprezentowany przez tyle przejść umieszczonych pod linią pozioma ile jest możliwych sekwencji. Gwiazdka oznacza pierwszeństwo wyboru od lewej do prawej. Przykład: Przejście z kroku S3 do S4 wystąpi tylko wtedy, gdy S3 jest aktywny i jest spełniony warunek b, a przejście z S3 do S5 wtedy, gdy S3 jest aktywny i jest spełniony warunek c a nie jest spełniony warunek b. |
2b | Wybór sekwencji – rozbieżnośc
Gwiazdka i numerowane gałęzie wskazują na zadeklarowane pierwszeństwo sprawdzania przejścia. Gałęzie o niższym numerze maja wyższy priorytet. Przykład: Przejście z kroku S3 do S5 wystąpi tylko wtedy, gdy S3 jest aktywny i jest spełniony warunek c a przejście z s# do S4 wtedy, gdy S3 jest aktywny i jest spełniony warunek b a nie jest spełniony warunek c | |
2c | Wybór sekwencji – rozbieżności
Połączenie gałęzi oznacza, że kolejne warunki przejścia muszą się wzajemnie wykluczać (gdyz nie ma tu określonego priorytetu gałęzi). Przykład: Przejście z kroku S3 do S4 wystąpi tylko wtedy, gdy S3 jest aktywny i jest spełniony warunek b , a przejście z S3 do S5 tylko wtedy, gdy S5 jest aktywny nie nie jest spełniony warunek b, a jest spełniony warunek c | |
3 |
Tabela 13a. Rodzaje przejść pomiędzy poszczególnymi krokami
Tabela 13a. Rodzaje przejść pomiędzy poszczególnymi krokami
Jest to język o składni podobnej do języka C lub PASCAL. Umożliwia on użycie instrukcji warunkowych, wyboru, przypisania , realizacje pętli programowych.
Poniższa tabela obrazuje schematy zastosowania tych funkcji:
Instrukcja | Przykład |
RETURN | RETURN; |
IF | D:=B*B;
IF D<0.0 THEN C:=A; ELSIF D=0.0 THEN C:=B; ELSE C:=D; END_IF; |
CASE | CASE INT1 OF
1:BOOL1 := TRUE; 2:BOOL2 := TRUE; ELSE BOOL1 := FALSE; BOOL2 := FALSE; END_CASE; |
FOR | J:=101;
FOR I:=1 TO 100 BY 2 DO IF ARR[I] = 70 THEN J:=I; EXIT; END_IF; END_FOR; |
WHILE | J:=1;
WHILE J<= 100 AND ARR[J] <> 70 DO J:=J+2; END_WHILE; |
REPEAT | J:=-1;
REPEAT J:=J+2; UNTIL J= 101 OR ARR[J] = 70 END_REPEAT; |
EXIT | EXIT; |
Tabela . Schemat zastosowania instrukcji języka ST
Copyright © 2008-2010 EPrace oraz autorzy prac.