Promotic
WikipediaLinkedInYoutubeTwitterFacebook

PmModbusMr - Driver do komunikacji poprzez protokół Modbus Master

Przed zastosowaniem tego drivera w aplikacji PROMOTIC należy zaznajomić się z rozdziałem: Komunikacja przy pomocy driverów PROMOTIC.
 
Podstawowe właściwości drivera:
- Zastosowanie tego drivera wymaga zakup licencji: PmModbusMr. Z wersją freeeware PmFree lub przy opracowywaniu aplikacji (z licencją deweloperską w celach testowania) element ten zawsze funkcjonuje.
- Komunikacja przebiega poprzez Ethernet lub po łączu szeregowym komputera (COM1, COM2 ...).
- Aplikacja PROMOTIC jest z punktu widzenia tej komunikacji MASTER (tzn. wywołuje transmisję danych). Dla komunikacji typu SLAVE można zastosować: PmModbusSl - Driver do komunikacji poprzez protokół Modbus Slave.
- Driver jest wbudowany do systemu PROMOTIC przy pomocy obiektu PmComm.

Driver umożliwia stosowanie obiektów PmCommMsg oraz PmCommData. Dla zwykłych przypadków transmisji danych jest bardziej dogodne zastosowanie obiektu PmCommData.

Dla łatwego dodania tego drivera do aplikacji jest dogodne zastosować: Konfiguracje wstępne w grupie "Modbus protokół komunikacyjny"

- Komunikacja jset sieciowa, tzn. przy pomocy jednego obiektu PmComm można komunikować się z kilkoma urządzeniami (protokół umożliwia adresację urządzeń).
- Driver umożliwia tryby transferu TCP, RTU oraz ASCII.
- Można przenosić standardowe wartości 1-bitowe (bits) oraz 16-bitowe (registers) oraz mniej standardowe wartości 32-bitowe typu float oraz long oraz 64-bitowe wartości (float double precision).
- Driver można wykorzystaś także do komunikacji poprzez protokół JBUS. Protokół JBUS jest podzbiorem protokołu Modbus RTU. Wszystkie wiadomości implementowane w omawianym driverze (patrz niżej) wspiera także protokół JBUS.
 
Driver wspiera następujące typy danych Modbus:
- b = Bit (1Bit):

W PLC: 1bit. W aplikacji PROMOTIC: typ danych Boolean.

- W = Word (2Byte Unsigned Integer):

W PLC: 16 bitów (wartość od 0 do 65535). W aplikacji PROMOTIC: typ danych Long.

- I = Int (2Byte Signed Integer):

W PLC: 16 bitów (wartość od -32767 do +32767). W aplikacji PROMOTIC: typ danych Integer.

- L1 = Long type 1 (4Byte Signed Integer):

W PLC: 32 bitów. W aplikacji PROMOTIC: typ danych Long.

Wyłącznie do wiadomości typu 03, 04, 16.

Format binarny tego typu jest taki sam jak w PC, tylko kolejność bajtów jest zmieniona (kolejność bajtów PC:1234, PLC:2143).

Stosowane na przykład: Modicon, Wago, itd.

- L2 = Long type 2 (4Byte Signed Integer):

Taki sam jak poprzedni typ danych, tylko bajty są ułożone w innej kolejności (kolejność bajtów PC:1234, PLC:4321).

Stosowane na przykład: JUMO.

- L3 = Long type 3 (4Byte Signed Integer):

Taki sam jak poprzedni typ danych, tylko kolejność bajtów nie zmienia się - jest zgodna z komputerem (kolejność bajtów PC:1234, PLC:1234).

- LL2 = LongLong type 2 (8Byte Signed Integer):

W PLC: 64 bitów. W aplikacji PROMOTIC: typ danych Double. (kolejność bajtów PLC:87654321)

Wyłącznie do wiadomości typu 03, 04, 16.

8-bajtowa liczba całkowita nie może zostać zapisana z dokładnością do liczb całych do żadnego typu danych. Tu zapis jest wykonany do typu Double, ale dla bardzo dużych liczb póżniej dochodzi do niedokładnosści (maksymalnie +-2047).

Stosowane na przykład: Licznik energii iEM3100(Schneider-Electric), Multimeter EPM-07S(ENTES) ...

- R = Float type 1 (4Byte - IEEE 754):

W PLC: 32 bitów. W aplikacji PROMOTIC: typ danych Single.

Wyłącznie do wiadomości typu 03, 04, 16.

Format binarny tego typu jest według IEEE-754, a więc taki sam jak w PC, tylko kolejność bajtyów jest zmieniona (kolejność bajtów PC:1234, PLC:2143).

