Modbus-Systemregister
Die Geräte WTR102 und WTR202 stellen neben den frei im Programm verwendbaren Modbus-Registern einen festen Bereich mit Diagnose-, Geräte- und Konfigurationswerten bereit.
Die Systemregister dienen insbesondere dazu,
- die korrekte Modbus-Kommunikation zu prüfen,
- Byte- und Wortreihenfolgen zu kontrollieren,
- Geräte- und Firmwareinformationen auszulesen,
- die aktuelle Netzwerkkonfiguration zu ermitteln,
- ausgewählte Geräteeinstellungen auszulesen,
- ausgewählte Parameter über Modbus zu verändern,
- und einen kontrollierten Neustart des Gerätes auszulösen.
Die fest definierten Systemregister befinden sich im hohen Registerbereich und beginnen bei:
0xF001
Dieser Bereich ist für interne Geräteinformationen und Diagnosefunktionen reserviert.
Die durch das Anwenderprogramm angelegten Register befinden sich weiterhin im Bereich:
1 ... 10000
Dadurch können selbst angelegte Programmregister nicht mit den festen Systemregistern kollidieren.
Adressierung
Die Registerbezeichnungen in dieser Dokumentation sind 1-basiert. Das erste Modbus-Register wird daher als Register 1 angegeben.
Intern verwendet die Wetterrelais-Software – wie auch die Adressangabe im Modbus-PDU – 0-basierte Indizes. Das dokumentierte Register 1 entspricht intern somit dem Index 0.
Einige SPSen, SCADA-Systeme und Modbus-Testprogramme zeigen ebenfalls die 0-basierte Adresse an. In diesem Fall muss von der in dieser Dokumentation angegebenen Registeradresse 1 abgezogen werden.
Beispiel: Das im Wiki angegebene Register 0xF001 entspricht intern beziehungsweise bei 0-basierter Darstellung der Adresse 0xF000.
Registertypen
Das Wetterrelais verwendet die vier üblichen Modbus-Datenbereiche.
| Registertyp | Lesen | Schreiben | Verwendung |
|---|---|---|---|
| Coil | FC01 | FC05 / FC15 | Binäre, veränderbare Werte |
| Discrete Input | FC02 | – | Binäre, nur lesbare Werte |
| Holding Register | FC03 | FC06 / FC16 | Veränderbare 16-Bit-Werte und Befehle |
| Input Register | FC04 | – | Nur lesbare 16-Bit-Werte |
Die Adressräume der vier Registertypen sind voneinander unabhängig.
Daher können beispielsweise ein Input Register und ein Discrete Input dieselbe numerische Adresse besitzen:
Input Register 0xF301 -> Web-Protokoll
Discrete Input 0xF301 -> HTTP-Redirect
Entscheidend ist neben der Adresse immer der verwendete Registertyp beziehungsweise Modbus-Funktionscode.
Modbus-Kommunikation prüfen
Im Bereich 0xF001 bis 0xF00A stehen zehn unveränderliche Testwerte zur Verfügung.
Sie können genutzt werden, um die Modbus-Kommunikation zwischen SPS, Leitsystem, Modbus-Testprogramm und Wetterrelais zu kontrollieren.
Die Werte werden als Input Register über FC04 gelesen und können nicht verändert werden.
Testregister lesen
Werden ab Adresse 0xF001 zehn Input Register gelesen, muss folgende Folge zurückgegeben werden:
0x0000
0xFFFF
0xAAAA
0x5555
0x00FF
0xFF00
0x1234
0x3412
0x7FFF
0x8000
Mit diesen Werten lassen sich verschiedene typische Konfigurationsfehler erkennen.
0x0000
0xF001 = 0x0000
Alle Bits sind 0.
Dieser Wert eignet sich als einfachster Funktionstest und zur Kontrolle, ob das richtige Register gelesen wird.
0xFFFF
0xF002 = 0xFFFF
Alle 16 Bits sind 1.
Je nach Darstellung des Modbus-Masters kann dieser Wert beispielsweise als
65535
oder bei Interpretation als vorzeichenbehafteter 16-Bit-Wert als
-1
angezeigt werden.
Damit kann geprüft werden, ob der Master einen Registerwert als UINT16 oder INT16 interpretiert.
0xAAAA und 0x5555
0xF003 = 0xAAAA
0xF004 = 0x5555
Diese beiden Werte besitzen abwechselnd gesetzte Bits:
0xAAAA = 1010 1010 1010 1010
0x5555 = 0101 0101 0101 0101
Sie eignen sich zur Kontrolle einzelner Bits und zur Diagnose von Bitreihenfolgen.
0x00FF und 0xFF00
0xF005 = 0x00FF
0xF006 = 0xFF00
Diese beiden Register eignen sich besonders zur Kontrolle der Byte-Reihenfolge innerhalb eines 16-Bit-Registers.
Erwartet werden:
0x00FF = 255
0xFF00 = 65280
Werden die beiden Werte vertauscht interpretiert, ist wahrscheinlich in der SPS oder Modbus-Software ein Byte-Swap aktiviert.
0x1234 und 0x3412
0xF007 = 0x1234
0xF008 = 0x3412
Diese Werte sind besonders leicht wiederzuerkennen und eignen sich ebenfalls zum Prüfen der Byte-Reihenfolge.
Erwartet werden:
0x1234 = 4660
0x3412 = 13330
Wird beim Lesen von 0xF007 beispielsweise 0x3412 angezeigt, sollte die Byte-Reihenfolge des Modbus-Masters überprüft werden.
0x7FFF und 0x8000
0xF009 = 0x7FFF
0xF00A = 0x8000
Diese Register markieren die Grenze eines vorzeichenbehafteten 16-Bit-Wertes.
0x7FFF = 32767
0x8000 wird abhängig vom verwendeten Datentyp dargestellt als:
32768 als UINT16
-32768 als INT16
Damit lässt sich prüfen, wie die angeschlossene SPS oder Visualisierung 16-Bit-Werte interpretiert.
Empfohlener Kommunikationstest
Für eine erste Inbetriebnahme empfiehlt es sich, zunächst alle zehn Testregister mit einer einzigen FC04-Anfrage zu lesen.
Werden alle Werte korrekt empfangen, sind insbesondere
- Modbus-Verbindung,
- Registertyp,
- Adressierung,
- Byte-Reihenfolge,
- Bitdarstellung,
- und die grundlegende 16-Bit-Dateninterpretation
weitgehend geprüft.
Geräteinformationen
Ab 0xF101 stellt das Wetterrelais Informationen über das Gerät und die installierte Firmware bereit.
Diese Werte sind ausschließlich lesbar.
Modell
Input Register 0xF101
Das Register enthält die numerische Modellnummer.
Beispiele:
WTR102 -> 102
WTR202 -> 202
Damit kann ein Modbus-Master automatisch feststellen, mit welchem Wetterrelais-Modell er kommuniziert.
Seriennummer
Input Register 0xF102
Enthält die Seriennummer des Gerätes als numerischen Wert.
Damit kann beispielsweise in einer Gebäudeleittechnik überprüft werden, ob tatsächlich das erwartete Gerät angesprochen wird.
Firmwareversion
Die Firmwareversion wird auf drei Register aufgeteilt:
0xF103 -> Major
0xF104 -> Minor
0xF105 -> Patch
Bei einer Firmwareversion
3.2.5
werden entsprechend folgende Werte geliefert:
0xF103 = 3
0xF104 = 2
0xF105 = 5
Damit kann ein übergeordnetes System die installierte Firmwareversion ohne Verarbeitung eines Textstrings feststellen.
mDNS-Hostname
Der konfigurierte mDNS-Hostname kann ebenfalls über Modbus gelesen werden.
Da Modbus-Register jeweils nur 16 Bit enthalten, wird der Text auf mehrere Register verteilt.
Länge
Input Register 0xF111
Dieses Register enthält die Länge des Hostnamens in Bytes.
Text
Input Register 0xF112 ... 0xF131
Für den Hostnamen sind 32 Register reserviert.
Pro Register werden zwei Bytes übertragen:
High Byte = erstes Zeichen
Low Byte = zweites Zeichen
Die Zeichenfolge ist UTF-8-codiert und wird am Ende mit Nullbytes aufgefüllt.
Es können maximal 63 UTF-8-Bytes übertragen werden.
Beispiel
Für den Hostnamen
WTR102
ergibt sich:
0xF111 = 6
0xF112 = 0x5754 "WT"
0xF113 = 0x5231 "R1"
0xF114 = 0x3032 "02"
Die restlichen Register enthalten 0x0000.
Für die Auswertung sollte zuerst die Länge aus 0xF111 gelesen und anschließend genau diese Anzahl an Bytes aus dem Textbereich verwendet werden.
Netzwerkinformationen
Über die Register ab 0xF201 kann die aktuell verwendete IPv4-Konfiguration gelesen werden.
Die Werte sind ausschließlich lesbar.
Adressierungsart
Input Register 0xF201
Mögliche Werte:
| Wert | Bedeutung |
|---|---|
0 |
Statische IP-Konfiguration |
1 |
DHCP |
IPv4-Adressen
IPv4-Adressen werden bewusst nicht in ein oder zwei 16-Bit-Register gepackt.
Stattdessen wird jedes IPv4-Oktett in einem eigenen Register übertragen.
Dadurch ist die Auswertung in SPSen und Modbus-Testprogrammen eindeutig und unabhängig von einer Byte-Swap-Einstellung.
Aktuelle IP-Adresse
0xF211 ... 0xF214
Beispiel:
IP-Adresse: 192.168.10.25
0xF211 = 192
0xF212 = 168
0xF213 = 10
0xF214 = 25
Subnetzmaske
0xF215 ... 0xF218
Beispiel:
255.255.255.0
0xF215 = 255
0xF216 = 255
0xF217 = 255
0xF218 = 0
Gateway
0xF219 ... 0xF21C
Beispiel:
192.168.10.1
DNS-Server
0xF21D ... 0xF220
Enthält den aktuell verwendeten DNS-Server.
Die Netzwerkregister geben die aktive Netzwerkkonfiguration des Gerätes wieder. Dadurch kann beispielsweise bei DHCP die tatsächlich zugewiesene Adresse ausgelesen werden.
Webserver-Konfiguration
Einige sicherheitsrelevante Einstellungen des Webservers können über Modbus kontrolliert, aber bewusst nicht verändert werden.
Damit kann ein übergeordnetes System beispielsweise prüfen, ob HTTPS aktiv ist, ohne dass ein Modbus-Master die sichere Webserverkonfiguration abschalten kann.
Web-Protokoll
Input Register 0xF301
| Wert | Bedeutung |
|---|---|
0 |
HTTP |
1 |
HTTPS |
2 |
HTTPS + HTTP |
65535 / 0xFFFF |
Unbekannter oder nicht unterstützter Wert |
Das Register ist nur lesbar.
HTTPS-Port
Input Register 0xF302
Enthält den konfigurierten HTTPS-Port.
Typischer Wert:
443
Auch dieses Register ist ausschließlich lesbar.
HTTP-Redirect
Discrete Input 0xF301
Der Zustand von Web_HttpRedirect wird als binärer Wert ausgegeben:
FALSE = HTTP-Redirect deaktiviert
TRUE = HTTP-Redirect aktiviert
Da es sich um einen Discrete Input handelt, kann der Wert nicht über Modbus verändert werden.
Sicherheit
Web_Protocol, Web_HttpsPort und Web_HttpRedirect sind bewusst nur lesbar.
Ein Modbus-Master kann damit die Webserverkonfiguration überprüfen, aber nicht beispielsweise HTTPS deaktivieren oder einen HTTP-Redirect abschalten.
DWD-Warnungen
Der Parameter DWD_Enable kann über Modbus gelesen und verändert werden.
Coil 0xF311
| Coil | Bedeutung |
|---|---|
FALSE |
DWD-Warnungen deaktiviert |
TRUE |
DWD-Warnungen aktiviert |
Intern entspricht dies den Parameterwerten:
FALSE -> off
TRUE -> on
Der Wert kann über FC01 gelesen sowie über FC05 oder FC15 verändert werden.
Eine über Modbus vorgenommene Parameteränderung wird im Systemprotokoll gekennzeichnet.
Beispielsweise:
Modbus Anfrage zur Parameteränderung von DWD_Enable
Anschließend wird die eigentliche Änderung vom normalen Parametersystem protokolliert.
Modbus-RTU-Terminierung
Die schaltbare RS485-Terminierung kann über Modbus kontrolliert und verändert werden.
Coil 0xF401
| Coil | Bedeutung |
|---|---|
FALSE |
Terminierung ausgeschaltet |
TRUE |
Terminierung eingeschaltet |
Der zugehörige Geräteparameter lautet:
Modbus_RTU_termination
Eine Änderung wird sofort in die Parameterkonfiguration übernommen.
Modbus-RTU-Bias
Die RS485-Bias-Widerstände können ebenfalls über Modbus gelesen und verändert werden.
Coil 0xF402
| Coil | Bedeutung |
|---|---|
FALSE |
Bias ausgeschaltet |
TRUE |
Bias eingeschaltet |
Der zugehörige Geräteparameter lautet:
Modbus_RTU_bias
Modbus-TCP-Timeout
Das Zeitlimit für inaktive Modbus-TCP-Master kann über ein Holding Register eingestellt werden.
Holding Register 0xF401
Der Wert wird in Sekunden angegeben.
Zulässiger Bereich:
10 ... 600 Sekunden
Der Maximalwert beträgt damit zehn Minuten.
Beispiele:
30 -> 30 Sekunden
60 -> 1 Minute
120 -> 2 Minuten
600 -> 10 Minuten
Der Parameter kann an die jeweilige Anwendung angepasst werden.
Ein System, dessen Modbus-Master beispielsweise jede Sekunde zyklisch kommuniziert, kann einen deutlich kürzeren Timeout verwenden als ein System, bei dem nur gelegentlich Modbus-Anfragen stattfinden.
Der zugehörige Parameter lautet:
Modbus_TCP_timeout
Die Änderung wird ohne Neustart übernommen.
Note
Coil 0xF401 und Holding Register 0xF401 sind zwei unterschiedliche Register.
- Coil
0xF401= RTU-Terminierung - Holding Register
0xF401= TCP-Timeout
Die numerische Registerbezeichnung darf identisch sein, weil Coils und Holding Register getrennte Modbus-Adressräume verwenden.
LED-Helligkeit
Die Helligkeit der Geräte-LED kann über Modbus gelesen und verändert werden.
Holding Register 0xF411
Zulässig sind ausschließlich folgende Werte:
| Wert | Bedeutung |
|---|---|
0 |
Aus |
25 |
25 % |
50 |
50 % |
75 |
75 % |
100 |
100 % |
125 |
125 % |
Andere Werte werden nicht als gültige Einstellung übernommen.
Der zugehörige Geräteparameter lautet:
HW_LedBrightness
Bei einer Änderung über Modbus erscheint beispielsweise zunächst:
Modbus Anfrage zur Parameteränderung von HW_LedBrightness
Anschließend protokolliert das Parametersystem die tatsächliche Änderung des Wertes.
Software-Neustart
Ein kontrollierter Neustart des Wetterrelais kann über ein spezielles Befehlsregister ausgelöst werden.
Holding Register 0xFFF1
Damit ein versehentliches Schreiben keinen Neustart auslöst, muss exakt das folgende Magic Word geschrieben werden:
0xAA55
Andere Werte lösen keinen Neustart aus.
Das Befehlsregister liefert beim Lesen normalerweise:
0
Nach einem gültigen Neustartbefehl wird der Vorgang protokolliert:
Modbus Anfrage zum Neustart des Gerätes
Kurz vor dem tatsächlichen Neustart folgt:
execute reboot... bye
Anschließend wird der Controller neu gestartet.
Warning
Das Schreiben von 0xAA55 auf Holding Register 0xFFF1 führt zu einem Neustart des Gerätes.
Der Wert 0xAA55 schützt vor einem versehentlichen Schreibzugriff, stellt jedoch keine Authentifizierung oder Zugriffskontrolle dar.
Übersicht der festen Modbus-Register
Input Register – FC04
| Funktion | Adresse Hex | Adresse Dezimal | Länge | Werte / Format | Zugriff |
|---|---|---|---|---|---|
| Test: Null | 0xF001 |
61441 | 1 | 0x0000 |
Lesen |
| Test: Alle Bits | 0xF002 |
61442 | 1 | 0xFFFF |
Lesen |
| Test: Bitmuster A | 0xF003 |
61443 | 1 | 0xAAAA |
Lesen |
| Test: Bitmuster 5 | 0xF004 |
61444 | 1 | 0x5555 |
Lesen |
| Test: Low Byte | 0xF005 |
61445 | 1 | 0x00FF |
Lesen |
| Test: High Byte | 0xF006 |
61446 | 1 | 0xFF00 |
Lesen |
| Test: Bytefolge | 0xF007 |
61447 | 1 | 0x1234 |
Lesen |
| Test: Bytefolge gedreht | 0xF008 |
61448 | 1 | 0x3412 |
Lesen |
| Test: INT16 positiv | 0xF009 |
61449 | 1 | 0x7FFF |
Lesen |
| Test: INT16 negativ | 0xF00A |
61450 | 1 | 0x8000 |
Lesen |
| Gerätemodell | 0xF101 |
61697 | 1 | 102 / 202 |
Lesen |
| Seriennummer | 0xF102 |
61698 | 1 | Seriennummer | Lesen |
| Firmware Major | 0xF103 |
61699 | 1 | Ganzzahl | Lesen |
| Firmware Minor | 0xF104 |
61700 | 1 | Ganzzahl | Lesen |
| Firmware Patch | 0xF105 |
61701 | 1 | Ganzzahl | Lesen |
| Hostname-Länge | 0xF111 |
61713 | 1 | Anzahl UTF-8-Bytes | Lesen |
| mDNS-Hostname | 0xF112–0xF131 |
61714–61745 | 32 | UTF-8, 2 Byte/Register | Lesen |
| IP-Modus | 0xF201 |
61953 | 1 | 0 Static, 1 DHCP |
Lesen |
| IPv4-Adresse | 0xF211–0xF214 |
61969–61972 | 4 | 1 Oktett/Register | Lesen |
| Subnetzmaske | 0xF215–0xF218 |
61973–61976 | 4 | 1 Oktett/Register | Lesen |
| Gateway | 0xF219–0xF21C |
61977–61980 | 4 | 1 Oktett/Register | Lesen |
| DNS-Server | 0xF21D–0xF220 |
61981–61984 | 4 | 1 Oktett/Register | Lesen |
| Web-Protokoll | 0xF301 |
62209 | 1 | 0 HTTP, 1 HTTPS, 2 HTTPS + HTTP |
Lesen |
| HTTPS-Port | 0xF302 |
62210 | 1 | Portnummer | Lesen |
Discrete Inputs – FC02
| Funktion | Adresse Hex | Adresse Dezimal | Länge | Werte | Zugriff |
|---|---|---|---|---|---|
| HTTP-Redirect | 0xF301 |
62209 | 1 | FALSE / TRUE |
Lesen |
Coils – FC01 / FC05 / FC15
| Funktion | Adresse Hex | Adresse Dezimal | Länge | Werte | Zugriff |
|---|---|---|---|---|---|
| DWD-Warnungen | 0xF311 |
62225 | 1 | FALSE / TRUE |
Lesen / Schreiben |
| RTU-Terminierung | 0xF401 |
62465 | 1 | FALSE / TRUE |
Lesen / Schreiben |
| RTU-Bias | 0xF402 |
62466 | 1 | FALSE / TRUE |
Lesen / Schreiben |
Holding Register – FC03 / FC06 / FC16
| Funktion | Adresse Hex | Adresse Dezimal | Länge | Werte | Zugriff |
|---|---|---|---|---|---|
| TCP-Timeout | 0xF401 |
62465 | 1 | 10…600 Sekunden |
Lesen / Schreiben |
| LED-Helligkeit | 0xF411 |
62481 | 1 | 0, 25, 50, 75, 100, 125 |
Lesen / Schreiben |
| Software-Neustart | 0xFFF1 |
65521 | 1 | Schreiben: 0xAA55 |
Lesen / Schreiben |
Kurzreferenz
Für die häufigsten Diagnoseaufgaben genügen folgende Register:
Kommunikation prüfen:
FC04 0xF001 ... 0xF00A
Gerät identifizieren:
FC04 0xF101 ... 0xF105
Hostname:
FC04 0xF111 ... 0xF131
Netzwerk prüfen:
FC04 0xF201
FC04 0xF211 ... 0xF220
HTTPS-Konfiguration prüfen:
FC04 0xF301 ... 0xF302
FC02 0xF301
DWD aktivieren/deaktivieren:
Coil 0xF311
RTU-Terminierung:
Coil 0xF401
RTU-Bias:
Coil 0xF402
TCP-Timeout:
HREG 0xF401
LED-Helligkeit:
HREG 0xF411
Gerät neu starten:
HREG 0xFFF1 <- 0xAA55