RS485 / Modbus RTU
L'Eziwan Gateway dispone di una porta RS485/RS232 nativa su morsettiera. Questa interfaccia consente di raccogliere i dati dai vostri sensori, PLC e contatori tramite il protocollo Modbus RTU e di inviarli al cloud senza bisogno di un gateway separato.
Connessione fisica
Cablaggio della morsettiera RS485
Pin della morsettiera
| Pin | Segnale | Descrizione |
|---|---|---|
| A | RS485+ | Linea differenziale positiva |
| B | RS485− | Linea differenziale negativa |
| GND | Massa | Riferimento comune |
Un'inversione di A/B provoca errori di comunicazione senza danneggiare l'apparecchiatura. Se nessun dispositivo risponde, provare a invertire A e B.
Resistenze di terminazione
Su un bus RS485 con più dispositivi slave:
- 120 Ω sul primo e sull’ultimo dispositivo del bus
- L’Eziwan Gateway dispone di un jumper interno per attivare la terminazione (documentazione hardware)
- Sulle apparecchiature intermedie: terminazione disattivata
Configurazione del polling Modbus
Tramite la dashboard di Eziwan
Dispositivo → Configurazione → RS485 / Modbus
Interfaccia grafica: aggiungere ogni slave, ogni registro, definire l'intervallo di polling e il topic MQTT di destinazione.
Tramite l'API / YAML
# Configuration RS485 + Modbus RTU
rs485:
enabled: true
baud_rate: 9600 # 1200, 2400, 4800, 9600, 19200, 38400, 115200
parity: none # none, even, odd
data_bits: 8 # 7 ou 8
stop_bits: 1 # 1 ou 2
polling_interval_sec: 10 # Intervallo di polling complessivo (secondi)
modbus:
slaves:
- slave_id: 1
name: "Compteur énergie Schneider PM2200"
timeout_ms: 1000
retries: 3
registers:
- address: "0x0048"
type: holding # holding, input, coil, discrete_input
format: float32_abcd
tag: active_power
unit: kW
scale: 1.0
mqtt_topic: "site/usine-01/energie/puissance_active"
- address: "0x004A"
type: holding
format: float32_abcd
tag: reactive_power
unit: kVAr
scale: 1.0
mqtt_topic: "site/usine-01/energie/puissance_reactive"
- address: "0x0156"
type: holding
format: float32_abcd
tag: energy_total_kwh
unit: kWh
scale: 1.0
mqtt_topic: "site/usine-01/energie/index_kwh"
- slave_id: 2
name: "Capteur température / humidité"
timeout_ms: 500
registers:
- address: "0x0001"
type: input
format: int16
tag: temperature
unit: "°C"
scale: 0.1 # Valeur brute 245 → 24,5°C
mqtt_topic: "site/usine-01/environnement/temperature"
- address: "0x0002"
type: input
format: uint16
tag: humidity
unit: "%RH"
scale: 0.1
mqtt_topic: "site/usine-01/environnement/humidite"
- slave_id: 3
name: "Automate Schneider TM3 — Station de pompage"
polling_interval_sec: 30 # Sovrascrittura dell'intervallo globale
registers:
- address: "0x0000"
type: holding
format: uint16
tag: pump_status
unit: ""
# 0=spento, 1=acceso, 2=guasto
mqtt_topic: "site/pompe-01/etat/pompe"
- address: "0x0001"
type: holding
format: int16
tag: pressure_bar
unit: bar
scale: 0.01
mqtt_topic: "site/pompe-01/mesures/pression"
- address: "0x0002"
type: holding
format: uint16
tag: flow_m3h
unit: "m³/h"
scale: 0.1
mqtt_topic: "site/pompe-01/mesures/debit"
Formati di registro supportati
| Formato | Descrizione | Registri |
|---|---|---|
int16 | Intero con segno a 16 bit | 1 |
uint16 | Intero senza segno a 16 bit | 1 |
int32_abcd | Intero con segno a 32 bit, big-endian | 2 |
int32_cdab | Intero con segno a 32 bit, little-endian | 2 |
uint32_abcd | Intero senza segno a 32 bit, big-endian | 2 |
float32_abcd | Numero in virgola mobile IEEE 754, big-endian | 2 |
float32_cdab | Numero in virgola mobile IEEE 754, little-endian (Schneider) | 2 |
float32_badc | Numero in virgola mobile IEEE 754, mid-big-endian | 2 |
coil | Bobina Modbus (1 bit) | 1 bobina |
bit | Estrazione di un bit da un registro uint16 | 1 |
Se i valori letti sembrano incoerenti (ad es.: 1234 letto come 12340000), provate a utilizzare float32_cdab al posto di float32_abcd. La convenzione varia a seconda dei produttori.
Pubblicazione MQTT
I dati Modbus vengono pubblicati automaticamente sul broker MQTT Eziwan:
Struttura dell'argomento
eziwan/{device_id}/modbus/{slave_id}/{tag_name}
Esempio:
eziwan/d_a1b2c3d4/modbus/1/active_power
Payload JSON
{
"value": 42.7,
"unit": "kW",
"timestamp": "2025-06-15T14:23:45.123Z",
"slave_id": 1,
"register": "0x0048",
"quality": "good"
}
Il campo "quality" può assumere i seguenti valori:
"good"— lettura riuscita"timeout"— lo slave non ha risposto"error"— errore Modbus (codice incluso in"error_code")
Iscriviti dal tuo sistema
# Iscrizione a tutti i tag di un sito
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert client.crt --key client.key --cafile ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/#"
# Iscrizione a un tag specifico
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert client.crt --key client.key --cafile ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/1/active_power"
Apparecchiature testate
| Produttore | Modello | Protocollo | Note |
|---|---|---|---|
| Schneider Electric | PM2100, PM2200 | Modbus RTU | Contatore di energia — float32 |
| Schneider Electric | TM3, TM2 | Modbus RTU | PLC — bobine + holding |
| Siemens | SENTRON PAC 3200 | Modbus RTU | Contatore di energia |
| Carlo Gavazzi | EM24, EM340 | Modbus RTU | Contatore trifase/monofase |
| ABB | B23, B24 | Modbus RTU | Contatore di energia |
| Wago | 750-xxx | Modbus RTU | Accoppiatore bus I/O |
| Phoenix Contact | ILB ETH 2TX | Modbus TCP | Tramite bridge TCP |
| Hager | ECR380D | Modbus RTU | Contatore di energia |
| Eastron | SDM630 | Modbus RTU | Contatore trifase |
| Generico | Qualsiasi Modbus RTU | Modbus RTU | ID slave 1–247 |
Risoluzione dei problemi
Test di comunicazione da Eziwan
Dashboard → Dispositivo → Strumenti → Test Modbus
Inserisci l'ID dello slave, il tipo e l'indirizzo del registro → Eziwan invia una richiesta di lettura e visualizza la risposta grezza in tempo reale. Ideale per effettuare diagnosi senza avere accesso fisico al sito.
Codici di errore Modbus
| Codice | Significato | Soluzione |
|---|---|---|
TIMEOUT | Lo slave non risponde | Verificare il cablaggio, la velocità di trasmissione, l'ID dello slave e la terminazione |
01 | Funzione non supportata | Utilizzare holding al posto di input (o viceversa) |
02 | Indirizzo registro non valido | Verificare il registro nella documentazione dell'apparecchiatura |
03 | Valore dati non valido | Valore fuori dall'intervallo consentito |
04 | Errore interno dello slave | Consultare il registro dell'apparecchiatura |
Lista di controllo per il cablaggio
Se nessuno degli slave risponde:
- Verificare la polarità A/B (provare a invertirla)
- Verificare la velocità di trasmissione (9600 è la più comune)
- Verificare che gli ID degli slave siano effettivamente univoci sul bus
- Attivare la terminazione da 120 Ω sul primo e sull'ultimo dispositivo
- Effettuare un test con un solo slave (per isolare il problema)
- Misurare la tensione differenziale A−B: deve essere > 200 mV in standby
Tensione differenziale di riferimento
Autobus in sosta (senza trasmissione):
V(A−B) > +200 mV → polarisation correcte
Pendant transmission :
V(A−B) > +1.5V → signal dominant (1 logique)
V(A−B) < −1.5V → signal récessif (0 logique)
Avete apparecchiature Modbus TCP (su rete Ethernet)? Eziwan supporta anche il bridge Modbus TCP → MQTT. Vedi la documentazione Modbus TCP →
- E-mail: support@eziwan.com — risposta entro 4 ore lavorative
- Configurazione guidata: Pianifica un onboarding tecnico →
Domande frequenti
Quanti dispositivi possono essere collegati allo stesso bus RS-485?
32 slave per segmento senza ripetitore, su una lunghezza massima di circa 1.200 m a 9.600 baud. Oltre tale limite, suddividere in più bus o aggiungere ripetitori.
La resistenza di terminazione è indispensabile?
Sui bus lunghi o veloci, sì: 120 Ω a ciascuna estremità evitano le riflessioni che danneggiano i frame. Su un bus corto (pochi metri, 9.600 baud), la sua assenza spesso passa inosservata — fino al giorno in cui non passa più.
Quale frequenza di polling scegliere?
Adattare la frequenza alla dinamica del processo: ogni 10-60 s per le misurazioni di energia o di livello, da 1 a 5 s per il monitoraggio delle macchine. Un polling troppo aggressivo su un bus lento provoca timeout a catena.
Come combinare attrezzature con velocità diverse?
Non si devono mescolare i parametri seriali sullo stesso bus: tutti gli slave devono condividere velocità, parità e bit di stop. In caso contrario, distribuirli sulle diverse porte RS-485 del gateway.
Risorse correlate
- Gateway RS485 verso il cloud — la pagina della soluzione
- RS485 / Modbus su 4G — acquisizione dati da un bus seriale tramite rete cellulare
- Modbus verso il cloud — la panoramica
- Guida completa a Modbus — registri, funzioni e risoluzione dei problemi
- MQTT e RS-485 nella pratica — l'articolo di approfondimento