Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2018/05/modbus-rtu-mitsubishi-electric-plc-fx5u.jpg

Przykład Komunikacji Modbus RTU dla sterowników Mitsubishi Electric FX5U

autor: Przemek Czech.

Mój pierwszy artykuł dotyczył komunikacji pomiędzy falownikiem IG5A a sterownikiem SCADA WebHMI przy pomocy Modbus’a RTU. Stwierdziłem, że warto by wyczerpać temat do końca związany z Modbusem. Dzisiaj więc zajmiemy się tym protokołem z wykorzystaniem popularnego sterownika firmy Mitsubishi FX5U (w kolejnych artykułach będę chciał również pokazać to na Siemensie i może coś z Codesys’a).

Do testów będę wykorzystywał falownik IG5A LS, znany z artykułu o WebHMI, więc nie będę się rozwodził nad konfiguracją sprzętową (cały proces konfiguracji znajdziemy pod tym linkiem WebHMI i Modbus RTU).


Podstawy Modbus RTU

Więc zaczynajmy na początek słów parę na temat samego Modbusa.

Wyróżniamy trzy podstawowe rodzaje Modbusa:

 TCP/IP – wykorzystujący ethernet,

ASCI – nieco archaiczny (przeważnie RS 232),

 RTU (szeregowy) – pracujący w standardzie RS 485.

Modbus RTU wykorzystuję topologię magistrali (bus). Więc początek oraz koniec sieci trzeba zaterminować rezystorami (w naszym przypadku nie musimy korzystać z fizycznych rezystorów gdyż i PLC i falownik mają wbudowane, wystarczy przełączyć dip switcha)

W sieci Modbusowej, występują dwa rodzaje hostów Master oraz slave. Różnica między nimi jest taka, że tylko Master może żądać rozpoczęcia transmisji. Więc slave nasłuchuje i odpowiada, nie może on wysłać żądania do Mastera.

Każde urządzenie w tej sieci ma swój adres (podobnie jak w Profibusie) od 0 – 255. Liczba nie jest przypadkowa ponieważ w ramce na adresowanie zajęty jest tylko jeden bajt.

Do okablowania w dużej ilości przypadków używa się skrętki Ethernetowej aczkolwiek widziałem też okablowanie zwykłym kablem 3×0.34 i to też działało. Do komunikacji używa się trzech przewodów RX, TX , SG czyli nadajnik, odbiornik oraz uziemienie.

Korzystając z FX5U nie jesteśmy już w tak komfortowej sytuacji jak przy użyciu WebHMI ponieważ, tutaj niezbędna jest nam znajomość budowy ramki komunikacyjnej.

Adress field  – 1 Bajt  – obszar w którym zapisujemy adres urządzenia z którym rozpoczynamy komunikację jak wcześniej wspomniałem od 1 – 255 (nigdy nie ustawiamy 0 z racji na to że jest to brodcast – adres rozgłoszeni owy).

Function Code – 1 Bajt –  kod funkcji czyli wartość numeryczna operacji jaką mamy wykonać inna dla odczytu oraz dla zapisu.

Tutaj lista wszystkich operacji:

Data – jest to krotność bajtu – w tej sekcji, znajdują się informacje dotyczące którego rejestru poszukujemy oraz jakie dane chcemy  w nim zapisać.

CRC – 2 bajty – sekcja odpowiedzialna za kontrolę przesyłu danych. (więcej na ten temat można znaleźć w artykule na iAutomatyka).

Ogólnie przyjętą konwencją jest to, że podczas budowania ramki posługujemy sie szesnastkowym systemem liczbowym (w Mitsubishi wartość szesnastkową poprzedzamy indeksem H np: H1, H5, HA, HFF ).

Okablowanie:

Z racji tego, że nasz PLC ma już wbudowany port RS-485 więc nie potrzebujemy żadnych dodatkowych adapterów ani modułów.

Podłączamy zestaw jak na schemacie.

Trzeba pamiętać o tym aby ustawić rezystory terminujące. Ustawiamy więc dip switche na PLC oraz falowniku.

Konfiguracja

Uruchamiamy GxWorks 3 i tworzymy nowy projekt wybierając sterownik FX5C.

Następnie musimy określić sposób komunikacji komputera ze sterownikiem.

