MODBUS RTU dla PLC Vision/Samba

12.12.2019 How to / Sterowanie i akwizycja danych
MODBUS RTU dla PLC serii Vision i Samba - główne
Wizerunek autora
Wiktor Susfał Były pracownik Elmark Automatyka S.A.
Producent: UNITRONICS
  • Zakłady przemysłowe

Zawartość lekcji

Lekcja dotyczy komunikacji szeregowej z wykorzystaniem protokołu Modbus RTU. Efektem tego wpisu będzie proste programy dla dwóch sterowników PLC działających odpowiednio jako: Master oraz Slave.

Wytłumaczono tu przede wszystkim takie zagadnienia, jak:

  • komponenty potrzebne do ustanowienia takiej komunikacji w oparciu o produkty Unitronics;
  • konfiguracja sterowników PLC do pracy w trybach Master oraz Slave;
  • ponadto, budowa prostego programu odczytującego wartości zmiennych;
  • adresacja rejestrów Modbus dla produktów od Unitronics.

Potrzebne komponenty

W tym przypadku, wykorzystywane są dwa sterowniki PLC:

Do ustanowienia komunikacji szeregowej potrzebny będzie jeszcze oczywiście odpowiedni port. Przed przystąpieniem do pracy, należy się więc upewnić, że obydwa PLC posiadają odpowiednie wejście.

Dla sterowników PLC od Unitronics serii Vision i Samba odpowiedni port wygląda jak niżej (może się on różnić w zależności od modelu PLC).

MODBUS RTU dla PLC od Unitronics - port szeregowy dla serii V130, V350, V430, V700 i SAMBA

Port szeregowy dla sterownika PLC V700 - widok po montażu

Zobacz produkt w sklepie Elmark

Większość sterowników Vision jest już fabrycznie wyposażona w taki port.

Do komunikacji z użyciem powyższego wejścia używa się przewodów:

  • RS232 CB1 (z końcówką RJ11) - do komunikacji w standardzie RS232,
  • przewód dwużyłowy z końcówką RJ12 - do komunikacji po RS485.

Odpowiedni przewód do komunikacji RS232 można dokupić w sklepie Elmark jako akcesorium do sterownika. Końcówka RJ12 jest natomiast dołączano do każdego nowego portu szeregowego, pokazanego na zdjęciach wyżej.

Komunikacja Modbus RTU dla sterowników PLC od Unitronics

Po upewnieniu się, że posiadamy wszystkie potrzebne komponenty, można przejść dalej, do konfiguracji komunikacji po MODBUS RTU.

Mechaniczne ustawienie portów szeregowych

Porty szeregowe, takie jak pokazane na zdjęciach z początku wpisu, posiadają zestawy dwustanowych przełączników - tzw. DIP Switch. Poprzez odpowiednie ustawienie każdego z nich można ustawić dany port w tryb pracy według standardu RS232 lub RS485. (Dla niektórych modeli PLC ustawień tych dokonuje się przy użyciu zworek - podobnie jak dla I/O).

Należy pamiętać także, że dla osobno kupowanych portów oraz portów fabrycznie wbudowywanych w PLC, konfiguracja DIP Switch'ów może się różnić. To znaczy, że różne ustawienia przełączników ustawiają port w tryb np. RS232 w zależności od modelu PLC lub modelu portu.

W tym przypadku, używane sterowniki posiadają fabrycznie porty szeregowy, więc odpowiednich informacji należy szukać w ich instrukcjach użytkownika. Wszystkie tego typu pliki są dostępne do pobrania ze stron odpowiednich produktów w sklepie Elmark.

 

Konfiguracja DIP Switch dla sterownika V700Konfiguracja DIP Switch dla sterownika V700

 

 

 

Konfiguracja DIP Switch dla sterownika V430Konfiguracja DIP Switch dla sterownika V430

Ustawień DIP-Switch'y należy dokonywać na wyłączonym PLC.

Z uwagi na to, że w tym przypadku komunikacja zachodzi jedynie pomiędzy dwoma urządzeniami, wybrano standard RS232. Jeśli zachodzi potrzeba skomunikowania większej liczby urządzeń, należy wprowadzić zmiany jak dla standardu RS485 (według powyższych instrukcji).