- R2 = Float type 2 (4Byte - IEEE 754):

Taki sam jak poprzedni typ danych, tylko bajty są ułożone w innej kolejności (kolejność bajtów PC:1234, PLC:4321).

Stosowane na przykład: ABB AC500.

- R3 = Float type 3 (4Byte - IEEE 754):

Taki sam jak poprzedni typ danych, tylko kolejność bajtów nie zmienia się - jest zgodna z komputerem (kolejność bajtów PC:1234, PLC:1234).

- D1 = Float Double-precision type 1 (8Byte - IEEE 754):

W PLC: 64 bitów W aplikacji PROMOTIC: typ danych Double.

Wyłącznie do wiadomości typu 03, 04, 16.

Format binarny tego typu jest według IEEE-754, a więc taki sam jak w PC, tylko kolejność bajtyów jest zmieniona (kolejność bajtów PC:12345678, PLC:21436587).

- D2 = Float Double-precision type 2 (8Byte - IEEE 754):

Taki sam jak poprzedni typ danych, tylko bajty są ułożone w innej kolejności (kolejność bajtów PC:12345678, PLC:87654321).

- D3 = Float Double-precision type 3 (8Byte - IEEE 754):

Taki sam jak poprzedni typ danych, tylko kolejność bajtów nie zmienia się - jest zgodna z komputerem (kolejność bajtów PC:12345678, PLC:12345678).

 

Zalecone wartości parametrów:

Zalecane wartości dla pozycji Parametry łącza szeregowego:
Ilość bitów informacji8 dla trybu RTU, 7 dla trybu ASCII
Ilość bitów stopu1 jeżeli jest wykorzystany parytet, 2 jeżeli parytet jest NO (żaden)
Zalecane wartości dla pozycji Parametry Ethernet:
Numer portu TCP/UDP502 (dla typu danych MODBUS TCP/IP)
Typ transmisji EthernetTCP (dla typu danych MODBUS TCP/IP)
Opis i zalecane wartości dla pozycji Parametry protokołu:
Typ danych protokołuWyłącznie dla Ethernetu. Określa wygląd danych protokołu. Możliwe opcje:
MODBUS TCP/IP - Standardowa komunikacja Ethernet MODBUS. W porównaniu z danymi przeznaczonymi dla łącza szeregowego odróżnia się specjalnym nagłówkiem i jest przenoszona poprzez Ethernet TCP na porcie 502.
Dane takie same jak dla łącza szeregowego - Opcję tą można wybrać na przykład w przypadku, kiedy urządzenie jest wyposażone w łącze szeregowe i przy pomocy konwertera RS232/Ethernet jest podłączone do Ethernetu. Jeżeli konwerter nie zmienia transmitowanych danych, wtedy można w ten prosty sposób komunikować się poprzez Ethernet z urządzeniem, które nie posiada wyjścia Ethernet.
Limit czasu odbioru odpowiedziWyłącznie dla łącza szeregowego. Odpowiednią wartością jest na przykład 2000 ms. Okres czasu (w milisekundach) w którym driver będzie oczekiwać na odpowiedć po odesłaniu wiadomości. Jeżeli do tego czasu nie zostanie odebrana żadna odpowiedć, wtedy transmisja wiadomości zostanie zakończona (zostanie wywołane zdarzenie onEndOfTransfer z błędem 24 lub 66).
Tryb transferuProtokół MODBUS ma dwie możliwości transmisji danych.

W parametrach wiadmomości obiektu PmCommMsg można ten tryb ewentualnie zmienić (w specjalnym przypadku, kiedy jest konieczna komunikacja z kilku PLC w różnych trybach).

RTU - Najczęściej stosowany tryb transmisji, kiedy dane są transmitowane w formie binarnej.
ASCII - Typ transmisji, w którym dane są transmitowane w formie ASCII. Ten tryb nie jest dostępny dla MODBUS TCP/IP.

Opis komunikacji przy pomocy obiektów PmCommData

Dla niniejszego drivera komunikacyjnego można zastosować obiekty PmCommData. Dla zwykłych transmisji danych jest to bardziej dogodne niż zastosowanie obiektu PmCommMsg.

Zmiennych w obiekcie PmCommData (albo jeszcze lepiej zmiennych w obiekcie PmData z rozszerzeniem danych ExtComm) może być dowolna ilości, mogą być dowolnego typu danych i w dowolnej kolejności. Driver sam w zoptymalizowany sposób odczyta dane z urządzenia przy pomocy wewnętrznie wytworzonych wiadomości komunikacyjnych.

