Podczas pisania kodu programu bardzo często trzeba sprawdzić zależność pomiędzy dwoma lub też większą liczbą sygnałów wejściowych (sygnałów cyfrowych). Podobnie można sprawdzać zależność dla zmiennych. W przypadku sterownika S7-1200 sygnały wejściowe traktujemy jako wartości logiczne „fałsz” czyli 0 lub jako „prawda” czyli 1. Sprawdzenie zależności pomiędzy tymi sygnałami, to inaczej mówiąc operacje binarne, albo można też spotkać określenie algebra Bool’a. Rozwój techniki nie byłby możliwy bez algebry Bool’a.
Operatory binarne
Mamy dwuelementowy zbiór możliwych stanów dla sygnałów wejściowych, czyli {0, 1} oraz cztery operacje:
NOT – negacja
OR – alternatywa lub też suma logiczna
AND – koniukcja lub też iloczyn logiczny
XOR – różnica symetryczna (suma modulo dwa)
Utworzymy tablicę PLC tags, która została przedstawiona poniżej
Mamy dwa sygnały wejściowe typu Bool (dwa czujniki) utworzone w tablicy PLC tags o następujących nazwach
SensorS1
SensorS2
Mamy także jeden sygnał wyjściowy typu Bool o następującej nazwie
Relay
Zakładamy też, że czujnik o nazwie symbolicznej SensorS2 wykrywa jakiś obiekt, więc jest w stanie wysokim (czyli „prawda”). Prześledźmy teraz każdą z operacji.
Negacja
Jest to jednoargumentowa funkcja. Wyjście Q przyjmuje stan przeciwny do stanu, który znajduje się na wejściu. Tabela prawdy została przedstawiona poniżej
Symbol tego operatora w języku SCL to NOT. Przykładowy kod umieszczono poniżej
"Relay" := NOT "SensorS1";
Zgodnie z tablicą prawdy po wykonaniu tej linii kodu wyjście (Relay) będzie w stanie wysokim.
Suma logiczna
Jest to funkcja dwuargumentowa. Wynik Q jest uzależniony od stanu argumentów A oraz B. Tablica prawdy została przedstawiona poniżej
Symbol tego operatora w języku SCL to OR. Przykładowy kod umieszczono poniżej
"Relay" := "SensorS1" OR "SensorS2";
Zgodnie z tablicą prawdy po wykonaniu tej linii kodu wyjście (Relay) będzie w stanie wysokim.
Iloczyn logiczny
To również funkcja dwuargumentowa. Na wynik Q wpływają aktualne stany sygnałów A oraz B. Tablica prawdy dla tego operatora została przedstawiona poniżej
Wyjście Q przyjmuje stan wysoki tylko w jednym przypadku.
Symbol tego operatora w języku SCL to AND. Przykładowy kod umieszczono poniżej
"Relay" := "SensorS1" AND "SensorS2";
Zgodnie z tablicą prawdy po wykonaniu tej linii kodu wyjście (Relay) będzie w stanie niskim.
Logiczna różnica symetryczna
Nie jest to operacja elementarna, jednak dosyć często się przydaje. Podobnie do innych operatorów jest to funkcja dwuargumentowa. Wyjście Q jest w stanie wysokim wówczas, gdy stany sygnałów A i B są przeciwne. Tablica prawdy tego operatora znajduje się poniżej
Symbol tego operatora w języku SCL to XOR. Przykładowy kod umieszczono poniżej
"Relay" := "SensorS1" XOR "SensorS2";
Zgodnie z tablicą prawdy po wykonaniu tej linii kodu wyjście (Relay) będzie w stanie wysokim.
Podane przykłady przedstawiają tylko dwa sygnały na wejściu danego operatora (poza operatorem negacji). Oczywiście może pojawić się więcej sygnałów. Jednak idea działania operatora pozostaje taka sama.
Połączenie kilku operatorów
Operacje binarne można łączyć ze sobą. Przedstawia to niższy kod programu
"Relay" := (NOT "SensorS1") AND "SensorS2";
Po wykonaniu tej linii kody wyjście (Relay) będzie w stanie wysokim. Jak widzisz, do podkreślenia kolejności wykonywania działań zostały użyte nawiasy. Może się zdarzyć też tak, że programista chciałby, aby ta linia kodu była interpretowana w sposób podany poniżej
"Relay" := NOT ("SensorS1" AND "SensorS2");
Założyliśmy, że sygnał z czujnika SensorS2 jest w stanie wysokim, więc w tym przypadku po wykonaniu tej linii kodu wyjście (Relay) będzie również w stanie wysokim. Teraz sprawdź, co się stanie, gdy sygnał z czujnika SensorS1 jest w stanie wysokim.
Dlatego używaj nawiasów. To Ty powinieneś decydować o przynależności operatora do sygnału, a nie środowisko TIA Portal. Później ciężko jest zlokalizować, dlaczego program nie działa poprawnie. A przyczyną może być tylko brak nawiasów.
Operatory binarne wykorzystujemy tylko po prawej stronie operatora przypisania (czyli tylko z sygnałami wejściowymi lub zmiennymi).
Operatory binarne z innymi typami danych
Gdy patrzysz na jakąś zmienną, np. int to wówczas widzimy liczbę, jaką ona przechowuje np. 123. W rzeczywistości ta liczba, to odpowiedni układ zer i jedynek (czyli wartość 123 w zapisie binarnym). Nie wiem, czy zdajesz sobie sprawę, ale operatory binarne można także wykorzystywać z innymi typami danych.
Poniżej znajduje się blok danych VariableValues z kilkoma zmiennymi typu USInt
W tym bloku mamy zdefiniowane trzy zmienne 8 bitowe bez znaku typ USInt, które wykorzystamy do obliczeń oraz dwie o nazwie result1 i result2 również typu USInt gdzie będziemy przypisywać wyniki. Jak widzisz, do zmiennych a oraz c przypisano wartości startowe.
Wykorzystamy operator binarny OR oraz zdefiniowane zmienne. Przykładowy kod programu przedstawiono poniżej
"VariableValues".result1 := "VariableValues".a OR "VariableValues".b; "VariableValues".result2 := "VariableValues".a OR "VariableValues".c;
Wykonanie każdej z tych linii kodu polega na obliczeniu wartości wyrażenia zgodnie z tablicą prawdy. Przebieg obliczeń lepiej to przedstawia poniższy rysunek
Jak widzisz, bity na każdej pozycji dla obu zmiennych są analizowane zgodnie z tablicą prawdy dla operatora sumy logicznej.
Taka operacja jest często wykorzystywana w przypadku programowania mikrokontrolerów. W sterownikach PLC nie jest to popularne rozwiązanie. Wykorzystanie operacji logicznej OR służy do ustawienia bitu na danej pozycji lub kilku bitów na różnych pozycjach. Czyli są modyfikowane bity wybrane przez nas. Pozostałe pozostają bez zmian. Jest to tak zwana maska bitowa. W naszym wypadku, to tak naprawdę zmienna c jest taką maską.
Takie rozwiązanie możemy wykorzystać, gdy chcemy np. włączyć kilka wyjść cyfrowych w szybki sposób. Dzięki temu realizujemy to w jednej linii kodu. Zamiast zmiennej a byłby wówczas jakiś bajt wyjściowy.
Zdefiniuj sobie w tablicy PLC tags tag typu Byte o adresie QB0. Z tym tagiem przetestuj działanie takiej maski.
W analogiczny sposób działają pozostałe operatory binarne.
Trzeba te tablice prawdy znać na pamięć, ponieważ będą Ci potrzebne bardzo często.
Kurs wideo
Więcej na temat programowania w języku SCL znajdziesz w kursie Sterownik PLC w praktyce: