Protocollo Modbus - IOTROUTER
Animazione Hover

Protocollo Modbus

I. Introduzione

1.1 Ambito di applicazione

MODBUS è un protocollo di messaggistica di livello applicativo sul livello 7 del modello OSI che fornisce una comunicazione client/server tra dispositivi collegati a diversi tipi di bus o reti.

Dalla sua comparsa nel 1979 come standard de facto per i collegamenti seriali industriali, MODBUS ha permesso a migliaia di dispositivi di automazione di comunicare. Attualmente, il supporto per la struttura semplice ed elegante di MODBUS continua ad essere aggiunto. Le organizzazioni Internet consentono l'accesso a MODBUS tramite la porta di sistema riservata 502 dello stack TCP/IP.

MODBUS è un protocollo di richiesta/risposta e fornisce servizi specificati da codici funzione. I codici funzione MODBUS sono elementi della PDU di richiesta/risposta MODBUS. Lo scopo di questo documento è quello di descrivere i codici funzione utilizzati nell'ambito dell'elaborazione delle transazioni MODBUS. 1.2 Documenti normativi di riferimento 1. RFC791, Internet Protocol, Sep81 DARPA 2. MODBUS Protocol Reference Guide Rev J, MODICON, giugno 1996, doc#PI_MBUS_300 MODBUS è un protocollo di messaggistica a livello applicativo utilizzato per le comunicazioni client/server tra dispositivi collegati attraverso diversi tipi di bus o reti. Attualmente MODBUS è implementato utilizzando: TCP/IP su Ethernet. Trasmissione seriale asincrona su vari supporti (cablata: EIA/TIA-232-E, EIA-422, EIA/TIA-485-A; fibra ottica, wireless, ecc.) MODBUS PLUS, una rete ad alta velocità per il passaggio dei token.

1.2 Documenti normativi di riferimento

1. RFC791, Protocollo Internet, Sep81 DARPA

2. MODBUS Protocollo di riferimento Rev J, MODICON, giugno 1996, doc#PI_MBUS_300 MODBUS è un protocollo di messaggistica di livello applicativo utilizzato per le comunicazioni client/server tra dispositivi collegati attraverso diversi tipi di bus o reti.

Attualmente, MODBUS viene implementato utilizzando: TCP/IP su Ethernet.

Trasmissione seriale asincrona su diversi supporti (cablata: EIA/TIA-232-E, EIA-422, EIA/TIA-485-A; fibra ottica, wireless, ecc.) MODBUS PLUS, una rete ad alta velocità per il passaggio dei token.

2 Abbreviazioni

Unità dati applicativi ADU

Controllo avanzato del collegamento dati HDLC

Interfaccia uomo-macchina HMI

IETF Internet Engineering Working Group I/O Dispositivo di ingresso/uscita IP Protocollo Internet

Controllo di accesso ai media MAC

MB Protocollo MODBUS

MBAP Protocollo MODBUS

Unità di dati di protocollo PDU

PLC controllore logico programmabile

TCP Protocollo di controllo della trasmissione

3 Sintesi del contesto

Il protocollo MODBUS consente una comunicazione semplice all'interno di una varietà di architetture di rete.

Ogni dispositivo (PLC, HMI, pannello di controllo, driver, motion control, dispositivo di ingresso/uscita) può utilizzare il protocollo MODBUS per avviare il funzionamento remoto.

La stessa comunicazione è possibile tramite MODBUS su collegamenti seriali e reti Ethernet TCP/IP.

Alcuni gateway consentono la comunicazione tra più bus o reti utilizzando il protocollo MODBUS.

4 Descrizione generale

4.1 Descrizione del protocollo

Il protocollo MODBUS definisce una semplice unità di dati di protocollo (PDU) che è indipendente dal livello di comunicazione sottostante. su un bus o una rete specifici.

La mappatura del protocollo MODBUS può introdurre alcuni campi aggiuntivi nell'Application Data Unit (ADU).

Un client che avvia una transazione MODBUS crea un'unità di dati applicativi MODBUS. I codici funzione indicano al server l'operazione da eseguire.

