Operatory binarne

mini

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

tablica-plc-tags

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

tablica-not

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

tablica-OR

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

tablica-and

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

tablica-xor

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

blok-danych-variables-values

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

typ-byte-operacja-or

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-CZPP

Więcej w kursie wideo: Chcę zostać programistą PLC

Nagrania są dostępne w wersji online jak również na płytach DVD. Napisz mailem, jaką wersje wybierasz.

Podziel się tym wpisem na:
  • Facebook
  • Google Bookmarks
  • Twitter
  • Wykop

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>