Wiemy już, czym charakteryzuje się język ST (Structured Text), na czym polega przepływ programu oraz główne zasady dotyczące składni i dodawania komentarzy. W tej części skupimy się przede wszystkim na zmiennych.

Tworzenie poleceń w języku ST

Język ST składa się  z poleceń. Czym właściwie jest polecenie?

Polecenia funkcjonują także w świecie ludzi. Ty możesz wydawać polecenia, Twój szef czy policjant. W programowaniu PLC jest podobnie. To Ty wydajesz polecenia sterownikowi PLC, jak ma się zachować.

1   // Polecenie to wydanie rozkazu sterownikowi w jaki sposób PLC ma się zachować

Wykonam przykładowe polecenie jako przykład:

1  xPrzycisk := TRUE;

W powyższym poleceniu mówisz sterownikowi, że ma przypisać stan wysoki zmiennej „xPrzycisk”.

Kompilator zinterpretuje tą linię kodu jako jedno polecenie, ponieważ kiedy osiągnie średnik, to wie, że jest to koniec polecenia. Pamiętaj, polecenia są oddzielane średnikami. Jest to główna zasada składni języka ST.

Używanie zmiennych w języku ST

Zmienne są definiowane między dwoma wyrazami VAR oraz END_VAR. Są to zarezerwowane słowa kluczowe. To znaczy, że nie możesz ich używać w żadnym innym miejscu w programie.

Jeżeli znasz inne języki programowania, to na pewno już miałeś szansę spotkać z pojęciem zmiennych.

1   // Zmienna to miejsce gdzie możesz przechowywać dane

Zmienna zawsze przyjmuje określony typ danych. Przykładem jest zmienna typu BOOL, gdzie możesz przechowywać wartość TRUE lub FALSE (tylko dwa stany).

Zmienna zawsze ma przypisany odpowiedni typ danych i przechowuje wartość  określonego typu danych. Programista może nadawać nazwy deklarowanym zmiennym.

Używając  środowiska programistycznego WAGO-I/O-PRO lub e!COCKPIT  deklarujemy zmienne na dwa sposoby. Można wykonać  operacje deklaracji zmiennych poprzez wywołanie okna deklaracji lub wpisanie „ręcznie” w polu deklaracji zmiennych.

Rys.1 Okno deklaracji zmiennych
Rys.1 Okno deklaracji zmiennych

Dodatkowo rozróżnia się podział zmiennych na zmienne globalne oraz zmienne lokalne.

1   // Zmienna lokalna – zdefiniowana i widoczna tylko w określonym bloku programu

1   // Zmienna globalna – widoczna we wszystkich miejscach w programie

Typy zmiennych używane w języku ST

Międzynarodowa norma IEC 61131-3 opisująca graficzne i tekstowe języki programowania dla sterowników PLC standaryzuje także typy danych na dwie kategorie: elementarne typy danych oraz pochodne typy danych.

Elementarne typy danych:

  • Integer
  • Float
  • Time
  • String

Pod każdym typem elementarnym definiuje się ich podtypy. I tak:

Dla zmiennych typu integer

Typ danych Dolny zakres Górny zakres Informacja Prefiks
SINT -128 127 8 bitów si
USINT 0 255 8 bitów usi
INT -32768 32767 16 bitów I
UINT 0 65535 16 bitów ui
DINT -2 147 483 648 2 147 483 647 32 bity di
UDINT 0 4 294 967 295 32 bity udi
LINT -2^63 2^63-1 64 bity li
ULINT 0 2^64-1 64 bity uli

Dla zmiennych typu float

Typ danych Dolny zakres Górny zakres Informacja Prefiks
REAL 1.175494351e-38 3.402823466e+38 32 bity r
LREAL 64 bity Lr

Dla zmiennych time

Typ danych Dolny zakres Górny zakres Informacja Prefiks
TIME t#0ms t#49d17h2m47s295ms 32 bity tim
TIME_OF_DAY tod#00:00:00 tod#23:59:59.999 32 bity tod
DATE_AND_TIME dt#1970-00-00-00:00:00 Dt#2106-02-06-06:28:15 32 bity dt
DATE D#1970-00-00 D#2106-02-06 32 bity date

Dla zmiennych string

Typ danych Dolny zakres Górny zakres Informacja Prefiks
STRING ‘’ ‘ciąg znaków’ s

Dla zmiennych bit string

Typ danych Dolny zakres Górny zakres Informacja Prefiks
BOOL FALSE TRUE 1 bit x
BYTE 0 255 8 bitów b
WORD 0 65535 16 bitów w
DWORD 0 4 294 967 295 32 bity dw
LWORD 0 2^64 64 bity lw

Kilka ważnych uwag o zmiennych

  1. Dodawaj prefiksy przed nazwami zmiennych

Tworząc odpowiednie zmienne pamiętaj, żeby przed nazwą zmiennej stosować odpowiedni prefiks (tabele powyżej) informujący o typie danej zmiennej.

