Kurs Codesys: Tips&Tricks
Kontakt w sprawie artykułu: Ewelina Szędzioł - 2021-01-05
Tips&Tricks 1: Jak zmieniać wartości zmiennych podczas pracy programu?
Nie masz jeszcze stworzonej wizualizacji, w której będziesz mógł/mogła za pomocą przycisków i innych obiektów graficznych zmieniać wartości zmiennych. Nic straconego – w Codesys możesz „ręcznie” zmieniać wartości zmiennych programu np. w edytorze zmiennych.
Aby to zrobić, ustaw odpowiednią wartość w kolumnie „Prepared value”, a następnie po kliknięciu prawym przyciskiem myszy, wybierz opcję: Write All Values of ‘Device.Application’.

Możesz użyć również skrótu klawiszowego ALT+F7. Wartości zmiennych wprowadzone w kolumnie Prepared value zostaną wpisane do pamięci sterownika.
Tips&Tricks 2: Panel administracyjny sterownika
Panel administracyjny sterownika PLC, a w tym przypadku Astraada One to miejsce, do którego logujesz się za pomocą przeglądarki internetowej. W panelu administracyjnym możesz wykonywać takie operacje jak:
- zmiana adresu IP sterownika,
- aktualizacja firmware,
- odczytanie logów diagnostycznych,
- reset sterownika do stanu fabrycznego,
- ustawienie zegara czasu rzeczywistego,
- aktywacja FTP Server,
- konfiguracja VNC-Server itp.
Aby wejść do panelu administracyjnego sterownika PLC Astraada One, wpisz jego adres IP do przeglądarki internetowej. W następnym kroku zostaniesz poproszony o login oraz hasło. Domyślnie:
Login: admin
Hasło: admin

Panel administracyjny sterownika Astraada One przedstawia się następująco:

W tym odcinku T&T dowiesz się w jaki sposób możesz zmienić adres IP sterownika Astraada One. Aby skonfigurować adres IP sterownika, przejdź do zakładki Network, w której masz możliwość skonfigurowania adresu IP dwóch kart sieciowych sterownika (ETH1, ETH2):

Obie karty sterownika mogą pracować w kilku trybach:
- adres statyczny,
- adres dynamiczny DHCP,
- EtherCAT,
- Profinet,
- nieaktywny.

Warto zauważyć, że sterowniki Astraada One posiadają możliwość skonfigurowania karty ETH0 dla dwóch niezależnych adresów IP w różnych podsieciach (ETH0 oraz ETH0:1). Jest to wygodne rozwiązanie pozwalające uruchomić na danej karcie komunikację w dwóch protokołach komunikacyjnych jednocześnie (np. Modbus TCP oraz Profinet). W drugim scenariuszu, możesz wykorzystać tę funkcjonalność, aby zalogować się do sterownika przy równolegle działającej komunikacji w jednym z protokołów obsługiwanych przez PLC Astraada One. Dodatkowo do Twojej dyspozycji pozostaje karta ETH1, która przykładowo może posłużyć do komunikacji w protokole EtherCAT z napędami.
Po zmianie adresu IP karty ETH0, pamiętaj o zapisaniu zmian przyciskiem SAVE. Następnie zostaniesz poproszony/a o zrestartowanie sterownika PLC. Możesz wykonać tę operację w Panelu administracyjnym klikając zakładkę Reboot lub restartując zasilanie sterownika. Po ponownym włączeniu, sterownik będzie posiadał nowy adres IP.
W tym odcinku T&T to wszystko, zapraszam do śledzenia dalszych odcinków kursu oraz T&T, gdzie będziemy zamieszczać sporo praktycznych informacji dotyczących środowiska Codesys oraz sterowników Astraada One. Do zobaczenia!
Tips&Tricks 3: Jak przekonwertować program z symulatora na fizyczny sterownik PLC?
W tym odcinku Tips&Tricks będziesz bazować na podstawie programu z 3 odcinka kursu Codesys. Program ten był przeznaczony na symulator, dowiesz się, jak przekonwertować go na fizyczne urządzenie i zmapować utworzone już zmienne.
Konwersja programu jest bardzo prosta – wystarczy, że zmienisz target w projekcie. Kliknij na Device w drzewku projektowym prawym przyciskiem myszy i wybierz opcję Update Device. Zobaczysz okno wyboru targetów. W przypadku sterownika Astraada One, wybierz target Berghof MX6 Control.

