Strona główna ASTOR
Automatyka w praktyce

Komunikacja Modbus RTU i TCP/IP w środowisku Codesys
Kurs programowania w Codesys odc. 14

Kontakt w sprawie artykułu: Mateusz Pytel - 2023-06-14

Z tego artykułu dowiesz się:

  • czym jest protokół Modbus i do czego jest stosowany,
  • jak skonfigurować połączenie Modbus RTU w środowisku Codesys,
  • jak skonfigurować połączenie Modbus TCP w środowisku Codesys.

Zapraszamy na kolejny odcinek naszego kursu. Będzie on poświęcony komunikacji w protokołach Modbus RTU i TCP/IP w środowisku Codesys.

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.

Najważniejsze informacje o protokole Modbus

Protokół Modbus jest jednym z najstarszych protokołów komunikacyjnych. Został pierwotnie opracowany przez firmę Modicon (obecnie Schneider Electric) do użytku z jej programowalnymi sterownikami logicznymi.

Modbus jest protokołem komunikacyjnym wciąż powszechnie stosowanym w aplikacjach przemysłowych, mimo że jest on powoli wypierany przez inne protokoły komunikacyjne np. Profinet bądź EtherCAT. Protokół ten został opracowany specjalnie dla zastosowań przemysłowych i jest łatwy do wdrożenia i utrzymania.

Modbus wykorzystuje różne media transmisyjne, takie jak linie komunikacji szeregowej, Ethernet lub protokoły internetowe, a także umożliwia komunikację między wieloma urządzeniami podłączonymi do jednego kabla lub sieci Ethernet. Dzięki temu urządzenia takie, jak czujniki temperatury i wilgotności, mogą przesyłać swoje pomiary do tego samego komputera.

Protokół Modbus jest często wykorzystywany w systemach kontroli nadzorczej i pozyskiwania danych (SCADA) do łączenia komputera nadzorującego zakład/system ze zdalną jednostką końcową (RTU). W systemach takich wiele typów danych nosi nazwy charakterystyczne dla przemysłowego sterowania urządzeniami fabrycznymi, takich jak logika drabinkowa, ponieważ protokół ten został zaprojektowany z myślą o zastosowaniach przemysłowych. Na przykład, jednobitowe wyjście fizyczne jest nazywane cewką, a jednobitowe wejście fizyczne jest nazywane wejściem dyskretnym lub stykiem, co odnosi się do terminologii używanej w sterowaniu przekaźnikami. Dzięki temu protokół Modbus umożliwia prostą i skuteczną integrację różnych urządzeń w systemach SCADA.

Modbus RTU jest protokołem typu Master – Slave i pozwala na dwukierunkową komunikację do 248 urządzeń, podłączonych w ramach tej samej sieci.

Modbus RTU Master to urządzenie inicjujące komunikację i wysyłające zapytania do urządzeń typu Slave. W sieci Modbus RTU funkcję Master może pełnić tylko jedno urządzenie.

Modbus RTU Slave to urządzenia odpowiadające na zapytania wysyłane przez urządzenia Master. W sieci Modbus RTU może pracować do 247 urządzeń Slave.

Urządzenie Master komunikuje się z urządzeniami Slave w trybie dwuprzewodowego RS-485. Jeśli urządzenie nie odpowiada, Master zgłasza błąd komunikacji z urządzeniem Slave, a następnie przechodzi do odpytywania urządzenia o innym identyfikatorze, które jest następne w kolejce. Po odpytaniu wszystkich urządzeń pracujących w sieci, Master rozpoczyna kolejną kolejkę odpytywania.

Modbus TCP jest protokołem z rodziny Modbus z interfejsem TCP, który działa w sieci Ethernet. Protokół komunikacji definiuje strukturę przesyłanych danych, natomiast TCP zapewnia dla niego medium transportu informacji. Dzięki wykorzystaniu tego protokołu w łatwy sposób można umieścić dane na serwerze sieciowym oraz wykorzystać je w aplikacjach internetowych. Protokół Modbus TCP należy do rodziny klient – serwer. Może być wykorzystywany w systemach czasu rzeczywistego do wymiany informacji pomiędzy urządzeniami a ekranami operatorskimi.

