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
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image02.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/Dodawanie-RTU.gif)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image01.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image02.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image03.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/kanal_odczyt.gif)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/kanal_zapis.gif)
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).
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image04.png)
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:
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image05.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image06.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image07.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image08.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/Dodawanie-TCP.gif)
W konfiguracji portu nadrzędnego warto zaznaczyć opcję samoczynnego ponawiania komunikacji, jeżeli nastąpiłaby jej utrata (auto-reconnect).
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image09.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image10.png)
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:
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image11.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/06/image12.png)
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