Strona główna ASTOR
Automatyka w praktyce

Diagnostyka w Codesys – jak sprawdzać działanie oprogramowania i sterownika?
Kurs programowania w Codesys odc. 8

Kontakt w sprawie artykułu: Mateusz Pytel - 2022-02-08

Z tego artykułu dowiesz się:

  • jakie komunikaty wysyła Codesys,,
  • czym jest debugger i jak z niego korzystać,
  • jak zdiagnozować błąd w projekcie.

Zapraszamy na kolejny odcinek naszego kursu. Tym razem skupimy się na diagnostyce w środowisku Codesys. Dzięki działaniom diagnostycznym będziesz w stanie znaleźć przyczynę problemu oraz jego rozwiązanie. Codesys posiada narzędzia, które pomogą Ci wyeliminować błędy w kodzie programu i zapewnić poprawną komunikację ze sterownikiem.

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.

Jak zapewnić poprawną komunikację ze sterownikiem?

Na komunikację ze sterownikiem może wpływać wiele czynników np. nieodpowiednia deklaracja urządzenia w projekcie, błąd w kodzie programu, niepoprawne użycie wejścia lub wyjścia sterownika, a nawet niewłaściwy tryb jego pracy. Szybkie określenie problemu i jego przyczyny jest bardzo ważne podczas pracy ze sterownikiem PLC.

Gdy napisałeś/aś już swoją aplikację, kolejnym krokiem jest kompilacja i wgranie jej do sterownika. Jak to zrobić, dowiedziałeś/aś się w odcinku 2 kursu. Wraz z procesem wgrywania aplikacji, środowisko Codesys rozpoczyna komunikację ze sterownikiem. Po wgraniu aplikacji pojawią się zmiany w widoku drzewka projektu, a po przejściu w tryb online, zobaczysz nowe oznaczenia i symbole, ukazujące stan komunikacji ze sterownikiem.

Główne drzewko projektu w Codesys, źródło: ASTOR

Możesz zauważyć, że przed ikonami urządzeń pokazały się pewne symbole. Ich celem jest informowanie Cię o statusie urządzenia.

Poniżej znajdziesz wyjaśnienia poszczególnych symboli, z którymi możesz się spotkać podczas pracy w Codesys:

Jeśli nazwa urządzenia jest podświetlona na zielono, oznacza to, że jest ono podłączone i pracuje prawidłowo:

Oznaczenie poprawnego połączenia, źródło: ASTOR

Jeśli nazwa urządzenia jest zapisana kursywą, oznacza to, że urządzenie pracuje w trybie symulacji:

Oznaczenie trybu symulacji, źródło: ASTOR

Powyższe symbole i oznaczenia informują o stanie komunikacji środowiska Codesys z Twoim sterownikiem PLC. Pomogą Ci one we wskazaniu miejsca występowania problemu oraz w jego eliminacji.

Okno Message – różnice między błędem, ostrzeżeniem i informacją

Samo określenie miejsca, w którym występuje błąd nie wystarczy, by sprawnie eliminować problemy. Ważne jest także rozpoznanie rodzaju błędu. Pomoże Ci w tym okno dialogowe Message. Pokazuje ono informacje o stanie aplikacji i jej działaniu. Dzięki niemu zyskasz wiedzę o błędach, które pojawiły się w kodzie programu lub podczas pracy sterownika, a także ostrzeżenia związane z funkcjonowaniem zaprogramowanej aplikacji oraz informacje dotyczące pracy sterownika.

Okno dialogowe Message znajduje się domyślnie na samym dole ekranu. Posiada ono łatwe narzędzie sortujące w postaci przycisków, dzięki któremu możesz porządkować jego zawartość tj. wyłączyć dany typ komunikatu.

Okno dialogowe Message źródło: ASTOR