Il protocollo MODBUS stabilisce un formato di richiesta avviato dal client.

Utilizzare un byte per codificare il campo del codice funzione dell'unità dati MODBUS. L'intervallo di codifica valido è decimale 1-255 (128-255 sono riservati alle risposte di eccezione). Quando un messaggio viene inviato dal client al dispositivo server, il campo del codice funzione indica al server l'operazione da eseguire.

Aggiungere codici di sottofunzione ad alcuni codici funzione per definire più operazioni.

Il campo dati del messaggio inviato dal client al dispositivo server include informazioni aggiuntive, che il server utilizza per eseguire l'operazione definita dal codice funzione. Questo campo include anche gli indirizzi degli elementi e dei registri discreti, il numero di elementi elaborati e il numero effettivo di byte di dati nel campo.

In alcune richieste, il campo dati può essere inesistente (lunghezza 0), nel qual caso il server non richiede alcuna informazione aggiuntiva. I codici funzione descrivono solo le operazioni.

Se in una ADU MODBUS ricevuta correttamente non si sono verificati errori relativi alla funzionalità MODBUS richiesta, il campo dei dati di risposta da server a client include i dati della richiesta. Se si verifica un errore relativo alla richiesta di funzionalità MODBUS, il campo include un codice di eccezione che l'applicazione server può utilizzare per determinare l'operazione successiva da eseguire.

Ad esempio, un client può leggere lo stato di attivazione/disattivazione di un insieme di uscite o ingressi discreti, oppure può leggere/scrivere il contenuto dei dati di un insieme di registri.

Quando il server risponde al client, utilizza il campo del codice funzione per indicare una risposta normale (priva di errori) o qualcosa di sbagliato (chiamata risposta di eccezione). Per una risposta normale, il server risponde solo al codice funzione originale.

Per una risposta di eccezione, il server restituisce un codice uguale al codice funzione originale e imposta il bit più significativo del codice funzione originale su 1 logico.

Commento: È necessario gestire i timeout per attendere esplicitamente una risposta che potrebbe non arrivare.

Il vincolo di lunghezza della prima implementazione MODBUS sul collegamento seriale limita la dimensione della PDU MODBUS (RS485ADU massima=256 byte).

Pertanto, per la comunicazione tramite collegamento seriale, MODBUS PDU = 256 - indirizzo del server (1 byte) - CRC (2 byte) = 253 byte.

in tal modo:

RS232 / RS485 ADU = 253 byte Indirizzo del server (1 byte) CRC (2 byte) = 256 byte.

TCP MODBUS ADU = 249 byte MBAP (7 byte) = 256 byte.

Il protocollo MODBUS definisce tre tipi di PDU. Essi sono:

PDU di richiesta MODBUS, mb_req_pdu

PDU di risposta MODBUS, mb_rsp_pdu

PDU di risposta all'eccezione MODBUS, mb_excep_rsp_pdu

Definire mb_req_pdu come: mb_req_pdu = { function_code, request_data}, dove

codice_funzione - [1 byte] codice funzione MODBUS

request_data - [n byte], questo campo è correlato al codice della funzione e di solito include informazioni quali i riferimenti alle variabili, le variabili, gli offset dei dati, i codici delle sotto-funzioni, ecc.

Definire mb_rsp_pdu come:

mb_rsp_pdu = {codice_funzione, dati_risposta}, dove

codice_funzione - [1 byte] codice funzione MODBUS

response_data - [n byte], questo campo è correlato al codice della funzione e di solito include informazioni quali i riferimenti alle variabili, le variabili, gli offset dei dati, i codici delle sotto-funzioni, ecc.

Definire mb_excep_rsp_pdu come:

mb_excep_rsp_pdu = {codice_funzione, dati_richiesta}, dove

codice_funzione - [1 byte] codice funzione MODBUS 0x80

exception_code - [1 byte], i codici di eccezione MODBUS sono definiti nella tabella seguente.

4.2 Codifica dei dati

