Umfassendes Modbus-Handbuch

Vorstellung

Modbus ist das weltweit am weitesten verbreitete industrielle Kommunikationsprotokoll. Es wurde 1979 entwickelt und kommt in Millionen von SPSen, Frequenzumrichtern, Reglern, Zählern und industriellen Sensoren zum Einsatz. Eziwan unterstützt nativ Modbus RTU (über RS-485) und Modbus TCP (über Ethernet).


Modbus RTU über RS-485

RS-485-Verkabelung: Ein umfassender Leitfaden

RS-485 ist eine differentielle Zweidraht-Schnittstelle (A und B). Die Spannungsdifferenz zwischen A und B codiert das Signal, wodurch es eine hervorragende Störfestigkeit gegenüber elektromagnetischen Störungen in industriellen Umgebungen aufweist.

⚠️ Reihenschaltung (A↔A, B↔B, gemeinsamer Erdungsanschluss). Abschlusswiderstände 120 Ω nur an beiden Enden des Busses – auf der Eziwan-Seite bereits integriert, am letzten Slave anzubringen. Niemals einen Widerstand in der Mitte der Leitung.

Anschlussbelegung der Eziwan RS-485-Klemmen:

Eziwan-KlemmeRS-485-SignalEmpfohlene Kabelfarbe
A (oder D+)Differenz-PlusWeiß oder Rot
B (oder D-)Differenz-MinusBlau oder Schwarz
GNDReferenzmasseGrün oder Grau

RS-485-Kommunikationsparameter

Die Einstellungen müssen auf dem Gateway und allen Slaves identisch sein:

ParameterGängige WerteEziwan-Standardwert
Baudrate1200, 2400, 4800, 9600, 19200, 38400, 57600, 1152009600
ParitätN (keine), E (gerade), O (ungerade)N
Datenbits7, 88
Stoppbits1, 21
Pause zwischen den Nachrichten3,5 Zeichenzeiten (Modbus-Standard)Auto

Gängigste Standardkonfiguration: 9600 8N1 (9600 Baud, 8 Datenbits, keine Parität, 1 Stoppbit)

Maximale Entfernung und Anzahl der Slaves

BaudrateMaximale EntfernungMax. Slaves (elektrisch)
9.600 bps1.200 m32 (Einheitslasten)
19.200 bps800 m32
57.600 bps200 m32
115.200 bps50 m32

Um mehr als 32 Slaves oder eine Entfernung von mehr als 1.200 m zu erreichen, muss ein RS-485-Repeater verwendet werden.


Modbus TCP

Ethernet-Verbindung

Modbus TCP kapseln das Modbus-Protokoll in TCP/IP-Frames ein. Die Verbindung erfolgt direkt über Ethernet (RJ45).

ParameterWert
TCP-Port502 (Standard), manchmal 503 oder ein anderer Wert, je nach Hersteller
Geräte-IDAdresse des Slaves (1 bis 247) oder 255 für den direkten Zugriff
Empfohlenes Timeout500 ms bis 2000 ms, je nach Netzwerk
TCP-Keep-AliveEmpfohlen für Langzeitverbindungen

Netzwerkkonfiguration

Das Eziwan-Gateway muss über das Ethernet-Netzwerk eine Verbindung zur Modbus-TCP-Steuerung herstellen können. Bitte überprüfen Sie Folgendes:

  1. Das Gateway und die SPS befinden sich im selben Subnetz (oder es befindet sich ein Router zwischen ihnen)
  2. Es gibt keine Firewall, die den TCP-Port 502 zwischen Gateway und SPS blockiert
  3. Die Modbus-TCP-SPS ist so konfiguriert, dass sie Verbindungen akzeptiert (PUT/GET bei Siemens aktiviert)

Die vier Arten von Modbus-Registern

Die Modbus-Spezifikation definiert vier verschiedene Datenbereiche:

TypModbus-CodeAdressenMaster-ZugriffGrößeBeschreibung
Coils0x (1x)00001–09999Lesen/Schreiben1 BitDigitale Ausgänge (Relais, Spulen)
Diskrete Eingänge1x (2x)10001–19999Nur Lesen1 BitDigitale Eingänge (Binärsensoren)
Eingangsregister3x30001–39999Nur Lesen16 BitMesswerte (analoge Sensoren)
Halteregister4x40001–49999Lesen/Schreiben16 BitParameter und Sollwerte

