Rozdział 11. MODBUS

Spis treści

11.1. Protokół komunikacyjny
11.2. Zaimplementowane funkcje
11.3. Rejestry INPUT

11.1. Protokół komunikacyjny

Moduł LB-490 zapewnia obsługę protokołu MODBUS/TCP, zgodnie ze specyfikacją Modbus Organization. Używany jest domyślnie przeznaczony dla tego protokołu port 502. Akceptowane jest jednocześnie tylko jedno połączenie TCP, wszystkie kolejne próby połączenia są odrzucane. Dodatkowo, jako rozszerzenie, obsługiwana jest również komunikacja za pomocą protokołu UDP - protokół jest identyczny jak dla TCP, również używany jest port 502.

11.2. Zaimplementowane funkcje

Zaimplementowane są następujące funkcje:

  • 4 - Read Input Registers,

  • 43/14 - Read Device Identification

11.3. Rejestry INPUT

Poniższa tabela przedstawia dostępne rejestry typu INPUT (odczyt funkcją 04 – Read Input Registers).

Podane adresy to adresy protokołowe. Numer rejestru MODBUS typu INPUT oblicza się dodając do adresu protokołowego wartość 30001.

Wszystkie wartości są w kolejności bajtów big-endian (starszy-młodszy), high byte / low byte, high word / low word.

UWAGA: dotyczy wersji firmware ≥ 4.6, dla LB-480 i LB-490. Starsze wersje firmware w LB-480 udostęniają tylko następujący podzbiór rejestrów: 0-10, 20-27, 28-35, 36-43, 64-191, 192-319. Starsze wersje firmware w LB-490 udostępniają taki sam podzbiór rejestrów jak LB-480, w związku z czym możliwy jest odczyt danych tylko dla wejść 1-8.

Tryby pracy wejść, typy czujników, zmiennych, wartości i jednostki zmiennych są opisane w rozdziale Tryby pracy, typy czujników, wyniki pomiarów i zmienne.

adres typ wartość
Informacje ogólne o urządzeniu
0 16-bit unsigned integer Typ urządzenia (stała wartość 490).
1 16-bit unsigned integer Numer seryjny urządzenia.
2–3 32-bit unsigned integer Wersja bootloader'a: bity 24–31: numer wersji główny, bity 16–23: numer wersji poboczny, bity 8–15: numer rewizji, bity 0–7: numer beta.
4-5 32-bit unsigned integer Data wydania bootloader'a: bity 16–31: rok, bity 8–15: miesiąc, bity 0–7: dzień.
6–7 32-bit unsigned integer Wersja firmware: bity 24–31: numer wersji główny, bity 16–23: numer wersji poboczny, bity 8–15: numer rewizji, bity 0–7: numer beta.
8–9 32-bit unsigned integer Data wydania firmware: bity 16–31: rok, bity 8–15: miesiąc, bity 0–7: dzień.
10 16-bit unsigned integer Numer wersji protokołu komunikacyjnego.
11 16-bit unsigned integer Numer najniższej kombatybilnej wersji protokołu komunikacyjnego.
12 16-bit unsigned integer Ilość wejść na płytce głównej.
13 16-bit unsigned integer Ilość portów do podłączenia modułów rozszerzeń.
14–19   Nieużywane.
Informacje o wejściach IN1-IN16
20–35 16× 16-bit unsigned integer

Tryb pracy wejścia IN1-IN16

36–51 16× 16-bit unsigned integer Typ czujnika S300 na wejściu IN1-IN16; 0 gdy wejście pracuje w innym trybie niż S300 albo brak jest dołączonego czujnika na wejściu
52–67 16× 16-bit unsigned integer Numer seryjny czujnika S300 na wejściu IN1-IN16; 0 gdy wejście pracuje w innym trybie niż S300 albo brak jest dołączonego czujnika na wejściu
68–83 16× 16-bit unsigned integer Ilość zmiennych zdefiniowanych dla danego wejścia IN1-IN16.
Informacje o modułach PORT1-PORT6
84–89 6× 16-bit unsigned integer Tryb pracy (typ) modułu PORT1-PORT6.
90–95 6× 16-bit unsigned integer Status modułu PORT1-PORT6.
96–101 6× 16-bit unsigned integer Numer seryjny modułu PORT1-PORT6, jeśli numer jest dostępny.
102–107 6× 16-bit unsigned integer Ilość zmiennych zdefiniowanych dla danego modułu PORT1-PORT6.
Wyniki pomiarów z wejść IN1-IN16
108–363 16× 8× 32-bit integer

