Modbus Adress-Umrechner
Geben Sie eine Adresse aus Handbuch oder Software ein und sehen Sie dasselbe Register in jeder Schreibweise: Registernummer, nullbasierte Adresse, Hex und die Bytes im Frame.
Adresse
BeispielZum Beispiel 40001, 400001, 4x0001, 30010, 0x006B oder eine einfache Adresse wie 107.
Dasselbe Register in jeder Schreibweise
| Typ | |
|---|---|
| Adresse in der Anfrage (ab 0) | |
| Dasselbe in Hex | |
| Adressbytes im Frame | |
| Registernummer, 5-stellig | |
| Registernummer, 6-stellig | |
| Ab 1 gezählt |
Leseanfrage für diese Adresse
Die Bytes, die ein Master zum Lesen ab hier sendet. Vergleichen Sie sie mit einem seriellen Log oder Wireshark.
- Modbus RTU (CRC Low-Byte zuerst)
- Modbus TCP (Transaktion 1)
Läuft komplett in Ihrem Browser. Ihre Eingaben werden an keinen Server gesendet.
Registertypen im Überblick
| Typ | Registernummern | Lesen | Schreiben | Größe |
|---|---|---|---|---|
| Coils (0x) | 00001–09999 · 000001–065536 | 01 | 05, 15 | 1 Bit |
| Diskrete Eingänge (1x) | 10001–19999 · 100001–165536 | 02 | nur lesen | 1 Bit |
| Input-Register (3x) | 30001–39999 · 300001–365536 | 04 | nur lesen | 16 Bit |
| Holding-Register (4x) | 40001–49999 · 400001–465536 | 03 | 06, 16 | 16 Bit |
Registernummer oder Adresse?
Handbücher nennen Register meist nach ihrer Registernummer: 40001, 30001, 10001 oder 00001. Die erste Ziffer bezeichnet die Tabelle, gezählt wird ab 1. In der Anfrage auf der Leitung steht aber etwas anderes: eine nullbasierte Adresse von 0 bis 65535, ohne Tabellenziffer. Die Tabelle wählt stattdessen der Funktionscode, 03 für Holding-Register und 04 für Input-Register. Deshalb wird aus 40001 die Adresse 0 und aus 30010 die Adresse 9 mit Funktion 04.
Sechsstellige Nummern wie 400001 funktionieren genauso. Es gibt sie, weil fünf Stellen nur für 9999 Register pro Tabelle reichen, das Protokoll aber 65536 erlaubt. Schreibweisen wie 4x0001 oder 4x00001 sind nur eine andere Form von 40001.
Typische Fehler
- Um eins verschoben. Wer 40001 minus 40000 = 1 statt 0 eingibt, liest das nächste Register. Alle Werte wirken dann verschoben, oder ein 32-Bit-Float wird zu Unsinn.
- Hex als dezimal gelesen. Steht im Handbuch 0x0100, ist Adresse 256 gemeint, nicht 100. Hat die Adresse Buchstaben A bis F oder das Präfix 0x, ist sie hex.
- Falsche Tabelle. 30001 und 40001 sind verschiedene Register. Ein Input-Register mit Funktion 03 zu lesen liefert einen anderen Wert oder die Ausnahme 02, ungültige Datenadresse.
- Software, die selbst 1 abzieht. Manche Programme erwarten ab 1 gezählte Registernummern und ziehen 1 für Sie ab. Hat Ihr Werkzeug eine Einstellung „Basis 0 / Basis 1“ oder „SPS-Adresse“, prüfen Sie sie, bevor Sie selbst etwas abziehen.
Fragen aus der Praxis
Ist 40001 die Adresse 0 oder 1?
Adresse 0. 40001 ist das erste Holding-Register in der klassischen Modicon-Nummerierung, die ab 1 zählt. Die Anfrage enthält die nullbasierte Adresse, 40001 wird also als 00 00 gesendet und 40002 als 00 01.
Was ist der Unterschied zwischen 40001 und 400001?
Keiner, es ist dasselbe Register. Fünfstellige Nummern reichen nur bis 49999, also Adresse 9998. Sechsstellige Nummern (400001 bis 465536) decken den ganzen Bereich von 65536 Adressen ab, deshalb verwenden manche Handbücher sie für alle Register.
Im Handbuch steht 0x006B. Was gebe ich in meiner Software ein?
0x006B ist eine Hex-Adresse, dezimal 107. Verlangt Ihre Software eine nullbasierte Adresse, geben Sie 107 ein. Will sie eine Registernummer, geben Sie 40108 für ein Holding-Register oder 30108 für ein Input-Register ein.
Mit welchem Funktionscode werden 3xxxx- und 4xxxx-Register gelesen?
Input-Register (3xxxx) werden mit Funktion 04 gelesen. Holding-Register (4xxxx) werden mit Funktion 03 gelesen und mit 06 für ein Register oder 16 für mehrere geschrieben. Coils (0xxxx) nutzen 01, 05 und 15, diskrete Eingänge (1xxxx) die Funktion 02.
Warum bekomme ich die Ausnahme 02, ungültige Datenadresse?
Das Gerät hat an der angefragten Adresse kein Register. Typische Ursachen sind eine um eins verschobene Adresse, eine als dezimal eingegebene Hex-Adresse, das Lesen eines Input-Registers mit Funktion 03 oder umgekehrt oder mehr gelesene Register, als der Block enthält.
Verwandte Werkzeuge
- Register-DecoderFloat32, Int32, UInt16 und Bits in jeder Byte-Reihenfolge, dazu „Wert finden“.
- Wert-KodiererEinen Wert wie 230.5 in Register für jede Byte-Reihenfolge umwandeln.
- CRC-16-RechnerModbus-RTU-Prüfsumme in Übertragungsreihenfolge, dazu eine vollständige Frame-Prüfung.