SOC wird falsch berechnet

Hallo zusammen,

Seit einigen Tagen wird der SOC des Fenecon Speichers falsch berechnet.

Nach Neustart des Raspberrys wird aber der richtige Wert ausgegeben.

Im Channel ess0/OriginalSoc wird aber der richtige SOC ausgegeben.

Weiß jemand was das Problem sein könnte?

Beste Grüße,

Folgende Fehlermeldung ist denke ich dafür verantwortlich.

Sep 23 14:33:45 raspberrypi java[4359]: 2020-09-23 14:33:45,085 [modbus0 ] ERROR [s.common.worker.AbstractWorker] Worker error. NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
Sep 23 14:33:45 raspberrypi java[4359]: java.lang.NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.element.AbstractDoubleWordElement._setInputRegisters(AbstractDoubleWordElement.java:53)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.element.AbstractModbusRegisterElement.setInputRegisters(AbstractModbusRegisterElement.java:87)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadInputRegistersTask.doElementSetInput(AbstractReadInputRegistersTask.java:27)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadInputRegistersTask.doElementSetInput(AbstractReadInputRegistersTask.java:1)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadTask.fillElements(AbstractReadTask.java:113)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractReadTask._execute(AbstractReadTask.java:68)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.task.AbstractTask.execute(AbstractTask.java:81)
Sep 23 14:33:45 raspberrypi java[4359]: at io.openems.edge.bridge.modbus.api.ModbusWorker.forever(ModbusWorker.java:172)
Sep 23 14:33:45 raspberrypi java[4359]: at
io.openems.common.worker.AbstractWorker$1.run(AbstractWorker.java:112)

Anscheinend geht die Information über jede zweite Änderung des SOC’s verloren:

Hallo Dominik,

Sep 23 14:33:45 raspberrypi java[4359]: 2020-09-23 14:33:45,085 [modbus0 ] ERROR [s.common.worker.AbstractWorker] Worker error. NoSuchMethodError: java.nio.ByteBuffer.rewind()Ljava/nio/ByteBuffer;
Sep 23 14:33:45 raspberrypi java[4359]: java.lang.NoSuchMethodError: 

“NoSuchMethodError” klingt nach einem Versionskonflikt. Ich habe dazu z. B. das hier gefunden: https://github.com/apache/felix/pull/114

Tritt der Fehler auf, wenn sowohl mit einem Java JDK 8 gebaut als auch mit einem Java 8 auf dem Raspberry Pi ausgeführt wird?

Hallo Stefan,

Habs bereits mit Java JDK 8, Java 8 und Java 11 ausgeführt. Hat nichts geändert.
Hab auch schon den Raspberry komplett neu formatiert, auch ohne Erfolg.

Anscheinend ist folgende Ausgabe das Problem:

ep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,788 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [6/0x6] but should be [0/0x0].
Sep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,790 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [7/0x7] but should be [1/0x1].
Sep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,791 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [8/0x8] but should be [2/0x2].
Sep 29 19:36:22 raspberrypi java[11248]: 2020-09-29 19:36:22,791 [thread-1] ERROR [idge.modbus.api.ModbusProtocol] Start address is wrong. It is [9/0x9] but should be [3/0x3].

Gibt es eine Möglichkeit den Channel ess0/OriginalSOC in der Weboberfläche visualisieren zu lassen?
Zumindest bis das Problem gelöst ist…

Beste Grüße,
Dominik

Hallo Dominik,

das ist jetzt ein komplett anderer Fehler. In dem neuen Fall ist es ein Fehler in der defineModbusProtocol()-Methode (https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.bridge.modbus/src/io/openems/edge/bridge/modbus/api/AbstractOpenemsModbusComponent.java#L177). Die Startadressen passen dort anscheinend nicht richtig zusammen. Kannst du deine komplette Methode mal hier posten?

Gruß,
Stefan

Hallo Dominik

es gab tatsächlich einen Berechnungsfehler im Code - der sich aber erst durch einen anderen Bugfix ausgewirkt hat. Den Fehler habe ich heute behoben:

Gruß,
Stefan