Questo blocco funzione esegue la gestione del protocollo modbus master, con Type è possibile selezionare il tipo di protocollo RTU, Ascii ed over IP. Con File è possibile definire il terminale di I/O su cui effettuare la comunicazione.

Attivando Enable sul terminale di I/O viene inviato un frame per eseguire la funzione modbus definita in FCode sul nodo definito in Node. Terminata l'esecuzione del comando viene attivata l'uscita Done. Se l'esecuzione comando ha esito positivo si attiva per un loop di programma l'uscita Ok. Disattivando Enable si azzera Done e l'eventuale Fault, per eseguire nuovamente il comando occorre riabilitare l'ingresso Enable. L'ingresso SpyOn se attivo permette di spiare il funzionamento della FB.

Se FCode è una funzione di lettura, il valore delle variabili a partire dall'indirizzo definito in Address per il numero di variabili definito da Points, viene letto dal sistema slave e trasferito nelle variabili indirizzate da Buffer. Se FCode è una funzione di scrittura, il valore delle variabili presenti nel buffer di memoria indirizzato da Buffer per il numero di variabili definito da Points, è inviato al dispositivo slave che lo trasferirà nelle sue variabili a partire dall'indirizzo definito in Address. Sono supportati i seguenti codici modbus.

In IFTime occorre definire il tempo di interframe dei comandi modbus, cioè il tempo che intercorre tra la ricezione di un comando ed il comando successivo. Su linea seriale questo tempo coincide con il tempo di ricezione di 3 caratteri al baud rate definito. Se connessione in Ethernet può essere definito il tempo minimo.

In caso di errore esecuzione o tempo di esecuzione comando superiore al tempo definito in Timeout, viene attivata per un loop di programma l'uscita Fault ed incrementato il valore in Errors.

Utilizzandolo con i FB dedicati alla gestione dei dispositivi Modbus si semplifica notevolmente lo sviluppo delle applicazioni.

Function block
CODESYS: Non disponibile
LogicLab: eLLabUtyLib

Enable (BOOL) Comando abilitazione esecuzione comando modbus. Per rieseguire il comando disabilitare e poi riabilitare questo ingresso.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).

File (FILEP) Flusso dati stream da utilizzare per la comunicazione.

Type (USINT) Tipo di protocollo modbus. 0:RTU, 1:Ascii, 2:TCP.

Node (USINT) Numero di nodo modbus su cui effettuare il comando (Range da 0 a 255).

FCode (USINT) Codice funzione modbus da eseguire nel comando (Vedi tabella sotto).

Address (UINT) Indirizzo di allocazione variabili su sistema slave. In accordo alle specifiche modbus l'indirizzo inviato nel frame dati è (Address-1) (Range da 16#0001 a 16#FFFF).

Points (USINT) Numero di variabili consecutive su cui opera il comando.

Buffer (@BYTE) Indirizzo buffer dati letti o da scrivere.

IFTime (UDINT) Tempo ricezione caratteri (μS), se comunicazione su porta seriale il tempo deve essere definito in base al baud rate. Nel caso di comunicazione su rete ethernet è possibile definire il valore minimo (Vedi tabella sotto).

Timeout (UINT) Tempo massimo esecuzione comando espresso in mS. Se il comando non termina nel tempo definito viene abortito ed attivata l'uscita Fault.

Delay (UINT) Tempo di pausa dopo l'esecuzione del comando modbus espresso in mS.

Done (BOOL) Si attiva al termine della esecuzione comando e rimane attiva fino alla disabilitazione di Enable.

Ok (BOOL) Attivo per un loop se esecuzione comando corretta.

Fault (BOOL) Attivo per un loop se errore esecuzione comando.

Errors (UDINT) Numero di errori, incrementato ad ogni nuovo errore, raggiunto valore massimo riparte da 0.

Messaggi di errore (Eccezione)

Il dispositivo, se non è in grado di eseguire l'operazione richiesta dal comando ricevuto, risponde con un messaggio di errore che prevede il seguente formato:

+-------------+---------------+----------------+---+---+
| Modbus node | Function code | Exception code |  CRC  |
+-------------+---------------+----------------+---+---+
  • Modbus node: Indirizzo del dispositivo slave che risponde.
  • Function code: Codice funzione con MSB=1 (per indicare l'eccezione); esempio 16#83 (per la lettura 16#03 ) o 16#86 (per la scrittura 16#06).
  • Exception code: Codice eccezione.

Trigger di spy

Se SpyOn attivo viene eseguita la funzione SysSpyData che permette di utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.

FBD_ModbusMaster, ST_ModbusMaster: Lettura in modbus RTU da un sistema SlimLine slave, per testare l'esempio è possibile collegare tra di loro le porte seriali COM0 e COM1 di un modulo CPU (Usare un cavo cross). Sono letti 8 registri a partire da indirizzo 40000 dal nodo modbus 1 con funzione 3 Read Holding Registers. Il valore dei registri letti è trasferito nell'array RxData. Terminata la lettura si attiverà per un loop l'uscita logica Done che disabilita Enable facendo ripartire un nuovo camando di lettura.

FBD_ModbusMasterOnTCP, ST_ModbusMasterOnTCP: Lettura in modbus TCP/IP da un sistema SlimLine slave, per testare l'esempio è possibile definire come indirizzo IP dello slave il localhost ADR('127.0.0.1') . Sono letti 8 registri a partire da indirizzo 40000 dal nodo modbus 1 con funzione 3 Read Holding Registers. Il valore dei registri letti è trasferito nell'array RxData. Terminata la lettura si attiverà per un loop l'uscita logica Done che disabilita Enable facendo ripartire un nuovo camando di lettura.

LogicLab (Ptp114)
PROGRAM FBD_ModbusMaster
VAR
    RxData : ARRAY[ 0..7 ] OF UINT; (* Rx data buffer *)
    Mdb : ModbusMaster; (* Modbus master FB *)
    Sp: SysSerialPort; (* Serial port *)
END_VAR

LogicLab (Ptp114)
LogicLab (Ptp114)
LogicLab (Ptp114)

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 18 Febbraio 2020