Jak w Lua napisać skrypt czytający Modbus sterownikiem MPM?

utworzone przez | 15/04/2025 | Baza wiedzy | 0 komentarzy

Sterownik MPM ma na swoim pokładzie nadajnik/odbiornik RS485, który umożliwia prowadzenie komunikacji modbus z urządzeniami takimi jak liczniki, pompy ciepła i centrale wentylacyjne i im podobnymi.

--konfigurujemy komunikację
adres_master = 98          --tu wstaw adres urządzenia
predkosc = 9600     --możliwe są też 19200, 38400, 57600
liczbabitow = 8     --może być 7 lub 8 bitów danych
parzystosc = "NONE" --możliwe są też "ODD" i "EVEN"
bitystopu = 1       --w modbus może być 1 lub 2 bity stopu

--na początek zamykamy modbus z możliwych wcześniejszych instancji skryptu
modbus.close()

--otwieramy modbus
modbus.open(adres_master, "RTU", predkosc, liczbabitow, parzystosc, bitystopu)

Od tego momentu mamy już w skrypcie możliwość bezpośredniego odpytywania poszczególnych rejestrów modbus z konkretnie wybranych urządzeń.

Przykłady czytanych typów rejestrów modbus

--odczytujemy rejestr typu holding register zapisany zmiennoprzecinkowo (16 bitów)
adres_urzadzenia = 4
adres_rejestru = 4101
liczba_odczytywanych_wartości = 1
czytaj_od_najstarszych = 1
result, values = modbus.fp_read(adres_urzadzenia, adres_rejestru, liczba_odczytywanych_wartości, czytaj_od_najstarszych)

if result == 0 then
  przeczytana_wartosc = values[1]
else
  print("Błąd odczytu wartości. Kod błędu: ", result)
end
--odczytujemy rejestr typu holding register zapisany jako wartość całkowita, bez znaku (32 bity uint long)
adres_urzadzenia = 4
adres_rejestru = 4151
liczba_odczytywanych_wartości = 2 --2x słowo 16 bitów
result, values = modbus.hr_read(adres_urzadzenia, adres_rejestru, liczba_odczytywanych_wartości)

if result == 0 then
  przeczytana_wartosc = (values[1] * 0x10000) + values[2]
else
  print("Błąd odczytu wartości. Kod błędu: ", result)
end