Per illustrare meglio il concetto di funzionamento del meccanismo di spionaggio utilizzo un semplice programma (Stampa) che con una FB ModbusMaster esegue la lettura in modbus RTU.
Nell’esempio utilizzo le due porte seriali di un modulo CPU ARM7 interconnesse tra di loro (Attenzione per interconnetterle occorre usare un adattatore Null-Modem su di una porta ed un adattatore modem sull’altra).
La FB ModbusMaster ha al suo interno chiamate alla funzione SysSpyData, queste chiamate possono essere abilitate forzando a TRUE l’ingresso SpyOn della FB così come ho fatto nell’esempio. Se con il programma in funzione ci colleghiamo con il terminale Telnet di Toolly ed abilitiamo la console di spionaggio vedremo i pacchetti Modbus RTU scambiati (Screenshot).
Come si vede nella prima parte la comunicazione è attiva invio un frame di Tx e dopo 4mS viene ricevuto il frame Rx di risposta. Siccome nel programma ho inserito il Delay a 1Sec il successivo frame di Tx verrà inviato dopo un secondo. Il frame di Tx esegue la richiesta di 4 registri, così ho evidenziato nel frame Rx il valore ritornato dei 4 registri ed il CRC finale.
Ho scollegato il cavo di alimentazione e sono visibili solo i frame di Tx, il tempo di ritardo tra un frame e l’altro è pari al tempo impostato in Timeout 500mS più il tempo di Delay. Ho modificato il programma richiedendo un indirizzo di registri fuori range, e come si vede viene ricevuto un frame di risposta con errore (Codice 16#83) seguito dal codice di errore 16#02 e poi dal CRC 16#C0F1.
Il codice di errore 02 è un codice di Illegal data address, infatti l’indirizzo richiesto 16#AFC7 (44999 che con offset 1 diventa 45000) è fuori range per il sistema SlimLine (Download programma).