Wstępne przygotowanie programów PLC

Zacznijmy nieco od końca, a mianowicie od konfiguracji ekranów HMI dla obydwu sterowników. Załóżmy, że nasz program dla PLC - Master będzie miał za zadanie odczytanie dwóch zmiennych ze Slave'a.

Zmienne te to Memory Integer (MI) oraz Memory Float (MF). Załóżmy również, że na PLC pełniącym rolę Slave'a, zmienne te mają adresy "10" w swoich kategoriach (MI10 i MF10). Na sterowniku PLC - Master, wartości dwóch powyższych zmiennych będą natomiast zapisywane odpowiednio pod adresy: MI1 oraz MF1.

To, co teraz należy zrobić, to:

  • przygotować HMI dla Master'a, który wyświetli wartości MI1 oraz MF1; co więcej HMI będzie zawierał przyciski, które później będą wyzwalać akcje odczytu zmiennych - należy do nich teraz przypisać dowolne zmienne bitowe, np. MB0 i MB1;
  • przygotować ekran HMI dla Slave'a, który wyświetli zmienne MI10 oraz MF10, a także pozwoli na ich ręczne wpisywanie z poziomu HMI.

MODBUS RTU dla PLC od Unitronics - Ekran HMI dla PLC-MasterEkran HMI dla PLC-Master

MODBUS RTU dla PLC od Unitronics - Ekran HMI dla PLC-SlaveEkran HMI dla PLC-Slave

Konfiguracja komunikacji MODBUS RTU w programie PLC

Czas rozpocząć budowę odpowiedniej logiki sterowników, która pozwoli na wymianę informacji pomiędzy nimi po protokole MODBUS RTU. Pierwszy poziom drabinki będzie taki sam zarówno dla Master'a, jak i Slave'a. Różnice polegać będą na wartościach poszczególnych opcji.

Pierwszy poziom drabinki realizuje następujące czynności (jedorazowo przy starcie programu):

  • nadanie unikalnej nazwy dla PLC - "PLC NAME" - dobrze znane z lekcji o komunikacji Ethernet;
  • inicjalizacja wykorzystywanego portu COM sterownika;
  • ustawienie parametrów komunikacji MODBUS RTU.

W ustawieniach bloczka "COM INIT" użytkownik podaje parametry takie jak:

  • numer wykorzystywanego portu "Com Port" - numer portu na obudowie sterownika PLC;
  • "Standard" - w tym przypadku to RS232;
  • parametry wiadomości - "Data Bits", "Parity", "Stop Bits";
  • prędkość przesyłu danych [bit/s] "Baud Rate" - dla sterowników wersji Enhanced oraz SAMBA może to być maksymalna prędkość: 115200; natomiast dla sterowników w wersji Standard maksimum to 57600; prędkość danych nie powinna być jednak w żadnym przypadku mniejsza niż 9600 bit/s .

Te ustawienia dla Master'a i Slave'a powinny być identyczne. Różnice pojawiają się natomiast dla bloczka "Modbus Configuration". Użytkownik określa tam:

  • numer wykorzystywanego portu "Com Port" - numer portu na obudowie sterownika PLC;
  • ID urządzenia w sieci - musi być unikalne dla każdego PLC; tutaj Master ma ID=1, natomiast Slave ID=2;
  • na tym etapie nauki parametry "Time Out" oraz "Retries" można pozostawić niezmienione;
  • ostatni przypisywany bit MB - "Function in Progress" służy natomiast do określania w programie, czy aktualnie jakieś zapytanie MODBUS jest wykonywane; użycie tego bitu pozwala zapobiec nadpisywaniu niektórych zapytań oraz utracie danych.

Dokończenie programu dla PLC - Slave

Zadanie to jest bardzo proste, gdyż musimy dodać tylko jeden element do drabinki dla Slave'a. Jest to bloczek "SCAN_EX", widoczny na trzecim z powyższego zestawu zdjęć.

SCAN_EXSCAN_EX

Odpowiada on za umożliwienie sterownikowi PLC-Master dostępu do danych zawartych w pamięci PLC-Slave. Co więcej, musi być on obecny w programie dla Slave'a.

