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​

PinSignalBeschreibung
ARS485+Positive Differenzleitung
BRS485−Negative Differenzleitung
GNDMasseGemeinsamer Bezugspunkt
zur Polarität A/B

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​

FormatBeschreibungRegister
int1616-Bit-Ganzzahl mit Vorzeichen1
uint1616-Bit-Ganzzahl ohne Vorzeichen1
int32_abcd32-Bit-Ganzzahl mit Vorzeichen, Big-Endian2
int32_cdab32-Bit-Ganzzahl mit Vorzeichen, Little-Endian2
uint32_abcd32-Bit-Ganzzahl ohne Vorzeichen, Big-Endian2
float32_abcdIEEE-754-Gleitkommazahl, Big-Endian2
float32_cdabIEEE-754-Gleitkomma, Little-Endian (Schneider)2
float32_badcIEEE-754-Gleitkomma, Mid-Big-Endian2
coilModbus-Spule (1 Bit)1 Spule
bitExtraktion eines Bits aus einem uint16-Register1
Endianness

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​

HerstellerModellProtokollAnmerkungen
Schneider ElectricPM2100, PM2200Modbus RTUEnergiezähler — float32
Schneider ElectricTM3, TM2Modbus RTUSPS — Spulen + Haltekreise
SiemensSENTRON PAC 3200Modbus RTUEnergiezähler
Carlo GavazziEM24, EM340Modbus RTUDreiphasen-/Einphasen-Zähler
ABBB23, B24Modbus RTUEnergiezähler
Wago750-xxxModbus RTUI/O-Bus-Koppler
Phoenix ContactILB ETH 2TXModbus TCPÜber TCP-Bridge
HagerECR380DModbus RTUEnergiezähler
EastronSDM630Modbus RTUDreiphasen-Zähler
GenericAlle Modbus RTUModbus RTUSlave-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​

CodeBedeutungLösung
TIMEOUTSlave antwortet nichtVerkabelung, Baudrate, Slave-ID und Terminierung überprüfen
01Funktion wird nicht unterstütztholding anstelle von input verwenden (oder umgekehrt)
02Ungültige RegisteradresseRegister in der Gerätedokumentation überprüfen
03Ungültiger DatenwertWert außerhalb des zulässigen Bereichs
04Interner Slave-FehlerGerä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)

Modbus TCP

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 →

Support

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​