Strona główna ASTOR
Automatyka w praktyce

Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia
Kurs programowania w Codesys odc. 4

Kontakt w sprawie artykułu: Rafał Pilch - 2021-02-15

Z tego artykułu dowiesz się:

  • jakie typy zmiennych obsługuje Codesys,
  • jak je definiować,
  • czym są zmienne lokalne i globalne.

Witaj w kolejnym, czwartym już odcinku kursu Codesys od podstaw. Tym razem skupimy się nieco bardziej na teorii niż praktyce, ponieważ przedstawimy Ci typy zmiennych, jakie możesz wykorzystywać w Codesysie, a także jak je definiować i z nich korzystać.

Zabierzmy się w takim razie do pracy!

Kurs programowania w Codesys

Część I – Podstawowe funkcjonalności środowiska Codesys

1. Pierwsze kroki w Codesys. Jak stworzyć program?
2. Pierwsze podłączenie i przygotowanie Codesys do pracy ze sterownikiem PLC.
3. Język drabinkowy (LD).
4. Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia.
5. Język schematów blokowych (FBD).
6. Tworzenie podstawowej wizualizacji HMI.
7. Język strukturalny (ST).
8. Diagnostyka w Codesys – jak sprawdzać działanie oprogramowania i sterownika?
9. Język bloków funkcyjnych (CFC).
10. Funkcja, blok funkcyjny, program – zmodyfikuj program w Codesys dla lepszej funkcjonalności.

Część II – Zaawansowane funkcje i możliwości środowiska Codesys

11. Komunikacja MQTT – jak skonfigurować w Codesys?
12. Komunikacja EtherCAT – konfiguracja i przykładowa aplikacja.
13. Softmotion – synchronizacja serwonapędów przy pomocy sterownika PLC.
14. Komunikacja Modbus RTU i TCP/IP w środowisku Codesys.
15. Tworzenie projektów w Codesys ze sterownikami bezpieczeństwa Safety: architektura systemu bezpieczeństwa.
16. Programowanie sterownika bezpieczeństwa w Codesys.
17. Integracja sterownika PLC z systemem SCADA w Codesys.
18. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC – obsługa G-Code.

Dodatkowe materiały i lekcje dla kursantów:

1. Jak stworzyć wirtualny serwonapęd w Codesys? Instrukcja krok po kroku.
2. Przykładowa aplikacja Codesys w języku ST i LD: napełnianie i opróżnianie zbiorników wraz z alarmowaniem.

Najczęściej zadawane pytania:

Sprawdź odpowiedzi na najczęściej zadawane pytania dotyczące środowiska Codesys.

Po co definiować typ zmiennej?

Zacznijmy od fundamentalnego pytania – po co w ogóle definiować typ zmiennej? Przecież jest to najczęściej po prostu liczba, którą wpisujemy w pamięć sterownika. Pytanie może wydawać się błahe, jednak odpowiedź na nie niesie ze sobą sporo wiedzy.

Sterownik PLC Astraada One realizujący program sterowania serwonapędami, źródło: ASTOR

Jak zapewne wiesz, sterownik PLC zapamiętuje dane w formie binarnej, a więc przy pomocy 0 i 1. Jedna taka 1 czy 0 to jeden bit. Pamięć może być dzielona na konkretne fragmenty: 1-bitowe, 8-bitowe, 16-bitowe, 32-bitowe, a nawet 64-bitowe. Wszystko zależy od możliwości sterownika, a także właśnie od definicji zmiennej.