Odczytywane są wszystkie zmienne (jeżeli konfigurator Odświeżanie danych zezwolone jest zaznaczony). Przy zapisie do zmiennej do urządzenia jest odesłana tylko zapisywana zmienna (jeżeli konfigurator Automatycznie przesyłaj przy zapisie do pozycji jest zaznaczony).

 
Opis konfiguratora ItemID:

ItemId jest identyfikatorem tekstowym pozycji, który służy do adresacji parametru w urządzeniu. Z konfiguratora ItemID driver stwierdzi, w jaki sposób ma zostać wartość pozycji wczytana lub wysłana. Tekst można wpisać ręcznie, lub ułożyć przy pomocy okna, które zostanie otwarte przy pomocy przycisku wprawo od konfiguratora. Do wprowadzenia można zastosować Makro wyrażenie (wartość jest obliczana przy uruchomieniu aplikacji).

Tekst może mieć wygląd na przykład "dev2.Ri33.W" o znaczeniu:

dev2 = pozycja znajduje się w PLC (device) pod adresem 2. Zamiast numeru można wprowadzić devD (=adres domyślny) i wtedy adres PLC będzie określony według konfiguratora "Domyślny adres PLC".
Ri33 = jest w obszarze danych "Input registers pod względnym adresem 33. Adres 33 jest tylko względny, podczas komunikacji zostanie doliczona wartość określona w konfiguratorze "Bazowe adresy danych".

Lista obszarów danych:

- Bo = obszar "Coil status / Output bits".
Do odbioru danych jest wykorzystana funkcja Modbus: FN01 (Read Coil Status, Read Output Bits).
Do zapisu danych jest zastosowana funkcja Modbus: FN05 (Force Single Coil, Write 1 Bit).
- BoM = obszar "Coil status / Output bits".
Do odbioru danych jest wykorzystana funkcja Modbus: FN01 (Read Coil Status, Read Output Bits).
Do zapisu danych jest zastosowana funkcja Modbus: FN15 (Force Multiple Coils, Write n Bits).

Od obszaru Bo różni się tylko sposobem zapisu (zamiast FN05 stosuje się FN15).

- Bi = obszar "Input status / Input bits".
Do odbioru danych jest wykorzystana funkcja Modbus: FN02 (Read Input Status, Read Input Bits).
Zapis danych nie jest możliwy..
- Ro = obszar "Holding/Output registers".
Do odbioru danych jest wykorzystana funkcja Modbus: FN03 (Read Holding/Output Registers).
Do zapisu danych jest zastosowana funkcja Modbus: FN16 (Preset Multiple Registers, Write n Registers).
- RoS = obszar "Holding/Output registers".
Do odbioru danych jest wykorzystana funkcja Modbus: FN03 (Read Holding/Output Registers).
Do zapisu danych jest zastosowana funkcja Modbus: FN06 (Preset Single Register, Write 1 Register).

Od obszaru Ro różni się tylko sposobem zapisu (zamiast FN16 stosuje się FN06).

Uwaga: Funkcja FN06 nie potrafi zapisywać 4 oraz więcej bajtowe wartości (na przykład typy danych Long oraz Float).

- RoB = obszar "Holding/Output registers". Do transmisji poszczególnych bitów.
Do odbioru danych jest wykorzystana funkcja Modbus: FN03 (Read Holding/Output Registers).
Do zapisu danych jest zastosowana funkcja Modbus: FN22 (22-Mask Write Register).

Przykład: RoB38.0 oznacza odczyt/zapis bitu nr. 0 w rejestrze 38.

- Ri = obszar "Input registers.
Do odbioru danych jest wykorzystana funkcja Modbus: FN04 (Read Input Registers).
Do zapisu danych jest zastosowana funkcja Modbus: FN16 (Preset Multiple Registers, Write n Registers).
- RiS = obszar "Input registers.
Do odbioru danych jest wykorzystana funkcja Modbus: FN04 (Read Input Registers).
Do zapisu danych jest zastosowana funkcja Modbus: FN06 (Preset Single Register, Write 1 Register).

Od obszaru Ri różni się tylko sposobem zapisu (zamiast FN16 stosuje się FN06).

Uwaga: Funkcja FN06 nie potrafi zapisywać 4 oraz więcej bajtowe wartości (na przykład typy danych Long oraz Float).

W = PLC posiada typ danych Word
 
