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ść.
| Skrypt | Uruchamia się | Typowa zawartość |
|---|---|---|
| Inicjalizacja (moduł, urządzenie) | Raz po starcie | MODBUSWNE dla rejestrów konfiguracyjnych. |
| Odczyt (moduł, urządzenie) | Przy każdym odpytaniu | Rejestry alarmów i ADDERROR. |
| Odczyt wartości (urządzenie) | Przy każdym odpytaniu | MODBUSR 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 okresowym | MODBUSW zmiennej urządzenia, na przykład wartości zadanej. |
| Atrybut serwisowy | Gdy otworzysz ustawienia serwisowe | MODBUSR zamieniony na tekst. |
| Akcja serwisowa | Gdy naciśniesz jej przycisk | MODBUSW 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,ADDWARNINGiADDINFOdział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.
| Tryb | Wpływ na skrypty |
|---|---|
| Normal | Rejestry używane przez skrypty są odczytywane zgrupowanymi żądaniami, zanim skrypty się uruchomią. Dwukrotny odczyt tego samego rejestru w jednym uruchomieniu kosztuje jedną transakcję. |
| Isolated | Jak Normal, ale rejestry urządzenia nie są łączone z rejestrami innych urządzeń. |
| No prefetch | Bez 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. MODBUSWNEiMODBUSWBLOCKNEporó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.