Możemy wyróżnić 3 typy komunikatów: error, warning i message.

  • Error – błąd w kodzie lub działaniu programu. Komunikat ten zawiera informacje o błędzie, który wystąpił podczas kompilacji programu lub w czasie jego pracy. Zawiera on informacje o typie błędu oraz miejscu tj. sekcji aplikacji i wierszu programu, w którym dany błąd wystąpił. Po dwukrotnym kliknięciu na komunikat, Codesys przeniesie Cię do miejsca wystąpienia błędu.
Powiadomienie o błędzie, źródło: ASTOR 
  • Warning – ostrzeżenie. Komunikat ma na celu wskazanie problemów, które mogą wpłynąć na nieprawidłowe działanie aplikacji, choć nie muszą być jego powodem. Ukazują się przykładowo wtedy, gdy w kodzie programu widnieje nieużywana zmienna.
Powiadomienie o ostrzeżeniu, źródło: ASTOR
  • Message – informacja. To informacje zwrotne na temat działania aplikacji lub procesów związanych z kompilacją, bądź komunikacją ze sterownikiem. Nie mają one wpływu na działanie programu.
Powiadomienie o wiadomości, źródło: ASTOR

Debugowanie

Debugowanie to proces systematycznego redukowania liczby błędów w oprogramowaniu. Zazwyczaj polega on na kontrolowanym wykonaniu programu pod nadzorem debuggera, czyli programu, który służy do dynamicznej analizy innych programów. Celem takiego działania jest odnalezienie i identyfikacja zawartych w tych programach błędów.

Debugowanie w środowisku Codesys polega na stosowaniu breakpointów, zwanych też punktami wstrzymania, w kodzie programu. Breakpointem nazywamy miejsce celowego wstrzymania wykonania programu, aby móc przeanalizować jego działania. Uruchomiony pod kontrolą debuggera program przerywa wykonanie we wskazanym punkcie i przekazuje sterowanie do debuggera, który zazwyczaj wyświetla kod źródłowy w miejscu wywołania wskazanej instrukcji. Po wstrzymaniu możliwe jest m.in. śledzenie aktualnych wartości zmiennych oraz zawartości rejestrów procesora.

Codesys posiada zintegrowany debugger, który pozwala na ustawianie breakpointów w edytorze kodu źródłowego oraz definicje warunków wykonania.

Możesz ustawić punkty przerwania w określonych miejscach programu, aby wymusić zatrzymanie jego wykonywania i monitorować wartości zmiennych. Możesz też wybrać specjalne punkty przerwania danych tak, aby zatrzymać wykonywanie programu wtedy, gdy zmieni się wartość określonej zmiennej.

Zatrzymanie w punkcie przerwania lub w punkcie przerwania danych może wiązać się z dodatkowymi warunkami. Możliwe jest również przedefiniowanie punktów przerwania i punktów danych, jako punktów wykonania, w których zamiast zatrzymania programu, wykonywany jest określony kod.

Aby dodać breakpoint, należy zalogować się do sterownika PLC, a następnie odnaleźć menu Debug w pasku narzędziowym i wybrać opcje New Breakpoint.

Utworzenie punktu przerwania, źródło: ASTOR

Po wybraniu, ukaże się okno dialogowe, które pozwoli Ci skonfigurować punkt przerwania w zależności od Twoich potrzeb. W zakładce Condition, możesz dostosować warunek załączenia punktu przerwania, tak by przerwanie wykonało się po spełnieniu określonego warunku.

Zakładka Condition, źródło: ASTOR

W zakładce Location, możesz nadać lokalizację tj. wiersz kodu źródłowego, w którym ma się utworzyć punkt przerwania.

Zakładka Location źródło: ASTOR

W zakładce Execution Point Settings, możesz zamienić punkt przerwania w punkt wykonania. Po zaznaczeniu opcji w oknie dialogowym wystarczy dodać kod, który ma się wykonać po załączeniu punktu podczas debugowania.

Zakładka Execution Point Settings, źródło: ASTOR

