TapHome

Skrypty Modbus i prefetch

Skrypty modułu i urządzenia Modbus w TapHome — inicjalizacja, odczyt, odczyt wartości, zapis wartości, atrybuty serwisowe i akcje serwisowe — oraz jak wpływają na nie prefetch i pamięć podręczna rejestrów.

Moduł Modbus i każde z jego urządzeń mają kilka skryptów, a funkcje Modbus działają we wszystkich z nich. Jak często skrypty się uruchamiają i które rejestry odczytują z magistrali, zależy od interwału odpytywania i trybu prefetch urządzenia. Kiedy uruchamia się każdy skrypt i jakie zmienne widzi, opisuje szczegółowo Integracja Modbus.

Skrypty modułów i urządzeń Modbus

Każdy skrypt Modbus ma własny moment uruchomienia i własną typową zawartość.

SkryptUruchamia sięTypowa zawartość
Inicjalizacja (moduł, urządzenie)Raz po starcieMODBUSWNE dla rejestrów konfiguracyjnych.
Odczyt (moduł, urządzenie)Przy każdym odpytaniuRejestry alarmów i ADDERROR.
Odczyt wartości (urządzenie)Przy każdym odpytaniuMODBUSR i przeliczenie. Ostatnia instrukcja jest wartością urządzenia.
Zapis wartości (urządzenie)Gdy wartość się zmieni oraz przy każdym odpytaniu przy zapisie okresowymMODBUSW zmiennej urządzenia, na przykład wartości zadanej.
Atrybut serwisowyGdy otworzysz ustawienia serwisoweMODBUSR zamieniony na tekst.
Akcja serwisowaGdy naciśniesz jej przyciskMODBUSW z parametrami akcji, dostępnymi według ich skrótu.

Uwagi

  • Zmienne zdefiniowane w module lub urządzeniu zachowują swoją wartość między uruchomieniami skryptów — użyj ich, aby przekazać wartość ze skryptu odczytu do atrybutu serwisowego. Zmienne modułu mogą być kolekcjami od Core 2026.1, kompilacji 39507.
  • ADDERROR, ADDWARNING i ADDINFO działają tylko w niektórych z tych skryptów — zobacz ADDERROR.

Przykład — skrypt odczytu wartości czujnika temperatury

MODBUSR(H, 20, Int16) / 10;

Przykład — akcja serwisowa z parametrem ID

MODBUSW(H, 20, Float, ID);

Prefetch i pamięć podręczna rejestrów

Tryb prefetch urządzenia Modbus decyduje, czy jego skrypty odczytują rejestry z pamięci podręcznej modułu, czy z magistrali.

TrybWpływ na skrypty
NormalRejestry używane przez skrypty są odczytywane zgrupowanymi żądaniami, zanim skrypty się uruchomią. Dwukrotny odczyt tego samego rejestru w jednym uruchomieniu kosztuje jedną transakcję.
IsolatedJak Normal, ale rejestry urządzenia nie są łączone z rejestrami innych urządzeń.
No prefetchBez pamięci podręcznej. Każde MODBUSR i MODBUSRBLOCK to rzeczywista transakcja, w kolejności zapisu w skrypcie.

Uwagi

  • Wybierz No prefetch dla urządzeń, które wymagają dokładnej sekwencji transakcji; wtedy wartość odczytaną raz zapisz w zmiennej zamiast odczytywać ją ponownie.
  • Wybieraj jeden odczyt bloku zamiast pętli pojedynczych odczytów — MODBUSRBLOCK(H, 100, 100) zastępuje 100 transakcji.
  • MODBUSWNE i MODBUSWBLOCKNE porównują z wartością w pamięci podręcznej — zobacz MODBUSWNE.
  • Rozmiar zgrupowanych żądań i tryby prefetch ustawia się tak, jak opisuje Prefetch.

Przykład — jeden blok zamiast czterech odczytów

collection<uint16> data := MODBUSRBLOCK(H, 100, 4);
VAR voltage := UNPACKVALUE(data, 0, Uint16) / 10;
VAR current := UNPACKVALUE(data, 1, Uint16) / 100;
VAR power := UNPACKVALUE(data, 2, BigEndianFloat);

Zobacz też — Typy danych Modbus, Przykłady skryptów.