Język strukturalny (ST) | Kurs programowania w Codesys odc. 7

Z tego artykułu dowiesz się:

  • czym jest język strukturalny ST,
  • jak tworzy się programy z wykorzystanie ST w Codesys,
  • jaką składnie posiada ST,
  • jakie są najważniejsze jego funkcje i jak je stosować.

Witamy w kolejnej części naszego kursu programowania w Codesys. Ostatnio poznałeś/aś podstawy tworzenia wizualizacji. W tym odcinku wracamy do programowania. Poznasz kolejny język dostępny w środowisku Codesys – język strukturalny, w skrócie ST od ang. Structured Text. Jest on odpowiedni dla użytkowników, którzy wolą tworzyć program przy pomocy tekstu, niż przeciągnięć graficznych elementów. Język ST to język pisemny, przypominający wyglądem i składnią takie języki programowania jak C lub Python. Chcesz dowiedzieć się więcej? Zapraszamy na kolejny odcinek kursu!

Kurs programowania w Codesys

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

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

  • 11. Komunikacja EtherCAT – konfiguracja i przykładowa aplikacja | Kurs programowania w Codesys odc. 11
  • 12. Softmotion – synchronizacja serwonapędów przy pomocy sterownika PLC| Kurs programowania w Codesys odc. 12
  • 13. Komunikacja Modbus RTU i TCP/IP – jak skonfigurować najpopularniejszy protokół komunikacyjny w Codesys? | Kurs programowania w Codesys odc. 13
  • 14. Tworzenie projektów w Codesys ze sterownikami bezpieczeństwa Safety | Kurs programowania w Codesys odc. 14
  • 15. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC – obsługa G-Code | Kurs programowania w Codesys odc. 15
  • 16. Integracja sterownika PLC z systemem SCADA w Codesys| Kurs programowania w Codesys odc. 16
  • 17. Połączenie i skomunikowanie sterownika PLC z robotem Kawasaki w Codesys| Kurs programowania w Codesys odc. 17
  • Dodatkowe materiały i lekcje dla kursantów:

  • 1. Jak stworzyć wirtualny serwonapęd w Codesys? Instrukcja krok po kroku.
  • Czym jest i jak działa język ST?

    Język Structured Text, podobnie jak język drabinkowy, jest zdefiniowany w międzynarodowej normie IEC 61131-3. Wprawdzie Ladder Diagram wciąż pozostaje najczęściej używanym językiem programowania sterowników PLC, jednak język ST plasuje się w notowaniu tuż za nim.

    Jak już wspomniałem, język ST przypomina języki C, Pascal lub Python. Dlatego większość programistów, którzy posiadają choćby minimalne doświadczenie z tymi językami, korzysta też z języka strukturalnego. Podobieństwa polegają główne na sposobie pisania programu oraz deklaracji zmiennych, używanych do jego wykonania. Ponieważ język strukturalny jest językiem pisemnym, program będziesz w całości zapisywać za pomocą klawiatury i praktycznie nie spotkasz w nim elementów graficznych.

    Język strukturalny czy drabinkowy? Który wybrać?

    Każda funkcja, którą poznałeś/aś w odcinku 3 o języku drabinkowym, jest również dostępna w języku ST. Mówimy tu o funkcjach logicznych (takich jak AND, OR, XOR), operacjach matematycznych (dodawanie, odejmowanie itd.), a także o blokach funkcyjnych (jak np. zegary i liczniki). W przypadku obu języków, napisany w nich program będzie wykonywał się na takiej samej zasadzie. Pozwoli Ci to w łatwy sposób łączyć ze sobą różne funkcje, a nawet całe bloki funkcyjne, bez ryzyka pojawienia się błędów, co jest niezwykle przydatne przy tworzeniu zaawansowanych projektów.

    To główne podobieństwa języka strukturalnego i języka drabinkowego. Jednak trzeba wspomnieć o znaczącej różnicy między nimi.

    Język ST jest bardziej zaawansowany pod względem możliwości. Co to konkretnie oznacza? Otóż język ten wykorzystuje się w głównej mierze do tworzenia zaawansowanych projektów, ponieważ zapewnia więcej funkcji, które można wykorzystać podczas programowania. Pozwala to na wykonywanie przez sterownik bardziej skomplikowanych operacji, które potrzebują dużej mocy obliczeniowej. Natomiast język LD, ze względu na swoją strukturę i mniejszą dostępność funkcji, jest używany do prostszych projektów. Podczas poznawania składni oraz dostępnych funkcji języka ST przekonasz się, dlaczego istnieje taka zależność.

    Język strukturalny warto stosować gdy:

    • Tworzysz zaawansowany projekt – przy zaawansowanych programach pisemny język programowania jest łatwiejszy do zrozumienia.
    • Projekt ma być ogólnodostępny – ze względu na małe różnice w sposobie pisania, program zapisany w języku ST można łatwo przekonwertować do innego środowiska.
    • Projektujesz algorytmy i obliczenia matematyczne – język ST posiada najprostszą strukturę obliczeń matematycznych, co ułatwia pisanie algorytmów.
    • Stosujesz dużą ilość pętli – pętle w języku drabinkowym są problematyczne do zaprojektowania, więc przy ich dużej ilości zaleca się stosowanie języka ST.

    Jak stworzyć projekt w języku ST w Codesys?

    Przejdźmy więc do Codesys! Tak samo jak w przypadku języka drabinkowego, poznasz możliwości działania oprogramowania Codesys wraz z językiem ST oraz zrealizujesz przykłady w symulatorze. Zapewne wiesz już jak utworzyć nowy program. Jeżeli jednak przegapiłeś/aś wcześniejsze odcinki, zapoznaj się z podstawami przedstawionymi w odcinku 1.

    Przy tworzeniu nowego projektu, musisz zmienić język programowania na Structured Text (ST).

    Zmiana języka na ST, źródło: ASTOR

    Aby zacząć pracę nad programem, otwórz segment o nazwie PLC_PRG. Znajdziesz go w drzewku głównym, domyślnie znajdującym się po lewej stronie ekranu.

    Otwarcie PLC_PRG z drzewka głównego programu Codesys, źródło: ASTOR

    Jak widzisz program wygląda prawie identycznie, jak w przypadku programowania w języku drabinkowym. Możesz jednak zauważyć, że ToolBox, który już poznałeś/aś w odcinku 3 jest pusty. (Jeżeli nie widzisz takiego okienka, kliknij w prawym górnym rogu w głównym menu opcję View, a następnie wybierz ToolBox.) Dlaczego okno ToolBox jest puste? Niestety, przy projektowaniu za pomocą języka strukturalnego, Codesys nie posiada „szablonów”, takich jak przy stosowaniu języka drabinkowego. Jedynym sposobem na dodanie wybranej struktury jest jej własnoręczne wpisanie za pomocą klawiatury.

    Jak zapisać algorytm w języku ST? Składnia kodu

    Na początek musisz się zaznajomić ze składnią języka ST. Zaczniemy od trzech podstawowych zasad:

    • deklaracja zmiennych i komendy poleceń muszą być zakończone średnikiem;
    • kompilator nie widzi różnicy między małymi i dużymi literami, więc można ich używać dowolnie;
    • odstępy nie spełniają żadnej funkcji, służą tylko do poprawy kodu.

    A teraz typy danych. W normie IEC 61131-3 zawarta jest informacja o dwóch typach danych: elementarnych oraz pochodnych.

    Elementarne typy danych to:

    • Integer – przechowuje wartości liczbowe. Przykładowe pochodne to: int, uint, sint.
    • Float – przechowuje zwykle duże wartości liczbowe. Pochodne to Real i Lreal
    • Time – przechowuje wartości czasu. Przykładowe pochodne to: Time, Date.
    • String – przechowuje ciąg znaków lub wartości bitowe. Przykładowe pochodne to: Bool, String, Byte, Word.

    Znasz już podstawowe zasady i zmienne, przejdźmy więc do operatorów. Operatorem nazywamy konstrukcję jedno bądź wieloargumentową, zwracającą wartość.

    Argument to nic innego, jak wartość lub jedna z danych, przekazana do parametru funkcji. Wieloargumentowa konstrukcja to taka, która korzysta z więcej niż jednego argumentu, aby wykonać operację.

    W języku ST możemy uwzględnić:

    • operatory arytmetyczne,
    • operatory porównania,
    • operatory operacji logicznych,
    • operatory operacji bitowych,
    • operatory przypisania.

    O wszystkich rodzajach operatorów dowiesz się z dalszej części tego odcinka.

    Funkcja to wydzielona część programu, wykonująca określone operacje, możliwa do wykonania podczas wykonywania programu. Funkcje stosuje się, aby uprościć program główny i zwiększyć czytelność kodu. Funkcje to np.: zegary oraz liczniki.

    W funkcjach najczęściej używamy zmiennych. Zmienna to konstrukcja, dzięki której możemy przechowywać różnego rodzaju dane. Każdej zmiennej nadajemy nazwę. Używamy jej później, kiedy odwołujemy się do miejsca w pamięci, gdzie schowane są dane, które chcemy wykorzystać. Każda zmienna otrzymuje inny typ danych do przechowywania.

    Dodawanie komentarzy i deklarowanie zmiennych w języku ST

    W języku ST istnieje możliwość dodawania komentarzy do kodu programu. Możesz dzięki nim zapisać pewne objaśnienia lub wskazówki odnoszące się do linijki kodu lub nawet do całej jego sekcji. Poniżej zobaczysz 3 sposoby tworzenia komentarzy.

    Sposoby tworzenia komentarzy w środowisku Codesys, źródło: ASTOR

    Deklaracja zmiennych

    Deklaracje zmiennej możesz wykonać ręcznie lub poprzez poznaną już przez Ciebie podczas kursu funkcję Auto Declare (naciśnięcie klawiszy SHIFT i F2). Tym razem jednak nie będziesz korzystać z tego narzędzia, a zadeklarujesz zmienną ręcznie.

    Deklarowanie w języku strukturalnym jest identyczne jak w języku drabinkowym. Nadanie typu zmiennej odbywa się poprzez dopisanie dwukropka „:” pomiędzy nazwę a typ zmiennej.

    Deklaracja zmiennej lokalnej w języku ST, źródło: ASTOR

    Utworzyłeś właśnie pierwszą zmienną lokalną. Możesz dodać jej domyślną wartość, którą przyjmie zaraz po rozpoczęciu programu. Robimy to następująco:

    Nadanie zmiennej domyślnej wartości, źródło: ASTOR

    Tym sposobem możesz nadać wartość domyślną każdemu typowi zmiennej.

    W przypadku używania dużych ilości zmiennych, zaleca się używanie prefiksów w ich nazwach. Ułatwia to identyfikację typu zmiennej, a także poprawia czytelność kodu.

    Przykładowe użycie prefiksów w nazwach zmiennych, źródło: ASTOR

    Operatory przypisania, porównania i arytmetyczne

    Instrukcja przypisania jest fundamentalną instrukcją zawartą w normie IEC. Zapisuje się ją następująco

    X:=Y;

    Kompilator odczytuje tę instrukcję w znaczeniu: „Odczytaj wartość Y i zapisz ją pod zmienną X”.

    Do instrukcji przypisania możesz dołączyć np. operacje matematyczne.

    X:=Y+50;

    Wtedy zmienna X otrzyma wartość Y, zwiększoną o 50.

    Operatorem przypisania jest symbol „:=”. Oznacza on przypisanie wartości Y oraz przypisanie jej zmiennej X. Częstym błędem jest mylenie tego symbolu z symbolem operatora porównania „=”.

    Użycie operatora porównania w przypadku takim jak powyżej, dokona operacji porównania i zwróci nam wartość Prawda lub Fałsz.

    X=Y

    Jak możesz zauważyć, powyższa linijka kodu nie jest zakończona średnikiem. Nie jest ona instrukcją, a operacją, dlatego dodanie średnika na końcu linijki kodu jest błędem.

    Operatorami porównania są:

    • = (równa się),
    • < (mniejsze od),
    • <= (mniejsze od bądź równe),
    • > (większe niż),
    • >= (większe od bądź równe),
    • <> (nierówne).

    Przejdziemy teraz do operatorów logicznych. Służą one do wykonywania operacji logicznych, w których jako rezultat otrzymujemy wartości typu BOOL, czyli Prawda/Fałsz.

    Operatory logiczne dostępne w języku ST:

    • AND (suma logiczna),
    • OR (alternatywa logiczna),
    • XOR (alternatywa rozłączna),
    • NOT (zaprzeczenie).

    Przykładowe użycie operatora logicznego wygląda następująco:

    X AND Y

    Jeżeli obie wartości X i Y to Prawda, operacja zwróci wartość Prawda. Jeśli jedna lub obie wartości to Fałsz, operacja zwróci wartość Fałsz.

    Ostatnim rodzajem operatorów, są operatory arytmetyczne. Dzięki nim możesz dokonywać odpowiednich operacji matematycznych.

    Operatory matematyczne wyglądają następująco:

    • + (dodawanie),
    • – (odejmowanie),
    • * (mnożenie),
    • ** (potęgowanie),
    • % (dzielenie modulo).

    Przykładowe użycie operatora matematycznego:

    wWynik:= X+Y;

    Pod zmienną wWynik zapisze się wynik dodawania wartości X i Y.

    Operacje bitowe

    Operacje bitowe możesz wykonywać dzięki operatorom logicznym oraz funkcjom. Operacja logiczna jest wykonywana na każdym bicie wartości. Przykładowo:

    wWynik:= 14 AND 9;

    W zmiennej wWynik zapiszemy wynik operacji logicznej na 4 bitach, wykorzystując bity wartości zawarte w operacji. Wartości w postaci binarnej wyglądają następująco:

    14 = 1110

    9 =  1001

    Aplikując funkcję logiczną AND między bitami obu liczb, otrzymasz wynik równy 1000. Wartość binarna wyniku odpowiada liczbie 8. Sterowniki PLC posiadają także możliwość wykorzystania funkcji operujących na bitach. Dzięki nim można zmieniać wartości zmiennych typu BYTE, WORD oraz DWORD.

    Funkcje bitowe to:

    • ROR (obrót bitowy w prawo),
    • ROL (obrót bitowy w lewo),
    • SHR (przesunięcie bitowe w prawo),
    • SHL (przesunięcie bitowe w lewo).

    Obrót bitowy polega na zmianie kolejności bitów w bajcie. Na zdjęciu poniżej możesz zobaczyć schemat przedstawiający funkcję ROL. Pierwszy bit z lewej jest przepisywany na miejsce pierwszego bitu z prawej. Pozostałe bity są przepisywane o jedno miejsce w lewo.

    Schemat ukazujący działanie funkcji ROL, źródło: ASTOR

    Taka operacja zapisana w środowisku Codesys wygląda następująco:

    Przykładowe użycie funkcji ROL, źródło: ASTOR

    Wyniki użycia funkcji ROL na dwóch typach danych różnią się, ponieważ typy BYTE i WORD mają różną ilość bitów.

    Analogicznie do funkcji ROL, funkcja ROR przesuwa bity w prawo.

    Funkcja SHL powoduje przesunięcie bitów w lewo, ale z prawej strony wpisywane są zera.

    Schemat ukazujący działanie funkcji SHL, źródło: ASTOR

    Taka operacja zapisana w środowisku Codesys wygląda następująco:

    Przykładowe użycie funkcji SHL, źródło: ASTOR

    Analogicznie do funkcji SHL, funkcja SHR przesuwa bity w prawo.

    Instrukcje warunkowe

    Znasz już podstawowe instrukcje dostępne w Codesys, które możesz zapisać w języku strukturalnym. Czas przejść do pisania bardziej rozwiniętych konstrukcji.

    Instrukcja IF

    Na początek instrukcja warunkowa IF. Jak sama nazwa wskazuje, stawia ona warunek, od którego zależy wykonanie dalszej części programu. Warunek ten ma postać aktualnego stanu zmiennej. Mówiąc kolokwialnie: jeżeli zmienna x jest w stanie wysokim, to zrób to, a jak nie to tamto.

    Przykładowe użycie instrukcji IF, źródło: ASTOR

    Program ukazuje działanie zbiornika z czujnikiem poziomu cieczy. Stan zaworu jest zależny od stanu czujnika, dzięki skonstruowaniu prostej instrukcji warunkowej IF.

    Instrukcja warunkowa IF posiada też możliwość sprawdzenia kilku warunków pod rząd. Załóżmy, że Twój program w przypadku niespełnienia pierwszego warunku, ma przejść do sprawdzenia kolejnego. W takiej sytuacji stosujemy wyrażenie ELSIF, które jest wykorzystywane do przejścia między warunkami.

    Użycie wyrażenia ELSEIF ukazane jest na zdjęciu poniżej:

    Przykładowe użycie instrukcji IF z zastosowaniem wyrażenia ELSIF, źródło: ASTOR

    Zmodyfikowany kod poprzedniego programu obejmuje teraz dwa czujniki. W pierwszej kolejności sprawdzany jest stan dolnego czujnika, a w przypadku nie spełnienia pierwszego warunku, sprawdzany jest drugi warunek.

    Przykładowa składnia dla warunków ELSIF i ELSE:

    IF [warunek] THEN
    <instrukcja>;
    ELSIF [warunek] THEN
                <instrukcja>;
    ELSE
                <instrukcja>;
    END_IF;

    Warto też wspomnieć, że użycie wyrażenia ELSE nie jest obowiązkowe, jeśli program nie musi wykonać żadnej operacji w przypadku nie spełnienia warunku.

    Instrukcja CASE

    Inną instrukcją warunkową jest instrukcja CASE. Czym różni się IF od CASE? Otóż instrukcja IF działa na zasadzie Prawda/Fałsz, czyli polecenie wykona się, jeśli warunek jest prawdziwy. CASE działa na zasadzie numerycznej. Co to oznacza? Instrukcja CASE może przypisać wiele różnych wariantów do poszczególnych wyników wyrażenia zawartego w warunku.

    Przykładowe użycie instrukcji CASE, źródło: ASTOR

    Program wykona daną operację po osiągnięciu wartości odpowiadającej przypadkowi zawartemu w instrukcji. Możesz przypisać te same operacje innym przypadkom, wypisując kolejno wartości przypadku i oddzielając je przecinkiem. Wyrażenie ELSE jest opcjonalne – nie jest wymagane do poprawnej pracy instrukcji.

    Przykładowa składnia dla instrukcji CASE:

    CASE [warunek] OF
                1: <instrukcja>;
                2:<instrukcja>;
    ELSE
                <instrukcja>;
    END_CASE;

    Pętle w języku strukturalnym

    Kolejnym typem instrukcji, które poznasz, są pętle. Wykorzystujemy je wtedy, kiedy chcemy wykonać daną czynność wielokrotnie. W języku ST istnieją trzy typy pętli: FOR, WHILE oraz REPEAT.

    Wszystkie te trzy pętle mają wspólną cechę, jaką jest warunek. W przypadku pętli FOR oraz WHILE, warunek decyduje o zatrzymaniu lub dalszym działaniu pętli, natomiast dla pętli REPEAT, warunek decyduje o tym, kiedy zatrzymać pętlę.

    Pętla FOR

    Pętli FOR możesz użyć, kiedy chcesz powtórzyć pewne operacje określoną ilość razy. W warunku zadeklaruj ilość powtórzeń poprzez określenie wartości początkowej i końcowej zmiennej, użytej do zapisania warunku. Możesz też ustalić wartość, o jaką będzie się zwiększać wartość zawarta w warunku (domyślna wartość inkrementacji wynosi 1).

    Przykładowa składnia pętli FOR:

    FOR iLicznik := wartość_początkowa TO wartość_końcowa BY wartość_inkrementacji DO
                <instrukcja>;
    END_FOR;

    Przykładowy program wykorzystujący pętle FOR wygląda następująco:

    Przykładowe użycie pętli FOR, źródło: ASTOR

    Z wartości zadeklarowanych w programie wynika, że pętla wykona zawartą w niej instrukcję 10 razy.

    Pętla WHILE

    Pętla WHILE działa na podobnej zasadzie jak pętla FOR, czyli warunek decyduje o zatrzymaniu lub dalszej pracy pętli. Pętla WHILE działa tak długo, aż zostanie spełniony warunek, przy czym warunek, w odróżnieniu od pętli FOR, ma charakter logiczny – PRAWDA lub FAŁSZ.

    Przykładowa składnia pętli WHILE:

    WHILE [warunek] DO
    <instrukcja>;
    END_WHILE;

    Przykładowy program wykorzystujący pętlę WHILE wygląda następująco:

    Przykładowe użycie pętli WHILE, źródło: ASTOR

    Pętla WHILE będzie wykonywać zawartą w niej instrukcję, dopóki warunek będzie spełniony.

    Pętla REPEAT

    Ostatnią pętlą jest REPEAT. Wykonuje ona zadane instrukcje, dopóki warunek, który został zadeklarowany, nie zostanie osiągnięty. Podczas gdy w pętlach FOR oraz WHILE warunek jest sprawdzany przed wykonaniem instrukcji, w pętli REPEAT jest on sprawdzany po wykonaniu zawartych w pętli instrukcji. Taka konstrukcja powoduje, że pętla REPEAT zawsze wykona się przynajmniej raz. Warunek, tak jak w przypadku pętli WHILE, osiąga dwie wartości: PRAWDA lub FAŁSZ.

    Przykładowa składnia pętli REPEAT:

    REPAT
    <instrukcja>;
    UNTIL [warunek]
    END_REPEAT;

    Przykładowy program wykorzystujący pętle REPEAT wygląda następująco:

    Przykładowe użycie pętli REPEAT, źródło: ASTOR

    Pętla zakończy działanie, gdy warunek zostanie spełniony, czyli zmienna iWynik osiągnie wartość równą 10.

    Wywołanie funkcji i bloków funkcyjnych

    Zegary oraz liczniki są dostępne w języku ST, jednak pod inną postacią niż w języku LD. W języku drabinkowym, możesz wywołać te funkcje poprzez przeciągnięcie bloku z ToolBoxa, natomiast w języku strukturalnym musisz użyć komendy zapisanej w kodzie programu.

    W kwestii deklaracji i nadania nazwy, postępujemy tak samo jak w języku drabinkowym, czyli możemy to zrobić poprzez funkcję Auto Declare, dostępną w menu, w zakładce Edit. Innym sposobem jest skorzystanie ze skrótu klawiszowego SHIFT+F2, bądź ręczne zadeklarowanie, poprzez wpisanie odpowiednich komend do przestrzeni wartości programu – tak jak zostało to omówione na początku tego odcinka.

    Jak więc wygląda wywołanie zegara lub licznika w języku ST? Możesz to zrobić poprzez specjalne komendy, które wpisujesz do treści programu. Widoczne są one na poniższym zdjęciu:

    Wywołanie bloków funkcyjnych w języku ST, źródło: ASTOR

    Do przedstawienia sposobu wywołania zegarów i liczników użyj zegara TON i licznika zliczającego w górę. Jak zauważysz, deklaracja w przestrzeni wartości jest taka sama, jak w przypadku języka drabinkowego, różnica jest jednak w przestrzeni kodu. Żeby wywołać zegar lub licznik, musisz najpierw wpisać nadaną mu nazwę, otworzyć nawias i przypisać zmienne dla wejść i wyjść bloku funkcyjnego, a następnie zamknąć nawias. Przy otwieraniu nawiasu do wpisania wejść i wyjść bloku, wyświetli się adnotacja ukazująca nazwy wejść i wyjść, do których trzeba przypisać zmienne.

    Wywołanie zegara w języku ST, źródło: ASTOR

    Jak widzisz adnotacja pokazuje, jak nazwane jest wejście lub wyjście, jakiego typu zmienną należy mu przypisać oraz krótki opis jego funkcji. Przypisanie zmiennych odbywa się inaczej dla wejść, a inaczej dla wyjść. W przypadku wejść, przypisujesz wartość zawartą w zmiennej, jednak wyjścia mają przekazywać wartości do przypisanej zmiennej, stąd odmienna symbolika w zapisie przypisania. Symbol „:=” oznacza przypisanie wartości zawartej w zmiennej, a „=>” przypisanie wartości do zmiennej. Wejścia i wyjścia możesz także przypisać w dowolnym miejscu, w obszarze kodu.

    Wywołanie bloków funkcyjnych w języku ST, przypisanie wejść i wyjść, źródło: ASTOR

    Kolejność linijek kodu jest w tym przykładzie nieistotna. Gdy chcesz przydzielić zmienną dla wejść i wyjść poza nawiasem, musisz dokonać odwołania do konkretnego wejścia naszego bloku funkcyjnego – tutaj jest to wyrażenie „zegar.”. Po kropce wpisz nazwę danego wejścia lub wyjścia, do którego chcesz przypisać zmienną. Zwróć uwagę na odmienny sposób przypisania zmiennej do wyjścia bloku. Użycie wcześniej wspomnianej symboliki, w tym przypadku nie jest poprawne, więc żeby przypisać zmienną do wyjścia bloku, należy użyć symbolu „:=” i zmienić kolejność, ponieważ będziesz wtedy przypisywać wartość wyjścia do zmiennej.

    Na dzisiaj to tyle. Poznałeś/aś podstawy języka ST, a także dowiedziałeś/aś się jak stosować jego składnie i najważniejsze funkcje. Teraz najlepszy czas na praktykę. Zapraszamy Cię w związku z tym do naszej sekcji Tips&Tricks, w której zamieściliśmy przykładowy program wykonany w języku ST. Znajdziesz tam gotowy program do pobrania, a także instrukcję krok po kroku jak wykonać go samodzielnie. Przetestuj zdobytą wiedzę!

    A już w kolejnym odcinku dowiesz się nieco więcej o diagnostyce w Codesys. Poznasz sposoby weryfikacji działania programu i sterownika, powoli przygotowując się na bardziej zaawansowaną część kursu. Do zobaczenia!

    Odcinek kursu powstał pod merytoryczną redakcją menadżera marki Astraada – Mateusza Pijanowskiego.

    Czy ten artykuł był dla Ciebie przydatny?

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

    Ten artykuł nie był jeszcze oceniony.

    Mateusz Steczkowski
    AvatarStudent Akademii Górniczo-Hutniczej w Krakowie, kierunek Automatyka i Robotyka na wydziale IMIR. Interesuję się sportami, głównie siatkówką oraz piłką nożną. Jestem pasjonatem Formuły 1 zarówno od strony sportowej jak i technicznej. Uwielbiam żeglować oraz podróżować.

    Opublikuj

    Twój adres e-mail nie zostanie opublikowany.

    Czytaj więcej