Modbus TCP Slave| Mit diesem Funktionsbaustein wird die Steuerung zum
Modbus TCP Slave (Server). Ein Fremdsystem als Modbus Master, z.B. ein
Gebäudeleitsystem, eine SPS, ein Energiemanager oder ein Wechselrichter,
kann damit Werte der Steuerung lesen und Werte in die Steuerung
schreiben. Jeder Ein- und Ausgang des Bausteins entspricht einer Variable und belegt je nach Einstellung 1, 2 oder 4 Modbus-Register:
Unterstützte Funktionscodes:
Ein Baustein kann bis zu 64 Ein- und Ausgänge haben. Werden mehr Werte oder unterschiedliche Datentypen benötigt, legt man mehrere Bausteine mit verschiedenen Startadressen an. Alle Bausteine mit demselben Port bilden gemeinsam einen Slave, Bausteine mit unterschiedlichen Ports sind voneinander getrennte Slaves. Ein deaktivierter Baustein wird nicht beantwortet. Nach einer Änderung der Parameter oder der verknüpften Variablen startet der Slave nach etwa 5 Sekunden neu. Bestehende Verbindungen werden dabei getrennt, der Master muss sich neu verbinden. |
Eingänge |
||
| Adresse | Read | Ein Eingang je Variable. Beschriftet ist der Anschluss
mit seiner Registeradresse (z.B. 100), der Tooltip lautet
„Read 100“. Der Master liest den Wert mit FC 3 oder FC 4, jederzeit und
ohne Zutun des Programms.Nicht verknüpft: der Master liest 0. |
Ausgänge |
||
| Adresse | Write | Ein Ausgang je Variable, beschriftet mit seiner
Registeradresse (Tooltip „Write 100“). Schreibt der Master mit FC 6 oder
FC 16, wird der Wert sofort auf die verknüpfte Variable gesendet. Ob der Wert als vorzeichenbehaftet
gilt, richtet sich nach dem Datentyp der verknüpften Variable. Nicht verknüpft: Der Master erhält eine gültige Antwort, der Wert wird aber nirgends weitergegeben. |
Parameter |
||
| Anzahl IO | Anzahl der Ein- und Ausgänge, 1 bis 64. Es gibt immer
gleich viele Eingänge wie Ausgänge. Eingang und Ausgang mit derselben
Nummer haben dieselbe Registeradresse: Lesen liefert den Eingang,
Schreiben setzt den Ausgang. |
|
| TCP Port | TCP-Port, auf dem der Slave Verbindungen annimmt, 1 bis
65535. Vorgabe ist 502, der Standardport für Modbus TCP. Bausteine mit
demselben Port teilen sich einen Slave. Der Port darf nicht von einem
anderen Dienst der Steuerung belegt sein, z.B. 10001 (Studio/APP), 80/443
(Weboberfläche) oder dem Port der Netzwerk API. Läuft die Runtime unter
Linux ohne Root-Rechte, sind nur Ports ab 1024 möglich. |
|
| Register Datentyp | Integer (Ganzzahl) oder Float
(Gleitkommazahl). Gilt für alle Ein- und Ausgänge des Bausteins. Die
verknüpften Variablen werden umgewandelt und müssen daher nicht denselben
Datentyp haben. Bei Integer werden Nachkommastellen abgeschnitten
(21,7 wird 21). Float ist nur mit 2 oder 4 Registern pro Variable
möglich, bei 1 Register wird immer als Integer übertragen. |
|
| Register pro Variable | Anzahl der Register je Ein- und Ausgang:
|
|
| Erste Register Adresse | Registeradresse von Ein- und Ausgang 1, 0 bis 65535. Die
weiteren folgen im Abstand von „Register pro Variable“. |
|
Adressierung und Datenformat |
||||||||||||
Die Registeradresse eines Ein- oder Ausgangs ergibt sich
aus:Adresse = Erste Register Adresse + (Nummer − 1) × Register pro
VariableDie Adressen werden ab 0 gezählt, so wie sie im Telegramm stehen. Manche Master zählen ab 1 oder verwenden die Schreibweise 4xxxx für Holding Register. Dort ist Adresse 100 als 101 bzw. 40101 einzutragen. Regeln für eine Anfrage:
|
||||||||||||
Beispiele |
||||||||||||
| Beispiel 1 – Zustände und Zähler, 1 Register:
Erste Register Adresse 100, Register pro Variable 1, Datentyp Integer.
Ein- und Ausgang 1 haben Adresse 100, 2 hat 101, 3 hat 102 usw. Ein
Schaltzustand wird als 0/1 gelesen, ein Sollwert 21 °C als 21. Beispiel 2 – Temperaturen mit Nachkommastellen, 2 Register: Erste Register Adresse 100, Register pro Variable 2, Datentyp Float. Ein- und Ausgang 1 haben Adresse 100 (Register 100 und 101), 2 hat 102, 3 hat 104 usw. Der Wert 22,5 steht als 0x41B4 0x0000 in den beiden
Registern. Im Master wird „Float 32 Bit, Big Endian“ gewählt und ab
Adresse 100 jeweils 2 Register gelesen.Beispiel 3 – Zählerstände, 4 Register: Erste Register Adresse 0, Register pro Variable 4, Datentyp Float. Ein- und Ausgang 1 haben Adresse 0, 2 hat 4, 3 hat 8 usw. Geeignet für große Energiezählerstände, die mit 32 Bit nicht genau genug wären. Beispiel 4 – Telegramm: Der Master liest Eingang 1 aus Beispiel 2 (FC 3, 2 Register ab Adresse 100, Transaktion 1, Unit-ID 1). Alle Werte hexadezimal: Anfrage: 00 01 00 00 00 06 01 03 00 64 00 02Antwort: 00 01 00 00 00 07 01 03 04 41 B4 00 00Die Antwort enthält nach Funktionscode 03 die Byteanzahl 04 und danach die beiden Register mit dem Wert 22,5. Wird eine Adresse außerhalb des Bausteins angefragt, lautet die Antwort 00 01 00 00 00 03 01 83 02 (Exception 02).Beispiel 5 – verschiedene Datentypen: Ein Energiemanager soll Schaltzustände und Leistungswerte lesen. Baustein A: Integer, 1 Register, erste Adresse 0, 20 IO → Adressen 0 bis 19. Baustein B: Float, 2 Register, erste Adresse 1000, 10 IO → Adressen 1000, 1002 … 1018. Der Master fragt die beiden Bereiche getrennt ab. |
||||||||||||
Grenzen |
||||||||||||
|
Fehlersuche |
||||||||||||||||||||
Die Telegramme des Slaves lassen sich im Studio mit der
Schaltfläche Modbus SL in der Statusleiste mitschauen: Richtung
(I/O), Zeitstempel und Inhalt in Hex. Abgelehnte Anfragen protokolliert
die Steuerung zusätzlich mit der angefragten Adresse, z.B.
READ REGISTER: UNKNOWN REGISTER, ADDRESS: 99.
|