Modbus/TCP-Treiber - Details

Dieses Kapitel ist für fortgeschrittene WinCC OA Anwender, die weitere Details über Funktionscodes, Config-Einträge oder Debugmöglichkeiten erfahren möchten.

Funktionscodes

Die folgende Tabelle enthält die möglichen Funktionscodes, sowie eine kurze Beschreibung. Im Slave Mode des WinCC OA Treibers hängt der verwendete Funktionscode von der SPS ab.

Funktionscode Code Beschreibung
read coils 1 Liest den ON/OFF Status eines diskreten Ausgangs
read input discretes 2 Liest den ON/OFF Status eines diskreten Eingangs
read multiple registers 3 Liest den binären Inhalt der Holding Register
read input registers 4 Liest den binären Inhalt der Eingangs-Register
write coil 5 Setzt einen einzelnen Coil (Ausgang) entweder ON oder OFF
write single register 6 Schreibt einen Wert in einen Register
read exception status 7 Liest den Status von 8 Ausgängen mit Ausnahmestatus
force multiple coils 15 Setzt jeden Coil (Ausgang) einer Reihe von Coils entweder auf ON oder OFF
write multiple registers 16 Schreibt Werte in mehrere Holding Register
atomic read/write 23 Erlaubt das Ausführen von atomaren Schreib-/Leseoperationen.
read FIFO queue 24 Liest den Inhalt einer FIFO Reihe von Registern
FC23

Der Modbus-Funktionscode 23 (0x17) bietet die Möglichkeit, eine atomare Schreib-/Leseoperation auszuführen. In der Modbus-Spezifikation ist definiert, dass der Schreibvorgang vor dem Lesevorgang im Gerät ausgeführt werden muss.

Dies ermöglicht die Implementierung eines Befehls mit zurückgegebenen Daten im Gerät, da die Operation auf atomare Weise erfolgt.

Wird der Funktionscode mit einer Adresse angegeben, (Das ist der Regelfall wie alle anderen Adressen aussehen.) führt das Schreiben auf diese Adresse auch ein Lesen derselben Adresse aus. Der entsprechende Eingangswert kann auf dieselbe DPE (I/O)-Adresse oder auf einem anderen DPE mit derselben Adresse im Empfangsmodus "Spontan" empfangen werden.

Es ist auch möglich, eine andere Leseadresse anzugeben, indem ein optionaler Adressteil /<Adresse lesen>[:<Länge>] zum Adress-Referenz hinzugefügt wird, z.B. die Adresse M.1.23.5/15 schreibt Adresse 5 und liest Adresse 15.

Anmerkung: Der gelesene Wert kann nur auf einer separaten Eingangsadresse empfangen werden, die die Leseadresse des Telegramms angibt. Für das obige Beispiel wäre dies die Adresse M.1.23.15.

Um ein weiteres Beispiel zu geben, wo der Benutzer einen Blob von 10 Bytes ab Adresse 20 schreiben und einen Blob von 30 Bytes von Adresse 100 lesen möchte, muss die Ausgangsadresse M.<SPS-Nummer>.23.20:10/100:30 und eine Eingangsadresse im spontanen Modus M.<SPS-Nummer>.23.100:30 konfigurieren werden.

Debug-Levels

Um mögliche Fehlerquellen während der Treiberaktionen aufzuspüren, gibt es auch für den Modbus/TCP Treiber die Möglichkeit Kommandozeilenoptionen zum Debuggen zu verwenden. Informationen über alle weiteren Optionen können mit -helpdbg abgefragt werden (siehe auch Manageroptionen).

