Moduł LB-856 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.
Zaimplementowane są następujące funkcje:
4 - Read Input Registers,
43/14 - Read Device Identification
Poniższa tabela przedstawia dostępne rejestry typu INPUT (odczyt funkcją 04 – Read Input Registers).
Wszystkie wartości są w kolejności bajtów starszy-młodszy (big-endian), high byte / low byte, high word / low word.
adres protokołowy | numer rejestru | typ | wartość |
---|---|---|---|
0 | 30001 | 16-bit unsigned integer, high byte / low byte | Typ urządzenia (stała wartość 856). |
1 | 30002 | 16-bit unsigned integer | Numer seryjny urządzenia. |
2+3 | 30003+30004 | 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 | 30005+30006 | 32-bit unsigned integer | Data wydania bootloader'a: bity 16..31: rok, bity 8..15: miesiąc, bity 0..7: dzień. |
6+7 | 30007+30008 | 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 | 30009+30010 | 32-bit unsigned integer | Data wydania firmware: bity 16..31: rok, bity 8..15: miesiąc, bity 0..7: dzień. |
10 | 30011 | 16-bit unsigned integer | Numer wersji protokołu komunikacyjnego. |
11 | 30012 | 16-bit unsigned integer | Numer najniższej kompatybilnej wersji protokołu komunikacyjnego. |
12..19 | 30013..20 | 16-bit unsigned integer | Bezpośredni wynik pomiaru z przetwornika A/C (przeznaczenie serwisowe). |
20 | 30021 | 16-bit unsigned integer | Tryb pracy wejścia CO2: 0 - wejście wyłączone, 1 - wejście włączone |
21 | 30022 | 16-bit unsigned integer | Tryb pracy wejścia O2: 0 - wejście wyłączone, 2 - wejście włączone |
22 | 30023 | 16-bit unsigned integer | Tryb pracy wejścia temperatury: 0 - wejście wyłączone, 3 - wejście włączone |
23 | 30024 | 16-bit unsigned integer | Tryb pracy wejścia 0-10V: 0 - wejście wyłączone, 4 - wejście włączone |
24 | 30025 | 16-bit unsigned integer | Tryb pracy wejścia S300: 0 - wejście wyłączone, 5 - wejście włączone |
25 | 30026 | 16-bit unsigned integer | Typ czujnika S300 na wejściu S300; 0 gdy brak jest dołączonego czujnika na wejściu |
26 | 30027 | 16-bit unsigned integer | Numer seryjny czujnika S300 na wejściu S300; 0 gdy brak jest dołączonego czujnika na wejściu |
27 | 30028 | 16-bit unsigned integer | Okres odbioru danych S300 w milisekundach. |
28+29 | 30029+30030 | 32-bit unsigned integer | Numer kolejny rekordu danych S300, zwiększany o 1 po odebraniu kolejnego rekordu. |
30+31 | 30031+30032 | 32-bit unsigned integer | Ilość błędów transmisji danych S300. |
32 | 30033 | 32-bit unsigned integer | Wynik pomiaru CO2 w postaci stałoprzecinkowej. Jeżeli wejście jest nieaktywne, to zwracana jest wartość specjalna 1000000000. |
34 | 30035 | 32-bit unsigned integer | Wynik pomiaru O2 w postaci liczby stałoprzecinkowej. Jeżeli wejście jest nieaktywne, to zwracana jest wartość specjalna 1000000000. |
36 | 30037 | 32-bit unsigned integer | Wynik pomiaru temperatury w postaci liczby stałoprzecinkowej. Jeżeli wejście jest nieaktywne lub brak pomiaru, to zwracana jest wartość specjalna 1000000000. Jeżeli wykryta została sytuacja awaryjna (np. zwarcie czujnika), to zwracana jest wartość specjalna -1000000000. |
38 | 30039 | 32-bit signed integer | Wynik pomiaru napięcia w postaci liczby stałoprzecinkowej. Jeżeli wejście jest nieaktywne, to zwracana jest wartość specjalna 1000000000. |
40+41 42+43 44+45 46+47 48+49 50+51 52+53 54+55 |
30041..30055 | 32-bit signed integer | Wartość numeryczna w postaci stałoprzecinkowej określająca wynik pomiaru dla wejścia S300. Kolejne rejestry zawierają wartości odpowiadające kolejnym wynikom z czujnika S300. to zwracana jest wartość specjalna 1000000000. Jeżeli wykryta została sytuacja awaryjna (np. zwarcie czujnika), to zwracana jest wartość specjalna -1000000000. |
56 | 30057 | 32-bit unsigned integer |
Wynik pomiaru CO2 w postaci zmiennoprzecinkowej.
Jeżeli wejście jest nieaktywne to zwracana jest wartość specjalna NaN. |
58 | 30059 | 32-bit unsigned integer |
Wynik pomiaru O2 w postaci zmiennoprzecinkowej.
Jeżeli wejście jest nieaktywne to zwracana jest wartość specjalna NaN. |
60 | 30061 | 32-bit unsigned integer |
Wynik pomiaru temperatury w postaci zmiennoprzecinkowej.
Jeżeli wejście jest nieaktywne lub wykryta została sytuacja awaryjna (np. brak lub zwarcie czujnika) to zwracana jest wartość specjalna NaN. |
62 | 30063 | 32-bit signed integer |
Wynik pomiaru napięcia w postaci zmiennoprzecinkowej.
Jeżeli wejście jest nieaktywne to zwracana jest wartość specjalna NaN. |
64+65 66+67 68+69 70+71 72+73 74+75 76+77 78+79 |
30065..30079 | 32-bit signed integer |
Wartość numeryczna w postaci zmiennoprzecinkowej
określająca wynik pomiaru dla wejścia S300. Kolejne rejestry
zawierają wartości odpowiadające kolejnym wynikom z czujnika S300.
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. |
128..207 | 300129..208 | 32-bit integer |
Wartość numeryczna w postaci stałoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na wejściu 1..5 i dla danej kolejnej zmiennej 1..8. Przesunięcie danego rejestru względem początku bloku można obliczyć następująco:
numer_rejestru = początek_bloku + ((nr_wejścia - 1) * 8 + (nr_zmiennej - 1)) * 2
np. dla wejścia nr 4 i zmiennej nr 2:
adres = 64 + ((4 - 1) * 8 + (2 - 1)) * 2 = 114
Ze względu na 2 słowa zajmowane przez każdą wartość int32_t, adresy poszczególnych zmiennych rosną kolejno o 2. 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. |
256..335 | 30257..336 | 32-bit float |
Wartość numeryczna w postaci zmiennoprzecinkowej określająca wynik pomiaru dla wielkości mierzonej na wejściu 1..5 i dla danej kolejnej zmiennej 1..8. Przesunięcie danego rejestru względem początku bloku można obliczyć następująco:
numer_rejestru = początek_bloku + ((nr_wejścia - 1) * 8 + (nr_zmiennej - 1)) * 2
np. dla wejścia nr 4 i zmiennej nr 2:
adres = 192 + ((4 - 1) * 8 + (2 - 1)) * 2 = 242
Ze względu na 2 słowa zajmowane przez każdą wartość int32_t, adresy poszczególnych zmiennych rosną kolejno o 2. 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. |