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.
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) |
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 |