Zum Inhalt

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