Codici funzione ed eccezione Modbus

Cerca un codice funzione o di eccezione Modbus pubblico, oppure inserisci una risposta come 83 02 per identificare la richiesta non riuscita e la causa.

Modbus e collegamenti seriali Aggiornato Gratuito, senza registrazione

Quale dato hai?

Esempi

Codice funzione (16 o 0x10), risposta di eccezione ricevuta oppure parole del nome in italiano o inglese

Eccezione 0x03

Valore dati non consentito

Richiesta non riuscita
0x10 Scrivere più registri
Significato
La struttura della richiesta contiene un valore che il server non può accettare; questo non descrive il valore applicativo memorizzato in un registro.
Byte letti
90 03

Il primo byte è il codice funzione della richiesta più 0x80; il secondo è il codice di eccezione.

Come viene calcolato

Codice funzione della risposta di eccezione = codice funzione della richiesta + 0x80

La risposta 90 03 indica che la richiesta 0x10 Scrivere più registri non è riuscita con l’eccezione 0x03, Valore dati non consentito.

Suggerimento: L'assenza di risposta non è un'eccezione. Controlla il cablaggio, l'identificativo dell'unità, la velocità, la parità e la terminazione prima della mappa dei registri.

Leggere una risposta di eccezione Modbus

Quando un dispositivo Modbus riceve una richiesta che non può eseguire, risponde con un'eccezione: il codice funzione con il bit più significativo impostato a 1 (codice + 0x80), seguito da un codice di eccezione di un byte. 83 02 significa che una richiesta Read Holding Registers (0x03) non è riuscita con l'eccezione 02, Illegal Data Address. Inserisci sopra i byte della risposta per decodificarli.

Il byte della funzione

funzione della risposta = funzione della richiesta + 0x80

Una risposta normale ripete il codice funzione della richiesta. Un'eccezione imposta il bit più significativo: 0x03 diventa 0x83 e 0x10 diventa 0x90. Sottrai 0x80 per trovare la richiesta non riuscita.

Il codice di eccezione

01 funzione · 02 indirizzo · 03 valore · 04 errore del dispositivo

01 Illegal Function: il dispositivo non supporta la richiesta. 02 Illegal Data Address: l'indirizzo o l'intervallo richiesto non è disponibile. 03 Illegal Data Value: un valore nella richiesta non è accettato. 04 Server Device Failure: il dispositivo ha avuto un errore nell'esecuzione. Sono i nomi delle eccezioni nella specifica Modbus.

Codici funzione decimali ed esadecimali

FC16 = 16 decimale = 0x10

I manuali usano entrambe le notazioni. Il campo sopra interpreta un numero senza prefisso come decimale se corrisponde a una funzione: 16 indica Write Multiple Registers. Mostra anche l'eventuale interpretazione esadecimale; scrivi 0x16 se intendi esplicitamente quest'ultima.

L'assenza di risposta non è un'eccezione. Un timeout può dipendere dal cablaggio, dall'identificativo dell'unità, dalla velocità, dalla parità, dalla terminazione o da un frame scartato per un CRC errato. Solo un dispositivo che ha interpretato il frame può inviare un'eccezione.

Esempi: codici di eccezione Modbus

Risposta 83 02 di un contatore

Sottrai 0x80 da 0x83 e ottieni 0x03, Read Holding Registers. L'eccezione 02, Illegal Data Address, indica che il dispositivo non dispone dei registri richiesti. Una causa comune è uno scarto di un registro dovuto a un riferimento come 40001, oppure una lettura oltre la fine di un blocco. Il convertitore di indirizzi Modbus aiuta nel primo caso.

Eccezione 0x02 Indirizzo dati non consentito Apri nella calcolatrice

Risposta 90 03 dopo una scrittura

0x90 − 0x80 = 0x10, Write Multiple Registers, e 03 corrisponde a Illegal Data Value. Il dispositivo ha ricevuto il frame, ma ha rifiutato un valore: per esempio un setpoint fuori intervallo, un numero di registri che non corrisponde al numero di byte oppure una scrittura in un blocco di sola lettura.

Eccezione 0x03 Valore dati non consentito Apri nella calcolatrice

Quale funzione è la 16?

In decimale, la funzione 16 è Write Multiple Registers e viene trasmessa come 0x10. In esadecimale, 0x16 indica Mask Write Register, una richiesta diversa. Quando un manuale riporta «FC16», intende il valore decimale.