Wichtiger Hinweis: Modbus-Adressen beginnen in der „funktionalen“ Notation bei 1 (40001 bis 49999), doch die Modbus-Funktionen verwenden 0-basierte Adressen (die FC03-Anfrage für das Register 40001 verwendet die Adresse 0x0000). Eziwan unterstützt beide Notationen.

Standard-Modbus-Funktionen

FunktionscodeNameZielregister
FC01Read CoilsCoils (0x)
FC02Diskrete Eingänge lesenDiskrete Eingänge (1x)
FC03Halteregister lesenHalteregister (4x)
FC04Eingangsregister lesenEingangsregister (3x)
FC05Einzelne Spule schreibenSpulen (0x)
FC06Einzelnes Register schreibenHalteregister (4x)
FC15Mehrere Spulen schreibenSpulen (0x)
FC16Mehrere Register schreibenHalteregister (4x)

Konfiguration des Mappings in Eziwan

JSON-Konfigurationsschnittstelle

Das Modbus-Mapping legt fest, wie die Register der SPS erfasst und veröffentlicht werden:

{
"device": {
"name": "Compresseur_Atlas_GA75",
"description": "Compresseur d'air atelier principal",
"protocol": "modbus_rtu",
"connection": {
"port": "/dev/ttyS0",
"baudrate": 9600,
"parity": "N",
"databits": 8,
"stopbits": 1,
"slave_id": 1
}
},
"polling": {
"interval_ms": 5000,
"timeout_ms": 500,
"retry_count": 3,
"retry_delay_ms": 200
},
"registers": [
{
"name": "Pression_Service",
"address": "3x0001",
"count": 1,
"type": "uint16",
"scale_factor": 0.1,
"unit": "bar",
"description": "Pression de service sortie compresseur",
"alarm_low": 6.0,
"alarm_high": 12.0,
"publish_on_change": true
},
{
"name": "Temperature_Huile",
"address": "3x0002",
"count": 1,
"type": "uint16",
"scale_factor": 0.1,
"unit": "°C",
"alarm_high": 95.0
},
{
"name": "Heures_Fonctionnement",
"address": "4x0010",
"count": 2,
"type": "uint32_ab",
"unit": "h",
"description": "Compteur d'heures moteur"
},
{
"name": "Debit_Air",
"address": "3x0005",
"count": 2,
"type": "float32_abcd",
"unit": "m³/h"
},
{
"name": "Alarme_Active",
"address": "1x0001",
"count": 1,
"type": "bool",
"description": "Au moins une alarme active"
},
{
"name": "Code_Alarme",
"address": "4x0020",
"count": 1,
"type": "uint16",
"description": "Code alarme (voir tableau constructeur)"
}
]
}

Vollständiges Beispiel: 10 Temperaturregister, 5 Statusregister

Hier ist ein typisches Mapping für eine Produktionslinie mit 10 Temperaturpunkten und 5 Maschinenzuständen:

{
"registers": [
{ "name": "Temp_Zone1", "address": "4x0001", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone2", "address": "4x0003", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone3", "address": "4x0005", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone4", "address": "4x0007", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone5", "address": "4x0009", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone6", "address": "4x0011", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone7", "address": "4x0013", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone8", "address": "4x0015", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone9", "address": "4x0017", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Temp_Zone10", "address": "4x0019", "count": 2, "type": "float32_abcd", "unit": "°C" },
{ "name": "Etat_EnMarche", "address": "1x0001", "count": 1, "type": "bool" },
{ "name": "Etat_EnChauffe", "address": "1x0002", "count": 1, "type": "bool" },
{ "name": "Etat_Production", "address": "1x0003", "count": 1, "type": "bool" },
{ "name": "Etat_Defaut", "address": "1x0004", "count": 1, "type": "bool" },
{ "name": "Etat_ArretUrgence", "address": "1x0005", "count": 1, "type": "bool" }
]
}

Von Eziwan unterstützte Datentypen

JSON-TypBeschreibungGröße (Register)Beispielwert
uint1616-Bit-Ganzzahl ohne Vorzeichen10 bis 65535
int1616-Bit-Ganzzahl mit Vorzeichen1-32768 bis 32767
uint32_ab32-Bit-Ganzzahl, Big-Endian20 bis 4 294 967 295
uint32_ba32-Bit-Ganzzahl, Little-Endian2
float32_abcdIEEE-754-Gleitkomma, ABCD223,456
float32_cdabGleitkomma nach IEEE 754, CDAB (Schneider)2
float32_badcGleitkomma nach IEEE 754, BADC2
float64_abcdefghDoppelte Genauigkeit4
boolBoolesch (Coil oder Discrete Input)1true/false

Debugging von Modbus

Modbus-Poll-Tool (Windows)

Modbus Poll ist das Standardwerkzeug zum Testen und Debuggen von Modbus-Verbindungen:

  1. Herunterladen unter modbustools.com
  2. Kostenlose Testversion (30 Tage)
  3. Konfiguration: „Connection“ → „Connect“ → „Modbus TCP“ (IP + Port 502) oder „Serial“ (COM + Baudrate)
  4. Zu lesende Register definieren: Setup → Read/Write Definition
Modbus-Poll – Konfiguration für das Auslesen
─────────────────────────────────────
Slave ID: 1
Function: 03 Read Holding Registers
Address: 0 (= registre 40001)
Quantity: 10
Scan Rate: 1000 ms

Eziwan-Protokolle zur Modbus-Fehlerbehebung

Im Eziwan-Portal unter „Gateway“ → „Logs“ → „Modbus“:

2026-06-04 14:32:00.123 [[INFO] Modbus RTU: Anfrage FC03, Slave=1, Adresse=0, Anzahl=10
2026-06-04 14:32:00.145 [[INFO] Modbus RTU: Antwort in 22 ms empfangen, 10 Register
2026-06-04 14:32:00.145 [DATA] Reg[0001]=0x4529 (23.4°C FLOAT32), Reg[0003]=0x42C6 (99.2 rpm)
2026-06-04 14:32:01.123 [[WARN] Modbus RTU: Timeout nach 500 ms, Slave=2 (Versuch 1/3)
2026-06-04 14:32:01.623 [[WARN] Modbus RTU: Timeout nach 500 ms, Slave=2 (Versuch 2/3)
2026-06-04 14:32:02.123 [[ERROR] Modbus RTU: Slave 2 nach 3 Versuchen nicht erreichbar

Aktivieren Sie die Protokollstufe „DEBUG“, um die rohen Hexadezimal-Frames zu erhalten:

2026-06-04 14:32:00.100 [DEBUG] TX: 01 03 00 00 00 0A C5 CD
│ │ ├──────┤ ├──────┤ └── CRC16
│ │ addr=0 count=10
│ FC03
slave=1
2026-06-04 14:32:00.122 [DEBUG] RX: 01 03 14 45 29 ... (20 octets + 2 CRC)

Fehlerbehebung

Problem 1: Modbus-RTU-Timeout

Symptome: Meldungen timeout, keine Antwort vom Slave.

Ursachen und Lösungen:

UrsacheDiagnoseLösung
Falsche Slave-IDSlave-IDs 1 bis 10 manuell testenGerätedokumentation prüfen
Falsche Baudrate9600, 19200, 57600 nacheinander testen
Vertauschte A/B-VerkabelungSpannung A-B messen: +1,5 V bis 5 V = korrektA- und B-Leiter vertauschen
Fehlender AbschlusswiderstandR zwischen A und B im stromlosen Zustand messen: ~60 Ω bei 2 Widerständen120-Ω-Widerstand am Ende des Busses hinzufügen
Kabel zu langGesamtlänge berechnenBaudrate reduzieren oder Repeater hinzufügen
Keine RS-485-StromversorgungSpannung der Slave-Stromversorgung messen24 VDC am Slave überprüfen

Problem 2: CRC-Fehler

Symptome: CRC error in den Eziwan-Protokollen, fehlerhafte Daten.

Ursachen:

  • Elektromagnetische Störungen auf dem RS-485-Kabel (das Kabel fern von Stromkabeln verlegen)
  • Ungeschirmtes Kabel (ein geschirmtes Kabel verwenden, wobei die Abschirmung nur auf der Gateway-Seite geerdet sein muss)
  • Schlechte Kabelqualität (ein für RS-485 spezifiziertes Kabel mit einer Impedanz von 120 Ω verwenden)
  • Zu hohe Übertragungsgeschwindigkeit für die Kabellänge (die Baudrate reduzieren)

Problem 3: Konflikt bei der Slave-ID

Symptome: Ein Slave antwortet anstelle eines anderen, Daten werden verwechselt.

Ursache: Zwei Slaves haben dieselbe Slave-ID auf demselben RS-485-Bus.

Lösung:

  1. Alle Slaves vom Bus trennen, bis auf einen
  2. Den Bus mit Modbus Poll abtasten, um die ID dieses Slaves zu ermitteln
  3. Die ID bei einem Konflikt ändern (über die Konfigurationsschnittstelle des Geräts)
  4. Die Slaves nacheinander wieder anschließen

Problem 4: Unlesbares Register (Ausnahmecode 02)

Symptom: Illegal Data Address (Exception Code 02).

Ursache: Die angeforderte Adresse ist in der SPS nicht vorhanden oder über Modbus nicht erreichbar.

Lösungen:

  • In der Dokumentation des Herstellers nachsehen, welche Adressen unterstützt werden
  • Manche Geräte stellen nur einen begrenzten Bereich von Registern zur Verfügung
  • Bei Siemens überprüfen, ob sich der Speicherbereich tatsächlich in dem Datenblock befindet, der über PUT/GET zugänglich ist

Checkliste für die Schnelldiagnose

□ 24-VDC-Versorgungsspannung an den Eziwan-Versorgungsklemmen vorhanden
□ Die RS-485-LED von Eziwan blinkt während der Übertragung (TX)
□ A/B-Verkabelung: A = positiv, B = negativ (nicht invertiert)
□ Nur 120-Ω-Widerstände an beiden Enden des Busses
□ Korrekte Slave-ID (auf dem Display des Geräts oder in der Dokumentation überprüfen)
□ Gleiche Baudrate an Gateway und Gerät
□ Gleiche Parität auf Gateway und Gerät (N, E oder O)
□ Richtige IP-Adresse und Port 502 für Modbus TCP
□ PUT/GET auf S7-1500/1200 bei Bedarf aktiviert
□ Keine Firewall, die Port 502 im OT-Lokalen Netzwerk blockiert

Häufig gestellte Fragen

Modbus RTU oder Modbus TCP: Welches Protokoll sollte man verwenden?

RTU, wenn Ihre Geräte über einen seriellen RS-485-Bus angeschlossen sind (Sensoren, Zähler, ältere Steuerungen); TCP, wenn die Geräte bereits über Ethernet verbunden sind. Das Eziwan-Gateway unterstützt beide Protokolle gleichzeitig und fungiert als Brücke zwischen RTU und TCP.

Welche Modbus-Funktionen werden für die Überwachung verwendet?

Hauptsächlich FC03 (Auslesen von Holding-Registern) und FC04 (Eingaberegister) zum Auslesen; FC06/FC16 zum Schreiben von Sollwerten. Die Ausnahmecodes (02 – ungültige Adresse, 0B – Ziel nicht erreichbar) dienen als Anhaltspunkt für die Fehlerbehebung.

Wie liest man einen 32-Bit-Wert oder einen Gleitkommawert aus?

In zwei aufeinanderfolgenden Registern, wobei die Wortreihenfolge (Big/Little Endian, Word Swap) in der Zuordnung des Gateways anzugeben ist. Ein und dasselbe Gerät kann verschiedene Konventionen mischen: Überprüfen Sie die Dokumentation des Herstellers Register für Register.

Kann Modbus über das Internet übertragen werden?

Niemals unverschlüsselt: Das Protokoll verfügt weder über eine Authentifizierung noch über eine Verschlüsselung. Das Gateway beschränkt den Modbus-Verkehr auf das lokale Netzwerk und überträgt die Daten über einen verschlüsselten VPN-Tunnel in die Cloud.

Weiterführende Ressourcen