Debug-Level Beschreibung
-dbg 2 Diese Option informiert detailliert, was der Treiber gerade macht. Es wird empfohlen, nur bei geringer Treiberlast diese Option zu setzen, um das Zeitverhalten des Treibers nicht zu beeinflussen.
-dbg 25 Wen der Verdacht besteht, dass eine Pollingabfrage die Nachricht verloren hat, kann diese Option verwendet werden. Damit werden die zugehörigen Fehlermeldungen aktiviert und im Log Viewer angezeigt. Normalerweise sind diese Fehlermeldungen deaktiviert, da sie für eine Pollingabfrage nicht kritisch sind. Zusätzlich zu den verlorenen Pollingaufträgen kann dieser Debug-Level dazu verwendet werden, Warnungen anzuzeigen wenn Daten eintreffen, die zu keiner parametrierten Adresse gehören. Die Warnungen werden deshalb mittels Debug-Level gefiltert, da ansonsten das Logging mit Logging-Meldungen überfüllt wird, die in den meisten Fällen für den Benutzer nicht erforderlich sind.
-dbg 26 Mit dieser Option kann angezeigt werden wieviele Frames in der Modbus Queue sind.
-dbg 27 Mit dieser Option werden die Transaction Ids der laufenden Modbus Frames angezeigt. Diese Option kann verwendet werden um zu prüfen wieviele Requests noch nicht bestätigt wurden.
-dbg 9 Um Information über die Treiber Zykluszeit zu erhalten, kann diese Option verwendet werden.
-dbg 10 Mit diesem Debug-Level wird der Zeitstempel von UNICOS Event Frames im Log Viewer angezeigt, um Fehler im Bezug auf Zeitstempel bei der Generierung von UNICOS Event Frames zu finden.
-report ALL Aktiviert man dieses Debug-Level zur Laufzeit, so werden die Pollgruppen und Pollblöcke ausgegeben.

Transformationen

Eine Transformation konvertiert Hardware-Daten in ein WinCC OA Format. Folgende Tabelle gibt über die Transformationen und die Kompatibilität mit den Funktionscodes Auskunft. Der Treiber prüft, ob ein Datentyp und ein Code kompatibel sind und gibt andernfalls eine Fehlermeldung aus.

Benötigter Datentyp Trafo Subindex (Array) Support Itemgröße [byte] Elemente in Item WinCC OA Elementtyp

FC für Write

Request

FC für Read Request
bit boolean 1 8 bool 15 1, 2
bit boolean 2 16 bool 6, 16 3, 4, 7, 24
bit boolean as byte 1 1 bool 5 none
byte byte 2 2 char 6, 16 3, 4, 7, 24
word int 16 2 1 int 6, 16 3, 4, 24
unsigned word uint 16 2 1 unsigned 6, 16 3, 4, 24
dword int 32 4 1 int 16 3, 4, 24
unsigned dword uint 32 4 1 unsigned 16 3, 4, 24
qword int 64 8 1 long 16 3, 4, 24
unsigned qword uint64 8 1 ulong 16 3, 4, 24
float float 4 1 float 16 3, 4, 24
double double 8 1 float 16 3, 4, 24
string string max. 240 1 string 16 3, 4, 24
blob blob max. 240 1 blob 16 3, 4, 24

Bitweises Schreiben von Holding Registern

Werden nur einzelne Bits eines Registers geschrieben, werden die restlichen Bits automatisch auf 0 gesetzt, da der Treiber immer ein gesamtes Register schreibt. Sollen daher nur einzelne Bits geschrieben werden, müssen alle 16 Bits in WinCC OA konfiguriert, ausgelesen und entsprechend gesetzt werden. Der Treiber führt kein "Read before Write" durch. Diese Funktionalität muss vom Benutzer selbst eingebaut werden.

Bitweises Lesen von Holding und Input Registern

Soll ein Holding Register bitweise gelesen und auf einzelne Datenpunktelemente abgebildet werden, stehen folgende Möglichkeiten zur Verfügung:

Methode 1

Erstellen Sie einen neuen Datenpunkttyp mit einem Strukturknoten vom Typ bool. Jedes Element dass unter diesem Strukturknoten angelegt wird, ist ebenfalls automatisch vom Typ bool. Um alle 16 Bits eines Holding Registers abbilden zu können, benötigen Sie 16 dieser bool-Elemente.

Legen Sie einen Datenpunkt vom eben erstellten Typ an und fügen Sie am Strukturknoten ein _address-Config ein. Parametrieren Sie das Register das gelesen werden soll (in diesem Beispiel Register 10) und wählen Sie Funktionscode 3 (read multiple registers) und Transformationstyp boolean.

Beim Lesen des Registers wird nun das Word bitweise auf die einzelnen bool-Elemente (b1 - b16) aufgeteilt.