Dodanie protokołu Modbus RTU do środowiska Codesys

Aby dodać możliwość obsługi urządzenia za pomocą Modbus RTU, należy dodać urządzenie do drzewka projektu. Znajdź urządzenie Modbus Master, a następnie podwójnie kliknij na nim lub wybierz je i kliknij przycisk Add Device. Podobnie dodaj urządzenia Modbus Slave.

Dodawanie urządzenia Modbus Master oraz Slave. Źródło: ASTOR

Następnie przejdź do konfiguracji portu szeregowego. Wybierz z drzewka Modbus_COM (Modbus COM), w zakładce General ustaw pożądane parametry portu szeregowego. W przykładzie urządzenie Slave ma następujące parametry: RS232, prędkość 9600, brak parzystości, 8 bitów danych i 1 bit stopu.

Konfiguracja portu szeregowego. Źródło: ASTOR

Następnie wybierz z drzewka Modbus_Master_COM_Port (Modbus Master,COM Port), w zakładce General ustaw czas odpowiedzi na zapytanie (Response Timeout) oraz czas pomiędzy kolejnymi zapytaniami (Time between Frames). Należy również zaznaczyć opcję Auto-restart communication, aby połączenie automatycznie wznawiało się, gdy komunikacja zostanie zerwana.

Konfiguracja Modbus Master. Źródło: ASTOR

Później wybierz z drzewka Modbus_Slave_COM_Port (Modbus Slave,COM Port) i dodaj zmienne, które chcesz odczytywać lub zapisywać. Aby to zrobić, kliknij przycisk Add Channel w zakładce Modbus Slave Channel.

Konfiguracja Modbus Slave. Źródło: ASTOR

Następnie dodaj zmienne, które chcesz odczytywać. Kliknij na przycisk Add Channel i wybierz zmienne, które chcesz odczytywać, a do odczytu rejestrów wykorzystaj funkcję 3 protokołu Modbus. W polu Trigger pozostaw wartość Cyclic, aby zapytania były wysyłane cyklicznie co 100 ms.

Dodanie kanału do odczytu danych. Źródło: ASTOR

Następnie określ zmienne, które chcesz zapisywać, wykorzystując funkcję numer 16 do zapisu wielu rejestrów jednocześnie lub funkcję numer 6 do zapisu pojedynczych rejestrów. W tym przykładzie użyjemy funkcji numer 16. W polu Trigger ustaw wartość Rising edge, aby wartości zmiennych były wysyłane na żądanie, gdy zmienna bitowa zmieni się z wartości zero na jeden. Zmienna ta będzie dostępna w zakładce ModbusGenericSerialSlave I/O Mapping.

Dodanie kanału do zapisu danych. Źródło: ASTOR

Zakładka ModbusGenericSerialSlave I/O Mapping zawiera dodane wcześniej zmienne. Aby monitorować ich wartości po połączeniu z sterownikiem, wybierz opcję Enabled 2 (always in bus cycle task).

Zakładka I/O Mapping. Źródło: ASTOR

Po skonfigurowaniu należy poprawnie połączyć sterownik z urządzeniem Slave, używając odpowiedniego kabla. Dla RS232 konieczne jest skrosowanie linii RX (odbieranie) z TX (wysyłanie) oraz TX z RX. Poniżej przedstawiony został układ pinów portów szeregowych:

Rozkład pinów portów szeregowych. Źródło: ASTOR

Następnie łączymy się ze sterownikiem i sprawdzamy, czy moduł Modbus został poprawnie skonfigurowany. Przy poprawnej komunikacji wyświetli się zielona ikona, tak jak na zdjęciu poniżej.

Poprawnie skonfigurowana komunikacja Modbus RTU. Źródło: ASTOR

Aby wysłać wartości do urządzenia Slave, należy wpisać zadane wartości do zmiennej zapis[0-9], a następnie wyzwolić bit %QW0.0.