Funzione 16 (0x10) Scrivere più registri Apri nella calcolatrice

Codici funzione Modbus e risposte di eccezione

Codici funzione pubblici comuni in decimale ed esadecimale e primo byte restituito da un dispositivo quando la richiesta non riesce.

FunzioneNomeHexRisposta di eccezione
1Leggere le bobine0x010x81
2Leggere gli ingressi discreti0x020x82
3Leggere i registri holding0x030x83
4Leggere i registri di ingresso0x040x84
5Scrivere una bobina0x050x85
6Scrivere un registro0x060x86
15Scrivere più bobine0x0F0x8F
16Scrivere più registri0x100x90
22Scrivere un registro con maschera0x160x96
23Leggere e scrivere più registri0x170x97
43Trasporto di interfaccia incapsulata0x2B0xAB

Scarica questa tabella (CSV)

Tabelle di riferimento

Codici funzione pubblici

Funzioni pubbliche definite nella versione V1.1b3. La presenza nell’elenco non dimostra che un dispositivo specifico le implementi.

CodiceFunzioneAccesso ai datiLimite della richiesta nel protocolloAmbito del trasporto
0x01Leggere le bobineLeggere bobine · bitDa 1 a 2.000 bobine contigueProtocollo applicativo
0x02Leggere gli ingressi discretiLeggere ingressi discreti · bitDa 1 a 2.000 ingressi contiguiProtocollo applicativo
0x03Leggere i registri holdingLeggere registri holding · parole da 16 bitDa 1 a 125 registri contiguiProtocollo applicativo
0x04Leggere i registri di ingressoLeggere registri di ingresso · parole da 16 bitDa 1 a 125 registri contiguiProtocollo applicativo
0x05Scrivere una bobinaScrivere una bobina · bitEsattamente una bobinaProtocollo applicativo
0x06Scrivere un registroScrivere un registro holding · parola da 16 bitEsattamente un registroProtocollo applicativo
0x07Leggere lo stato delle eccezioniLeggere otto uscite di stato definite dall’implementazioneNessun dato nella richiestaSolo collegamento seriale
0x08DiagnosticaDiagnostica della comunicazione secondo la sottofunzioneSecondo la sottofunzioneSolo collegamento seriale
0x0BLeggere il contatore degli eventi di comunicazioneLeggere lo stato della comunicazione e il numero di eventiNessun dato nella richiestaSolo collegamento seriale
0x0CLeggere il registro degli eventi di comunicazioneLeggere lo stato della comunicazione, i contatori e i byte degli eventiNessun dato nella richiestaSolo collegamento seriale
0x0FScrivere più bobineScrivere bobine contigue · bitDa 1 a 1.968 bobine contigueProtocollo applicativo
0x10Scrivere più registriScrivere registri holding contigui · parole da 16 bitDa 1 a 123 registri contiguiProtocollo applicativo
0x11Leggere l’identificativo del serverLeggere l’identità specifica del dispositivo e lo stato di funzionamentoNessun dato nella richiestaSolo collegamento seriale
0x14Leggere i registri di fileLeggere uno o più gruppi di registri di fileDa 7 a 245 byte nella richiestaProtocollo applicativo
0x15Scrivere i registri di fileScrivere uno o più gruppi di registri di fileDa 9 a 251 byte nella richiestaProtocollo applicativo
0x16Scrivere un registro con mascheraModificare i bit di un registro holdingEsattamente un registroProtocollo applicativo
0x17Leggere e scrivere più registriScrivere registri holding e poi leggerliLeggere da 1 a 125; scrivere da 1 a 121 registriProtocollo applicativo
0x18Leggere la coda FIFOLeggere il contatore FIFO e i registri dei valoriIl contatore FIFO restituito non supera 31Protocollo applicativo
0x2BTrasporto di interfaccia incapsulataInvocare un’interfaccia definita da MEITipi MEI pubblici 0x0D e 0x0EProtocollo applicativo

Fonte: MODBUS Application Protocol Specification, V1.1b3

Oggetti dati primari

Le quattro tabelle dati primarie di Modbus. La mappatura nella memoria del dispositivo e l’eventuale sovrapposizione tra tabelle dipendono dall’implementazione.

