Skripty Modbus a prefetch
Skripty modulu a zařízení Modbus v TapHome — inicializace, čtení, čtení hodnoty, zápis hodnoty, servisní atributy a servisní akce — a jak je ovlivňuje prefetch a vyrovnávací paměť registrů.
Modul Modbus i každé jeho zařízení mají několik skriptů a funkce Modbus fungují ve všech. Jak často se skripty spouštějí a které registry čtou ze sběrnice, závisí na poll intervalu a režimu prefetch zařízení. Kdy se který skript spouští a které proměnné vidí, podrobně popisuje Integrace Modbus.
Skripty modulů a zařízení Modbus
Každý skript Modbus má vlastní okamžik spuštění a vlastní typický obsah.
| Skript | Spouští se | Typický obsah |
|---|---|---|
| Inicializace (modul, zařízení) | Jednou po startu | MODBUSWNE pro konfigurační registry. |
| Čtení (modul, zařízení) | Při každém dotazu | Registry alarmů a ADDERROR. |
| Čtení hodnoty (zařízení) | Při každém dotazu | MODBUSR a převod. Poslední příkaz je hodnota zařízení. |
| Zápis hodnoty (zařízení) | Při změně hodnoty a s volbou Periodický zápis při každém dotazu | MODBUSW proměnné zařízení, například požadované teploty. |
| Servisní atribut | Při otevření servisních nastavení | MODBUSR převedené na text. |
| Servisní akce | Při stisku jejího tlačítka | MODBUSW s parametry akce, dostupnými pod jejich zkratkou. |
Poznámky
- Proměnné definované na modulu nebo zařízení si drží hodnotu mezi spuštěními skriptu — použijte je k předání hodnoty ze skriptu pro čtení do servisního atributu. Proměnné modulu mohou být kolekce od Core 2026.1, build 39507.
ADDERROR,ADDWARNINGaADDINFOfungují jen v některých z těchto skriptů — viz ADDERROR.
Příklad — skript pro čtení hodnoty teplotního senzoru
MODBUSR(H, 20, Int16) / 10;Příklad — servisní akce s parametrem ID
MODBUSW(H, 20, Float, ID);Prefetch a vyrovnávací paměť registrů
Režim prefetch zařízení Modbus určuje, zda jeho skripty čtou registry z vyrovnávací paměti modulu, nebo ze sběrnice.
| Režim | Vliv na skripty |
|---|---|
| Normal | Registry, které skripty používají, se před spuštěním skriptů přečtou seskupenými požadavky. Dvojí čtení stejného registru v jednom běhu stojí jednu transakci. |
| Isolated | Jako Normal, ale registry zařízení se neslučují s registry jiných zařízení. |
| No prefetch | Bez vyrovnávací paměti. Každé MODBUSR a MODBUSRBLOCK je skutečná transakce, v pořadí, v jakém je napsáno. |
Poznámky
- No prefetch zvolte pro zařízení, která potřebují přesné pořadí transakcí; hodnotu přečtenou jednou si pak uložte do proměnné, místo abyste ji četli znovu.
- Dejte přednost jednomu čtení bloku před cyklem jednotlivých čtení —
MODBUSRBLOCK(H, 100, 100)nahradí 100 transakcí. MODBUSWNEaMODBUSWBLOCKNEporovnávají s hodnotou ve vyrovnávací paměti — viz MODBUSWNE.- Velikost seskupených požadavků a režimy prefetch se nastavují podle popisu v části Prefetch.
Příklad — jeden blok místo čtyř čtení
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);Viz také — Datové typy Modbus, Příklady.