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.
| Script | Viene eseguito | Contenuto tipico |
|---|---|---|
| Inizializzazione (modulo, dispositivo) | Una volta dopo l’avvio | MODBUSWNE per i registri di configurazione. |
| Lettura (modulo, dispositivo) | A ogni polling | Registri di allarme e ADDERROR. |
| Lettura del valore (dispositivo) | A ogni polling | MODBUSR e una conversione. L’ultima istruzione è il valore del dispositivo. |
| Scrittura del valore (dispositivo) | Quando il valore cambia, e a ogni polling con Periodic write | MODBUSW della variabile del dispositivo, ad esempio il setpoint. |
| Attributo di servizio | All’apertura delle impostazioni di servizio | MODBUSR trasformato in testo. |
| Azione di servizio | Alla pressione del suo pulsante | MODBUSW 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,ADDWARNINGeADDINFOfunzionano 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 |
|---|---|
| Normal | I 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. |
| Isolated | Come Normal, ma i registri del dispositivo non vengono uniti ai registri di altri dispositivi. |
| No prefetch | Nessuna 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. MODBUSWNEeMODBUSWBLOCKNEconfrontano 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.