Zum Inhalt

Modbus-Diagnose

Das Wetterrelais unterstützt neben den üblichen Modbus-Lese- und Schreibfunktionen mehrere standardisierte Diagnosefunktionen.

Damit kann ein Modbus-Master die Kommunikation gezielt prüfen, Geräteinformationen auslesen und verschiedene Kommunikationszähler abfragen.

Die Diagnose unterscheidet sich zwischen Modbus RTU und Modbus TCP. Einige Diagnosefunktionen sind ausschließlich für serielle Modbus-Verbindungen definiert und werden deshalb nur über RTU unterstützt.

Unterstützte Funktionscodes

Funktionscode Funktion RTU TCP Verwendung
FC01 Read Coils Ja Ja Binäre Werte lesen
FC02 Read Discrete Inputs Ja Ja Binäre Eingangswerte lesen
FC03 Read Holding Registers Ja Ja Veränderbare Register lesen
FC04 Read Input Registers Ja Ja Nur lesbare Register lesen
FC05 Write Single Coil Ja Ja Einzelne Coil schreiben
FC06 Write Single Register Ja Ja Einzelnes Holding Register schreiben
FC08 Diagnostics Ja Nein RTU-Kommunikation und Diagnosezähler prüfen
FC11 Get Comm Event Counter Ja Nein Kommunikationszähler abfragen
FC15 Write Multiple Coils Ja Ja Mehrere Coils schreiben
FC16 Write Multiple Registers Ja Ja Mehrere Holding Register schreiben
FC43 / MEI 14 Read Device Identification Ja Ja Geräteidentifikation auslesen

RTU und TCP

FC08 und FC11 gehören zu den Diagnosefunktionen für Modbus Serial Line und werden daher nur über Modbus RTU unterstützt.

Werden diese Funktionen über Modbus TCP angefragt, antwortet das Wetterrelais mit einer Modbus-Exception für eine nicht unterstützte Funktion.


Modbus RTU diagnostizieren

Über Modbus RTU stehen zusätzliche standardisierte Diagnosefunktionen zur Verfügung.

Der Modbus-Master kann damit unter anderem

  • die vollständige Anfrage-/Antwortstrecke prüfen,
  • Kommunikationszähler zurücksetzen,
  • gültige Telegramme zählen,
  • CRC-Fehler erkennen,
  • Modbus-Exceptions zählen,
  • und prüfen, wie viele Anfragen tatsächlich vom Wetterrelais verarbeitet wurden.

FC08 – Diagnostics

Funktionscode 08 verwendet zusätzlich eine sogenannte Subfunction.

Das Wetterrelais unterstützt folgende Unterfunktionen:

Subfunction Name Bedeutung
0x0000 Return Query Data Echo-/Loopback-Test
0x000A Clear Counters and Diagnostic Register Diagnosezähler zurücksetzen
0x000B Return Bus Message Count Anzahl empfangener Bus-Telegramme
0x000C Return Bus Communication Error Count Anzahl erkannter Kommunikations-/CRC-Fehler
0x000D Return Bus Exception Error Count Anzahl erzeugter Modbus-Exception-Antworten
0x000E Return Server Message Count Anzahl an das Wetterrelais adressierter Nachrichten

Andere FC08-Unterfunktionen werden nicht unterstützt.

FC08 / 0x0000 – Return Query Data

Diese Funktion eignet sich für einen direkten Kommunikationstest.

Der Master sendet einen beliebigen 16-Bit-Testwert. Das Wetterrelais sendet denselben Wert unverändert zurück.

Beispiel:

Master -> Wetterrelais

Function:    0x08
Subfunction: 0x0000
Data:        0xA537

Erwartete Antwort:

Wetterrelais -> Master

Function:    0x08
Subfunction: 0x0000
Data:        0xA537

Damit wird die komplette RTU-Kommunikationsstrecke geprüft.

Werden die Daten unverändert zurückgegeben, funktionieren insbesondere

  • Slave-Adresse,
  • Baudrate,
  • Parität,
  • Stopbits,
  • RS485-Verbindung,
  • CRC-Prüfung,
  • Anfrageverarbeitung,
  • und Antwortübertragung.

FC08 / 0x000A – Diagnosezähler löschen

Mit dieser Funktion können die Diagnosezähler zurückgesetzt werden.

Das ist besonders hilfreich, wenn ein bestimmter Zeitraum untersucht werden soll.

Beispiel:

1. Diagnosezähler löschen
2. Anlage 10 Minuten betreiben
3. Diagnosezähler erneut auslesen
4. CRC-Fehler und Exceptions kontrollieren

FC08 / 0x000B – Bus Message Count

Dieser Zähler gibt an, wie viele Modbus-RTU-Telegramme auf dem Bus erkannt wurden.

Ein steigender Wert zeigt:

Auf dem RS485-Bus werden Modbus-Telegramme empfangen.

Der Zähler allein sagt noch nicht aus, dass jedes Telegramm für das Wetterrelais bestimmt war oder erfolgreich verarbeitet wurde.

FC08 / 0x000C – Bus Communication Error Count

Dieser Zähler enthält die erkannten Kommunikationsfehler.

Dazu gehören insbesondere fehlerhafte CRC-Prüfsummen.

Ein dauerhaft steigender CRC-Fehlerzähler kann beispielsweise auf folgende Probleme hinweisen:

  • ungeeignete oder fehlende RS485-Terminierung,
  • fehlendes oder falsches Biasing,
  • falsche Baudrate,
  • falsche Parität,
  • schlechte Leitungsqualität,
  • EMV-Störungen,
  • zu lange Stichleitungen,
  • oder elektrische Probleme auf dem RS485-Bus.

Praktischer Test

Ein Diagnoseprogramm kann bewusst ein RTU-Telegramm mit falscher CRC senden.

Das Wetterrelais darf darauf nicht antworten.

Anschließend wird FC08 / 0x000C ausgelesen.

Der Fehlerzähler muss entsprechend angestiegen sein.

FC08 / 0x000D – Bus Exception Error Count

Dieser Zähler gibt an, wie viele Modbus-Exception-Antworten das Wetterrelais erzeugt hat.

Eine Exception entsteht beispielsweise bei

  • nicht unterstützten Funktionscodes,
  • ungültigen Registeradressen,
  • oder ungültigen Werten.

FC08 / 0x000E – Server Message Count

Dieser Zähler zeigt, wie viele Nachrichten tatsächlich an die Slave-Adresse des Wetterrelais gerichtet waren.

Damit lässt sich zwischen allgemeiner Busaktivität und der tatsächlichen Kommunikation mit dem Wetterrelais unterscheiden.

Beispiel:

Bus Message Count:    12000
Server Message Count:  3000

In diesem Beispiel wurden insgesamt 12000 Telegramme auf dem Bus erkannt. Davon waren 3000 an das Wetterrelais adressiert.


FC11 – Get Comm Event Counter

Mit FC11 kann der Modbus-Master den Kommunikations-Event-Counter des Wetterrelais abfragen.

Die Antwort enthält:

Status
Event Count

Der Status wird aktuell mit

0x0000

zurückgegeben.

Der Event Counter zählt erfolgreich abgeschlossene Modbus-Kommunikationsvorgänge.

Anwendung

Der Master kann beispielsweise zunächst den Zähler lesen:

Event Count = 1250

Anschließend werden 100 normale Modbus-Abfragen durchgeführt.

Danach wird FC11 erneut gelesen:

Event Count = 1350

Damit kann geprüft werden, ob die erwartete Anzahl an Kommunikationsvorgängen tatsächlich verarbeitet wurde.

FC11 selbst verändert den Event Counter nicht.


Geräteidentifikation mit FC43 / MEI 14

Das Wetterrelais unterstützt Read Device Identification sowohl über Modbus RTU als auch über Modbus TCP.

Technisch handelt es sich um:

Function Code: 0x2B
MEI Type:      0x0E

Die Funktion wird häufig auch als

FC43/14

bezeichnet.

Damit kann ein Modbus-Master ein Wetterrelais identifizieren, ohne die herstellerspezifischen Systemregister kennen zu müssen.

Unterstützte Device-Identification-Objekte

Object ID Bezeichnung Beispiel
0x00 VendorName Steffen Freitag Engineering
0x01 ProductCode WTR102 oder WTR202
0x02 MajorMinorRevision z. B. 3.0.0
0x03 VendorUrl https://wetterrelais.de
0x04 ProductName Wetterrelais
0x05 ModelName WTR102 oder WTR202
0x06 UserApplicationName aktueller mDNS-Hostname
0x80 Herstellerspezifisch Seriennummer

Basic Device Identification

Für eine grundlegende Geräteidentifikation wird beispielsweise angefragt:

Function Code:        0x2B
MEI Type:             0x0E
Read Device ID Code:  0x01
Object ID:            0x00

Das Wetterrelais liefert darauf mindestens:

VendorName
ProductCode
MajorMinorRevision

Einzelnes Objekt lesen

Mit Read Device ID Code 0x04 kann ein einzelnes Objekt gezielt abgefragt werden.

Beispiel Seriennummer:

Function Code:        0x2B
MEI Type:             0x0E
Read Device ID Code:  0x04
Object ID:            0x80

Als Antwort liefert das Wetterrelais die Seriennummer.


Diagnose über Modbus TCP

Bei Modbus TCP stehen die seriellen Diagnosefunktionen FC08 und FC11 nicht zur Verfügung.