Punkty przerwania są widoczne w postaci grafik w kodzie źródłowym i w zależności od typu lub stanu punktu, posiadają inną symbolikę. Lista symboli tych punktów znajduję się poniżej:

Aby aktywować breakpoint zaznacz lewym przyciskiem myszy wiersz, w którym się znajduje, a następnie kliknij na nim prawym przyciskiem, aby otworzyć menu. Z dostępnych opcji wybierz Enable Breakpoint. Jeśli chcesz dezaktywować breakpoint, wybierz opcję Disable Breakpoint. Inną dostępną opcją jest edycja punktu przerwań, widoczna pod wyborem Edit Breakpoint.

Operacje na breakpoincie, źródło: ASTOR

Jeśli chcesz rozpocząć debugowanie, znajdź opcję Debug w pasku narzędziowym i wybierz Start lub kliknij przycisk F5. Program zacznie się wykonywać i zatrzyma się na pierwszym punkcie przerwania.

Rozpoczęcie debuggingu, źródło: ASTOR

Gdy program zatrzyma się na punkcie przerwań, możesz dokonać przeglądu jego wartości i przeanalizować, czy wszystkie zadania, które miał wykonać, przebiegły prawidłowo. Jeśli wyniki będą dla Ciebie satysfakcjonujące, możesz ponownie rozpocząć wykonywanie programu od punktu przerwania, wciskając przycisk F5.

Działanie debuggera, źródło: ASTOR

Codesys posiada także cztery inne opcje poruszania się po kodzie podczas debuggingu. Po prawej stronie paska narzędziowego znajdziesz ikony, które pozwolą Ci na diagnozowanie krok po kroku.

Opcje poruszania się debuggera, źródło: ASTOR

Pierwszą z nich nazywa się Step Over. Jest to podstawowa funkcja debuggera. Gdy program zatrzyma się w punkcie przerwania, naciśnięcie tego przycisku spowoduje wykonanie się programu tylko w jednym wierszu kodu. Jeśli punkt przerwania zawiera odwołanie do pewnej funkcji lub bloku funkcyjnego, to po naciśnięciu nastąpi odwołanie i wykonanie zadań w nich zawartych, powrót do programu i zatrzymanie na jego następnym wierszu.

Działanie opcji Step Over, źródło: ASTOR

Drugą funkcją jest Step Into. Działa ona tak samo jak Step Over, jednak różnica tkwi w odwoływaniu się do funkcji i bloków funkcyjnych. W odróżnieniu do poprzedniej opcji, Step Into zamiast wykonywania całości funkcji lub bloku, wykonuje ją krok po kroku. Aby przejść do kolejnego kroku, należy ponownie wcisnąć przycisk Step Into.

Działanie opcji Step Into, źródło: ASTOR

Kolejna funkcja to Step Out. Wykorzystujemy ją, gdy podczas diagnozy znaleźliśmy się w kodzie funkcji lub bloku funkcyjnego i chcemy powrócić do miejsca wywołania. Po naciśnięciu tego przycisku, debugger powróci do miejsca, w którym dana funkcja bądź blok funkcyjny został wywołany. Jeśli odwołanie znajduje się w programie głównym, debugger zrobi przeskok do początku kodu, wykonując przy tym wszystkie operacje do jego końca.

 Działanie opcji Step Out, źródło: ASTOR

Ostatnią funkcją jest Run to Cursor. To najprostsza z wszystkich wymienionych funkcji, bazująca na wskazaniu przez użytkownika miejsca, do którego kod ma zostać wykonany, poczynając od bieżącego punktu przerwania.

Działanie opcji Run To Cursor, źródło: ASTOR

