NEWS
[gelöst]Wie Modbus Holding Register für Zeit verändern?
-
Ich habe über die Modbus Anbindung meines Growatt Wechselrichters u.a. ein Register, dass eine Startzeit beinhaltet. Diese Startzeit möchte ich gerne mit setState per Javascript verändern. Das klappt nur teilweise:
Das steht in der Anleitung:
The format for each byte in RTU mode is:
Coding System: 8–bit binary, hexadecimal 0–9, A–F
Two hexadecimal characters contained in each
8–bit field of the messageAusgelesen wird das selbe Holdingregister getrennt nach Stunde und Minute:
laut Anleitung ist es dieses Register (im Modbusadapter muss man 40001 dazuzählen, damit es gefunden wird)
ergibt dann diese Objekte:
setState('modbus.0.holdingRegisters.41101_Bat_First_Start_Time_1_hour'/*41101 Bat First Start Time 1 Hour*/,10); setState('modbus.0.holdingRegisters.41101_Bat_First_Start_Time_1_Minute'/*41101 Bat First Start Time 1 Minute*/,5);
diese Javascriptbefehle ändern die beiden Objekte kurz auf die gewünschte Zeit (Zahl ist dann grün). Sobald allerdings die beiden Register aber vom Modbus Adapter neu ausgelesen werden, wird die Stundenzahl rot und dann auf 0 gesetzt. Die Minutenzahl wird akzeptiert und bleibt.
irgendwie greife ich wohl nicht sauber auf das gemeinsame Register für Minuten und Stunde zu. Fehlt da eine Bestätigung? Muss ich vielleicht die gesamte Zeit (Stunden und Minuten) mit einem setState übergeben?
Nur wie müsste der Befehl bitte richtig lauten?
Danke
-
So das Problem ist gelöst. Man muss das Acknowledgment mitliefern. Das ist das zusätzliche "false" im Befehl.
Zusätzlich muss man in 16-bit schreiben und dabei folgende Zahl übergeben:
Stunde * 256 + Minute. Im Beispiel unten wird 10h 5min übergebensetState('modbus.0.holdingRegisters.41101_Bat_First_Start_Time_1_16bit'/*41101 Bat First Start Time 1 16bit*/,2565,false);
-
Nachtrag: und man muss immer zusätzlich das Register "Load_first_bat_first_grid_first" (bei mir 1044) zum Schreiben der Zeit auf 1 setzen!