Das Modbus Device Plugin ermöglicht das Lesen und Schreiben von Daten via Modbus TCP.
In der aktuellen Version wird der Betrieb als Modbus TCP Client unterstützt.
Die gesamte Modbus Device Plugin-Konfiguration befindet sich unter dem Nodepfad /System/Devices/Modbus Device
.
Ein Modbus Device Channel repräsentiert die Verbindung zu einem Modbus TCP Server.
IP-Adresse des Modbus TCP Servers
TCP-Port des Modbus TCP Servers. Der Standard-Port für Modbus ist 502
.
Adressierungsmodus für das zu verbindende Gerät. Der Standard ist 1-based
.
Wenn im Datenblatt des Modbus Geräts die niedrigste Adresse 1
ist, sollte dieser Modus verwendet werden. Beginnt die Adressierung bei 0
, sollte der Modus 0-based
gesetzt werden.
Um einen neuen Modbus-Channel zu erstellen, gehen Sie wie folgt vor:
Modbus Device/Channels
hinzu, oder machen Sie einen Rechtsklick auf den Modbus Device/Channels
-Node und wählen Sie Add Channel
aus.Add Channel
-Dialog die Settings für die Modbus TCP Verbindung ein.
Unter dem Variables
-Node können Sie Datenpunktnodes erstellen, die über Modbus gelesen und geschrieben werden.
Die Value Type
-Eigenschaft muss dabei auf den entsprechenden Variablentyp festgelegt werden (Boolean
, Byte
, Int16
, UInt16
, Int32
, UInt32
und die zugehörigen Array-Typen, sowie ab Version 1.5.11 String
).
Über die Path
-Eigenschaft des Nodes wird die Modbus-Adresse, der Datentyp im Modbus Server und die Länge der Daten (bei Arrays) definiert:
<UnitID>.<Entity><StartAddress>.<Offset>,<Length>,<DataType>
Platzhalter | Beschreibung | Mögliche Werte (Bedeutung) | Optional (Standard Wert) |
---|---|---|---|
<UnitID> | Unit ID des Modbus Slaves | 0 - 255 | Ja (0 ) |
<Entity> | Objekttyp im Modbus Slave | c - Coil di - Discrete Input hr - Holding Register ir - Input Register | Ja (c ) |
<StartAddress> | Startadresse der Daten | 0 - 9999 Die führende Ziffer einer Modbusadresse definiert den Objekttypen, auf den zugegriffen wird. Dieser wird durch <Entity> festgelegt, während die führende Ziffer bei der Startadresse weggelassen wird. | Nein |
<Offset> | Bei Zugriff auf Bits in Registern: Bit-Offset im 16-Bit Register Offset in der Einheit des definierten Datentypens (wenn <DataType> != bit ) | 0 - 15 (bei Zugriff auf Bits) Abhängig von den gültigen Adressen im Modbus Server | Ja (0 ) |
<DataType> | Datentyp im Modbus Slave | bit = bool byte word = uint16 dword = uint32 | Ja ( bit wenn <DataArea> == c oder di bzw. ein <Offset> angegeben ist word wenn <DataArea> == hr oder ir ) |
Function code | Beschreibung | Entsprechung |
---|---|---|
0x01 | Lese Coils | Lese Variabel des Typs Boolean oder Boolean-Array mit Objekttyp Coil |
0x02 | Lese Discrete Inputs | Lese Variabel des Typs Boolean oder Boolean-Array mit Objekttyp Discrete Input |
0x03 | Lese Holding Register | Lese Variabel des Typs UInt16 oder UInt16-Array mit Objekttyp Holding Register |
0x04 | Lese Input Register | Lese Variabel des Typs UInt16 oder UInt16-Array mit Objekttyp Input Register |
0x05 | Schreibe einzelne Coil | Schreibe Variabel des Typs Boolean mit Objekttyp Coil |
0x06 | Schreibe einzelnes Holding Register | Schreibe Variabel des Typs UInt16 mit Objekttyp Holding Register |
0x0F | Schreibe mehrere Coils | Schreibe Variabel des Typs Boolean-Array mit Objekttyp Coil |
0x10 | Schreibe mehrere Holding Register | Schreibe Variabel des Typs UInt16-Array mit Objekttyp Holding Register |
Value Type | Path | Erklärung |
---|---|---|
Boolean | 16 oder 0.c16,1,bit | Bit an Coil Adresse 16 in Unit 0 |
Boolean | 1.di0 oder 1.di0,1,bit | Bit an Discrete Input Adresse 0 in Unit 1 |
UInt16 | 1.hr20 oder 1.hr20,1,word | 16-Bit Wert an Holding Register Adresse 20 in Unit 1 |
UInt16 | hr20,4 oder 0.hr20,4,word | Array aus 4 16-Bit Werten an Holding Register Adresse 20 in Unit 0 |
UInt32 | ir24,uint32 oder 0.ir24,1,dword | 32-Bit Wert an Input Register Adresse 24 in Unit 0 |
Bool | ir24.1 oder 0.ir24.1,1,bit | Bit an Bitoffset 1 an Input Register Adresse 24 in Unit 0 |
Ein String-Wert kann maximal 255 Zeichen beinhalten. Als String Encoding wird ISO-8859-1
verwendet.
Wird ein String mit []
angegeben, wird der eingegebene Wert als Länge definiert. Die Arraylänge wird dann ignoriert.
Strings können von Holding Register
, Coils
, Discrete Inputs
und Input Registers
gelesen werden.
Nur im Holding Register
können String-Werte gelesen und geschrieben werden.
Path | Lesen | Schreiben | Erklärung |
---|---|---|---|
hr01,19,string | X | X | Hier wird im Holding Register ein String von der Länge 19 definiert. |
hr01,string | X | X | Hier wird im Holding Register ein String von der maximalen Länge 255 definiert. |
hr01,21,string[19] | X | X | In diesem Beispiel wäre die Länge 19 und nicht 21! |
1.c1,1,string[20] | X | Hier wird in Coils ein String von der Länge 20 definiert. | |
1.di,1,string[20] | X | Hier wird in Discrete Inputs ein String von der Länge 20 definiert. | |
1.ir1,1,string[20] | X | Hier wird im Input Register ein String von der Länge 20 definiert. |
Das Modbus Device Plugin liefert je nach zu untersuchender Schicht verschiedene Statusinformationen. Generell werden die kanalbasierten Diagnoseinformationen durch den Verbindungsstatus des Channels zum Modbus produziert. Die variablenbasierten Diagnoseinformationen werden während des Lese-/Schreibzugriffs auf die verschiedenen Variablen produziert.
Um den Status des Modbus-Kanals zu überwachen und zu diagnostizieren, werfen Sie einen Blick auf das folgende Bild:
Das obige Bild zeigt das Bedienfeld des Modbus-Kanals, das alle statusrelevanten Informationen anzeigt. Das Bedienfeld aktualisiert automatisch seine Statusinformation, wenn ein neuer Status verfügbar ist.
Statuskreis
Um den Status der verschiedenen Variablen zu überwachen und zu diagnostizieren, werfen Sie einen Blick auf die in CoDaBix® angezeigte Status
-Eigenschaft der Spalte.
Benutzen Sie den Button „Read actual Value“, um die Werte über Modbus auszulesen und das Ergebnis in den Variablen zu speichern.
Alle kanalbezogenen Statusinformationen werden auch in die kanalspezifische Logdatei im [LoggingFolder]
protokolliert. Jede Logdatei wird nach dem Namensschema Modbus Device.<ChannelName>.log
benannt.
Der Inhalt einer solchen Logdatei kann wie folgt aussehen:
... 2018-04-11 11:32:37.0 +2: [Error] Error (Severity=High): Code=[-1], Text=[The operation has timed-out.], Details=[] ...
Wie jedes Device Plugin erweitert das Modbus Device Plugin das CoDaBix Device Modell.
Der Device Typ ModbusDevice
des Plugins definiert auch den ModbusDeviceChannel
und erweitert somit die grundlegenden CodabixDevice
und CodabixDeviceChannel
Entities. Während das ModbusDevice
nur eine Konkretisierung des CodabixDevice
darstellt, erweitert der ModbusDeviceChannel
den CodabixDeviceChannel
mit den Modbus Variable Entities.
Der Kanal wird von einem Channel Worker behandelt, der eine TCP Socket Verbindung zum lokalen Server herstellt.
Zur Fehlerdiagnosezwecken überprüft der Worker automatisch alle 10 Sekunden den Status der TCP Socket Verbindung, um den Channel
Statuscode und seine Beschreibung zu aktualisieren und Verbindungsfehler zu erkennen.
Der Worker liest standardmäßig keine Werte. Wenn ein Anwender oder Plugin in CoDaBix® einen synchronen Lesevorgang der Channel
Variablen anfordert (z.B. mit der „Read actual value“-Funktion in der CoDaBix® Webkonfiguration), liest der Channel Worker diese vom Modbus Server und schreibt diese in die entsprechenden CoDaBix Nodes.
Ähnlich schreibt der Channel Worker auch die Werte in den Modbus Server, wenn ein Client oder Plugin Werte in die Channel
Variablen schreibt.
Damit eine Modbus Variable regelmäßig gelesen wird, können Sie in der Webkonfiguration bei dem Node „History Options“ auf Yes
stellen (was eine interne Subscription erstellt),
oder Sie können zum Beispiel einen OPC UA Client verwenden, der mit dem OPC UA Serverplugin verbunden ist und damit eine Subscription für die Modbus Variablennodes erstellen.
In diesen Fällen liest der Channel Worker in regelmäßigen Intervallen die Variablen vom Modbus und schreibt den neuen Wert nach einer Wertänderung automatisch
in die entsprechende CoDaBix® Node.
Der Modbus-Datentyp bestimmt, auf welche Modbus-Speicherbereich zugegriffen wird. Dabei werden die Variablenformate Skalar und Array unterstützt.
Name | Pfad | Zweck / Verwendung |
---|---|---|
AssemblyFolder | <CodabixInstallDir>/plugins/ModbusDevicePlugin/ | Beinhaltet die Plugin Assembly Datei. |
ConfigFolder | <CodabixDataDir>/plugins/ModbusDevicePlugin/ | Beinhaltet die Plugin Konfigurationsdatei. |
LoggingFolder | <CodabixDataDir>/log/ | Beinhaltet die Plugin Log Dateien. |
Typ | Pfad | Zweck / Verwendung |
---|---|---|
Assembly | [AssemblyFolder]/CoDaBix.ModbusDevicePlugin.dll | Die Plugin Assembly Datei. |
Logging | [LoggingFolder]/Modbus Device.<ChannelName>.log | Die Log Datei. |
Datum | 2023-10-31 |
---|---|
Version | 1.1 |
Name | Modbus Device Plugin |
---|---|
Node | /System/Devices/Modbus Device |
Version | 1.0.0 |
Name | CoDaBix.ModbusDevicePlugin.dll |
---|---|
Datum | 2018-11-23 |
Version | 1.0.0.0 |