W tej serii sterowników nie potrzebujemy żadnych specjalnych kabli (interfejsów) aby się z nim połączyć wystarczy zwykły kabel Ethernetowy.

Klikamy Online -> Current Connection Destination -> Directly Connect to CPU.

W kolejnym oknie jeżeli wszystko podłączyliśmy poprawnie automatycznie zostanie wybrana nasza karta sieciowa. Jeżeli wszystko działa poprawnie po kliknięciu na Communiction Test powinniśmy otrzymać wiadomość o poprawnym połączeniu ze sterownikiem.

Warto również włączyć sobie widoczność komentarzy. Aby to zrobić klikamy View -> Comment Display, Statement Display oraz Note Display.

Przejdźmy teraz  do konfiguracji sprzętowej połączenia Modbus RTU. Z prawej strony w panelu Navigation  klikamy Parameter -> Module Parameter -> Rs 485 Serial Port.

Otwiera nam się okno z konfiguracją. Wybieramy rodzaj protokołu Modbus RTU.

Wyłączamy kontrolę parzystości, ustawiamy jeden bit stopu i wybieramy prędkość 19 200 bps.

Klikamy Apply i konfigurację sprzętową mamy już za sobą.

Programowanie MODBUS RTU

Zaczynamy od stworzenia Function Block’a aby zachować porządek w kodzie i nie ładować wszystkiego do Main’a (zresztą tak przygotowany kod można śmiało potem wykorzystać w innych projektach). Nadajemy nazwę naszej funkcji FB_ModbusRTU.

Czas zając się parametrami jakie Function Block będzie przyjmował z zewnątrz oraz  oddawał jako wyjściowe i oczywiście zmienne statyczne.

Wchodzimy w FB/FUN -> FBFILE -> FB_ModbusRTU->Local Label.

Teraz zastanówmy się jak skonstruować nasz blok aby był jak najbardziej zoptymalizowany. Więc zróbmy tak:

  • Z zewnątrz będziemy przyjmować parametry o wartości częstotliwości oraz czy falownik ma wystartować czy się zatrzymać.
  • W zmiennych statycznych naszego Function Block’a będziemy przechowywać ostatnio zadaną wartość częstotliwości oraz rejestru sterowania i po przyjściu nowych wytycznych co do sterowania i częstotliwości będziemy porównywać obie zmienne jeżeli są inne będziemy konstruować oraz wysyłać ramkę.

Zaletą takiego rozwiązania jest to, że nie musimy wysterować żadnej zmiennej odpowiedzialnej za wysyłanie co zrzuca z programisty nieco pracy oraz w podczas wysterowania obu zmiennych odpowiedzialnych za częstotliwość oraz sterowanie w jednym cyklu kolejkuje zadania czekając aż zostanie wysłana jedna ramka poprawnie wysyła drugą. Jest to moim zdaniem najbardziej optymalne rozwiązanie.

Będą nam potrzebne następujące zmienne:

SlaveID – zmienna do ramki która będzie przechowywać adres urządzenia do którego wysyłamy dane

FunctionCode – wartość numeryczna działania odczyt / zapis

RegisterAdress – adres rejestru (odczytywany  z PDF’a urządzenia)

Frq – zmienna wejściowa – częstotliwość  zadana

Frq_A – częstotliwość aktualna zapisywana po poprawnym wysłaniu ramki

Wysyłanie – zmienna wysterowana kiedy ramka jest wysłana tzw. Busy Flag

Start – zadana praca falownika

Start_A – ostatnio zapisany stan pracy falownika

Kiedy znamy już algorytm działania czas zaznajomić się z funkcją do wysyłania

Funkcja ADPRW

Oprócz oczywistych skomentowanych już zmiennych pojawia się czwarty argument w naszym przypadku K1 – ilość rejestrów do wysłani oraz M1 – trzy elementowa tablica wyniku operacji. Nas będzie interesował drugi element czy zajętość (u nas będzie to marker M2).

Tak przedstawia się ciało funkcji:

Analiza kodu.

Zadajemy częstotliwość, jeżeli jest inna niż ostatnio wysłana to ustaw parametry ramki.  Ważne żeby podczas zapisywania adresu rejestru zawsze odjąć jeden (jeżeli adres ma wartość 5 to zapisujemy 4). Tak spreparowane wartości podajemy jako argumenty do funkcji ADDPRW. Po poprawnym wysłaniu ramki sprawdzamy wartość zmiennej Rejestr jeżeli jest taka sama jak częstotliwość zadana to aktualizujemy zmienna FRQ_A i kasujemy zmienna Wysyłanie. Podobnie dzieję się z start/stop. Z racji że kod nie jest specjalnie trudny nie będę się bardzo nad nim rozwodził 😉

