Der Modbus Slave Treiber ermöglicht es Datenpunke/Register als Modbus Slave Teilnehmer zur Verfügung zu stellen. Dabei können bis zu vier verschiedene Registertypen zur Verfügung gestellt werden.
1.Holding Register | 16Bit Register mit Lese-/Schreibzugriff |
---|---|
2.Input Register | 16Bit Register mit Lesezugriff |
3.Coil Register | 1Bit Register mit Lese-/Schreibzugriff |
4.Status Register | 1Bit Register mit Lesezugriff |
Für die Register werden jeweils unterschiedliche Lese- sowie Schreibfuntionen genutzt.
Register lesen | Register schreiben | Mehrere zusammenhängende Register schreiben (MultiWrite, default) | |
---|---|---|---|
Holding | 3 | 6 | 16 |
Input | 4 | – | – |
Coil | 1 | 5 | 15 |
Status | 2 | – | – |
Der Name des Modbus-Treibers lautet: mod
Die Routing-Adresse des ersten Modbus-Treibers ist die 90
Die Datenpunktdatei für den ersten Modbus-Treiber heißt: modslave1.txt
Die Konfigurationsdatei für globale Einstellungen des ersten Modbus-Treibers heißt: modslave1.cfg
Bei dem Modbus-Treiber sowie allen weiteren Gateway-Treibern gilt für die Definiton von Datenpunkten in der Datenpunktdatei:
Typ: | Bedeutung |
---|---|
M | Ganzzahliger Wert (Binäre Datenpunkte,Zählwerte) der vom Gateway nur gelesen werden kann/soll. |
S | Ganzzahliger Wert der vom Gateway gelesen sowie geschrieben werden kann/soll. |
X | Analogwert (mit Nachkommastellen) der vom Gateway nur gelesen werden kann/soll. |
Y | Analogwert (mit Nachkommastellen) der vom Gateway gelesen sowie geschrieben werden kann/soll. |
A | String, findet z.B. Verwendung bei BACnet Trends und ESPA4.4.4 Datenpunkten |
Die Adressen sind wie folgt aufgebaut.
„<slave> <register> <no>[.<bit>]“
Kommunikationsstatus mit Master-Gerät: „failure“
Dabei gilt folgende Definition:
Parameter | Wertebereich | Beschreibung |
---|---|---|
<slave> | 0 - 247 | Adresse des anzusprechenden Slave-Gerätes |
<register> | holding, input, coil, status | Registertyp |
<no> | 0 - 65535 | Registeradresse |
<bit> | 1-16 | Einzelbit innerhalb des Registers |
Die Adresse des Coil-Registers 120 vom Slave „2“ wird demnach wie folgt in der Datei modslaveX.txt angegeben:
[M 2 coil 120]
Um dem Treiber mitzuteilen wie er die unter einer Adresse abgelegten Informationen auswerten kann muss für jeden Datenpunkt das Format übergeben werden. Dies erfolgt anhand der Formatdefinition:
format = <format>
Dabei kann <format> folgende Werte annehmen:
<format> | Beschreibung |
---|---|
u | 16bit unsigned (Vorzeichenlos) |
ut | 16bit unsigned / 10 (Gewinn einer Nachkommastelle) |
uh | 16bit unsigned / 100 (Gewinn zweier Nachkommastellen) |
um | 16bit unsigned / 1000 |
u32 | 32bit unsigned |
u32s | 32bit unsigned (Wortreihenfolge vertauscht) |
s | 16bit signed (Vorzeichenbehaftet) |
st | 16bit signed / 10 (Gewinn einer Nachkommastelle) |
sh | 16bit signed / 100 (Gewinn zweier Nachkommastellen) |
sm | 16bit signed / 1000 |
c | 32bit signed |
ci | 32bit signed (Bytereihenfolge vertauscht) |
ct | 32bit signed / 10 (Gewinn einer Nachkommastelle) |
ch | 32bit signed / 100 (Gewinn zweier Nachkommastellen) |
cm | 32bit signed / 1000 |
u32 | 32bit unsigned |
f | 32bit IEEE754 floating point (Fliesskommazahl) |
fi | 32bit IEEE754 floating point (Bytereihenfolge vertauscht) |
j | 32bit IEEE754 floating point (Fliesskommazahl mit vertauschten Worten) |
ji | 32bit IEEE754 floating point (Byte- und Wortreihenfolge vertauscht) |
d | 64bit IEEE754 floating point (Fliesskommazahl) |
dm | 64bit IEEE754 floating point (Bytereighenfolge vertauscht) |
bcd | 16bit BCD |
sbit06 | 1bit Einzelbit aus Holding oder Input Register. Erfordert die Angabe von <bit> in der Adresse. Zum schreiben wird Funktionscode 06 bzw. 05 verwendet. |
Weitere spezielle Formate sind auf Anfrage möglich.
Für Coil- sowie Status-Register wird keine Formatangabe benötigt.
32Bit-Formate benötigen mehr als ein Register, die fehlenden Register werden aus den nachfolgenden Registern gebildet. Diese Register sind dann für andere Datenpunkte nicht mehr verwendbar!
Es dürfen mehrere Slave-Adressen in einer Datei projektiert werden.
Beispiele für typische Datenpunkte:
[S 2 status 5]
name = Slave 2 Status-Register 5 (1 Bit)
query = pe
writecache = yes
[M 2 coil 10]
name = Slave 2 Coil-Register 10 (1 Bit)
query = pe
[S 4 input 10.3]
name = Slave 4 Input-Register 10 Bit 3 (1 Bit)
format = sbit06
query = pe
writecache = yes
[M 4 holding 11.5]
name = Slave 4 Holding-Register 11 Bit5
format = sbit06
query = pe
[S 4 holding 15]
name = Slave 4 Holding-Register 15 (16Bit-Wert ohne Vorzeichen)
query = pe
format = u
writecache = yes
[X 4 holding 16]
name = Slave 4 Holding-Register 16 (16Bit-Wert mit Vorzeichen)
format = s
query = pe
[Y 4 input 17]
name = Slave 4 Input-Register 17+18 (32Bit-Float-Wert)
format = f
query = pe
writecache = yes
[X 4 holding 17]
name = Slave 4 Holding-Register 17 (16Bit-Wert mit Vorzeichen mit Faktor 10 skaliert)
format = st
query = pe