MODBUS utilizza una rappresentazione ‘big-Endian’ degli indirizzi e dei dati. Ciò significa che quando vengono trasmessi più byte, il bit più significativo viene inviato per primo.Ad esempio: valore della dimensione del registro

16 - Bit 0x1234 Il primo byte inviato è 0x12 poi 0x34

Nota: per informazioni più dettagliate, vedere [1].

4.3 Modello di dati MODBUS

MODBUS si basa su una serie di modelli di dati su tabelle con caratteristiche diverse. I quattro modelli di base sono:

forma base Tipo di oggetto tipo di accesso contenuto
Ingresso discreto singolo bit solo lettura Il sistema I/O fornisce questo tipo di dati
Bobina singolo bit Lettura e scrittura Modificare questo tipo di dati attraverso l'applicazione
registro di ingresso Parola a 16 bit solo lettura Il sistema I/O fornisce questo tipo di dati
registro di detenzione Parola a 16 bit Lettura e scrittura Modificare questo tipo di dati attraverso l'applicazione

La distinzione tra input e output e tra elementi di dati indirizzati a bit e a parole non implica alcuna operazione applicativa. Se questa è la spiegazione più naturale per il nucleo dell'oggetto sospetto, allora questa distinzione è perfettamente accettabile e comune, tanto che tutte e quattro le tabelle sono considerate come se si coprissero a vicenda.

Per qualsiasi elemento della tabella di base, il protocollo consente di selezionare individualmente 65536 elementi di dati e le operazioni di lettura e scrittura su tali elementi sono progettate per coprire più elementi di dati consecutivi fino al limite della dimensione dei dati, il che è coerente con il codice funzione di elaborazione delle transazioni correlato.

Ovviamente, tutti i dati elaborati tramite MODBUS devono essere collocati nella memoria dell'applicazione del dispositivo. Tuttavia, l'indirizzo fisico della memoria non deve essere confuso con il riferimento ai dati. Il requisito è semplicemente che il riferimento ai dati sia collegato a un indirizzo fisico.

Il numero di riferimento logico MODBUS utilizzato nel codice funzione MODBUS è un indice intero senza segno a partire da 0.

Esempi di implementazione del modello MODBUS

Gli esempi seguenti mostrano due modi di strutturare i dati nel dispositivo. Possono esistere diverse strutture, non tutte descritte in questo documento. Ogni dispositivo ha una propria struttura di dati in base alla sua applicazione.

Esempio 1: Dispositivo con 4 blocchi indipendenti

L'esempio seguente mostra la struttura dei dati di un dispositivo che contiene grandezze digitali e analogiche, ingressi e uscite. Poiché i dati dei diversi blocchi non sono correlati, ogni blocco è indipendente dall'altro. Accedere a ciascun blocco in base ai diversi codici funzione MODBUS.

Esempio 2: Dispositivo con 1 solo blocco

In questo esempio, il dispositivo dispone di un solo blocco dati. È possibile ottenere gli stessi dati tramite diversi codici funzione MODBUS, oppure tramite accesso a 16 bit o 1 bit di accesso.

4.4 Definizione dell'elaborazione delle transazioni MODBUS

Il seguente diagramma di stato descrive l'elaborazione generale delle transazioni MODBUS sul lato server.

Una volta elaborata la richiesta, il server crea una risposta MODBUS utilizzando la transazione server MODBUS appropriata.

A seconda dei risultati dell'elaborazione, si possono stabilire due tipi di risposte:

Una risposta MODBUS positiva:

Codice funzione risposta = Codice funzione richiesta

● Una risposta di eccezione MODBUS (vedere sezione 6.14)

Utilizzato per fornire al cliente informazioni sugli errori riscontrati durante l'elaborazione;

Codice funzione risposta = codice funzione richiesta 0x80;

Fornire un codice di eccezione per indicare la causa dell'errore.

5 Classificazione dei codici funzione

Esistono tre tipi di codici funzione MODBUS. Essi sono:

È un codice funzione ben definito,

● Garanzia di unicità,

È possibile modificare l'organizzazione MODBUS,

● Pubblicamente comprovata,

● Disporre di test di conformità,

Come dimostrato dall'RFC MB IETF,