Ostatnią rzeczą jest wywołanie funkcji w Main’ie.

oraz wgranie programu

Na potrzeby testu sterowanie wartościami jest wykonane przez forsowanie wartości zadanych do funkcji.

Podsumowanie:

Pomimo tego, że praca na Modbusie RTU w sterownikach PLC nie jest taka intuicyjna jak na WebHMI warto zgłębić wiedzę na ten temat chociażby dlatego, że większość falowników posiada ten własnie protokół i podczas wysterowania większej ilości urządzeń mamy oszczędność wyjść cyfrowych i analogowych. Mi osobiście udało się stabilnie działać na 15 falownikach w jednej sieci i program ten pracuje po dzień dzisiejszy na kilku maszynach.

Pozdrawiam
Przemek Czech

Artykuł nagrodzony!

Artykuł został zgłoszony jako Praca Konkursowa do Konkursu iAutomatyka w miesiącu Maj 2018 i zdobył poniższą nagrodę:

Uniwersalny klucz do szaf od WAGO

Nagrodę dostarcza WAGO – producent urządzeń automatyki przemysłowej i budynkowej oraz systemów połączeń dla elektrotechniki i elektroniki. Powstanie w 1951 roku firmy WAGO było wyrazem przekonania o słuszności obranego kierunku i stworzyło podwaliny pod dalszy rozwój technologii. Z czasem stała się ona standardem na całym świecie i teraz nie sposób wyobrazić sobie nowoczesnej instalacji elektrycznej czy systemu automatycznego sterowania bez wyrobów WAGO.  http://www.wago.pl/


🎁 Zwycięzca: Przemysła Czech

Praca konkursowa: Przykład komunikacji MODBUS RTU dla sterowników Mitsubishi FX5U



Utworzono: / Kategoria: , , ,
  • Autor: Przemek Czech
  • Automatyk, absolwent mechatroniki interesujący się sterownikami PLC oraz systemami nadrzędnymi a zwłaszcza tymi które przenoszą klasyczna automatykę w świat IT
  • Profil Autora

Reklama



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY
  • Selektor napędów Panasonic umożliwia przeglądanie napędów z serii MINAS, wyszukiwanie ich w prosty sposób, a nawet porównywanie ze sobą. Dzięki wyszukiwaniu po słowach kluczowych i przy użyciu funkcji filtrowania, potrzeba zaledwie sekund a...
  • Zapraszamy Cię na pełny kurs zdalnego dostępu SECOMEA. Kurs powstał z myślą o każdym, kto chce zgłębić tajniki zdalnego dostępu do maszyn i sieci przemysłowej. Zdalny dostęp rozwija się dynamiczne i zyskuje na znaczeniu zwłaszcza w sytuacji...
  • 1,200 PLN
    Szkolenie jest wprowadzeniem do systemu sterowania PSS4000 i środowiska programowania PAS4000. W jego trakcie omówiona zostanie zarówno struktura sprzętowa, jak i programowanie, a także diagnostyka kompletnego systemu sterowania. Poruszane ...
    Czas trwania: 8h
    Link: Terminy
  • ITP14 to uniwersalny wyświetlacz procesowy do monitorowania i kontroli procesów przemysłowych. To urządzenie ma zwartą, znormalizowaną konstrukcję i pasuje do standardowego otworu montażowego ⌀22,5 mm na lampy sygnalizacyjne. Zapewnia to sz...
  • Seria FX-100 Czujniki z serii FX-100 to najlepsze rozwiązanie pod względem stosunku jakości do ceny. Wyposażone są w funkcje szybkiego uczenia, co pozwala użytkownikom w szybki i prosty sposób przystosować czujnik do pracy z nieskomplikowan...
  •   Sterowniki FX5U zapewniają rodzinie FX wyższą wydajność oraz dodają nowe cechy, które wyznaczają standardy w klasie kompaktowych sterowników PLC. Pozwala to użytkownikom na tworzenie bardziej złożonych i zaawansowanych systemów automatyki...