numer_rejestru = początek_bloku + ((nr_wejścia - 1) * 8 + (nr_zmiennej - 1)) * 2

 

Wartość numeryczna w postaci stałoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na wejściu IN1-IN16; i dla danej kolejnej zmiennej 1-8.

Jeżeli wejście jest nieaktywne lub dana zmienna nie istnieje, to zwracana jest wartość specjalna 1000000000. Jeżeli wykryta została sytuacja awaryjna (np. zwarcie czujnika), to zwracana jest wartość specjalna -1000000000.

364–619 16× 8× 32-bit float

numer_rejestru = początek_bloku + ((nr_wejścia - 1) * 8 + (nr_zmiennej - 1)) * 2

 

Wartość numeryczna w postaci zmiennoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na wejściu IN1-IN16 i dla danej kolejnej zmiennej 1-8.

Jeżeli wejście jest nieaktywne, dana zmienna nie istnieje lub wykryta została sytuacja awaryjna (np. zwarcie czujnika) to zwracana jest wartość specjalna NaN.

620–747 16× 8× 16-bit unsigned integer

numer_rejestru = początek_bloku + (nr_wejścia - 1) * 8 + (nr_zmiennej - 1)

 

Ilość cyfr po przecinku w wyniku pomiaru. Ta wartość ma znaczenie dla wyników w postaci stało- i zmiennoprzecinkowej: dla wartości stałoprzecinkowej oznacza w którym miejscu należy postawić przecinek, dla wartości zmiennoprzecinkowej oznacza precyzję i ilość znaczących cyfr po przecinku w wyniku.

Jeżeli wejście jest nieaktywne, dana zmienna nie istnieje lub wykryta została sytuacja awaryjna (np. zwarcie czujnika) to zwracana jest wartość 0.

Wyniki pomiarów z modułów PORT1-IN6

UWAGA: nie dotyczy wielowejściowych modułów LB-499-AIN, LB-499-GIN. Wyniki z czujników podłączonych do wejść tych modułów są w sekcji danych z wejść modułów wielowejściowych.

844–939 16× 8× 32-bit integer

numer_rejestru = początek_bloku + ((nr_wejścia - 1) * 8 + (nr_zmiennej - 1)) * 2

 

Wartość numeryczna w postaci stałoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na porcie PORT1-IN6; i dla danej kolejnej zmiennej 1-8.

Jeżeli wejście jest nieaktywne lub dana zmienna nie istnieje, to zwracana jest wartość specjalna 1000000000. Jeżeli wykryta została sytuacja awaryjna (np. zwarcie czujnika), to zwracana jest wartość specjalna -1000000000.

940–987 16× 8× 32-bit float

numer_rejestru = początek_bloku + ((nr_wejścia - 1) * 8 + (nr_zmiennej - 1)) * 2

 

Wartość numeryczna w postaci zmiennoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na wejściu IN1-IN16 i dla danej kolejnej zmiennej 1-8.

Jeżeli wejście jest nieaktywne, dana zmienna nie istnieje lub wykryta została sytuacja awaryjna (np. zwarcie czujnika) to zwracana jest wartość specjalna NaN.

988–1179 16× 8× 16-bit unsigned integer

numer_rejestru = początek_bloku + (nr_wejścia - 1) * 8 + (nr_zmiennej - 1)

 