W VisiLogic istnieją 3 podobne do siebie bloczki tego typu, jednak SCAN_EX jest najnowszym, który eliminuje niektóre niekompatybilności związane np. z dostępem do 32-bitowych (podwójnych) rejestrów.

W tym momencie, program dla PLC-Slave może zostać skompilowany i wgrany na uruchomiony sterownik (u nas to V430).

Konfiguracja odczytu zmiennych dla PLC-Master

Całość przebiegać będzie w następujący sposób. Użytkownik naciskając odpowiedni przycisk na HMI PLC-Master ("READ MI" lub "READ MF") ustawi w stan wysoki bit MB0 lub MB1. W zależności od stanu tych bitów, w programie sterownika musi zostać wywołana akcja odczytu określonej zmiennej - MI lub MF. Co więcej, należy tu też wykorzystać bit MB2 "Function in Progress", aby dopilnować, że żadne nowe zapytanie nie będzie wykonane, dopóki nie zakończy się poprzednie.

Odpowiedni fragment drabinki dla odczytu zmiennej MI przedstawiony niżej, po lewej.

Odczyt zmiennej MI przez PLC-Master z PLC-SlaveOdczyt zmiennej MI przez PLC-Master z PLC-Slave

 

Ustawienia bloczka MODBUS Read Holding RegistersUstawienia bloczka MODBUS Read Holding Registers

Warto zauważyć, że jeśli bit "Function in Progress" ma wartość wysoką (obecnie jest już wykonywane zapytanie), to kolejna funkcja MODBUS nie zostanie wywołana. Jednakże, bit "READING_MI" nie zostanie wtedy wyzerowany, więc PLC będzie próbował wykonać tę funkcję za każdym obiegiem pętli programu.

Jeśli chodzi o ustawienia bloczka "MODBUS Read Holding Registers" to prezentowane są na powyższym zdjęciu (po prawej). Użytkownik definiuje tam kolejno:

  • numer ID Slave'a, do którego kierowane jest zapytanie;
  • adres początkowy docelowego rejestru na urządzeniu Slave;
  • ilość rejestrów do odczytania podczas tego zapytania;
  • adres zmiennej w pamięci sterownika PLC-Master, do której ma zostać zapisana odczytana wartość;
  • zmienne typu MI oraz DW do zapisywania statusu wiadomości, ilości zapytań oraz ilości odpowiedzi ze strony Slave'a.

Powyższe wartości można przypisać „na sztywno", lub podać w formie odpowiednich zmiennych.

Zmienne MF odczytuje się za pomocą bloczka "MODBUS Read Float Registers", który konfiguruje się identycznie.

Na tym etapie nauki najważniejsze są podpunkty 1, 2, 3 oraz 4. Pierwszy parametr (Slave ID) jest prosty do uzupełnienia (u nas PLC-Slave ma ustawiony ID=2), a także adres zmiennej w programie PLC-Master jest znany (przeznaczyliśmy zmienną MI1 na wartości pochodzące z tego zapytania). Należy jednak pochylić się nad podpunktami 2 i 3, odnoszącymi się do adresowania rejestrów na urządzeniu, z którym się komunikujemy.

Adresowanie rejestrów dla PLC od Unitronics

Dla sterowników PLC od Unitronics istnieje niestandardowy sposób adresowania rejestrów w komunikacji MODBUS. Wynika to między innymi z tego, że w żadnym miejscu w programie PLC-Slave'a nie udostępniamy żadnych zmiennych. Master może zapytać podlegające mu urządzenia w sieci o każdą zmienną, o ile poda jej dobry adres.

W celu sprawdzenia tej adresacji, należy przejść do plików pomocy ("Help") w programie VisiLogic, do lokalizacji pokazanej niżej. Należy ponadto pamiętać, że inaczej adresowane są zmienne dla PLC w wersji Standard, a inaczej dla Enhanced oraz SAMBA.

Adresowanie zmiennych w PLC od UnitronicsAdresowanie zmiennych w PLC od Unitronics