Pokażę teraz działanie debuggera na skonstruowanym przeze mnie kodzie.  Stworzony program zawiera licznik, zliczający do 4. Liczy on pojawienia się zbocza narastającego na zmiennej xZmiana. Dodatkowo dopisałem w kodzie instrukcje IF z pewnymi warunkami, które mają na celu zmienić wartości zmiennej xZmiana lub zresetować licznik. Jednak kod jest błędny i nie daje zamierzonych efektów. Program nie pokazuje występowania błędu w oknie Message, więc nie jest to błąd systemowy, lecz po prostu błąd w zastosowanym algorytmie. W takim przypadku zalecane jest użycie debuggera. Tworzę więc breakpointy w wierszach zawierających licznik i warunki instrukcji IF. Posłużą one do kontroli realizacji programu.

Przykładowe działanie debuggera, źródło: ASTOR

Za pomocą debuggera program realizuje się, zatrzymując się na breakpointach tak, aby użytkownik mógł dokonać analizy. W tym przypadku sprawa jest prosta – program nie wykonuje się, ponieważ wartość zmiennej xZmiana się nie zmienia – stale wynosi TRUE. Nie występuje zbocze narastające, więc licznik nie zwiększa swojej wartości. Aby naprawić program należy dopisać, wedle uznania, komendę zmieniającą wartość zmiennej xZmiana na FALSE. Wtedy z kolejnym cyklem warunek pierwszej instrukcji IF spełni się i zmieni wartość na TRUE, a licznik, będzie działać poprawnie.

Diagnostyka sterownika na podstawie webservera

Aby przeprowadzić działania diagnostyczne sterownika PLC, potrzebujesz dostępu do panelu administracyjnego. Do przybliżenia funkcji panelu, wykorzystasz sterownik Astraada One. W sekcji Tips&Tricks opisaliśmy, jak dostać się do takiego panelu.

Panel administracyjny sterownika Astraada One posiada sekcję diagnostyczną, gdzie można sprawdzić zarówno logi sterownika PLC jak i systemu, a także ustawienia połączeń typu Ethernet lub CAN. Wszystkie te opcje znajdują się w sekcji Diagnostics.

Sekcja Diagnostics w webserverze, źródło: ASTOR

W sekcji PLC-Manager możesz kontrolować zachowanie sterownika PLC, między innymi zatrzymywać lub resetować jego pracę. Dostępne są też informacje o wgranej aplikacji.

Najczęstszym błędem w komunikacji sterownika ze środowiskiem jest konflikt wersji targetów. O targetach i o sposobie ich instalowania do środowiska Codesys opowiedzieliśmy w odcinku nr 2. Niewłaściwe wersje targetów powodują brak komunikacji pomiędzy środowiskiem a sterownikiem. Najłatwiejszym sposobem na sprawdzenie wersji firmware’u Twojego sterownika jest właśnie panel administracyjny.

Jeśli wystąpi taki błąd, zaloguj się do panelu, a następnie w sekcji System kliknij opcję Info.

Sekcja System w webserverze, źródło: ASTOR

Otworzy to stronę z informacjami na temat specyfikacji sterownika takich jak numer seryjny, sposoby komunikacji, temperatura procesora czy zapełnienie pamięci. Numer targetu znajdziesz pod nazwą Firmware Version.

Wersja firmware, źródło: ASTOR

Jeśli różni się on od targetu wgranego do środowiska Codesys, należy zainstalować poprawną wersję. Aby sprawdzić wersję zainstalowanego targetu, kliknij podwójnie urządzenie znajdujące się w drzewie projektu i wybierz sekcję Information. Wersja targetu opisana jest jako Version.

Sprawdzenie wersji targetu w Codesys, źródło: ASTOR

Jeśli wersje targetów się zgadzają, możesz zacząć pracę na swoim sterowniku.

To byłoby na tyle w tym odcinku kursu programowania w Codesys. W kolejnym odcinku nr 9, dowiesz się jak korzystać z języka bloków funkcyjnych CFC.

Do zobaczenia!

Autor artykułu: Mateusz Steczkowski

Czy ten artykuł był dla Ciebie przydatny?

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

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

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