Wpisanie zadanej wartości do zmiennej. Źródło: ASTOR

Dodanie protokołu Modbus TCP do środowiska Codesys

Aby skonfigurować sterownik Astraada One do pracy w protokole Modbus TCP, należy dodać port Ethernet za pomocą polecenia Add Device. Aby ten port działał jako klient, należy dodać obsługę Modbus_TCP_Master. Następnie należy dodać podrzędne urządzenia Modbus_TCP_Slave do tego portu. W każdym z tych urządzeń podrzędnych należy określić listę danych, które będą wymieniane z nimi.

Każdy z tych dodanych elementów wymaga konfiguracji. Na początku dodaj do drzewka projektowego port Ethernet, klikając na sterowniku prawym przyciskiem myszy, następnie klikając opcję Add Device. Port Ethernet znajdziesz w zakładce Fieldbuses -> Ethernet Adapter. Po dodaniu portu skonfiguruj go, podając adres IP portu oraz maskę podsieci. Możesz także skorzystać z opcji automatycznej, wybierając przycisk z trzema kropkami przy polu Interface i wybrać port po jego nazwie. Dane karty sieciowej możesz zmienić z wykorzystaniem web servera sterownika.

Konfiguracja portu Ethernet w Codesys. Źródło: ASTOR

Następnie dodaj Modbus Master oraz Modbus Slave w ten sam sposób, co port Ethernet, naciskając prawy przycisk myszy na Ethernet w drzewku projektowym i wybierając opcję Add Device.

Dodawanie Modbus TCP do projektu. Źródło: ASTOR

W konfiguracji portu nadrzędnego warto zaznaczyć opcję samoczynnego ponawiania komunikacji, jeżeli nastąpiłaby jej utrata (auto-reconnect).

Konfiguracja Modbus TCP Master. Źródło: ASTOR

Kliknij dwukrotnie na urządzeniu Modbus_TCP_Slave. W zakładce General ustaw adres IP zgodny z urządzeniem, które chcesz podłączyć. Ustaw czas timeout oraz port, na którym nastąpi komunikacja. Domyślnie jest to port 502.

Konfiguracja Modbus TCP Slave. Źródło: ASTOR

W zakładce Modbus Slave Channel definiuje się zawartość poszczególnych ramek do komunikacji z urządzeniem podrzędnym. Należy podać numer funkcji Modbus, sposób wyzwalania wysłania kolejnej ramki, opcjonalnie czas oczekiwania na ponowne wysłanie ramki, adres urządzenia podrzędnego i ilość danych do przesłania. W przypadku funkcji odczytu można określić, czy obszar danych przyporządkowany temu urządzeniu ma zostać wyzerowany w przypadku braku komunikacji.

Przykładowa definicja ramki do odczytu pięciu rejestrów Holding Registers zaczynając od rejestru 0:

Konfiguracja ramki do odczytu. Źródło: ASTOR

W tym przykładzie określono ramkę danych, która jest zapisywana do urządzenia podrzędnego. Ponadto dane odczytywane i dane do zapisu zostały powiązane z lokalnymi zmiennymi w programie sterownika Astraada One. Te zmienne są oznaczone jako READ i WRITE. Powiązanie to jest dokonywane na zakładce Modbus TCPSlave I/O Mapping, umożliwiając operowanie zmiennymi za pomocą ich nazw, a nie surowych adresów.

Skonfigurowane ramki do odczytu i zapisu. Źródło: ASTOR

Jeżeli wszystko zostało skonfigurowane poprawnie, po wgraniu aplikacji i przejściu w tryb RUN, przy urządzeniach Ethernet, Modbus_TCP_Master i Modbus_TCP_Slave powinny znajdować się zielone symbole.

Autor artykułu: Mateusz Steczkowski

Newsletter Poradnika Automatyka

Czytaj trendy i inspiracje, podstawy automatyki, automatykę w praktyce

Please wait...

Thank you for sign up!

Czy ten artykuł był dla Ciebie przydatny?

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

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

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