Następnie dodaj do drzewa projektu wejścia/wyjścia – tak jak w odcinku nr 2 naszego kursu.

Od teraz możesz przypisać zmienną do faktycznego wejścia. Aby tego dokonać, kliknij dwukrotnie na moduł I/O i przejdź do segmentu BGH Slot BUS I/O Mapping.
Rozwiń segment Digital In – w przypadku wejść lub Digital Out w przypadku wyjść. Następnie rozwiń pierwszą gałąź opisaną jako Digital Input 0 lub Digital Output 0. Kliknij dwukrotnie przy znaku zmiennej aż pojawi się przycisk z trzema kropkami, który także kliknij. Wybierz swoją zmienną, którą chcesz przypisać.

Tak przygotowany program wgraj do sterownika. W ten sposób możesz testować programy na symulatorze, a następnie w kilka sekund wykonać konwersję na fizyczny sterownik.
Tips&Tricks 4: Jak używać narzędzia Help?
Codesys jest rozbudowanym środowiskiem, dlatego też warto wiedzieć, jak korzystać z narzędzia Help. W Help znajdziesz definicje i przykłady dotyczące każdego, nawet najmniejszego elementu środowiska. Codesys oferuje dwa rodzaje Helpa: Offline i Online. Domyślnie, jeżeli masz dostęp do Internetu, Codesys będzie zawsze wczytywał wersję Online. Gdzie włączyć/wyłączyć taką opcję?
Przejdź do zakładki Tools w prawym górnym rogu głównego ekranu programu. W zakładce wybierz Options… Następnie przejdź do zakładki Help. Zobaczysz jeden, jedyny box do zaznaczenia. Jeżeli jest zaznaczony, wersja Online będzie wczytywana, gdy masz dostęp do Internetu, jeżeli nie jest zaznaczony – zawsze będziesz korzystać z wersji Offline.

Jak uaktywnić Help? Są dwie możliwości. Najbardziej przydatną opcją jest skorzystanie z klawisza F1. Wystarczy, że klikniesz lewym przyciskiem myszy na element, którego nie znasz, bądź nie rozumiesz i wciśniesz klawisz F1. Help automatycznie uruchomi się na szukanym elemencie. Drugim sposobem kliknięcie zakładki Help w prawym górnym rogu głównego ekranu Codesys i wybranie opcji Contents lub Index.

Zaleca się korzystanie z Help Online – jest on nie tylko zawsze aktualny, ale również posiada możliwość używania komend dla łatwiejszego wyszukiwania. Możesz wykorzystać:
- AND – jest to łącznik, a więc jeśli wpiszesz Device AND Diagnosis, Help wyszuka informacje o Device Diagnosis
- OR – jest to klasyczne lub. Jeśli wpiszesz w wyszukiwarkę Device OR Diagnosis, Help znajdzie informacje osobno o Device i o Diagnosis.
- NOT – używane, gdy chcesz wyszukać konkretnych informacji. Jeśli wpiszesz Device NOT Diagnosis, Help znajdzie informacje o Device, które nie zawierają wzmianki o Diagnosis.
- ANDNOT – kombinacja AND oraz NOT, stosowana, gdy budujesz dłuższe sformułowanie z AND. Czyli jeśli wpiszesz Device AND Diagnosis ANDNOT Output, Help wyszuka informacje o Device Diagnosis, które nie zawierają wzmianki o Output.
- ANDMAYBE – jest to opcja łącząca OR i NOT. Jeśli wpiszesz Device ANDMAYBE Diagnosis, Help wyszuka przede wszystkim informacje o samym Device, ale również poda klika wierszy na temat Device Diagnosis.
Oprócz komend można zastosować też dwa znaki:
* – zastępuje dowolną ilość znaków w wyrazie,
? – zastępuje tylko jeden znak w konkretnym miejscu.
Tips&Tricks 5: Konwersja języka LD do FBD.
Masz program napisany w języku LD, lecz zauważyłeś/aś, że język FBD posiada wszystkie jego zalety, a dodatkowo jest bardziej czytelny i prosty w analizie?
Mam dobrą wiadomość. Musisz wykonać TYLKO JEDNĄ akcję w Codesys, aby automatycznie skonwertować Twój program w LD na FBD 🙂
W tym celu, kliknij na ikonkę LD/FBD/IL w górnej wstążce programu oraz wybierz widok FBD:

Tips&Tricks 6: Program do sortowania danych w języku ST – instrukcja krok po kroku cz. 1
Program, który napiszesz będzie wykorzystywać dwa algorytmy sortowania: Quick Sort oraz sortowanie bąbelkowe. Użytkownik, będzie mógł zadeklarować wielkość tablicy, do której wpisze własne wartości, a po uzupełnieniu wartości, będzie mógł wybrać metodę sortowania wartości w tablicy.
Pierwszym krokiem będzie dodanie bloków funkcyjnych. Dodasz dwa bloki funkcyjne w języku ST, dla obu algorytmów, które użyjesz do sortowania.
Wejdź w opcję Project znajdującą się na górnym pasku i wybierz opcję Add object, a następnie wybierz POU.

Następnie zmień typ POU na Function Block, nadaj mu nazwę np. BubbleSort lub QuickSort oraz zmień język na ST.

Tym samym sposobem dodaj drugi blok funkcyjny, w którym zapiszesz algorytm sortowania i nadaj mu nazwę odpowiadającą nazwie algorytmu.
Otwórz blok funkcyjny, w którym zapiszesz algorytm sortowania metodą QuickSort i dodaj następujące zmienne.

Dodaj do kodu instrukcję warunkową IF. Dzięki niej program będzie poprawnie wykonywać algorytm. Instrukcja wraz z operacjami ma wyglądać następująco.

Zmienna podtrzymaj posłuży nam za numer indeksu wartości, będącą osią, na której będziemy opierać działanie algorytmu, zgodnie z jego zasadami.
Do środka instrukcji IF dodaj pętle WHILE, która będzie odpowiadać za ograniczenie przedziału sortowania zgodnie z działaniem algorytmu sortowania. Pętla wraz z operacjami ma wygląda następująco:

Kolejna pętla WHILE będzie odpowiedzialna za zwiększanie wartości zmiennej i. Tutaj wartości tablicy będą sprawdzane zgodnie z algorytmem działania metody sortowania.

Zamknij pętlę i dodaj nową pętlę While, która będzie odpowiedzialna za odszukanie największej wartości tablicy.

Zamknij pętlę i dodaj nową instrukcję IF. W niej zapisz operacje zamiany wartości komórek.

Po zamknięciu pętli While, dodaj operacje zmiany wartości osi, służącej do segregacji wartości tablicy.

Ostatnim krokiem, jest dodanie wskaźników do tworzonego przez Ciebie bloku funkcyjnego, dzięki którym stworzysz zjawisko rekurencji. Nie możesz wywołać tego samego bloku w jego kodzie, więc do utworzenia rekurencji używamy wskaźnika THIS

Końcowa wersja kodu pokazana jest na poniższym zdjęciu:

Tips&Tricks 7: Program do sortowania danych w języku ST – instrukcja krok po kroku cz. 2
Przejdź do drugiego bloku funkcyjnego. W nim napiszesz algorytm sortowania metodą bąbelkową
Do bloku funkcyjnego dodaj następujące zmienne:

Tak jak w algorytmie QuickSort, dodaj instrukcję IF warunkującą poprawną pracę algorytmu wraz z operacjami

Następnie dodaj do środka instrukcji pętle FOR, która powieli instrukcje i operacje niezbędne do sortowania. Do środka pętli FOR dodaj pętlę WHILE, służącą do wykrywania wartości, które trzeba zamienić miejscami i operacje ich zamiany.

Po zakończeniu pętli FOR, dodaj operacje ponownego nadania zmiennym i oraz j wartości początkowych.
Końcowy kod algorytmu powinien wyglądać następująco:

Mając gotowe bloki funkcyjne z algorytmami sortowania, przejdź do programu PLC_PRG, zadeklaruj utworzone bloki funkcyjne, licznik zliczający w górę oraz następujące zmienne:
- Tablicę zmiennych typu INT o wielkości od 1 do 25
- 3 zmienne typu INT
- 4 zmiennych typu BOOL
Zmienne typu INT będą potrzebne do przechowania informacji o:
- Obecnej wartości licznika, potrzebnej do określenia komórki tablicy, do której wpiszesz wartość
- Rozmiarze tablicy
Wartości wpisywanej do danej komórki tablicy Zmienne typu BOOL będą potrzebne do:
- Utworzenia dwóch przycisków odpowiedzialnych za rozpoczęcie wybranego algorytmu sortowania
- Utworzenia przycisku odpowiedzialnego za zatwierdzenie zapisu wartości do komórki tablicy
- Zresetowania licznika do wartości początkowej po wypełnieniu tablicy.
- Przestrzeń zmiennych programu powinna wyglądać następująco:

Najpierw wywołaj licznik, potrzebny do zliczania kliknięć przycisku zatwierdzania wartości komórki tablicy.

Następnie zapisz instrukcję IF, warunkiem której, będzie naciśnięcie przycisku zatwierdzania wartości, a w niej przypisanie wartości zmiennej liczba, do komórki tablicy o indeksie i oraz podtrzymanie resetu licznika w stanie zerowym.

Następnie dodaj instrukcję IF, która po przekroczeniu wielkości tablicy, zresetuje licznik.

Dodaj także instrukcje IF, które wywołają bloki funkcyjne z algorytmami, kiedy zostanie naciśnięty przycisk rozpoczynający sortowanie wybraną metodą

Następnie należy utworzyć wizualizację, z poziomu której będziesz kontrolować działanie aplikacji. Sposób dodawania wizualizacji został ukazany w odcinku nr 6.
Najpierw dodaj tablicę do swojej wizualizacji. Wejdź w Visualization Toolbox, znajdujący się po prawej stronie programu i wybierz kategorię Common Controls. Wybierz element Table i przeciągnij na przestrzeń roboczą

Następnie przypisz do tablicy zmienną z programu PLC_PRG w sekcji Properties, znajdującej się pod Visualization Toolbox. Wybierz opcję Data Array do przypisania tablicy z programu oraz maksymalną wielkość tablicy do ukazania w opcji Maximum array index.

Dodatkowo dodaj dwa pola tekstowe, które posłużą do wpisywania wartości wielkości tablicy i wartości komórek tablicy. Wejdź ponownie w Visualization Toolbox oraz wybierz kategorie Common Controls. Wybierz element Textfield i przeciągnij w przestrzeń roboczą wizualizacji.

Następnie należy dodać zmienną, która zapisze tekst wpisywany do pola tekstowego. Robimy to wchodząc w Properties pola tekstowego. Wejdź w sekcję Text variables i przydziel zmienną do pola tekstowego, w zależności od pola: zmienną odpowiadającą za przechowanie wielkości tablicy lub wartości do wpisania w komórkę tablicy.

Dla pola tekstowego, które odpowiada za wielkość tablicy należy dodać dodatkowe ustawienie. Po wpisaniu rozmiaru tablicy, ma ona automatycznie się ukazać w zadanym rozmiarze. Można to uzyskać poprzez opcję Input Configuration w części Properties pola. Wejdź w tę opcję i kliknij na pole OnMouseClick. Ukaże ci się okno dialogowe, dzięki któremu dodasz opcję zapisu wartości. W ten sposób po kliknięciu na pole tekstowe i wpisaniu w nie wartości, tablica automatycznie przybierze żądany rozmiar.

Następnie dodaj przyciski. Ponownie wejdź w Visualization Toolbox i wybierz kategorię Common Controls. Wyszukaj w niej elementu Button i przeciągnij do przestrzeni roboczej programu.

Na końcu przypisz do przycisku zmienną, do której ma przekazać sygnał. Wejdź w Properties, następnie wybierz sekcję Input Configuration, następnie Tap i w opcję Variable wpisz zmienną.
Dodatkowo możesz dodać tekst, który wyświetli się na przycisku. Aby to zrobić wybierz sekcję Texts w Properties i w opcji Text wpisz treść do wyświetlenia.

Poniżej znajduje się instrukcja działania stworzonego przez ciebie programu.
INSTRUKCJA:
1. Wpisz wielkość tablicy do pola tekstowego
2. Wpisz wartość komórki tablicy do drugiego pola tekstowego
3. Potwierdź wpisanie przyciskiem
4. Powtórz krok 2 i 3 do zapełnienia tablicy
5.Po zapełnieniu tablicy naciśnij przycisk rozpoczynający sortowanie.
Pobierz gotowy program i przetestuj działanie -> LINK