Ilość cyfr po przecinku w wyniku pomiaru. Ta wartość ma znaczenie dla wyników w postaci stało- i zmiennoprzecinkowej: dla wartości stałoprzecinkowej oznacza w którym miejscu należy postawić przecinek, dla wartości zmiennoprzecinkowej oznacza precyzję i ilość znaczących cyfr po przecinku w wyniku.

Jeżeli wejście jest nieaktywne, dana zmienna nie istnieje lub wykryta została sytuacja awaryjna (np. zwarcie czujnika) to zwracana jest wartość 0.

Informacje o wejściach modułów wielowejściowych (LB-499-AIN, LB-499-GIN)
988-995 1020-1027 1052-1059 1084-1091 1116-1123 1148-1155 6× 8× 16-bit unsigned integer

nr_rejestru = początek_bloku + (nr_portu - 1) × 32 + (nr_wejścia - 1)

 

Tryb pracy wejścia.

996-1003 1028-1035 1060-1067 1092-1099 1124-1131 1156-1163 6× 8× 16-bit unsigned integer

nr_rejestru = początek_bloku + (nr_portu - 1) × 32 + 8 + (nr_wejścia - 1)

 

Typ czujnika S300 na wejściu modułu lub 0 gdy wejście pracuje w innym trybie niż S300 albo brak jest dołączonego czujnika na wejściu.

1004-1011 1036-1043 1068-1075 1100-1107 1132-1139 1164-1171 6× 8× 16-bit unsigned integer

nr_rejestru = początek_bloku + (nr_portu - 1) × 32 + 16 + (nr_wejścia - 1)

 

Numer seryjny czujnika S300 na wejściu lub 0 gdy wejście pracuje w innym trybie niż S300 albo brak jest dołączonego czujnika na wejściu.

1012-1019 1044-1051 1076-1083 1108-1115 1140-1147 1172-1179 6× 8× 16-bit unsigned integer

nr_rejestru = początek_bloku + (nr_portu - 1) × 32 + 24 + (nr_wejścia - 1)

 

Ilość zmiennych zdefiniowanych dla danego wejścia.

Wyniki pomiarów z wejść modułów wielowejściowych
1180-1947 6× 8× 8× 32-bit integer

numer_rejestru = początek_bloku + (((nr_portu - 1) × 8 + (nr_wejścia - 1)) × 8 + (nr_zmiennej - 1)) * 2

 

Wartość numeryczna w postaci stałoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na porcie PORT1-IN6; i dla danej kolejnej zmiennej 1-8.

Jeżeli wejście jest nieaktywne lub dana zmienna nie istnieje, to zwracana jest wartość specjalna 1000000000. Jeżeli wykryta została sytuacja awaryjna (np. zwarcie czujnika), to zwracana jest wartość specjalna -1000000000.

1948-2715 6× 8× 8× 32-bit float

numer_rejestru = początek_bloku + (((nr_portu - 1) × 8 + (nr_wejścia - 1)) × 8 + (nr_zmiennej - 1)) * 2

 

Wartość numeryczna w postaci zmiennoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na wejściu IN1-IN16 i dla danej kolejnej zmiennej 1-8.

Jeżeli wejście jest nieaktywne, dana zmienna nie istnieje lub wykryta została sytuacja awaryjna (np. zwarcie czujnika) to zwracana jest wartość specjalna NaN.

2716-3099 6× 8× 8× 16-bit unsigned integer

numer_rejestru = początek_bloku + ((nr_portu - 1) × 8 + (nr_wejścia - 1)) × 8 + (nr_zmiennej - 1)

 

Ilość cyfr po przecinku w wyniku pomiaru. Ta wartość ma znaczenie dla wyników w postaci stało- i zmiennoprzecinkowej: dla wartości stałoprzecinkowej oznacza w którym miejscu należy postawić przecinek, dla wartości zmiennoprzecinkowej oznacza precyzję i ilość znaczących cyfr po przecinku w wyniku.

Jeżeli wejście jest nieaktywne, dana zmienna nie istnieje lub wykryta została sytuacja awaryjna (np. zwarcie czujnika) to zwracana jest wartość 0.