Opis konfiguratora PmCommData > Parametry > Parametry specjalne:
Domyślny adres PLCW tym miejscu wprowadzony adres można zastosować przy ustawianiu konfiguratora ItemID w zmiennych w tym obiekcie (tzn. w zmiennych w zakładce Dane lub rozszerzeniach danych ExtComm). Adres amożna wprowadzić w ItemID:
- jako na przykład dev1... - wtedy wartość zmiennej będzie odczytywana z PLC o adresie 1.
- lub devD... - znak "D" w tym miejscu oznacza default, a oznacza to, że adres zostanie przejęty z niniejszego konfiguratora.

Ten parametr można podczas biegu aplikacji zmienić i odczytać w skrypcie przy pomocy metod: SetSpecParam("SlaveAddr") oraz GetSpecParam("SlaveAddr").

Bazowe adresy danychTutaj sąwprowadzane adresy początku obszaru danych (Bo, Bi, Ro, Ri).

Adresy tych obszarów są wstępnie ustawione na 0 (jeżeli nie zostanie wybrana konfiguracja wstępna dla określonego urządzenia - patrz Konfiguracje wstępne / Komunikacja / Modbus protokół komunikacyjny). Dla różnych rodzajów PLC adresy te mogą być inne (np. adresy często nie rozpoczynają się od 0 lecz od 1 lub 40001, itd.).

Podczas komunikacji "Adres pozycji danych" jest obliczony jako suma względnego adresu pozycji (określone w identyfikatorze ItemID) i bazowego adresu obszaru.

Maks.ilość zmiennych odebrana w jednej wiadomościDla każdego obszaru (Bo,Bi,Ro,Ri) określana jest maksymalna ilość zmiennych, które mogą być transmitowane w jednej wiadomości komunikacyjnej. Warości te są zależne od typu sterownika, z którym komunikujemy (niektóre sterowniki wspierają transmisję "małej ilości" rejestrów w jednej wiadomości, inne zaś wspierają większą ilośćrejestrów) - informacja ta jest zawarta w opisie sterownika lub należy to stwierdzić metodą "prób i błędów".

Wstępnie ustawionymi wartościami są 64 dla Bo oraz Bi, 32 dla Ro oraz Ri (jeżeli nie zostanie wybrana konfiguracja wstępna dla określonego urządzenia - patrz Konfiguracje wstępne / Komunikacja / Modbus protokół komunikacyjny).

Wstępnie ustawiona wartości są bardzo niskie. Poprzez zwiększenie tych wartości (jeżeli dane urządzenie umożliwia to) można osiągnąć przyspieszenie komunikacji, ponieważ wymagane dane mogą być transmitowane przy pomocy mniejszej ilości wiadomości komunikacyjnych.

Opis komunikacji przy pomocy obiektów PmCommMsg

Obiekty PmCommMsg można zastosować do specjalnych komunikacji, których nie można wykonać przy pomocy obiektu PmCommData. Na przykład przy pomocy wiadomości typu "XX-User defined opened function" można ułożyć dowolne rodzaje wiadomości Modbus, które inaczej nie są driverami wspierane.
 
