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.