OggettoElementoAccesso nel protocolloPrincipali funzioni pubbliche
BobineUn bitLettura e scrittura0x01 lettura · 0x05/0x0F scrittura
Ingressi discretiUn bitSola lettura0x02 lettura
Registri di ingressoParola da 16 bitSola lettura0x04 lettura
Registri holdingParola da 16 bitLettura e scrittura0x03 lettura · 0x06/0x10/0x16/0x17 scrittura

Fonte: MODBUS Application Protocol Specification, V1.1b3

Codici di eccezione

Codici restituiti in una risposta di eccezione Modbus. Un timeout o un frame scartato per errore CRC o di parità non sono risposte di eccezione.

CodiceEccezioneSignificato nel protocollo
0x01Funzione non consentitaLa funzione richiesta non è consentita per questo server o nel suo stato attuale.
0x02Indirizzo dati non consentitoL’indirizzo iniziale, l’intervallo richiesto o la loro combinazione non sono consentiti per il server.
0x03Valore dati non consentitoLa struttura della richiesta contiene un valore che il server non può accettare; questo non descrive il valore applicativo memorizzato in un registro.
0x04Errore del dispositivo serverSi è verificato un errore irreversibile mentre il server tentava di eseguire l’azione richiesta.
0x05ConfermaIl server ha accettato una richiesta di programmazione speciale, ma necessita di più tempo per completarla.
0x06Dispositivo server occupatoIl server sta eseguendo un comando di programmazione di lunga durata; il client può riprovare più tardi.
0x08Errore di parità della memoriaUn controllo di coerenza dei registri di file non è riuscito usando la funzione 0x14 o 0x15 con il tipo di riferimento 0x06.
0x0APercorso del gateway non disponibileUn gateway non è riuscito ad assegnare un percorso interno dalla porta di ingresso all’uscita richiesta.
0x0BIl dispositivo di destinazione del gateway non ha rispostoIl gateway non ha ricevuto risposta dal dispositivo di destinazione.

Fonte: MODBUS Application Protocol Specification, V1.1b3

Domande su codici di eccezione Modbus

Cosa significa l'eccezione Modbus 02?

Illegal Data Address: il dispositivo non dispone dell'indirizzo richiesto oppure l'indirizzo più il numero di registri supera l'intervallo disponibile. Verifica la convenzione degli indirizzi e la lunghezza della lettura.

Cosa significa l'eccezione Modbus 01?

Illegal Function: il dispositivo non supporta quel codice funzione oppure non lo supporta nel suo stato attuale. Molti contatori supportano solo alcune funzioni, spesso 03, 04 e 16.

Perché ricevo un timeout invece di un'eccezione?

Il dispositivo non ha interpretato la richiesta: identificativo dell'unità, velocità o parità errati, fili A e B invertiti, terminazione mancante o errore CRC. Solo un dispositivo che ha letto correttamente il frame risponde con un'eccezione. Il riferimento per terminazione e polarizzazione RS-485 tratta il cablaggio.

Cosa significano le eccezioni 0A e 0B?

Sono eccezioni di un gateway. 0A, Gateway Path Unavailable, indica che il gateway non ha potuto instradare la richiesta; 0B, Gateway Target Device Failed to Respond, indica che il dispositivo dietro il gateway non ha risposto. Entrambe riguardano il percorso a valle del gateway, compreso il collegamento seriale.

Limiti di questo risultato

  • Un codice funzione pubblico non dimostra che un server specifico lo implementi: verifica la mappa dei registri e la documentazione del firmware del dispositivo.
  • Il solo codice funzione non determina significato, fattore di scala, segno, ordine di byte e parole, convenzione degli indirizzi dei registri, né se una scrittura sia sicura.
  • Le funzioni riservate al collegamento seriale non sono servizi generali Modbus TCP. Un gateway può imporre ulteriori limiti.
  • Distingui l'assenza di risposta da una risposta di eccezione. Vanno verificati anche cablaggio, tempi, identificativo dell'unità, CRC, parità, instradamento e disponibilità del dispositivo.

Misuralo continuamente

Uno ZMB legge e scrive dispositivi Modbus RTU localmente e invia i dati al Gateway tramite la rete mesh wireless. Così si può integrare un contatore senza portare un cavo dati fino al quadro.

Guide correlate

Fonti

  1. MODBUS Application Protocol Specification V1.1b3 (si apre in una nuova scheda) (PDF) Modbus Organization, 2012-04-26
  2. Specifications and Implementation Guides (si apre in una nuova scheda) Modbus Organization, accessed 2026-09-14