TapHome

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.

SkriptSpouští seTypický obsah
Inicializace (modul, zařízení)Jednou po startuMODBUSWNE pro konfigurační registry.
Čtení (modul, zařízení)Při každém dotazuRegistry alarmů a ADDERROR.
Čtení hodnoty (zařízení)Při každém dotazuMODBUSR 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 dotazuMODBUSW proměnné zařízení, například požadované teploty.
Servisní atributPři otevření servisních nastaveníMODBUSR převedené na text.
Servisní akcePři stisku jejího tlačítkaMODBUSW 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, ADDWARNING a ADDINFO fungují 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žimVliv na skripty
NormalRegistry, 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.
IsolatedJako Normal, ale registry zařízení se neslučují s registry jiných zařízení.
No prefetchBez 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í.
  • MODBUSWNE a MODBUSWBLOCKNE porovná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.