Come possiamo aiutarti?
Indirizzamento Modbus / Stringa di indirizzi dati Modbus standard / Codici funzione Modbus

In poche parole
- 0x01 Bobine di lettura: Leggere lo stato dei relè o delle uscite digitali
- 0x02 Lettura ingressi discreti: lettura dei segnali di ingresso digitali, come i pulsanti
- 0x03 Lettura dei registri di mantenimento: lettura dei parametri di processo o dei setpoint memorizzati nei registri di mantenimento
- 0x04 Lettura dei registri di ingresso: lettura dei valori di ingresso analogici, come le letture dei sensori da un PLC
- 0x05 Scrittura singola bobina: imposta lo stato di una singola uscita digitale (ON/OFF), come l’attivazione di un relè
- 0x0F Scrittura bobine multiple: imposta gli stati di più uscite digitali (ON/OFF) in una singola richiesta
- 0x06 Scrittura di un singolo registro di mantenimento: scrittura di un singolo valore a 16 bit in un registro di mantenimento, ad esempio l’impostazione di un parametro o di un comando
- 0x10 Scrittura di più registri di mantenimento: scrittura di più valori a 16 bit su registri di mantenimento consecutivi, come più setpoint contemporaneamente o l’aggiornamento di una stringa
0x, 1x, 3x, 4x e FC01, FC02, FCxx,… Mi sono perso!
0x 1x 3x 4x non definiscono il codice funzione Modbus. Indicano solo il tipo di area dati: bobine, ingressi discreti, registro di mantenimento,…
Il codice funzione (FCxx) definisce l’operazione eseguita su quell’area dati.
Mappatura logica comune tra 0x, 1x,.. e FC01, FC02,..
0x Bobine
Lettura con FC01
Scrittura con FC05 o FC15
1x Ingressi discreti
Lettura con FC02
3x Registri di ingresso
Lettura con FC04
4x Registri di mantenimento
Lettura con FC03
Scrittura con FC06 o FC16
Punto importante: in un frame Modbus non ci sono mai 0x 1x 3x o 4x. Il frame contiene solo il codice funzione, l’indirizzo di partenza e la quantità.
I prefissi 0x 1x 3x 4x sono una convenzione di documentazione e software, non una regola di protocollo.
Dettagli
Bobine = uscite digitali equivalenti a una bobina in uno schema a relè.
Il tipo di dati Modbus è 0.
Spesso viene indicato come 0x, il che rende più facile l’indirizzamento.
Il tipo di dati 0x è disponibile per la lettura e la scrittura.
Per la lettura, viene utilizzato il codice funzione 1 (FC01 e 01h in esadecimale).
Per scrivere tali dati, viene utilizzato il codice funzione 5 (FC05 e 05h).
Per scrivere diversi dati consecutivi, viene utilizzato il codice funzione 15 (0Fh).
Questo tipo di dati è indicato in diversi modi:
%M1, 00001, 000001 (per la prima variabile)…
Secondo l’interpretazione dello standard, la notazione dovrebbe essere 0x0000 (fino a 0xFFFF), in esadecimale.
Stato di ingresso = ingressi digitali equivalenti a un contatto in uno schema a relè.
Il tipo di dati Modbus è 1.
Viene spesso indicato come 1x, il che rende più facile l’indirizzamento.
Il tipo di dati 1x è disponibile solo per la lettura.
Per la lettura viene utilizzato il codice funzione 2 (FC02 e 02h).
Questo tipo di dati è indicato in diversi modi:
%i1, 10001, 100001..,
La notazione dovrebbe essere 1×0000 (fino a 1xFFFF).
Registri di ingresso = ingressi digitali equivalenti a un registro (da cui il nome) o a un valore non binario (una parola a 16 bit).
A quel tempo la scelta non era come oggi…
Il tipo di dati Modbus è 3.
Viene spesso indicato come 3x, il che rende più facile l’indirizzamento.
Il tipo di dati 3x è disponibile solo per la lettura.
Per la lettura viene utilizzato il codice funzione 4 (FC04 e 04h).
Questo tipo di dati viene indicato in diversi modi:
%IW1, 30001, 300001..,
La notazione dovrebbe essere 3×0000 (fino a 3xFFFF).
Registri di mantenimento = uscite digitali equivalenti a un registro (da cui il nome) o a un valore non binario (una parola a 16 bit).
Il tipo di dati Modbus è 4.
Viene spesso indicato come 4x, il che rende più facile l’indirizzamento.
Il tipo di dati 4x è disponibile per la lettura e la scrittura.
Per la lettura viene utilizzato il codice funzione 3 (FC03 e 03h).
Per scrivere dati di questo tipo, viene utilizzato il codice funzione 6 (FC06 e 06h).
Per scrivere più dati consecutivi, viene utilizzato il codice funzione 16 (10h).
Questo tipo di dati viene indicato in diversi modi:
%MW1, 40001, 400001..,
La notazione dovrebbe essere 4×0000 (fino a 4xFFFF).
Spesso c’è confusione tra la notazione (che è virtuale) e l’indirizzo.
L’utilizzo dell’indirizzo in esadecimale consente di eliminare le diverse notazioni descritte sopra.
Infatti, per le applicazioni di piccole dimensioni, non ci saranno problemi, poiché il valore decimale dell’indirizzo non è superiore a 9999.
Ma quando si passa a database più grandi, la situazione diventa complicata
49999 è ad esempio la 10000ª parola di tipo 4, cosa succede se si deve utilizzare la 10001ª parola? In generale, questo viene indicato come 410000 (ma si cambia la scala, non è pratico), spesso è 50000 (ma questo non è molto logico, il tipo è 4, non 5).
Alcuni lo scrivono anche come 4×9999, poi 4×10000…
Scrivendo in esadecimale, è possibile utilizzare tutti gli indirizzi disponibili e la notazione è più leggibile.
La parola numero 10000 è 4×2710, la successiva sarà 4×2711… La conversione è facile con la calcolatrice di Windows o nel PLC stesso.