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.

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.

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.

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.

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.

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.

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).

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:

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.

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.

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.

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.

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

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.

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:

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.

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