Coraz bardziej zagłębiamy się w meandry programowania w języku tekstowym ST. W tym odcinku zajmiemy się wyrażeniami i operatorami.
Operatory i wyrażenia są częścią każdego języka programowania i wykorzystuje się je do manipulowania danymi.
Operatory arytmetyczne
Reprezentują odpowiednie operacje matematyczne:
- + (dodawanie)
- – (odejmowanie)
- * (mnożenie)
- ** (potęgowanie)
- / (dzielenie)
- % (dzielenie modulo)
Przykład:
Operatory porównania
W celu porównania dwóch wartości możesz wykorzystać operatory porównania. Wynikiem tych operacji zawsze jest wartość typu BOOL, która przyjmuje wartości TRUE lub FALSE.
- = (równa się)
- < (mniejsze niż)
- <= (mniejsze równe niż)
- > (większe niż)
- >= (większe równe niż)
<> (nierówne)
Przykład:
W tym przypadku do zmiennej xWynik jest zwracana wartość TRUE, ponieważ wartość wpisana do zmiennej rNapiecie jest większa niż wartość 8.
Operatory logiczne
Służą one do tworzenia wyrażeń logicznych. Jako rezultat tych wyrażeń otrzymujemy wartości typu BOOL (TRUE lub FALSE).
- AND (suma logiczna)
- OR (alternatywa logiczna)
- XOR (alternatywa rozłączna)
- NOT (zaprzeczenie)
Przykładowa tablica prawdy dla operatora OR:
X | Y | X OR Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Operatory bitowe
W tym przypadku operacje wykonywane są na bitach. Oznacza to, że operacja logiczna wykonywana jest dla każdego bitu dwóch liczb. Wynik jest nową liczbą – rezultatem operacji logicznej na bitach.
Przykład:
Żeby zrozumieć zasadę działania operacji na bitach, należy zamienić liczby zapisane w postaci dziesiętnej na liczby w postaci binarnej:
13 = 1101 – reprezentacja liczby 13 w postaci binarnej
10 = 1010 – reprezentacja liczby 10 w postaci binarnej
Każdy bit w liczbie 1101 (13) jest użyty w operacji logicznej z liczbą np.: 1010(10):
1101 AND 1010
Numer bitu w liczbie | Liczba 13 zapisana w systemie dwójkowym | Liczba 10 zapisana w systemie dwójkowym | Wynik |
0 (LSB) | 1 | 1 | 1 |
1 | 1 | 0 | 0 |
2 | 1 | 1 | 1 |
3 (MSB) | 1 | 0 | 0 |
Tabela.1 Operacja logiczna na liczbach
Funkcje operacji na bitach
W sterownikach PLC dostępne są funkcje operujące na bitach, np. ROR, ROL, SHR, SHL. Można je również stosować na typach danych, takich jak BYTE, WORD, DWORD.
Funkcja ROR realizuje obrót bitowy w prawo. Poniżej przykład przesunięcia bitowego dla bajtu. Ostatni bit po prawej w bajcie jest przepisywany do pierwszej bitu w bajcie po lewej. Reszta bitów w bajcie jest przysuwana w prawo.
A teraz inny przykład. Wykorzystując tutaj funkcję ROR, przesuwamy dwa bity. Używając funkcji ROR dla zmiennej typu BYTE oraz WORD dostajemy różne wyniki, chociaż wartości wpisane do zmiennej mają tę samą wartość. Jest to spowodowane tym, że BYTE i WORD różnią się liczbą bitów.
Analogicznie działa funkcja ROL z tym, że bity przesuwane są w lewo. Funkcja SHR powoduje przesunięcie bitowe w prawo, ale z lewej strony wpisywane są zera.
Poniższy przykład prezentuje użycie funkcji SHR, gdzie przesuwane są dwa bity. Operacja wykonywana jest dla zmiennej typu BYTE oraz typu WORD. Wyniki operacji są takie same, ponieważ z lewej strony w danej zmiennej wpisywane są zera.
Funkcja SHL działa w analogiczny sposób co funkcja SHR, ale przesuwa bity w lewo i wpisuje zera z prawej strony.
Operatory i instrukcje
Wiesz już, jak porównywać dane i tworzyć proste funkcje logiczne. Teraz nauczysz się, jak wydawać polecenia sterownikowi PLC. Wykorzystaj do tego odpowiednie instrukcje poleceń.
Instrukcje przypisania i porównywanie zmiennych
Mamy kilka instrukcji dostępnych w języku ST. Są one także opisane w standardzie IEC. Fundamentalne są instrukcje przypisania.
Operacja przypisania wygląda w następujący sposób:
1| X :=Y;
Jak kompilator interpretuje instrukcje przypisania?
„Odczytaj wartość Y i zapisz ją pod zmienną X „
Sterownik PLC przypisuje daną wartość do zmiennej. Poniżej jeszcze prostszy przykład:
1| X := 255;
Do zmiennej o nazwie „X” wpisywana jest wartość 255.
Kolejnym bardziej rozbudowanym przykładem jest wykorzystanie dwóch zmiennych oraz operacji arytmetycznej dodawania:
1| Y := X + 45;
Kiedy linia kodu zostanie skomplikowana, to do zmiennej „Y” zostanie wpisana wartość wynikowa z dodawania „X + 45”, czyli 300.
Symbol „ := ” jest nazywany operatorem przypisania. Najczęściej popełnianym błędem jest mylenie operatora przypisania (:=) z operatorem porównania (=). Oba operatory wyglądają prawie tak samo, ale jest między nimi ogromna różnica, co obrazuje poniższy przykład.
1| Y = X
2| Y := X;
Pierwsza linia jest operacją porównania, czytaną przez kompilator w następujący sposób: Jeżeli prawa strona wyrażenia jest równa lewej, to wynik wyrażenia jest równy wartości TRUE. Jeżeli strony nie są sobie równe, to wynik równy jest wartości FALSE.
W drugiej linii kodu mamy z kolei instrukcję przypisania. Operacja przypisania jest akcją wpisania wartości ulokowanej w zmiennej „X” do zmiennej „Y”.
Instrukcję możesz zidentyfikować zawsze po tym, że na końcu znajduję się średnik. Średnik wskazuje kompilatorowi, gdzie znajduję się koniec instrukcji.
W kolejnej części zajmę się instrukcjami warunkowymi, takimi jak IF oraz CASE.
Maciej Kurantowicz, WAGO.PL
Zobacz także:
Kurs programowania w języku ST, cz. 5
Kurs programowania w języku ST, cz. 4
Kurs programowania w języku ST, cz. 2
Kurs programowania w języku ST, cz. 1