Writing frequency of register 37 in ESS mode 3 not according to specs

Hi, I have an MultiPlus-II 48/3000/35-32 and set it up for ESS mode 3 (full external control loop). Firmware: 502 (latest)

I am able to drive charge/discharge using a python script running on my home automation RPi and communicating via ModbusTcp.

The manual (ESS mode 2 and 3 [Victron Energy] → p3.2a) states, I have to write register 37 at least once in every 60 seconds.

From my experience, I have to write this register at least once every 14-15s to get it working without fluctuations in the in/output.

Tried to work with (volatile) register 2700/2716 but that does not seem to work as expected as this register is ment for mode 2.

  1. Is there a volatile version of register 37 (just like 2716 for 2700) to avoid wearing out the flash?
  2. Can I somewhere decrease the write frequency needed to update register 37?

Thanks!

Hi,
What UID are you using for #37 writes?
I can’t get that to work at all.
Also, what version for Venus firmware are you on?
Thanks.

UID 228,

You may find yours in console->settings->services->modbus tcp->available services

firmware 3.54

Relevant snippet from my code:

register = 37
unit_id = 228

def Sendline():
print('Setting AC GRID SetPoint to [W]: ', setpoint_value)
C = ModbusClient(host=‘192.168.3.2’, port=502)
try:
builder = BinaryPayloadBuilder(byteorder=Endian.BIG, wordorder=Endian.BIG)
builder.reset()
builder.add_16bit_int(2 * int(setpoint_value))
payload = builder.to_registers()
C.write_register(register, payload[0], unit_id)
time.sleep(11.5)
msg = C.read_holding_registers(register, 1, unit_id)
decoder = BinaryPayloadDecoder.fromRegisters(msg.registers, byteorder=Endian.BIG)
msg = decoder.decode_16bit_int()
print('Actual AC GRID Setpoint is [W]: ', msg)
C.close()
except:
print (‘Fatal error, cannot communicate with GX device’)

Thanks, but no UID 228 on my system…
Just asking what is the service name that your GX gives for this id?

afbeelding

My VE bus ID is 227.

Hi tryingtohack,
I have the same experience. The setpoint registers (227:addr 37, 40,41) have to be written every 10 seconds for continuous charging or discharging.
Victron should modify this in their ESS document and the specific ESS3 and 3 document I guess.

2 Likes

Another problem I found in charging in mode 3 as well:

  • I use 3x JK-BMS for the LiFePo stacks. During cha connected in Pylontech protocol to the CAN bus (500 kbaud). Initially the system did not want to charge over 70 A despite the correct setting in DVCC (DVCC 2705 system max charge current).
  • It turns out that the Cerbo GX seems to ignore the DVCC setting for max charge current and instead takes the max current setting of the first JKBMS for the whole system.

This seems to me an error that should be fixed by Victron. I solved it now by setting the JKBMS max current to 150 A. But in fact that means that my first battery stack is not sufficiently protected.

any updates on this register 37? i noticed the same when i was trying it out. I even noticed it is even now more close to 5 seconds! that keeps it hard to keep it in line with automations. becomes almost a dedicated automation for writing this onle :see_no_evil_monkey:

or could we solve this with node script on victron? didnt do that yet.

No change found her and no reaction from Victron. So I guess they have no interest in explaining or modifying the documentation.

And I agree, that 5 seconds means that a significant part of modbus network traffic is consumed by Victron.