Rozdział 11. MODBUS

Spis treści

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

11.1. Protokół komunikacyjny

Moduł LB-480 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ść 480).
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ń.
Informacje o wejściach IN1-IN8
20–27 8× 16-bit unsigned integer

Tryb pracy wejścia IN1-IN8

28–35 8× 16-bit unsigned integer Typ czujnika S300 na wejściu IN1-IN8; 0 gdy wejście pracuje w innym trybie niż S300 albo brak jest dołączonego czujnika na wejściu
36–43 8× 16-bit unsigned integer Numer seryjny czujnika S300 na wejściu IN1-IN8; 0 gdy wejście pracuje w innym trybie niż S300 albo brak jest dołączonego czujnika na wejściu
44–51 8× 16-bit unsigned integer Ilość zmiennych zdefiniowanych dla danego wejścia IN1-IN8.
Informacje o modułach PORT1-PORT3
52–54 3× 16-bit unsigned integer Tryb pracy (typ) modułu PORT1-PORT3.
55–57 3× 16-bit unsigned integer Status modułu PORT1-PORT3.
58–60 3× 16-bit unsigned integer Numer seryjny modułu PORT1-PORT3, jeśli numer jest dostępny.
61–63 3× 16-bit unsigned integer Ilość zmiennych zdefiniowanych dla danego modułu PORT1-PORT3.
Wyniki pomiarów z wejść IN1-IN8
64–191 8× 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-IN8; 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.

192–319 8× 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-IN8 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.

320–383 8× 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-IN3

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.

432–479 8× 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-IN3; 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.

480–503 8× 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-IN8 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.

504–599 8× 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)
504-511 536-543 568-575 3× 8× 16-bit unsigned integer

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

 

Tryb pracy wejścia.

512-519 544-551 576-583 3× 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.

520-527 552-559 584-591 3× 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.

528-535 560-567 592-599 3× 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
600-983 3× 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-IN3; 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.

984-1367 3× 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-IN8 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.

1368-1559 3× 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.