Komunikacja po protokole Modbus RTU
Kurs programowania PLC od podstaw
Odc.16
Kontakt w sprawie artykułu: Kamil Zajdel - 2020-03-09
Z tego artykułu dowiesz się:
- Co to jest protokół Modbus RTU?
- Jak wygląda komunikacja po protokole Modbus RTU?
- Jak przedstawia się architektura sieci Modbus RTU?
- Jak wykorzystać protokół Modbus RTU do komunikacji sterownika PLC z układami I/O?
- Jak skonfigurować układ I/O Modbus RTU – SmartMod I/O?
W poprzednim odcinku dowiedziałaś/eś się co to jest obiekt Trend i jak go konfigurować.
W tym artykule poznasz podstawowe informacje dotyczące komunikacji w protokole Modbus RTU oraz poznasz architekturę komunikacji w sieci szeregowej. Zobaczysz, jak w praktyce zastosować układ wejść-wyjść oddalonych SmartMod oraz jak mapować rejestry w komunikacji Modbus.
Kurs programowania PLC od podstaw dla automatyków i elektryków
Podstawy programowania sterowników PLC
Programowanie sterownika PLC w języku drabinkowym
Programowanie zintegrowanego panelu HMI
Komunikacja sterowników PLC w sieci szeregowej i Ethernet
Zaawansowane funkcje sterownika PLC
Modbus RTU to jeden z najpopularniejszych protokołów komunikacyjnych w systemach automatyki. Jego prostota i niezawodność sprawiły, że jest jednym z najczęściej wykorzystywanych standardów wymiany danych w sieciach szeregowych RS232/485, w przemysłowych systemach sterowania.
Charakterystyka Modbus RTU
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.
Przykładowa architektura sieci Modbus RTU
Urządzenie master komunikuje się z urządzeniami slave w trybie dwuprzewodowego RS-485. W tym celu do wymiany danych wykorzystywane są linie DATA +, DATA – oraz GND. Urządzenie master zarządza siecią tak, aby komunikacja była realizowana w prawidłowy sposób.
Jeśli urządzenie w dalszym ciągu nie odpowiada, master zgłasza błąd komunikacji z urządzeniem slave, a następnie przechodzi do odpytywania urządzenia o ID 2, które jest następne w kolejce. Po odpytaniu wszystkich urządzeń pracujących w sieci, master rozpoczyna kolejną kolejkę odpytywania.
Horner SmartMod I/O
Moduły rozszerzeń SmartMod I/O, to rozwiązanie pozwalające na lokalną rozbudowę sterowników, o obsługę kilkunastu dodatkowych sygnałów wejść-wyjść, w oparciu o komunikację szeregową. Charakteryzują się niewielkimi gabarytami, dzięki czemu idealnie nadają się do instalacji w miejscach o ograniczonej przestrzeni montażowej.
Moduły SmartMod I/O komunikują się ze sterownikiem Horner APG przy pomocy sieci szeregowej, w oparciu o protokół Modbus RTU – w trybie dwuprzewodowego RS485. Wyposażenie modułów w taki interfejs pozwala na ich integrację z dowolnym urządzeniem Modbus RTU master, nie generując przy tym dodatkowych kosztów, związanych z zakupem dedykowanych interfejsów komunikacyjnych. W jednej sieci może pracować do 31 urządzeń SmartMod.
Okablowanie w sieci Modbus RTU
Prawidłowa komunikacja w sieci Modbus RTU wymaga przygotowania odpowiedniego kabla. Schemat kabla komunikacyjnego do podłączenia układów wejść-wyjść SmartMod I/O ze sterownikiem Horner XL7e prezentuje poniższa grafika.
W tej aplikacji, komunikacja z układem SmartMod w sterowniku XL7e, realizowana jest na porcie MJ2, w trybie dwuprzewodowego RS-485. Port MJ2 sterownika wyprowadzony jest fizycznie na złączu RJ-45, na pinach 1, 2 oraz 6.
Kabel komunikacyjny wykonaj w następujący sposób:
- Sygnał D- po stronie układu SmartMod podłącz do Pinu A,
- natomiast po stronie sterownika – do Pinu 1.
- Sygnał D+ po stronie układu SmartMod podłącz do Pinu B, natomiast po stronie sterownika – do Pinu 2.
- Sygnał GND po stronie układu SmartMod podłącz do Pinu C, natomiast po stronie sterownika- do Pinu 6.
Prawidłowa konfiguracja komunikacji pomiędzy układem SmartMod, a sterownikiem Horner wymaga ustawienia takich samych parametrów komunikacyjnych na portach obu urządzeń.
W układach SmartMod, zwarcie zacisków GND oraz INIT powoduje ustawienie domyślnych parametrów komunikacyjnych na porcie.
- Modbus ID = 1
- Baud rate = 9600
- Parity = None
- Stop Bits = 1
Dokładnie takie same parametry ustaw na porcie komunikacyjnym w sterowniku. Pełną konfigurację zobaczysz w dalszej części artykułu.
Mapowanie zmiennych w sterowniku PLC
Prawidłowa obsługa dodatkowych sygnałów I/O, pochodzących z modułu SmartMod wymaga odpowiedniego zmapowania zmiennych po stronie sterownika.
Adresy zmiennych w modułach SmartMod możesz odczytać z dokumentacji do danego modułu. W tym przykładzie, dla modułu SmartMod I/O, o numerze katalogowym HE359DIQ512, zmienne dostępne są w następujących obszarach pamięci:
- sygnały dyskretne wejściowe: w obszarze 00001 do 00004,
- sygnały dyskretne wyjściowe: w obszarze 00017 do 00020.
Prawidłowe podłączenie sygnałów obiektowych do układów SmartMod przedstawiono na schemacie poniżej.
Programowanie w akcji!
Aby utworzyć komunikację z układem SmartMod, w programie sterującym skonfiguruj protokół Modbus RTU. Komunikacja będzie odbywała się na porcie MJ2 sterownika XL7e.
W tym celu z poziomu menu Program wybierz Protocol Configuration.
Następnie z rozwijalnej listy MJ2 wskaż protokół Modbus RTU Master i przejdź do jego konfiguracji.
W oknie Network Config, w sekcji Port Configuration ustaw parametry pracy portu szeregowego, zgodnie z domyślnymi parametrami komunikacyjnymi w module SmartMod:
- Baud Rate – 9600,
- Parity – none,
- Stop Bits – 1,
- Protocol – Modbus RTU.
Parametr Retries oznacza ilość prób, jakie urządzenie master będzie wykonywało w celu nawiązania komunikacji z urządzeniem slave. Ustaw 2.
Timeout oznacza czas, jaki urządzenie master odczeka pomiędzy kolejnymi zapytaniami. Ustaw 10000 ms.
W sekcji Update Scan konfiguruje się sposób, w jaki urządzenie master będzie odpytywać urządzenie slave. Opcja Automatic powoduje, że master samodzielnie, tak często jak to możliwe, będzie zaciągał zapytania do urządzeń slave. Jeśli nie chcesz generować dużego obciążenia/?/ na sieci, zmień parametr Update Interval, co spowoduje obniżenie częstotliwości odpytywania.
Opcja Manual pozwala skonfigurować zmienną, której zmiana stanu na „wysoki” będzie powodowała wysyłanie zapytań z urządzenia master do slave.
Sekcja Status powala na opcjonalne skonfigurowanie adresu statusowego dla komunikacji Modbus.
Okno Devices umożliwia dodawanie urządzeń slave. Po wciśnięciu przycisku Add zobaczysz kolejne okno, w którym dodasz I/O SmartMod. W oknie podaj nazwę urządzenia slave jako SmartMod oraz ustaw jego adres ID na 1.
W sekcji Device Options możesz skonfigurować typ urządzenia slave, sposób w jaki adresowane są w nim zmienne oraz funkcje protokołu Modbus, które obsługuje podczas komunikacji.
Device Typ pozwala skonfigurować typ adresacji zmiennych:
- Modicon na 5 znakach,
- Modicon na 6 znakach,
- Adresację native.
Parametr Mode pozwala określić, które funkcje obsługuje urządzenie:
- wszystkie funkcje,
- Tylko funkcje 5/6,
- Tylko funkcje 15/16.
Sekcja Status umożliwia ustawienie opcjonalnego adresu statusu komunikacji z urządzeniem slave oraz sposobu zachowania w chwili, gdy pojawia się błąd komunikacji.
W tym przypadku typ urządzenia skonfiguruj jako Modicon PLC 5-Digit Addressing, obsługujący wszystkie funkcje Modbus.
W zakładce Scan List, zgodnie z dokumentacją, dokonaj mapowania zmiennych w sterowniku pochodzących z modułu SmartMod.
Wybierz ADD i z listy Device Name wskaż wcześniej dodane urządzenie slave. W polu Device register ustaw adres 00001, a w polu Length wpisz 4.
W sekcji Local podaj rejestr sterownika %M16, w którym będą przechowywane stany wejść, odczytane z modułu SmartMod.
W sekcji Update Type sposób aktualizacji zmiennych ustaw jako Polled Read. Oznacza to, że sterownik w każdym cyklu będzie aktualizował stan zmiennych.
Analogicznie skonfiguruj mapowanie zmiennych wyjściowych. Wybierz Add i ustaw Device Register na 00017, a długość (Length) na 4.
W sekcji Local podaj rejestr sterownika %m32, z którego będziesz wystawiać sygnały wyjściowe do modułu SmartMod.
Sposób aktualizacji zmiennych ustaw jako Polled Read/Write. Oznacza to, że sterownik będzie aktualizował stan wyjść na module SmartMod – w chwili, gdy zmieni się ich stan.
Rozbudowa aplikacji o dodatkowy ekran operatorski
Teraz rozbudujesz aplikację o ekran operatorski, na którym będą wizualizowane stany sygnałów wejściowych i wyjściowych, pochodzących z modułu SmartMod.
W tym celu utwórz kolejny ekran operatorski. Zgodnie ze sposobem pokazanym w poprzednich artykułach, umieść na nim 4 lampki i 4 przełączniki.
Utwórz nowe zmienne wejściowe i podłącz je pod obiekt lampek. Zmienną o adresie %M16 nazwij Smartmod_IN0.
Lampkę z podłączoną zmienną %M16 opisz jako Wejscie IN0.
Analogicznie postępuj, tworząc kolejne trzy zmienne wejściowe: %M17, %M18 i %M19.
Po utworzeniu zmiennych wejściowych, utwórz nowe zmienne wyjściowe i podłącz je pod obiekt przełącznika. Jako pierwszą utwórz zmienną o nazwie SmartMod_OUT0 i adresie %M32.
Obiekt „Switch” opisz jako Wyjscie OUT0. Aby to zrobić, skorzystaj z pola Legend.
Analogicznie postępuj, tworząc kolejne trzy zmienne wyjściowe: %M33, %M34, %M35.
Umieść na ekranie także pole tekstowe o nazwie SmartMod I/O oraz przycisk Screen Jump i skonfiguruj go jako Simulate ESC.
Ten ekran operatorski będzie wywoływany z poziomu ekranu pierwszego. W tym celu na ekranie numer 1 dodaj obiekt Screen Jump. Ekranem docelowym będzie ekran numer 9. Zaznacz opcję Allow Escape.
Tak przygotowany program wgraj do sterownika.
Podłącz zasilanie do układu SmartMod i kabel komunikacyjny pomiędzy sterownikiem a modułem. Z poziomu ekranu 9 wysteruj wyjścia modułu.
W kolejnym artykule z cyklu Kurs programowania PLC od podstaw: Komunikacja w sieci CsCAN
- Co to jest protokół CsCAN i jak wygląda komunikacja w tym protokole?
- Jak wygląda architektura w sieci CsCAN?
- Jak połączyć układ SmartStix ze sterownikiem Horner XL7e?
- Jak skonfigurować odczyt zmiennych z modułu SmartStix w sterowniku XL7e?
Plusa z minusem łączycie? 3 rysunek
Niektóre urządzenia mają odwrócone piny. Tutaj to dotyczy przesyłania i odbierania ramek, dlatego nawet jak coś nie działa to jednym z sugerowanych rozwiązań jest zamiana sygnałów, czyli zamianą + z -.
Nie ma to nic wspólnego z zamianą zasilania czy czymś innym. Sygnał odwrócony = A = (-) = D- = TxD-/RxD-
Sygnał nieodwrócony = B = (+) = D+ = TxD+/TxD-
Jednak niektórzy producenci stosują odwrotne oznaczanie, czyli że A = D-, B=D+.