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