Für TCP werden insbesondere folgende Möglichkeiten verwendet:

  • normale Registerzugriffe über FC01 bis FC06 sowie FC15 und FC16,
  • feste Diagnose- und Testregister,
  • Geräteidentifikation über FC43/14,
  • und die interne TCP-Verbindungsstatistik des Wetterrelais.

FC43/14 testen

Die Geräteidentifikation kann über TCP genauso wie über RTU abgefragt werden.

Ein Diagnoseprogramm kann dadurch beispielsweise prüfen:

VendorName
ProductCode
Firmwareversion
Modell
mDNS-Hostname
Seriennummer

FC08 über TCP

FC08 ist eine Serial-Line-Diagnosefunktion.

Wird FC08 über Modbus TCP angefragt, unterstützt das Wetterrelais diese Funktion bewusst nicht.

Der Master sollte eine Modbus-Exception erhalten:

Exception Code 0x01
Illegal Function

Auch dieses Verhalten kann als Test genutzt werden.


Modbus-Exception-Antworten

Bei ungültigen oder nicht unterstützten Anfragen antwortet das Wetterrelais mit einer Modbus-Exception.

Typische Fehlercodes sind:

Exception Code Bezeichnung Bedeutung
0x01 Illegal Function Funktionscode wird nicht unterstützt
0x02 Illegal Data Address Registeradresse ist nicht vorhanden oder nicht zulässig
0x03 Illegal Data Value Übertragener Wert ist ungültig
0x04 Server Device Failure Anfrage konnte intern nicht verarbeitet werden

Bei einer Exception wird im Function Code der Antwort das höchstwertige Bit gesetzt.

Beispiel:

Anfrage:
FC08 = 0x08

Exception-Antwort:
0x88

Darauf folgt der eigentliche Exception Code.


Empfohlener RTU-Diagnosetest

Für eine vollständige RTU-Prüfung empfiehlt sich folgende Reihenfolge:

  1. Bekanntes Register mit FC04 lesen.
  2. FC08 / 0x0000 mit einem Testwert ausführen.
  3. FC08 / 0x000A zum Löschen der Diagnosezähler ausführen.
  4. Mehrere normale Modbus-Anfragen senden.
  5. FC08 / 0x000B Bus Message Count lesen.
  6. FC08 / 0x000C CRC-/Kommunikationsfehler prüfen.
  7. FC08 / 0x000D Exception-Zähler prüfen.
  8. FC08 / 0x000E Server Message Count prüfen.
  9. FC11 Event Counter lesen.
  10. FC43/14 Geräteidentifikation auslesen.

Empfohlener TCP-Diagnosetest

Für Modbus TCP empfiehlt sich folgende Reihenfolge:

  1. TCP-Verbindung aufbauen.
  2. Testregister über FC04 lesen.
  3. Geräteinformationen aus den festen Systemregistern lesen.
  4. FC43/14 Basic Device Identification ausführen.
  5. Seriennummer über Object ID 0x80 lesen.
  6. Optional FC08 senden und Exception 0x01 erwarten.

Übersicht der Diagnosefunktionen

Diagnose RTU TCP Vom Master aktiv prüfbar
Normale Registerkommunikation Ja Ja Ja
Testregister lesen Ja Ja Ja
Echo-/Loopback-Test Ja Nein FC08 / 0x0000
Diagnosezähler löschen Ja Nein FC08 / 0x000A
Bus-Telegramme zählen Ja Nein FC08 / 0x000B
CRC-/Kommunikationsfehler Ja Nein FC08 / 0x000C
Exception-Zähler Ja Nein FC08 / 0x000D
An Gerät adressierte Nachrichten Ja Nein FC08 / 0x000E
Communication Event Counter Ja Nein FC11
Geräteidentifikation Ja Ja FC43 / MEI 0x0E
Hersteller auslesen Ja Ja Device Object 0x00
Modell auslesen Ja Ja Device Object 0x01 / 0x05
Firmwareversion auslesen Ja Ja Device Object 0x02
Hostname auslesen Ja Ja Device Object 0x06
Seriennummer auslesen Ja Ja Device Object 0x80
FC08 über TCP ablehnen – Ja Exception 0x01 erwarten

Abgrenzung zur internen Diagnose

Die standardisierten Modbus-Diagnosefunktionen werden immer durch den Modbus-Master ausgelöst.

Das Wetterrelais startet selbst keine Modbus-Anfragen an einen verbundenen Master.

Zusätzlich führt das Wetterrelais intern weitere Statistiken, beispielsweise zu

  • verbundenen TCP-Mastern,
  • Anzahl der Requests,
  • Abfrageintervallen,
  • Timeouts,
  • RX-/TX-Datenmengen,
  • Verbindungsabbrüchen,
  • und Protokollfehlern.

Diese internen Informationen ergänzen die standardisierten Diagnosefunktionen, sind aber nicht Teil von FC08, FC11 oder FC43/14.