Contiene codici funzione pubblici definiti e assegnati e codici funzione riservati non assegnati per uso futuro.

Codice funzione definito dall'utente

Esistono due intervalli di definizione dei codici funzione definiti dall'utente, ovvero da 65 a 72 e da 100 a 110 decimali.

L'utente può selezionare e implementare un codice funzione senza alcuna approvazione da parte dell'organizzazione MODBUS.

Non è garantito che il codice funzione selezionato venga utilizzato in modo univoco.

Se l'utente desidera ripristinare la funzione come codice di funzione pubblico, deve avviare una RFC per introdurre la modifica nella categoria pubblica e assegnare un nuovo codice di funzione pubblico.

Codice funzione di riserva

Codici funzione comunemente utilizzati da alcune aziende per prodotti tradizionali e non validi per l'uso pubblico.

5.1 Definizione dei codici funzione pubblici

6 Descrizione del codice funzione

6.1 01 (0x01) lettura bobina

In un dispositivo remoto, utilizzare questo codice funzione per leggere lo stato continuo della bobina da 1 a 2000. La PDU di richiesta indica l'indirizzo di partenza, il primo indirizzo della bobina specificato e il numero della bobina. L'indirizzamento della bobina parte da zero. Pertanto, l'indirizzamento delle bobine 1-16 corrisponde a 0-15.

La bobina del messaggio di risposta è suddivisa in una bobina in base a ciascun bit del campo dati. Lo stato indicato è 1= ON e 0= OFF. L'LSB (bit meno significativo) del primo byte di dati contiene l'uscita indirizzata nell'interrogazione. Le altre bobine seguono questa sequenza, fino all'estremo alto di questo byte, e da basso ad alto nei byte successivi.

Se il numero di uscite restituite non è un multiplo di otto, i bit rimanenti nell'ultimo byte di dati (fino all'estremità di ordine superiore del byte) saranno imbottiti di zeri. Il campo numero di byte specifica il numero completo di byte di dati.

Richiesta PDU

codice funzione 1 byte 0x01
indirizzo iniziale 2 byte Da 0x0000 a 0xFFFF
Numero di bobine 2 byte Da 1 a 2000 (0x7D0)

PDU di risposta

codice funzione 1 byte 0x01
Numero di byte 1 byte N*
stato della bobina N byte n=N o N 1

*N=Quantità in uscita/8, se il resto non è uguale a 0, allora N = N 1

errore

codice funzione 1 byte Codice funzione +0x80
Codice di eccezione 1 byte 01 o 02 o 03 o 04

Questo è un esempio di richiesta di lettura delle uscite discrete 20-38:

chiedere risposta
nome di dominio (esadecimale) nome di dominio (esadecimale)
Funzione 01 Funzione 01
Indirizzo di partenza Ciao 00 Numero di byte 03
Indirizzo di partenza Lo 13 Stato dell'uscita 27-20 CD
Quantità in uscitaHi 00 Stato dell'uscita 35-28 6B
Quantità in uscita Lo 13 Stato dell'uscita 38-36 05

Rappresenta lo stato dell'uscita 27-20 come valore esadecimale del byte CD, o 1100 1101 in binario. L'uscita 27 è l'MSB di questo byte e l'uscita 20 è l'LSB.

In genere, i bit all'interno di un byte sono rappresentati con l'MSB a sinistra e l'LSB a destra. L'uscita del primo byte è 27-20 da sinistra a destra. L'uscita del byte successivo è 35-28 da sinistra a destra. Quando i bit vengono trasmessi in serie, da LSB a MSB: 20 . . . 27, 28 . . . 35 e così via.

Nell'ultimo byte di dati, lo stato delle uscite 38-36 è rappresentato come un valore esadecimale di 05, o 0000 0101 in binario. L'uscita 38 è la sesta posizione di bit da sinistra e l'uscita 36 è l'LSB di questo byte. Riempire i cinque bit di ordine superiore rimanenti con degli zeri.

Nota: riempire di zeri i cinque bit rimanenti (fino al bit di ordine superiore).

    Contatto