WRITE_READ_VARWRITE_READ_VAR: lettura e scrittura dei registri interni su un dispositivo Modbus
Questa funzione legge e scrive i registri interni (solo di tipo MW) in un dispositivo esterno nel protocollo Modbus. Le operazioni di lettura e scrittura sono contenute in un'unica transazione.
L'operazione di scrittura viene eseguita per prima. La funzione WRITE_READ_VAR può quindi eseguire:
ola lettura di due registri interni consecutivi e l'immediata rilettura dei relativi valori a scopo di verifica
ola scrittura di alcuni registri interni consecutivi e la lettura di altri nell'ambito di un'unica richiesta
WRITE_READ_VAR - Descrizione specifica del parametro
Ingresso |
Tipo |
Commento |
---|---|---|
ObjType |
ObjType è il tipo di oggetto da scrivere e da leggere (solo MW). |
|
FirstWriteObj |
DINT |
FirstWriteObj è l'indice del primo oggetto da scrivere. |
WriteQuantity |
UINT |
WriteQuantity è il numero di oggetti da scrivere: o1...121: registri (tipo MW) |
WriteBuffer |
POINTER TO BYTE |
Indirizzo del puntatore all'array che contiene i dati da scrivere nel dispositivo di destinazione. L'array deve essere uguale o maggiore dei dati che devono essere scritti. È necessario utilizzare la funzione ADR per passare l'indirizzo del primo byte dell'array (vedere il grafico CFC nell'esempio). |
FirstReadObj |
DINT |
ReadFirstObj è l'indice del primo oggetto da leggere. |
ReadQuantity |
UINT |
ReadQuantity rappresenta il numero di oggetti da leggere: o1...125: registri (tipo MW) |
ReadBuffer |
POINTER TO BYTE |
Indirizzo del puntatore all'array che contiene i dati ricevuti che sono stati letti dal dispositivo di destinazione. L'array deve essere uguale o maggiore dei dati che devono essere letti. È necessario utilizzare la funzione ADR per passare l'indirizzo del primo byte dell'array (vedere il grafico CFC nell'esempio). |
NOTA: Per evitare la violazione di accesso alla memoria causata da un accesso puntatore non valido (fuori limiti), occorre accertarsi che le dimensioni dell'array collegato all'ingresso Buffer sia uguale o superiore ai dati che verranno scritti o ricevuti dal dispositivo di destinazione. È buona prassi collegare la Quantity di dati definita da scrivere o da leggere nella dichiarazione del buffer come spiegato nel seguente esempio.
Questo esempio mostra l'implementazione del blocco funzione WRITE_READ_VAR in combinazione con il blocco funzione ADDM per scrivere due registri a partire dall'indirizzo 11 e leggere altri due registri a partire dall'indirizzo 1 di uno slave Modbus. Lo slave Modbus è specificato con indirizzo 8 e deve essere accessibile tramite l'interfaccia seriale 1. Un presupposto è che Modbus Manager sia configurato come master nell'interfaccia di linea seriale 1.