W powyższych tabelach adresy są podawane w formacie szesnastkowym, natomiast odpowiednie parametry wejściowe bloczków MODBUS w drabince PLC są dziesiętne.

Tak więc, aby określić wymagany adres zmiennej w formacie dziesiętnym, należy:

  • wziąć odpowiednie przesunięcie dla danego typu zmiennej ("Pointer Value From") w formacie szesnastkowym;
  • przekonwerterować je na format dziesiętny (jest dużo takich konwerterów online) i dodać do wyniku odpowiedni numer zmiennej w pamięci sterownika.

Na przykład, chcąc wyznaczyć adres rejestru MODBUS dla zmiennej MF10 w pamięci PLC-Slave, należy odczytać parametr "Pointer Value From". Na powyższy zdjęciu go nie widać, ale jest to 4000 w formacie szesnastkowym. Po konwersji na format dziesiętny otrzymujemy: 16384. Zmienna MF w pamięci PLC-Slave ma numer 10, więc końcowy wynik to: 16384 + 10 = 16394.

Po podobnym rozumowaniu, otrzymujemy adres rejestru dla zmiennej MI10 w programie PLC-Slave jako: 10.

Warto zwrócić uwagę na jedną rzecz. Zmienne MI to zmienne 16-bitowe, zajmują więc jeden rejestr. Zmienne MF natomiast są 32-bitowe, zajmują więc dwa rejestry. Fakt ten należy uwzględnić przy podawaniu parametru "Vector Length" w konfiguracji bloczków MODBUS, które odczytują wartości rejestrów.

Jeśli chodzi o sam odczyt rejestrów MODBUS, w tym miejscu posiadamy już kompletne programy dla obydwu PLC. Należy pamiętać, że komunikacja ta zadziała wtedy, jeśli sterowniki nie będą podłączone do komputera za pomocą przewodu USB.

Informacje dodatkowe

Zapis wartości rejestrów/bitów

Jeśli chodzi o wykorzystanie pozostałych funkcji MODBUS, środowisko VisiLogic oferuje kolejne bloczki funkcyjne. Są one dostępne w zakładce "FB's -> MODBUS". Użytkownik może wybrać spośród standardowych funkcji MODBUS, które pozwalają komunikować PLC od Unitronics z urządzeniami firm trzecich. Informacje na temat konfiguracji pozostałych bloczków można znaleźć w plikach "Help", w lokalizacji pokazanej na powyższym zdjęciu.

Jeśli chodzi o komunikację w sieci z większą ilością urządzeń Slave, warto zastosować się do pewnych wytycznych. W takim przypadku należy wybrać standard RS485 do przesyłu danych. Więcej o okablowaniu oraz komunikacji po RS485 można znaleźć w plikach "Help" przechodząc do "Home -> Communications -> RS485 Options".

Co więcej, podczas komunikacji z wieloma urządzeniami Slave, należy rozważyć wprowadzanie opóźnień w programie, po wystąpieniu każdego zapytania. Jest to zalecenie Producenta. Opóźnienia można wywołać np. za pomocą timer'ów. Zalecane opóźnienia dla różnych typów sterowników PLC od Unitronics można odczytać z plików pomocy. Wartości te wahają się od 5 do 40 milisekund w zależności o najmniej wydajnego sterownika w sieci.

Podsumowanie

W tym miejscu kończy się wpis o komunikacji szeregowej MODBUS RTU dla PLC od Unitronics.

Po wgraniu programu na sterowniki i spięciu ich przewodem RS232 CB1 należy pamiętać o odłączeniu ich od komputera (jeśli były programowanie przez przewód USB). Jeśli chcielibyśmy podejrzeć ich pracę (np. w programie Remote Operator), należałoby połączyć je z komputerem na np. za pomocą przewodu Ethernet lub wykorzystując złącze innego portu szeregowego.

Aby uzyskać dostęp do większej liczby lekcji, powróć na stronę startową kursu.

Do strony startowej kursu

Jeśli masz pytania, skontaktuj się z nami pod adresem e-mail: sterowniki@elmark.com.pl . Chętnie wysłuchamy również każdą konstruktywną krytykę na temat jakości tego kursu.

 

Skontaktuj się ze specjalistą Elmark

Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!