W każdej wiadomości musi się znajdować adres SLAVE stacji z której dane są odczytywane lub do której dane są zapisywane. Adres ten wprowadza się w zakładce Dane-wysłanie danej wiadomości w zmiennej "Slave". (np. dla Modicon są ważne adresz Slave w zakresie 0-247.

Adres 0 jest wykorzystany dla broadcast, tzn. dla wiadomości, które przyjmują wszystkie stacje (jeżeli jest protokół Modbus wykorzystany na wyższej warstwie sieciowej, wtedy broadcast może nie być dozwolony). Driver te wiadomości tylko wysyła i nie oczekiwuje odpowiedzi - nie ma sens ustawianie adresu 0 dla wiadomości, które powinny odczytywać (np. wiadomości 0104).

 
Następnie w Dane-wysłanie w zmiennej "Addr" wpisuje się adres zmiennej w danej stacji. Wartość adresu zmiennej domyślnie ustawia się na 0. Niektóre urządzenia (np. Modicon, GE-Fanuc) jednak adresują od 1, i z tego powodu jest konieczne wprowadzać wartość Addr o 1 mniejszą.

Maksymalna ilość wartości (stanów, rejestrów) w jednej wiadomości jest zależna od rodzaju automatu PLC. Może być na przykład 32, 125, 128, 1024, itd.

 
Lista oraz opis wiadomości komunikacyjnych:
01-Read Coil Status (Read Output Bits): Wiadomość odczytuje n stanów wyjść (wartości 1-bitowe) od określonego adresu Addr.
02-Read Input Status (Read Input Bits): Wiadomość odczytuje n stanów wejść (wartości 1-bitowe) od określonego adresu Addr.
03-Read Holding Registers (Read Output Registers): Wiadomość odczytuje n rejestrów wyjściowych (wartości 16-bitowe) od określonego adresu Addr.
04-Read Input Registers: Wiadomość odczytuje n rejestrów wejściowych (wartości 16-bitowe) od określonego adresu Addr.
05-Force Single Coil (Write 1 Bit): Wiadomość zapisze do jednego stanu (wartość 1-bitowa) pod określonym adresem Addr.
06-Preset Single Register (Write 1 Register): Wiadomość zapisze do jednego rejestru (wartość 16-bitowa) pod określonym adresem Addr.
15-Force Multiple Coils (Write n Bits): Wiadomość zapisze n stanów (wartości 1-bitowe) od określonego adresu Addr.
16-Preset Multiple Registers (Write n Registers): Wiadomość zapisze n rejestrów (wartości 16-bitowe) od określonego adresu Addr.
22-Mask Write Register (Modify Register Using both AND & OR Masks): Wiadomość zapisze określone poszczególne bity do jednego rejestru (wartości 16-bitowej) przy pomocy AND oraz OR maskowania.
W zakładce Dane-wysłanie znajdują się zmienne:
Slave - Adres slave urządzenia, tzn. adres sterownika PLC./>
Addr - adres rejestru, do którego będą zapisywane bity.
AND_Mask - maska bitów, które mają zostać wyzerowane
OR_Mask - maska bitów, które mają zostać ustawione
W zakładce Dane-odbiór nie ma żadnej zmiennej.
XX-User defined opened function:

Wiadomość Modbus definiowana przez uytkownika. Można zastosować dla tych wiadomości, które nie są w inny sposób wspierane przez ten driver. Projektant może tu definiować kompletną zawartość wiadomości (nadawaną i odbieraną), musi przy tym uważać na kolejność oraz typ danych zmiennych DataX.

Zmienne DataX (w Dane-wysłanie i v Dane-odbiór) przedstawiają dane w protokole Modbus od znaku Function (bez tego znaku) i do znaku CRC (dla serial RTU, bez tego znaku) lub do końca wiadomości (dla Modbus TCP/IP). Dla trybu transmisji ASCII dane są wprowadzane identycznie jak dla trybu RTU oraz driver wtedy sam takie dane przetransformuje do ASCII.

W zakładce Dane-wysłanie znajdują się zmienne:
TXLength - Wielkość nadawanych danych (w bajtach). Nie jest to wielkość kompletnej nadawanej wiadomości lecz tylko tej jej części, która jest zapisana w zmiennych DataX w tej zakładce. Wartość -1 oznacza, że mają zostać nadane wszystkie zmienne DataX z tej zakładki.
RXLength - Maksymalna oczekiwana wielkość odbieranych danych (w bajtach). Nie jest to wielkość kompletnej odbieranej wiadomości lecz tylko tej jej części, która będzie zapisywana do zmiennych DataX w zakładce Dane-odbiór. Wartość -1 oznacza, że oczekiwana wielkość zostanie obliczona jako całkowita wielkość wszystkich zmiennych DataX z zakładki Dane-odbiór.

- jeżeli rozmiar wydaje się mniejsze niż w rzeczywistości odczytane dane, wtedy pojawi się błąd i odczytane dane nie będą przetwarzane.
- jeżeli rozmiar wydaje się większe niż w rzeczywistości odczytane dane, wtedy transmisja będzie trwać dłużej (będzie czekać na timeout), ale odczytane dane zostaną przetwarzane.

Slave - Adres slave urządzenia, tzn. adres sterownika PLC./>
Function - Numer (kod) funkcji Modbus. Na przykład 1 = Read Coil Status, 17 = Report Slave ID itd.
DataX - Dane definiowane przez użytkownika, które mają następują za numeren funkcji (bez końcowej sumy kontrolnej). Tych zmiennych (i różnych typów danych) może się w zakładce znajdować więcej lecz nadane zostaną tylko te, które zmieszczą się do nadawanej wiadomości (tzn. wg. wartości w TxLength).
W zakładce Dane-odbiór znajdujuą się zmienne:
Length - Wielkość rzeczywiście odebranych danych (w bajtach). Nie jest to wielkpść całej odebranej wiadomości lecz tylko tej jej części, która jest zapisana w zmiennych DataX w tej zakładce.
Function - Numer (kód) funkcji Modbus. Stadardowo powinna się tu znajdpować taka sama wartość jak w zakładce Dane-wysłanie.
DataX - Odebrane dane. Takich zmiennych (także różnych typów danych) może się w tej zakładce znajdować więcej, lecz wpisane zostaną tylko te, które znajdowały się w odebranej wiadomości.
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice