Modbus/TCP-Server - Details

Redundanz

In einem redundanten WinCC OA System läuft auf jeder Seite ein Modbus-Server. Der Config-Eintrag connectToRedundantHosts gibt zwei verschiedene Möglichkeiten zum Verbinden des Modbus-Servers mit dem WinCC OA System.

  • connectToRedundantHosts = 0: Der Modbus-Server wird nur lokal mit dem Event-Manager verbunden. Das bedeutet, dass sich ein Client zu beiden Modbus-Servern des Systems verbinden und an beide Server Befehle absetzen muss, da der passive Event-Manager Wertänderungen blockt.

  • connectToRedundantHosts = 1: In diesem Fall ist es egal zu welchem Modbus-Server sich der Client verbindet. Schickt der Client aber zu beiden Servern Befehle, so werden diese auch zweimal in der WinCC OA Applikation empfangen.

Redundante Verbindungen werden vom Modbus-Server nicht unterstützt. Stellt ein Client zwei Verbindungen her, werden beide Verbindungen als normale Verbindung betrachtet. Das bedeutet, dass eine Nachricht auf beiden Verbindungen in die zu überwachende Richtung gesendet wird. Sendet der Client über beide Verbindungen einen Befehl, werden beide Befehle verarbeitet und an die Applikation weitergegeben.

Speicherbereich und Funktionscodes

Der Speicher des WinCC OA Modbus-Servers ist in vier Bereiche aufgeteilt, auf die über verschiedene Funktionscodes zugegriffen wird. In jedem Bereich können bis zu 65536 Bits oder Register verwendet werden.

Speicherbereich Register oder Bitnummer Zugriff über
Bereich 1: Input discrete Bit 0 - 65535 FC2 Read Discrete Inputs
Bereich 2: Coils Bit 0 - 65535 FC1 Read Coils, FC5 Write Single Coil, FC15 Write Multiple Coils
Bereich 3: Input register Register 0 - 65535 FC4 Read Input Register
Bereich 4: Holding register Register 0 - 65535 FC3 Read Holding Registers, FC6 Write Single Register, FC16 Write Multiple Registers

In der folgenden Tabelle finden Sie eine kurze Beschreibung zu den von WinCC OA Modbus/TCP-Server unterstützten Funktionscodes.

Funktionscode Code Beschreibung
read coils 1 FC1 reads multiple bits from the read/write area
read input discretes 2 FC2 reads multiple bits from the read only area
read multiple registers 3 FC3 reads multiple registers from the read/write area
read input registers 4 FC4 reads register from the readonly area
write coil 5 FC5 writes single bit to the read/write area
write single register 6 FC6 writes single register to the read/write area
force multiple coils 15 FC15 writes multiple bits to the read/write area
write multiple registers 16 FC16 writes multiple registers to the read/write area

Datentypen

Die unterstützten Datenpunkte müssen auf Modbus-Register abgebildet werden. Die Anzahl an verwendeten Registern kann für jede Node auf der UserData definiert werden.

Das ist beispielsweise notwendig wenn ein int-Datenpunktelement von einem Modbus-Register repräsentiert werden soll. In diesem Fall muss der Benutzer sicherstellen, dass das Datenpunktelement nicht den Bereich des Registers übersteigt. Wird ein Datenpunktelement abgebildet, das mehr als ein Register belegt, muss der Benutzer das nächste Datenpunkt auf das nächste freie Register abbilden. Sich überschneidende Abbildungen führen zu einer Fehlermeldung.

Zum Festlegen der verwendeten Register kann entweder der Modbus-Tab des Plantmodel Editors oder die CTRL-Funktion cnsSetProperty() verwendet werden.

Anmerkung: Der Plantmodel Editor setzt automatisch das benötigte Schlüsselwort auf der UserData. Bei Verwendung von cnsSetPropery können Sie mit dem Schlüsselwort "OA:DMOD" die Anzahl der verwendeten dyn-Elemente, mit Schlüsselwort "OA:MOD" die Anzahl der verwendeten Register definieren.

Folgende Datentypen (sowie die entsprechenden dyn-Typen) werden unterstützt:

Datentyp Default-Anzahl an verwendeten Registern
uint 2
int 2
float 4
bool
bit32 2
long 4
ulong 4
bit64 4
string
blob
time 4 (Datum/Zeit im G12DateTime-Format)
Anmerkung:

Datenpunktelemente vom Typ bool oder dyn_bool können nur auf Speicherbereich 1 oder 2 abgebildet werden. Alle anderen Datentypen können nur auf Speicherbereich 3 oder 4 abgebildet werden.

Bei WinCC OA Datentypen die keine definierte Länge haben (z.B. dyn-Typen oder string), muss der Benutzer die Länge explizit beim Abbilden auf das Modbus-Datenmodell angeben.

G12DateTime-Format

Ein time-Datentyp wird mit folgendem Format auf den Modbus-Speicherbereich abgebildet:

G12DateTime (date and time, coded as four unsigned 16bit words

[16 bits] (Motorola format)

(seconds * 1000) + milliseconds

[8 bits]

Minutes

[1 bit]

DST flag

[7 bits]

Hours

[3 bits]

weekday (mon = 1)

[5 bits]

day of month

[8bits]

month (jan = 1)

[8 bits]

year of century (9 = 2009)

[8 bits]

zero-padding