Załóżmy, że wprowadzamy do pamięci kontrolera liczbę 65. Sterownik widzi tą liczbę jako 8-bitowe słowo: 0100 0001 – jest to zapis liczby w języku binarnym. W związku z tym jak kontroler ma je odczytać? Tutaj właśnie pojawia się sens definicji zmiennych – bowiem jeżeli zdefiniujemy, że to słowo, to:

  • zmienna liczbowa decymalna – to wtedy sterownik odczyta szyk 0 i 1 tak, jak wpisaliśmy z klawiatury, a więc: 65,
  • stan I/O, czyli zmienna logiczna – kontroler wystawi w stan wysoki wejście, bądź wyjście 1 oraz 7,
  • zmienna liczbowa heksadecymalna – sterownik odczyta jako 41,
  • zmienna tekstowa STRING – wtedy kontroler zdefiniuje wprowadzone dane jako literę A.

Oczywiście przykładów tutaj może być tyle, co rodzajów zmiennych, ale sens już powinien się wyklarować. Wprowadzenie danej to dopiero połowa sukcesu – konieczne jest pokazanie sterownikowi, jak ma odczytać podane informacje. Liczba 65, czy też słowo bitowe 0100 0001 może mieć wiele postaci. To od nas zależy, która konkretnie jest nam potrzebna.

Rodzaje i typy zmiennych

Rodzajów i typów zmiennych jest bardzo dużo. W związku z tym bardzo dobrą praktyką jest odpowiednie ich wykorzystywanie. Upraszcza to program i upłynnia jego działanie, ponieważ chronimy tym samym sterownik przed zbędnym zaśmiecaniem pamięci. Podstawowe rodzaje zmiennych są określone przez normę IEC 61131-3.

Według tej normy każdy sterownik PLC, a co za tym idzie, każde oprogramowanie musi obsługiwać zmienne:

  • logiczne, a więc prawda/fałsz, czy też 1/0,
  • liczbowe całkowite jak i zmiennoprzecinkowe,
  • tekstowe,
  • czasu.

Jak to wygląda w Codesys? Omówmy wszystko po kolei.

Zmienne całkowite

Zmienne całkowite, czyli po angielsku Integer, można rozbić na dwie grupy: binarne i liczbowe. W grupie binarnych znajdują się typy, które odczytują dane jako ciąg 0 i 1.  Może to być najbardziej popularny BOOL o wielkości 1 bita, lub też BYTE wielkości 8 bitów. Pełen spis znajdziesz w tabeli poniżej.

Zmienne logiczne, źródło: Codesys

Powyższe typy to zmienne logiczne, a więc sterownik zawsze odczyta je jako ciąg PRAWDA/FAŁSZ. Dla przykładu, jeśli podasz wartość 2 dla zmiennej typu BYTE, sterownik odczyta to jako 0000 0010, czyli FAŁSZ/FAŁSZ/FAŁSZ/FAŁSZ FAŁSZ/FAŁSZ/PRAWDA/FAŁSZ  – nie będzie tutaj mowy o żadnej 2.

Kolejną grupą są zmienne liczbowe. Wykorzystuje się je do obliczeń matematycznych lub też po prostu do pracy na konkretnych liczbach całkowitych lub zmiennoprzecinkowych. Tak więc jeżeli chcesz zdefiniować konkretną liczbę np. 59 w celu dalszych obliczeń, albo nawet zwykłego jej wyświetlenia – musisz skorzystać z tej grupy zmiennych.

Zmienne te różnią się od siebie przede wszystkim rozmiarem. Jest to kluczowe dla poprawnego działania programu, o którym wspominane było we wstępie do podrozdziału. Przykładowo, gdy mamy do zdefiniowania liczbę 13, najlepiej użyć najmniejszego typu, a więc SINT, dzięki temu zajmiemy w pamięci zaledwie 8 bitów – 0000 1101. Definiując taką liczbę jako LINT, zajmiemy aż 64 bity, z czego zdecydowana większość bitów będzie po prostu wynosiła 0 – 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1101. Spowolni to odczyt liczby i zajmie niepotrzebne miejsce w pamięci. Pełną tabelę znajdziesz poniżej.

Zmienne liczbowe, źródło: Codesys

Zmienne tekstowe