Methode 2

Legen Sie 16 Datenpunkte vom Typ bool an und fügen Sie jedem Datenpunkt ein _address-Config hinzu. Parametrieren Sie das Register das gelesen werden soll (in diesem Beispiel Register 12) und wählen Sie Funktionscode 3 (read multiple registers) und Transformationstyp boolean. Definieren Sie für jedes Element den entsprechenden Subindex (DPE1 = Subindex 0, DPE2 = Subindex 1, ...).

Anmerkung: Wenn Sie an den _address-Configs Polling konfigurieren, müssen Sie für alle Elemente die gleiche Pollgruppe wählen, da ein Register immer als Gesamtes gelesen wird. Ansonsten würde das Word mehrfach gelesen werden.

Error Codes / Fehlercodes

In diesem Abschnitt finden Sie eine Tabelle, die Fehlercodes im SPS-Parametrierpanel (siehe Parametrierpanel des Modbus/TCP Treibers) beschreibt.

Tabelle 1. Fehlercodes - Treiber
Fehlernummer Beschreibung
0 kein Fehler
1 Master-Verbindung zur SPS unterbrochen, Wiederaufbau wird nicht versucht
2 Master-Verbindung zur SPS unterbrochen, Wiederaufbau wird versucht
3 Fehler bei der Slave-Verbindung
4 Peer hat die Slave-Verbindung geschlossen
5 Modbus Queue übergelaufen
6 Fehler beim Frame entschlüsseln
Anmerkung: Beachten Sie, dass zu dem Wert von der SPS 100 addiert wird (z.B. 100 + 11 = 111) damit die Fehler von der SPS von jenen vom Treiber unterschieden werden können. Beachten Sie zudem, dass die Bedeutungen Empfehlungen aus der allgemeinen Modbus/TCP-Spezifikation sind. Die genaue Bedeutung ist meistens in der Beschreibung des spezifischen Gerätes enthalten.
Tabelle 2. Fehlercodes - SPS
Fehlernummer Beschreibung
101 Illegale Funktion
102 Illegale Datenadresse
103 Illegaler Datenwert
104 Illegale Antwortlänge
105 Quittieren
106 Slave-Gerät beschäftigt
107 Negative Quittierung
108 Speicher Parität Fehler
110 Gateway-Pfad nicht verfügbar
111 Antwort vom Gateway-Zielgerät fehlgeschlagen

Error Messages

Die nachfolgende Tabelle beschreibt Fehlermeldungen beim Modbus/TCP Treiber.

