Nelle nostre librerie di funzioni e blocchi funzioni abbiamo solo il blocco funzione master per il protocollo modbus RTU, e lo slave Ascii. In attesa di aggiungere anche l’FB per il modbus Ascii master prendo spunto dalla tua richiesta per realizzare un semplice blocco funzione che gestisce il comando di lettura Holding registers (0x03) di un registro con modbus Ascii.
Il blocco funzione è realizzato in ST e può essere propedeutico per realizzare altri blocchi funzioni di gestione comunicazione, ecco la stampa del programma. Come si vede un program in Ladder apre la porta di comunicazione, ne imposta i parametri, e poi viene seguita la chiamata sequenziale di due istanze della FB ModbusAsciiMaster, una esegue la lettura del registro 16#1234 e l’altra la lettura del registro 16#5678. Il valore letto è ritornato in Value e può poi essere appoggiato nella propria variabile.
Il blocco funzione ModbusAsciiMaster in linguaggio ST è gestito a sequenze con lo statement CASE, le sequenze biniziano con la compilazione e l’invio del frame di comando e poi l’attesa del frame di risposta. Nella FB è gestito sia il calcolo che il controllo dell’LRC del frame modbus, ed al termine della ricezione della risposta è gestito un tempo di attesa parametrizzabile. Allego programma sorgente per il download.