Modbus Master seriell


 

Der Modbus Master Treiber ermöglicht es Datenpunke/Register aus Geräten die als Modbus Slave arbeiten auszulesen sowie zu schreiben. Jeder Modbus Slave kann bis zu vier verschiedene Registertypen zur Verfügung stellen.

1.Holding Register16Bit Register mit Lese-/Schreibzugriff
2.Input Register16Bit Register mit Lesezugriff
3.Coil Register1Bit Register mit Lese-/Schreibzugriff
4.Status Register1Bit Register mit Lesezugriff

Für die Register werden jeweils unterschiedliche Lese- sowie Schreibfuntionen genutzt.

Register lesenRegister schreibenMehrere zusammenhängende Register schreiben (MultiWrite, default)
Holding3616
Input4
Coil1515
Status2

Der Name des Modbus-Treibers lautet: mod
Die Routing-Adresse des ersten Modbus-Treibers ist die 80
Die Datenpunktdatei für den ersten Modbus-Treiber heißt: modmster1.txt
Die Konfigurationsdatei für globale Einstellungen des ersten Modbus-Treibers heißt: modmster1.cfg

Bei dem Modbus-Treiber sowie allen weiteren Gateway-Treibern gilt für die Definiton von Datenpunkten in der Datenpunktdatei:

Typ:Bedeutung
MGanzzahliger Wert (Binäre Datenpunkte,Zählwerte) der vom Gateway nur gelesen werden kann/soll.
SGanzzahliger Wert der vom Gateway gelesen sowie geschrieben werden kann/soll.
XAnalogwert (mit Nachkommastellen) der vom Gateway nur gelesen werden kann/soll.
YAnalogwert (mit Nachkommastellen) der vom Gateway gelesen sowie geschrieben werden kann/soll.
AString, findet z.B. Verwendung bei BACnet Trends und ESPA4.4.4 Datenpunkten

Die Adressen sind wie folgt aufgebaut.

„<slave> <register> <no>[.<bit>]“

Hinweis: Bei Verwendung der Einzelbitadressierung über <.bit> ist die Nummerierung der Bits von 1..16. Bit 0 = 1, Bit 15 = 16

Kommunikationsstatus mit MODBUS-Slave: „<slave> failure“

Dabei gilt folgende Definition:

ParameterWertebereichBeschreibung
<slave>0 - 247Adresse des anzusprechenden Slave-Gerätes
<register>holding,
input,
coil,
status
Registertyp
<no>0 - 65535Registeradresse
<bit>1-16Einzelbit innerhalb des Registers

Die Adresse des Coil-Registers 120 vom Slave „2“ wird demnach wie folgt in der Datei modmsterX.txt angegeben:

[M 2 coil 120]

Um dem Treiber mitzuteilen wie er die unter einem Register 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
u16bit integer unsigned (Vorzeichenlos)
ut16bit unsigned / 10 (Gewinn einer Nachkommastelle)
uh16bit unsigned / 100 (Gewinn zweier Nachkommastellen)
um16bit unsigned / 1000
s16bit integer signed (Vorzeichenbehaftet)
st16bit signed / 10 (Gewinn einer Nachkommastelle)
sh16bit signed / 100 (Gewinn zweier Nachkommastellen)
sm16bit signed / 1000
c32bit integer signed
ci32bit signed (Bytereihenfolge vertauscht)
ct32bit signed / 10 (Gewinn einer Nachkommastelle)
ch32bit signed / 100 (Gewinn zweier Nachkommastellen)
cm32bit signed / 1000
u3232bit integer unsigned
u32s32bit integer unsigned (Wortreihenfolge vertauscht)
u6464bit integer unsigned
f32bit IEEE754 floating point (Fliesskommazahl)
fi32bit IEEE754 floating point (Bytereihenfolge vertauscht)
j32bit IEEE754 floating point (Fliesskommazahl mit vertauschten Worten)
ji32bit IEEE754 floating point (Byte- und Wortreihenfolge vertauscht)
d64bit IEEE754 floating point (Fliesskommazahl)
dm64bit IEEE754 floating point (Bytereihenfolge vertauscht)
bcd16bit BCD
sbit061bit Einzelbit aus Holding oder Input Register. Erfordert die Angabe von <bit> in der Adresse. Zum schreiben wird Funktionscode 06 bzw. 05 verwendet.
sbit161bit Einzelbit aus Holding oder Input Register. Erfordert die Angabe von <bit> in der Adresse. Zum schreiben wird Funktionscode 16 bzw. 15 verwendet.

Weitere spezielle Formate auf Anfrage.

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!

Typische Datenpunktdefinitionen können demnach sein:

[M 2 failure]
name = Ausfall der Kommunikation zu MODBUS-Slave-2 (0=OK 1=Ausfall)
query = pe

[M 2 status 5]
name = digitale Betriebsmeldung
query = pe

[S 2 coil 10]
name = digitaler Sollwert
query = pe
writecache = yes

[M 2 input 10.3]
name = digitale Betriebsmeldung
query = pe
format = sbit06

[S 2 holding 11.5]
name = digitaler Sollwert
query = pe
format = sbit06
writecache = yes

[M 2 holding 15]
name = multistate Meldung z.B. 0,1,2 für Aus,An,Auto
query = pe
format = u

[S 2 holding 16]
name = multistate Sollwert z.B. Stufenschalter 0,1,2 für Aus,An,Auto
query = pe
format = u
writecache = yes

[X 2 input 17]
name = Temperatur Messwert (Register 17+18)
query = pe
format = f

[Y 2 holding 17]
name = Temperatur Sollwert, eine Nachkommastelle
query = pe
format = st
writecache = yes