Klasse Fehlermeldung Beschreibung
ModConnection Too many PLCs on one gateway Es gibt zu viele SPSen mit der gleichen IP-Adresse.
ModHWMapper Illegal transformation type for ... Ein ungültiger Transformationstyp wurde für ein Peripherieadressen-Konfig definiert.
ModHWMapper Subindex + transformation type exceeds max. data length ... Eine Subindex-Transformation und Funktionscode Kombination liefert eine zu hohe Datenlänge.
ModHWMapper Wrong Output function code for: ... Dieser Funktionscode ist für ein Ausgangs-DPE nicht erlaubt.
ModHWMapper Wrong input spontaneous function code for: ... Dieser Funktionscode ist für einen spontanen Eingangs-DPE nicht erlaubt.
ModHWMapper Ref. number not modulo 16 for spontaneous mode and FC15 for: ... Die Referenznummer muss für diese Kombination Modulo 16 sein.
ModHWMapper Wrong input polling/squery function code for: ... Dieser Funktionscode ist für ein Polling oder Single query Eingangs-DPE nicht erlaubt.
ModHWMapper Wrong mode for: ... Falsche Eingangsart für Peripherieadressen-Konfig.
ModHWMapper Transformation/FC incompatibility for: ... Unerlaubte Kombination von Funktionscode und Transformationstyp.
ModHWMapper UNICOS SFC != 0 and FC != 16 for: ... UNICOS verwendet nur Funktionscode 16.
ModMasterConnection Socket error during send Fehler am Socket während dem Senden von Daten.
ModMasterConnection Cannot establish connection to server Der Master kann keine Verbindung zur SPS aufbauen, entweder aufgrund eines falschen Hostnamens/Portnummer oder eines Netzwerkproblems.
ModMasterConnection Peer has closed connection Die SPS hat die Verbindung geschlossen.
ModMasterConnection Connection to ... marked as dead Die Verbindung ist als "tot" markiert. Verbindungsversuche werden nicht länger durchgeführt.
ModModbus Error during reception of ASCII frame Kein gültiger ASCII Frame empfangen.
ModModbus No PLC for unit address: ... Es ist keine SPS mit der empfangenen Unit-Adresse auf dieser Verbindung definiert.
ModModbus Invalid Request Size field Ein Modbus Frame ohne gültiger Requestgröße wurde empfangen. In diesem Fall wird die Frame Erkennung nicht synchronisiert. Die Verbindung wird geschlossen und wieder geöffnet, um diesen Fehler zu beheben.
ModModbus Error too many invalid frames Zu viele falsche Frames wurden empfangen. Das ist ein Folgefehler von anderen Fehlern. Dies bewirkt ein Wiederöffnen der Verbindung.
ModModbusMaster No host/unit address defined for PLC number: ... Für die SPS-Nummer ist keine Host/Unit-Adresse definiert. Dieser Fehler wird hervorgerufen, wenn kein interner DP (_Mod_Plc) für diese SPS-Nummer angelegt wurde.
ModModbusMaster Unknown function code specified in Peripheral Address Ungültiger Funktionscode in der PA enthalten.
ModModbusMaster Missing some responses to outstanding requests Einige Antworten zu ausständigen Requests fehlen.
ModModbusMaster Receiving Modbus frame without request Erhalt einer Antwort ohne Senden eines Requests. Wenn zu viele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusMaster Wrong unit address received: UA= ... Erhalt einer falschen Unit-Adresse für einen ausständigen Request. Wenn zu viele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusMaster Exception code received: EC= ... Ein Fehler kam von der SPS. Sie konnte den Request nicht verarbeiten. Die Bedeutung des Ausnahmecodes kann aus der Tabelle der Error Codes entnommen werden.
ModModbusMaster Wrong response to output FC Falsche Antwort zum bestimmten Request. Wenn zu viele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusMaster Wrong response to read registers request Falsche Antwort zum bestimmten Request. Wenn zuviele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusMaster Wrong response to read discretes request Falsche Antwort zum bestimmten Request. Wenn zuviele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusMaster Wrong response to read exception status request Falsche Antwort zum bestimmten Request. Wenn zuviele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusMaster Wrong response to read FIFO request Falsche Antwort zum bestimmten Request. Wenn zuviele solcher Fehler passieren wird die Verbindung geschlossen und wieder geöffnet.
ModModbusSlave Slave received unknown function code Der Slave erhielt einen nicht unterstützten oder ungültigen Modbus Funktionscode.
ModModbusSlave Invalid number of events in UNICOS Event Report Im UNICOS Event Report Frame ist eine ungültige Nummer vom Event Feld.
ModModbusSlave UNICOS Slave received unknown subfunction code Der Slave erhielt einen nicht unterstützten oder ungültigen UNICOS Subfunktionscode.
ModOutputQueue Maximum requests in queue, request discarded Ein Überlauf der Modbus Queue tritt auf.
ModOutputQueue Discarding polling requests (Msg. every 100) Der gleiche Polling Request ist bereits in der Queue, der aktuelle wird verworfen. Diese Warnung erscheint nur, wenn der Treiber mit -dbg 25 startet.
ModOutputQueue Timeout appears for last sent request Ein Modbus Transaktions-Timeout für einen Request trat auf.
ModPlc Error during setting of PLC data Ein Fehler passiert während des Setzens von SPS Daten vom internen DP. Verwenden Sie -dbg 2, für weitere Informationen (DP Identifier) zu diesem Fehler.
ModPrLayer Cannot start Server Der Treiber kann keinen Server Socket erstellen. Vermutlich wird die Portnummer bereits verwendet.
ModRsrce Unknown keyword in config file Die Config-Datei enthält einen unbekannten Eintrag.
ModSlaveConnection Socket error during send Ein Fehler ist während des Sendens von Daten über den Socket aufgetreten.