ModBus ist ein Protokoll welches auf RTU (seriell binär) und TCP/IP Paketen basiert. Eine Verbindung mit IP-Symcon ist via LAN- oder Seriell-Gateway möglich.
Folgende Geräte werden von IP-Symcon unterstützt:
Zuerst muss eine "ModBus Device" Instanz innerhalb von IP-Symcon hinzugefügt werden, welche eine einzelne Adresse und somit Wert wiederspiegelt. Für jede Adresse muss ein eigenes "ModBus Device" erstellt werden. Es können mehrere Devices (Adressen) über ein Gateway angesteuert werden.
Anschließend muss die Konfiguration des übergeordneten Gateways und I/O Instanz an das angeschlossene Gerät angepasst werden. Es muss ausgewählt werden über welches Protokoll und Geräte-ID das Gerät angesprochen wird. Die Geräte-ID ist vorallem bei RTU angeschlossenen Geräten wichtig. Bei TCP angeschlossenen Geräten ist diese oftmals die Geräte-ID 1.
Swap LSW/MSW: Manche Geräte erfordern, dass bei 32/64 Bit Werten die jeweiligen 16/32-Bit Bestandteile getauscht werden. Diese Option ist standardmäßig aktiviert und kann ggf. deaktiviert werden.
Um eine Verbindung zum Gerät herstellen zu können, müssen in der dem Gateway übergeordneten I/O Instanz, IP-Adressse und Port (Default: 502) eingetragen werden.
Weitere Konfiguration (Screenshot siehe unten) ist wiefolgt.
Option | Beschreibung |
---|---|
Einheit | Datentyp der Variable des Devices |
Funktion (Lesen) | Funktion nach der die Werte gelesen werden sollen |
Adresse (Lesen) | Geräteadresse des Registers aus dem gelesen werden soll |
Funktion (Schreiben) | Funktion nach der die Werte geschrieben werden sollen |
Adresse (Schreiben) | Geräteadresse des Registers in das Geschrieben werden soll |
Faktor (Zahlenwerte) | Der Faktor multipliziert oder teilt den empfangenen Wert und schreibt diesen in die Variable des Devices |
Länge (Strings) | Wenn die Länge größer 0 gesetzt ist, bestimmt es die Anzahl der Zeichen, welche abgefragt werden |
Bytes vertauschen (Strings) | Vertauscht die Reihenfolge der Bytes einer Abfrage |
Status emulieren | "Status emulieren" bedeutet, dass der Wert der Variable bei erfolgreichem Schreibbefehl auf den neuen Wert gesetzt wird und nicht auf einen Lesebefehl angewiesen ist. |
Intervall | Wenn das Intervall größer 0 gesetzt ist, wird die Adresse (Lesen) beim ModBus-Gerät zyklisch abgefragt und die Variable des Devices aktualisiert. |
Durch die Tatsache, dass PHP 5.3.x Integer als größten ganzzahligen Wert anbietet, können DWORDs (unsigend ints) in IP-Symcon zwar gelesen werden, diese werden jedoch auf Integer abgebildet, was bedeutet, dass nur die unteren 31Bit ausgewertet werden können.
Je nach FunctionCode muss auch eine passende Adresse eingetragen werden. Diese kann der Tabelle entnommen werden.
Die nachfolgende Tabelle bietet ebenfalls einen Überblick, welcher FunctionCode bei welcher Parameterierung innerhalb von IP-Symcon gesendet wird:
FunctionCode | Geräteadresse | Lese-/ Schreibadresse | Name |
---|---|---|---|
0x01 (1) | 1 - 10000 | Geräteadresse - 1 | Read Coils |
0x05 (5) | 1 - 10000 | Geräteadresse - 1 | Write Single Coil |
0x02 (2) | 10001 - 20000 | Geräteadresse - 10001 | Read Discrete Inputs |
0x03 (3) | 40001 - 50000 | Geräteadresse - 40001 | Read Holding Registers |
0x10 (16) | 40001 - 50000 | Geräteadresse - 40001 | Write Multiple registers |
0x04 (4) | 30001 - 40000 | Geräteadresse - 30001 | Read Input Registers |
Wenn Beispielsweise auf der Adresse 40123 geschrieben (FunctionCode = 0x10) werden soll, muss die passende Einheit (Byte, Word, DWord, ShortInt, SmallInt, Integer, Float) ausgewählt werden und die Schreibadresse 122 (40123 - 40001) eingetragen werden.
Manche Hersteller halten sich nicht an diese Konvention. Es muss in der jeweiligen Anleitung oder Datenblätter nachgesehen werden, ob die Geräteadresse je nach Functioncode abgezogen werden muss oder absolute Adressen gelten
Datentyp | Vorzeichen | Bit |
---|---|---|
Bit | unsigned | 1 |
Byte | unsigned | 8 |
Word | unsigned | 16 |
String | unsigned | 16 (2x8) |
DWord | unsigned | 32 |
Char | signed | 8 |
Short | signed | 16 |
Integer | signed | 32 |
Real | signed | 32 |
Int64 | signed | 64 |
Real64 | signed | 64 |