Asking for feedback: new ModbusWorker implementation

The PR looks good to me.

I just tested the modification and the behavior is as expected (8000ms cycle time):

2025-08-05T08:51:28,534 [_cycle ] INFO [ker.internal.TasksSupplierImpl] [modbus1] Getting [3] read and [4] write tasks for this Cycle
2025-08-05T08:51:28,534 [_cycle ] INFO [ker.internal.CycleTasksManager] [modbus1] State: FINISHED → INITIAL_WAIT (in onBeforeProcessImage) Delay [7796] PreviousDelay [7795ms] + Wait [113ms] = PossibleDelay [7908ms]
2025-08-05T08:51:28,535 [_cycle ] INFO [dge.solaredge.ess.SolarEdgeEss] [ess0] before process image
2025-08-05T08:51:28,559 [_cycle ] INFO [ker.internal.CycleTasksManager] [modbus1] State: INITIAL_WAIT → WRITE (onExecuteWrite)
2025-08-05T08:51:28,559 [_cycle ] INFO [dge.solaredge.ess.SolarEdgeEss] [ess0] execute write
2025-08-05T08:51:28,566 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC16WriteRegisters [ess0;unitid=1;ref=57355/0xe00b;length=7] Elapsed [8ms]
2025-08-05T08:51:28,567 [modbus1 ] INFO [ker.internal.CycleTasksManager] [modbus1] State: WRITE → WAIT_BEFORE_READ (getNextTask)
2025-08-05T08:51:36,364 [modbus1 ] INFO [ker.internal.CycleTasksManager] [modbus1] State: WAIT_BEFORE_READ → READ (onWaitDelayTaskFinished)
2025-08-05T08:51:36,374 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC3ReadHoldingRegisters [ess0;unitid=1;priority=LOW;ref=57344/0xe000;length=4] Elapsed [9ms]
2025-08-05T08:51:36,394 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC3ReadHoldingRegisters [ess0;unitid=1;priority=HIGH;ref=57668/0xe144;length=50] Elapsed [18ms]
2025-08-05T08:51:36,410 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC3ReadHoldingRegisters [ess0;unitid=1;priority=HIGH;ref=40071/0x9c87;length=38] Elapsed [14ms]
2025-08-05T08:51:36,410 [modbus1 ] INFO [ker.internal.CycleTasksManager] [modbus1] State: READ → FINISHED (getNextTask)
2025-08-05T08:51:36,546 [_cycle ] INFO [ker.internal.TasksSupplierImpl] [modbus1] Getting [3] read and [4] write tasks for this Cycle
2025-08-05T08:51:36,547 [_cycle ] INFO [ker.internal.CycleTasksManager] [modbus1] State: FINISHED → INITIAL_WAIT (in onBeforeProcessImage) Delay [7798] PreviousDelay [7796ms] + Wait [135ms] = PossibleDelay [7931ms]
2025-08-05T08:51:36,547 [_cycle ] INFO [dge.solaredge.ess.SolarEdgeEss] [ess0] before process image

Comment: The FC16WriteRegisters should be as early as possible after the “execute write” event (which is the case now). The FC3ReadHoldingRegisters is as late as possible before “before process image” event.

Without trace (=better timings):

2025-08-05T08:59:13,085 [_cycle ] INFO [dge.solaredge.ess.SolarEdgeEss] [ess0] execute write
2025-08-05T08:59:13,091 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC16WriteRegisters [ess0;unitid=1;ref=57355/0xe00b;length=7] Elapsed [5ms]
2025-08-05T08:59:20,954 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC3ReadHoldingRegisters [ess0;unitid=1;priority=LOW;ref=57344/0xe000;length=4] Elapsed [16ms]
2025-08-05T08:59:20,964 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC3ReadHoldingRegisters [ess0;unitid=1;priority=HIGH;ref=57668/0xe144;length=50] Elapsed [10ms]
2025-08-05T08:59:20,980 [modbus1 ] INFO [e.modbus.api.task.AbstractTask] Execute FC3ReadHoldingRegisters [ess0;unitid=1;priority=HIGH;ref=40071/0x9c87;length=38] Elapsed [14ms]
2025-08-05T08:59:21,066 [_cycle ] INFO [dge.solaredge.ess.SolarEdgeEss] [ess0] before process image

Comment: The FC16WriteRegisters should be as early as possible after the “execute write” event (which is the case now). The FC3ReadHoldingRegisters is as late as possible before “before process image” event.