ModbusSlave, modbus slave

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Libreria dispositivi Modbus / ModbusSlave, modbus slave

Sui sistemi SlimLine il protocollo modbus slave è già implementato dal sistema operativo, pertanto non occorre inserire blocchi funzione appositi nel programma utente. Questo blocco esegue l'override della gestione di sistema operativo e si utilizza in casi particolari, dove non è possibile utilizzare la gestione implementata nel sistema operativo. Per esempio quando si vuole consentire l'accesso ad un propria area di memoria diversa dalla DB100.

Questo blocco funzione esegue la gestione del protocollo modbus slave 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.

Occorre definire il nodo modbus Node, e l'eventuale offset di indirizzo frame modbus Offset. I comandi modbus ricevuti operano sul buffer di memoria il cui indirizzo è definito in Buffer e la dimensione in bytes è definita in Size.

Alla ricezione di ogni comando modbus corretto si attiva per un loop l'uscita Done, in caso di errore comando viene attivata per un loop l'uscita Fault ed incrementato il valore in Errors.

Function block
CODESYS: Non disponibile
LogicLab: eLLabMdbDevsLib

Enable (BOOL) Comando di abilitazione blocco funzione.

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

File (eFILEP) 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 (Range da 0 a 255).

Offset (UINT) Offset su indirizzo modbus ricevuto nel frame dati (Range da 16#0000 a 16#FFFF).

Buffer (@eVOID) Indirizzo buffer dati su cui operano i comandi modbus.

Size (UDINT) Dimensione in byte del buffer dati su cui operano i comandi modbus.

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

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.

Packets (UDINT) Numero di comandi modbus ricevuti, incrementato ad ogni comando, 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 è possibile utilizzare 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_ModbusSlave_v2: Viene istanziato un FB ModbusSlave che opera su di un array di WORD. Accedendo da seriale è possibile operare sull'array con comandi Modbus indirizzando i registri a partire da 1000.

ST_ModbusSlave_v2: E' possibile utilizzare l'esempio in TCP su di un unico sistema SlimLine definendo come indirizzo IP dello slave il localhost ADR('127.0.0.1'). Oppure in RTU o ascii selezionando la comunicazione seriale. Nell'esempio il FB si comporta esattamente come la gestione Modbus del sistema operativo, è possibile utilizzare l'esempio insieme all'esempio del FB ModbusMaster. Dichiarare le variabili VAR_GLOBAL nella zona delle variabili globali.

LogicLab (Ptp141)
PROGRAM FBD_ModbusSlave_v2
VAR
    Mdb : ModbusSlave_v2; (* Modbus slave FB *)
    Serial : SysSerialPort; (* Serial port *)
    DARRAY : ARRAY[0..31] OF WORD; (* Modbus accessible area *)
END_VAR

Esempio in FBD di FB ModbusSlave_v2

LogicLab (Ptp141)

Ti è stato utile questo articolo ?