Modbus-Einstellungen im Controller mithilfe von Skripten
Bei der Arbeit mit Modbus im Controller ist es wichtig, die verfügbaren Funktionscodes zu verstehen. Diese Codes bestimmen den Typ des Speichers (z. B. Halteregister, Eingangsspulen usw.), auf den zugegriffen werden soll, und die entsprechende Aktion (Lesen oder Schreiben). Alle nachfolgend beschriebenen Funktionen können sowohl für Modbus TCP als auch für Modbus RTU verwendet werden.
-
Funktionscodes:
-
Funktionscodes definieren spezifische Operationen:
-
Read: Abrufen von Daten von Erweiterungsgeräten.
-
Write: Spulen oder Register aktualisieren.
-
-
Gängige Funktionscodes:
-
Digitaleingänge lesen (Funktionscode 2)
Name
„Getrennten Eingang lesen“
Befehl
value = mb:readdiscreteinputs(address)
Argumente
[address]: Adresse des Eingangs
Zurückgegebene Werte
1: EIN, 0: AUS
Ausnahmecodes
01 oder 02 oder 03 oder 04.
Name
„Getrennte Eingänge lesen“
Befehl
value = mb:readdiscreteinputs(start,count)
Argumente
[address]: Adresse des ersten zu lesenden Eingangs
[count]: Anzahl der zu lesenden Eingänge (max. 2000)
Zurückgegebene Werte
1: EIN, 0: AUS
Fehlercodes:
01 oder 02 oder 03 oder 04
Beispiel
bool1, bool2= mb: readdiscreteinputs(10,2)
Der von der digitalen Eingangsadresse 11 gelesene Wert wird an die Variable bool1 zurückgegeben.
Der von der digitalen Eingangsadresse 12 gelesene Wert wird an die Variable bool2 zurückgegeben.
-
Spulen lesen (Funktionscode 1)
Name
„Einzelne Spule lesen“
Befehl
coil = mb:readcoils(address)
Befehl
coil= mb:readcoils(start, count)
Argumente
[address]: Adresse der Spulen
Zurückgegebene Werte
1: EIN, 0: AUS
Ausnahmecodes
01 oder 02 oder 03 oder 04
Name
„Mehrere Spulen lesen“
Argumente
[start]: Adresse der ersten zu lesenden Spule
[count]: Anzahl der zu lesenden Spulen (max. 2000)
Zurückgegebene Werte
1: EIN, 0: AUS
Ausnahmecodes
01 oder 02 oder 03 oder 04
Beispiel
coil1,coil2,coil3= mb:readcoils(1000, 3)
Der von der Spulenadresse 1000 gelesene Wert wird an die Variable Spule1 zurückgegeben.
Der von der Spulenadresse 1001 gelesene Wert wird an die Variable Spule2 zurückgegeben.
Der von der Spulenadresse 1002 gelesene Wert wird an die Variable Spule3 zurückgegeben.
-
Eingangsregister lesen (Funktionscode 4)
Name
„Eingangsregister lesen“
Befehl
value = mb:readinputregisters(address,count)
Argumente
[address]: Adresse des ersten zu lesenden Eingangsregisters
[count]: Anzahl der zu lesenden Eingangsregister (max. 125)
Zurückgegebene Werte
2-Byte-Werte
Ausnahmecodes
01 oder 02 oder 03 oder 04.
Beispiel
value1, value2, value3, value4 = mb:readinputregisters(1015,4)
Der von der Eingangsregisteradresse 1015 gelesene Wert wird an den Variablenwert1 zurückgegeben.
Der von der Eingangsregisteradresse 1016 gelesene Wert wird an den Variablenwert2 zurückgegeben.
Der von der Eingangsregisteradresse 1017 gelesene Wert wird an den Variablenwert3 zurückgesendet.
Der von der Eingangsregisteradresse 1018 gelesene Wert wird an den Variablenwert4 zurückgegeben.
-
Halteregister lesen (Funktionscode 3)
Name
„Register lesen“
Befehl
value = mb:readregisters(address,count)
Argumente
[address]: Adresse des ersten zu lesenden Registers
[count]: Anzahl der zu lesenden Register (max. 125)
Zurückgegebene Werte
2-Byte-Werte
Ausnahmecodes
01 oder 02 oder 03 oder 04.
Beispiel
int1, int2= mb: readregisters(1100,3)
Der von der Registeradresse 1100 gelesene Wert wird an die Variable int1 zurückgegeben.
Der von der Registeradresse 1101 gelesene Wert wird an die Variable int2 zurückgegeben.
Der von der Registeradresse 1102 gelesene Wert wird an die Variable int3 zurückgegeben.
-
Einzelne Spule schreiben (Funktionscode 5)
Name
„Einzelnes Bit schreiben“
Befehl
value = mb:writebits (1000, value)
[Startadresse, Wert „true“ oder „false“/„0“]
-
Einzelnes Register schreiben (Funktionscode 6)
Name
„Einzelnes Register schreiben“
Befehl
value = mb:writeregisters(1000, 123)
[Adresse, Wert]
-
Mehrere Spulen schreiben (Funktionscode 0F)
Name
„Mehrere Bits schreiben“
Befehl
value = mb:writebits(1000, true, false, true, ...)
[Adresse, Bitwert1, Bitwert2,...{max. 1968 Bits}]
-
Mehrere Register schreiben (Funktionscode 10)
Name
„Mehrere Register schreiben“
Befehl
value = mb:writeregisters(1000, 123, 321, 222, ...)
[Adresse, Wert1, Wert2, ..{max. 123 Register}]
Ausnahmecodes
mb:readcoils(start, count)
mb:readdiscreteinputs(start, count)
mb:readregisters(start, count)
mb:readinputregisters(start, count)Diese Befehle lesen ein oder mehrere Register/Spulen ab der Startadresse und geben im Erfolgsfall alle Werte zurück. Im Falle eines Fehlers werden drei Variablen zurückgesendet:
Nil
Beschreibung des Ausnahmecodes
Ausnahmecode
-
-
Modbus-Ausnahmecodes: (siehe hier).