Benutzer-Werkzeuge

Webseiten-Werkzeuge


modbus_slave_seriell

Modbus Slave seriell

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 03 06 16
Input 04
Coil 01 05 15
Status 02

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
 
modbus_slave_seriell.txt · Zuletzt geändert: 19.01.2017 16:12 von fla