Jak zaprezentować tekst przy pomocy liczb? Do tego służą specjalne zmienne tekstowe. Każdy znak alfabetu posiada swój unikalny kod binarny, tak więc należy tylko dać informacje sterownikowi, które bity musi odczytać jako właśnie tekst.

W środowisku Codesys wyróżniamy dwa typy zmiennych tekstowych STRING oraz WSTRING. Zmienna typu STRING służy do zapisywania klasycznego tekstu pisanego. Mowa tutaj o literach alfabetu i niektórych znakach specjalnych – wszystko to jest zawarte w ustandaryzowanej tabeli ASCII. Zmienna STRING zajmuje w pamięci 8 bitów.

Drugi typ, a więc WSTRING, służy do zapisywania znaków w nowoczesnym, bardziej zaawansowanym standardzie UNICODE. Dostarcza on znacznie więcej możliwości od klasycznej tabeli ASCII – zmienna zajmuje 16 bitów w pamięci.

Zmienne czasu

Ostatnim rodzajem zmiennych dostępnych w Codesys, są zmienne czasu. Dzięki nim sterownik jest w stanie śledzić upływ czasu w jednostkach, w których robimy to na co dzień, a więc sekundach, minutach, godzinach, a nawet dniach czy latach. Poniżej tabela z tymi właśnie zmiennymi. Zmienne te wykorzystuje się najczęściej w timerach odmierzających czas, lub też w zegarach do wizualizacji.

Zmienne czasu, źródło: Codesys

Tworzenie zmiennych

W ostatnich odcinkach zapewne poznałeś/poznałaś podstawy odnośnie tworzenia zmiennych. Dzisiaj rozwiniemy nieco ten temat, dzięki czemu będziesz mógł/mogła tworzyć je tak, jak będzie Ci wygodniej.

Zmienną można stworzyć na trzy sposoby. Przede wszystkim, poprzez podanie jej nazwy podczas tworzenia kodu programu. Wyświetli się wtedy kreator zmiennej, który zaproponuje już odpowiedni jej typ. Twoim zadaniem jest wtedy jedynie podać nazwę i wartość początkową. Zmienna pojawi się automatycznie w oknie zdefiniowanych zmiennych.

Automatyczne definiowanie zmiennych w Codesys, źródło: ASTOR

Kolejne dwa sposoby opierają się o ręczne konfigurowanie zmiennej. Codesys umożliwia tutaj skorzystanie z tabeli do tworzenia zmiennych, bądź wykorzystania pola tekstowego. Wybór znajduje się w prawym górnym rogu okna zmiennych programu.

Zmiana wyglądu okna zmiennych w Codesys, źródło: ASTOR

W widoku tabelowym dodanie zmiennej jest bardzo proste. Wybierasz opcję Insert, znajdującą się w lewym górnym rogu okna lub klikając prawym przyciskiem myszy w oknie. Następnie wystarczy uzupełnić dane w kolumnach.

Kolumna Scope uzupełni się automatycznie. Scope określa dodatkowy charakter zmiennej: czy jest ona tymczasowa, globalna itd.powiemy o tym nieco więcej przy zmiennych globalnych.

Wartość VAR w kolumnie Scope informuje o standardowej zmiennej. Kolumna Address uzupełni się automatycznie, gdy zmapujesz zmienną z rejestrem w pamięci, czego nauczyłeś/aś się w poprzednim odcinku.

Data type pozwala zdefiniować typ zmiennej. Klikając dwukrotnie w wiersz w tej kolumnie, odblokujesz listę do rozwinięcia, z której możesz wybrać interesujący Cię typ zmiennej.

W Initialization możesz zadać wartość początkową, a w Comment zawrzeć komentarz. Kolumna Attributes przeznaczona jest dla zaawansowanej funkcjonalności atrybutów, więc w chwili obecnej możesz pozostawiać ją pustą.

Definiowanie zmiennej przy pomocy tabeli w Codesys, źródło: ASTOR

