TapHome

Script Modbus e prefetch

Gli script di un modulo e di un dispositivo Modbus TapHome — inizializzazione, lettura, lettura del valore, scrittura del valore, attributi di servizio e azioni di servizio — e come il prefetch e la cache dei registri li influenzano.

Un modulo Modbus e ciascuno dei suoi dispositivi hanno diversi script, e le funzioni Modbus funzionano in tutti. La frequenza con cui gli script vengono eseguiti e quali registri leggono dal bus dipendono dall’intervallo di polling e dalla modalità di prefetch del dispositivo. Quando viene eseguito ciascuno script e quali variabili vede è descritto in dettaglio in Integrazione Modbus.

Script dei moduli e dei dispositivi Modbus

Ogni script Modbus ha il proprio momento di esecuzione e il proprio contenuto tipico.

ScriptViene eseguitoContenuto tipico
Inizializzazione (modulo, dispositivo)Una volta dopo l’avvioMODBUSWNE per i registri di configurazione.
Lettura (modulo, dispositivo)A ogni pollingRegistri di allarme e ADDERROR.
Lettura del valore (dispositivo)A ogni pollingMODBUSR e una conversione. L’ultima istruzione è il valore del dispositivo.
Scrittura del valore (dispositivo)Quando il valore cambia, e a ogni polling con Periodic writeMODBUSW della variabile del dispositivo, ad esempio il setpoint.
Attributo di servizioAll’apertura delle impostazioni di servizioMODBUSR trasformato in testo.
Azione di servizioAlla pressione del suo pulsanteMODBUSW con i parametri dell’azione, disponibili tramite la loro abbreviazione.

Note

  • Le variabili definite sul modulo o sul dispositivo mantengono il loro valore tra un’esecuzione e l’altra dello script — usale per passare un valore da uno script di lettura a un attributo di servizio. Le variabili del modulo possono essere collezioni da Core 2026.1, build 39507.
  • ADDERROR, ADDWARNING e ADDINFO funzionano solo in alcuni di questi script — vedi ADDERROR.

Esempio — script di lettura del valore di un sensore di temperatura

MODBUSR(H, 20, Int16) / 10;

Esempio — azione di servizio con un parametro ID

MODBUSW(H, 20, Float, ID);

Prefetch e cache dei registri

La modalità di prefetch di un dispositivo Modbus decide se i suoi script leggono i registri dalla cache del modulo o dal bus.

ModalitàEffetto sugli script
NormalI registri usati dagli script vengono letti in richieste raggruppate prima dell’esecuzione degli script. Leggere lo stesso registro due volte in un’esecuzione costa una sola transazione.
IsolatedCome Normal, ma i registri del dispositivo non vengono uniti ai registri di altri dispositivi.
No prefetchNessuna cache. Ogni MODBUSR e MODBUSRBLOCK è una transazione reale, nell’ordine in cui è scritto.

Note

  • Scegli No prefetch per i dispositivi che richiedono una sequenza esatta di transazioni; in tal caso salva in una variabile un valore letto una volta invece di leggerlo di nuovo.
  • Preferisci una lettura a blocco a un ciclo di letture singole — MODBUSRBLOCK(H, 100, 100) sostituisce 100 transazioni.
  • MODBUSWNE e MODBUSWBLOCKNE confrontano con il valore in cache — vedi MODBUSWNE.
  • La dimensione delle richieste raggruppate e le modalità di prefetch si impostano come descritto in Prefetch.

Esempio — un blocco invece di quattro letture

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);

Vedi anche — Tipi di dati Modbus, Esempi.