RS485 / Modbus RTU
Das Eziwan Gateway verfügt über einen integrierten RS485/RS232-Anschluss an der Klemmenleiste. Über diese Schnittstelle können Sie Daten von Ihren Sensoren, Steuerungen und Zählern im Modbus-RTU-Protokoll erfassen – und diese ohne separates Gateway in die Cloud übertragen.
Physikalische Verbindung
Verkabelung der RS485-Klemmenleiste
Anschlüsse der Klemmleiste
| Pin | Signal | Beschreibung |
|---|---|---|
| A | RS485+ | Positive Differenzleitung |
| B | RS485− | Negative Differenzleitung |
| GND | Masse | Gemeinsamer Bezugspunkt |
Eine Vertauschung von A und B führt zu Kommunikationsfehlern, ohne dass die Geräte beschädigt werden. Wenn kein Gerät reagiert, testen Sie, ob A und B vertauscht wurden.
Abschlusswiderstände
An einem RS485-Bus mit mehreren Slaves:
- 120 Ω am ersten und am letzten Gerät des Busses
- Das Eziwan-Gateway verfügt über einen internen Jumper zur Aktivierung der Abschlusswiderstandsfunktion (Hardware-Dokumentation)
- Bei den dazwischenliegenden Geräten: Terminierung deaktiviert
Konfiguration des Modbus-Pollings
Über das Eziwan-Dashboard
Gerät → Konfiguration → RS485 / Modbus
Grafische Benutzeroberfläche: Fügen Sie jeden Slave und jedes Register hinzu und legen Sie das Abfrageintervall sowie das Ziel-MQTT-Topic fest.
Über die 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 # Gesamt-Abfrageintervall (Sekunden)
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 # Überschreiben des globalen Intervalls
registers:
- address: "0x0000"
type: holding
format: uint16
tag: pump_status
unit: ""
# 0=Aus, 1=Ein, 2=Fehler
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"
Unterstützte Registerformate
| Format | Beschreibung | Register |
|---|---|---|
int16 | 16-Bit-Ganzzahl mit Vorzeichen | 1 |
uint16 | 16-Bit-Ganzzahl ohne Vorzeichen | 1 |
int32_abcd | 32-Bit-Ganzzahl mit Vorzeichen, Big-Endian | 2 |
int32_cdab | 32-Bit-Ganzzahl mit Vorzeichen, Little-Endian | 2 |
uint32_abcd | 32-Bit-Ganzzahl ohne Vorzeichen, Big-Endian | 2 |
float32_abcd | IEEE-754-Gleitkommazahl, Big-Endian | 2 |
float32_cdab | IEEE-754-Gleitkomma, Little-Endian (Schneider) | 2 |
float32_badc | IEEE-754-Gleitkomma, Mid-Big-Endian | 2 |
coil | Modbus-Spule (1 Bit) | 1 Spule |
bit | Extraktion eines Bits aus einem uint16-Register | 1 |
Wenn die ausgelesenen Werte unstimmig erscheinen (z. B. 1234 wird als 12340000 ausgelesen), versuchen Sie es mit float32_cdab anstelle von float32_abcd. Die Konvention variiert je nach Hersteller.
MQTT-Veröffentlichung
Die Modbus-Daten werden automatisch auf dem Eziwan-MQTT-Broker veröffentlicht:
Aufbau des Themas
eziwan/{device_id}/modbus/{slave_id}/{tag_name}
Beispiel:
eziwan/d_a1b2c3d4/modbus/1/active_power
JSON-Nutzdaten
{
"value": 42.7,
"unit": "kW",
"timestamp": "2025-06-15T14:23:45.123Z",
"slave_id": 1,
"register": "0x0048",
"quality": "good"
}
Das Feld "quality" kann folgende Werte annehmen:
"good"— Lesevorgang erfolgreich"timeout"– Slave hat nicht geantwortet"error"– Modbus-Fehler (Code in"error_code"enthalten)
Über Ihr System abonnieren
# Alle Tags einer Website abonnieren
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert client.crt --key client.key --cafile ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/#"
# Ein bestimmtes Tag abonnieren
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"
Getestete Geräte
| Hersteller | Modell | Protokoll | Anmerkungen |
|---|---|---|---|
| Schneider Electric | PM2100, PM2200 | Modbus RTU | Energiezähler — float32 |
| Schneider Electric | TM3, TM2 | Modbus RTU | SPS — Spulen + Haltekreise |
| Siemens | SENTRON PAC 3200 | Modbus RTU | Energiezähler |
| Carlo Gavazzi | EM24, EM340 | Modbus RTU | Dreiphasen-/Einphasen-Zähler |
| ABB | B23, B24 | Modbus RTU | Energiezähler |
| Wago | 750-xxx | Modbus RTU | I/O-Bus-Koppler |
| Phoenix Contact | ILB ETH 2TX | Modbus TCP | Über TCP-Bridge |
| Hager | ECR380D | Modbus RTU | Energiezähler |
| Eastron | SDM630 | Modbus RTU | Dreiphasen-Zähler |
| Generic | Alle Modbus RTU | Modbus RTU | Slave-ID 1–247 |
Fehlerbehebung
Kommunikationstest von Eziwan aus
Dashboard → Gerät → Tools → Modbus-Test
Geben Sie die Slave-ID, den Typ und die Registeradresse ein → Eziwan sendet eine Leseanfrage und zeigt die Rohdaten der Antwort in Echtzeit an. Ideal für die Diagnose, ohne physischen Zugriff auf den Standort zu haben.
Modbus-Fehlercodes
| Code | Bedeutung | Lösung |
|---|---|---|
TIMEOUT | Slave antwortet nicht | Verkabelung, Baudrate, Slave-ID und Terminierung überprüfen |
01 | Funktion wird nicht unterstützt | holding anstelle von input verwenden (oder umgekehrt) |
02 | Ungültige Registeradresse | Register in der Gerätedokumentation überprüfen |
03 | Ungültiger Datenwert | Wert außerhalb des zulässigen Bereichs |
04 | Interner Slave-Fehler | Gerätelogbuch einsehen |
Checkliste für die Verkabelung
Wenn kein Slave antwortet:
- Polarität A/B überprüfen (versuchen, die Polarität umzukehren)
- Baudrate überprüfen (9600 ist am gebräuchlichsten)
- Sicherstellen, dass die Slave-IDs auf dem Bus eindeutig sind
- 120-Ω-Terminierung am ersten und letzten Gerät aktivieren
- Mit nur einem Slave testen (das Problem eingrenzen)
- Die Differenzspannung A−B messen: muss im Ruhezustand > 200 mV betragen
Referenz-Differenzspannung
Bus im Ruhezustand (keine Übertragung):
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)
Verfügen Sie über Geräte mit Modbus TCP (über Ethernet)? Eziwan unterstützt auch die Modbus-TCP-→-MQTT-Brücke. Siehe Modbus-TCP-Dokumentation →
- E-Mail: support@eziwan.com – Antwort innerhalb von < 4 Arbeitsstunden
- Geführte Konfiguration: Technisches Onboarding vereinbaren →
Häufig gestellte Fragen
Wie viele Geräte können an einen RS-485-Bus angeschlossen werden?
32 Slaves pro Segment ohne Repeater bei einer maximalen Länge von ca. 1.200 m und einer Baudrate von 9.600 Baud. Bei größeren Entfernungen sollten Sie den Bus in mehrere Segmente unterteilen oder Repeater hinzufügen.
Ist der Abschlusswiderstand unbedingt erforderlich?
Bei langen oder schnellen Bussen ja: 120 Ω an jedem Ende verhindern Reflexionen, die die Datenrahmen verfälschen. Bei einem kurzen Bus (einige Meter, 9.600 Baud) bleibt das Fehlen dieser Abschlusswiderstände oft unbemerkt – bis zu dem Tag, an dem die Übertragung nicht mehr funktioniert.
Welche Abfragerate sollte man wählen?
Passen Sie die Abfragefrequenz an die Dynamik des Prozesses an: alle 10 bis 60 s für Energie- oder Füllstandsmessungen, 1 bis 5 s für die Maschinenüberwachung. Eine zu aggressive Abfrage auf einem langsamen Bus führt zu einer Kettenreaktion von Timeouts.
Wie lassen sich Geräte mit unterschiedlichen Drehzahlen kombinieren?
Die seriellen Parameter dürfen auf ein und demselben Bus nicht gemischt werden: Alle Slaves müssen die gleiche Baudrate, Parität und die gleichen Stoppbits verwenden. Andernfalls verteilen Sie sie auf die verschiedenen RS-485-Anschlüsse des Gateways.
Weiterführende Ressourcen
- RS485-Gateway zur Cloud – die Lösungsseite
- RS485 / Modbus über 4G – Erfassung eines seriellen Busses über Mobilfunk
- Modbus in die Cloud – die Übersicht
- Umfassendes Modbus-Handbuch – Register, Funktionen und Fehlerbehebung
- MQTT und RS-485 in der Praxis – der Hintergrundartikel