Operacja ta znacznie poprawi czytelność Twojego kodu. Łatwiej będziesz mógł zidentyfikować zmienne określonego typu w programie.

Prefiksy dla zmiennych

Zmienna może być zainicjalizowana pewną wartością. Wartość ta będzie przypisana zawsze po starcie sterownika PLC.

Wartość inicjalizacyjna dla zmiennej

 

Czasami istnieje potrzeba definiowania zmiennych na wcześniej ustalonych adresach sterownika PLC. Można to wykonać w oknie autodeklaracji lub zrobić to w oknie deklaracji zmiennych dodając słowo kluczowe AT.

Definiowanie zmiennych na konkretnych adresach sterownika PLC w wykorzystaniem okna autodeklaracji
Definicja zmiennych na konkretnych adresach z wykorzystaniem słowa kluczowego „AT”

Zmienna mogą być zadeklarowane jako zmienne nieulotne, tj. RETAIN oraz PERSISTENT. Różnice przedstawia tabela poniżej, gdzie:

X = oznacza, ze wartość zmiennej zostaje zachowana w pamięci nieulotnej

= oznacza, że wartość zmiennej zostaje kasowana, inicjalizowana od nowa

Zmienne typu REATAIN oraz PERSISTENT

Wartości w zmiennych mogą być na bieżąco zmieniane podczas działania programu PLC. Do stałej wpisywana jest odpowiednia wartość przy deklaracji. Wartości stałej nie można zmieniać.

Przykład deklaracji stałej

Różnica między zmienną a stałą
Deklaracja stałej

Pochodne typy danych:

  • Typ strukturalny (struktura danych)

Opisuje złożone struktury danych, w których występują dane różnych typów. Dozwolone są struktury zagnieżdżone. Zmienne nie mogą być wstawiane w adresy sterownika. Prefiks przed każdą strukturą to typ lub ut.

Jeżeli zdefiniujemy strukturę, to w łatwy sposób można się do niej odwołać w programie głównym. Wystarczy stworzyć nazwę zmiennej i wybrać dla niej wcześniej zdefiniowany przez użytkownika typ strukturalny.
Przykład definicji zmiennej typu strukturalnego z wykorzystaniem okna autodeklaracji.

  • Enumeracja (typ wyliczeniowy)

Uporządkowany i skończony zbiór wartości oznaczonych dowolnie przez programistę. Zmienna może przyjmować tylko wartości określone w deklaracji typu (umieszczone w nawiasach). Elementy występujące w nawiasach są wprowadzane jako nazwy (stałe tekstowe), które są kodowane jako wartości całkowite. Jeśli wartości enumeracji nie są zainicjalizowane, liczenie rozpoczyna się od 0.

Przykład enumeracji, która może być wykorzystywana do przygotowania programu sterowania sygnalizacją świetlną.

Dobrym przykładem jest także enumeracja wykorzystywana w bibliotece Modb_I05.lib (przeznaczona do konfiguracji protokołu MODBUS). Enumeracja dostarcza kod błędu w zrozumiałej dla użytkownika tekstowej wiadomości.

  • Typ okrojony

Typ danych, którego zakres wartości obejmuje tylko podzbiór typów podstawowych. Zmienna typu okrojonego może przyjmować tylko wartości z zakresu zadeklarowanego w nawiasach.

  • Tablice danych

Tablica składa się z ustalonej liczby elementów tego samego typu. Dostęp do elementu tablicy uzyskuje się przez podanie indeksu. W nawiasach kwadratowych deklaruje się zakresy zmian tych indeksów, definiując jednocześnie w ten sposób rozmiar tablicy. Wskutek zagnieżdżenia tablic (ARRAY[0..2] OF ARRAY[0..3] OF …) może powstać maksymalnie 9 wymiarów. Stosowany prefiks to arr lub a (CODESYS 2.3).

Pochodne typy danych tworzone są przez dowolnie przez programistę. Wszystkie pochodne typy danych budowane są przy pomocy słów kluczowych TYPE oraz END_TYPE z wyjątkiem tablic. Pomiędzy tymi słowami kluczowymi umieszczamy określone zmienne. Tablice definiujemy w blokach programów lub jako zmienne globalne.

Powinieneś zapamiętać kilka typów zmiennych, żeby zacząć programować w języku ST. Wraz z poziomem zaawansowania programisty i budowaniem coraz bardziej skomplikowanych programów nauczysz się, jak poprawnie i w jakiej sytuacji używać pochodnych typów danych. Ważne, żeby nie próbować zgłębić całej wiedzy natychmiast. Najpierw trzeba opanować podstawy.

Jak wpisać wartość do zmiennej? Jak używać zmiennych w programie? Służą do tego instrukcje oraz operatory.

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. 3
Kurs programowania w języku ST, cz. 1

Dodaj komentarz

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

Zobacz również

Standard CC-Link

CC-Link  (Control&Communication) jest otwartym przemysłowym standardem komunikacyjnym stworzonym