ModbusAttr: Fehler "Error code 01 / illegal function" beim schreiben auf EVSE

Begonnen von andreas_n, 11 Januar 2020, 13:33:12

Vorheriges Thema - Nächstes Thema

andreas_n

Hallo.
Nachdem ich das Basismodul Modbus und danach das Modul ModbusAttr installiert und konfiguriert hatte, konnte ich Daten abrufen.
Nur beim Schreiben habe ich Probleme die ich nicht lösen konnte.
Meine Konfiguration von ModbusAttr

defmod EVSE1 ModbusAttr 1 5
attr EVSE1 userattr dev-h-combine dev-h-defPoll dev-h-defUnpack obj-h1000-reading obj-h1000-set obj-h2000-reading obj-h2000-set
attr EVSE1 dev-h-combine 5
attr EVSE1 dev-h-defPoll 1
attr EVSE1 dev-h-defUnpack n
attr EVSE1 obj-h1000-reading SetLadeStrom
attr EVSE1 obj-h1000-set 1
attr EVSE1 obj-h2000-reading DefaultLadeStrom
attr EVSE1 obj-h2000-set 1
attr EVSE1 room modbus

setstate EVSE1 opened
setstate EVSE1 2020-01-11 13:17:43 DefaultLadeStrom 10
setstate EVSE1 2020-01-11 13:17:43 SetLadeStrom 0
setstate EVSE1 2020-01-11 12:53:45 state opened


Schreibe ich nun  z.B. set EVSE1 DefaultLadeStrom 15 -> kommt umgehend die erwähnte Fehlermeldung.

Laut Doku. kann das Register gelesen und beschrieben werden können. (Mit einem Windows Tool getestet)

Description of registers: (Ref: https://www.evalbo.de/download-1/ Simple EVSE WB Manual)
2000 R/W Default amps value after boot (initial value 32A) - this gets saved to internal EEPROM
Register addresses are in decimal format!
NOTE: Only functions 03 (Read Holding Registers) and 16 (Preset Multiple Registers) are
implemented. For more details please check: http://www.simplymodbus.ca/FAQ.htm


Hatte das Register 1000 (auch RW) probiert -> gleiches Verhalten.

Hat jemand hier evt. eine Idee?


StefanStrobel

Hallo,

die Antwort steht in deiner Frage schon drin:
Zitat
NOTE: Only functions 03 (Read Holding Registers) and 16 (Preset Multiple Registers) are
implemented.
Die meisten Geräte verwenden den Code 6 zum Schreiben von Holding-Registern. Deshalb ist das der Default im Modul.
Wenn Du statt dessen 16 verwenden möchtest, musst das dem Modul sagen:

aus der Doku:
Zitat
dev-([cdih]-)*write
specifies the function code (decimal) to use for writing this type of object in master mode. The default is 6 for holding registers and 5 for coils. Discrete inputs and input registers can not be written by definition.
Some slave devices might need function code 16 for writing holding registers. In this case dev-h-write can be set to 16.

Gruss
   Stefan

andreas_n

Danke für die Antwort und ja das war die Lösung. ("attr EVSE1 dev-h-write 16")
Aber alleine wäre ich nicht darauf gekommen (... evt später oder ich hätte aufgegeben.)