Przejdźmy teraz do formy tekstowej. Przełącz na widok tekstowy. Dotychczas zdefiniowane zmienne już tam będą zawarte, dzięki czemu możesz już wywnioskować, w jaki sposób definiuje się tu zmienne: <nazwa_zmiennej>: <typ_zmiennej> := <wartość początkowa>; //komentarz do zmiennej.

Dodatkowo w widoku tekstowym masz możliwość ograniczenia wartości zmiennej. Jeżeli zajdzie taka potrzeba, możesz zdefiniować górną i dolną granicę wartości, przez co przy jej przekroczeniu Codesys zgłosi błąd wartości. Taką zmienną definiuje się w taki sposób:
<nazwa_zmiennej> : <typ_zmiennej> (<gorna_granica>..<dolna_granica>);

W takim razie zdefiniujmy dwie dodatkowe zmienne. Zmienna3, która będzie SINT, oraz Zmienna 4, która będzie SINT z ograniczeniem do 3.

Definiowanie zmiennych przy pomocy widoku tekstowego w Codesys, źródło: ASTOR

Który widok jest najlepszy? To zależy. Jeżeli potrzebujesz stworzyć dużo zmiennych o podobnych nazwach i tym samym typie, najlepiej skorzystać z widoku tekstowego i przeprowadzić akcję kopiuj-wklej. Widok tabeli jest dużo prostszy w obsłudze, ale przy tworzeniu większej ilości zmiennych zajmie zdecydowanie więcej czasu.

Zmienne globalne

Tworząc zmienne w sposób opisany powyżej, tworzymy je lokalnie. Znaczy to tyle, że mogą być wykorzystywane tylko i wyłącznie w obrębie jednego bloku PLC_PRG. Co jednak w przypadku, gdy chcesz używać tych samych zmiennych w różnych blokach programu? W tym przypadku trzeba skorzystać ze zmiennych globalnych.

Zmienne globalne nie są uwzględnione w standardowym drzewie projektu, dlatego pierwszym krokiem będzie dodanie ich do projektu.

Kliknij prawym przyciskiem myszy na segment Application w drzewie projektu, następnie wybierz  Add Object i Global Variable List. Nazwij listę Zmienne_Globalne.

Dodanie listy zmiennych globalnych do projektu Codesys, źródło: ASTOR

Wyświetli Ci się okno zmiennych, które działa analogicznie, jak okno zmiennych omawiane wcześniej. Wybierając opcję Insert dodaj zmienną Zmienna5 typu BOOL z komentarzem Zmienna globalna. Zauważ, że w kolumnie Scope ustawiona została z automatu wartość VAR _GLOBAL świadcząca o tym, że jest to zmienna globalna.

Definiowanie zmiennej globalnej, źródło: ASTOR

Teraz możesz użyć tej zmiennej w dowolnym bloku programu. Przejdź do sekcji PLC_PRG w drzewku projektu, przeciągnij styk Contact w pole robocze i skorzystaj z menu wyboru zmiennej. Rozwijając segment Application, znajdziesz zmienną globalną Zmienna5.

Dodawanie zmiennej globalnej do programu w Codesys, źródło: ASTOR

Zauważ, że dodana zmienna zawiera w nazwie również listę, z której została zaciągnięta. Mieszanie zmiennych pomiędzy programami zawsze będzie skutkować tym, że w nazwie zmiennej pojawi się źródło, z którego pochodzi – tak, aby łatwiej było ją zlokalizować w systemie.

W tym odcinku to już wszystko. Na przestrzeni ostatnich odcinków poznałeś/aś niezbędne informacje do podstawowej pracy w środowisku. W kolejnych odcinkach przedstawimy dodatkowe funkcjonalności, które mogą ułatwić Ci pracę w Codesys. W najbliższej odsłonie poznasz język schematów blokowych FBD – do zobaczenia!

Czy ten artykuł był dla Ciebie przydatny?

Średnia ocena artykułu: 4.6 / 5. Ilość ocen: 15

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *