BiancoRoyal/node-red-contrib-modbus

Incorrect and iterating value from modbus server

DirkMu opened this issue · 5 comments

DirkMu commented

Which node-red-contrib-modbus version are you using?

5.25.0

What happened?

I am using 3 'Modbus - read' nodes reading three values from one server (tcp). Poll rate is 60 seconds. I see that the values read by node red sometimes differ from a modbus simulator. In addition the values iterating. That means a new value is read (e.g. 1536). 60 seconds a new value is read e.g. 1664. Next time 1536 is read again.

This is dump from my database sorted descending (oen example). The data is from a SMA inverter. In particular at the end of a day when the value from the inverter do not change the value in node red is iterating between the last and penultimate value (as you can see at the end of the list.

sensor.pv_gesamtertrag_wh 2816
sensor.pv_gesamtertrag_wh 2560
sensor.pv_gesamtertrag_wh 2664
sensor.pv_gesamtertrag_wh 2560
sensor.pv_gesamtertrag_wh 2304
sensor.pv_gesamtertrag_wh 2048
sensor.pv_gesamtertrag_wh 1792
sensor.pv_gesamtertrag_wh 1536
sensor.pv_gesamtertrag_wh 1664
sensor.pv_gesamtertrag_wh 1536
sensor.pv_gesamtertrag_wh 1641
sensor.pv_gesamtertrag_wh 1536
sensor.pv_gesamtertrag_wh unknown
sensor.pv_gesamtertrag_wh 1536
sensor.pv_gesamtertrag_wh 1280
sensor.pv_gesamtertrag_wh 1440
sensor.pv_gesamtertrag_wh 1280
sensor.pv_gesamtertrag_wh 1406
sensor.pv_gesamtertrag_wh 1280
sensor.pv_gesamtertrag_wh 1389
sensor.pv_gesamtertrag_wh 1280
sensor.pv_gesamtertrag_wh 1371
sensor.pv_gesamtertrag_wh 1280
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1256
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1208
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1185
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1181
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1178
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024
sensor.pv_gesamtertrag_wh 1177
sensor.pv_gesamtertrag_wh 1024

Server

Other/External server

How can this be reproduced?

I don't know...

What did you expect to happen?

Correct value read from the modbus server.

Other Information

No response

Hi,
I can support this bug. Same observation, I'm reading also SMA inverters, but with Modbus Getter nodes. Using the "Modbus Poll" application, a Windows based tool, everthing is fine.

I see the exact behavior as described above, reading the registers I have inbetween the correct values discrete value of exactly 0, 256 or 512, so multiples of 256 with missing the last 8bit.

I have the same result with two different setups. One has version 5.16. The other 5.25.

Please help us to get this stable again.

Best regards!
values0_256_512

I analysed my values a bit more. The wrong values are always a multiple of 256. So the bits lower than 256 are cut off. So the last 8bit are missing.
This also fits with the values of @DirkMu.

Found it and fixed it. The error occurs if the TCP window is too small for the whole answer and so the in this case last byte is cut off. As a counter measure modbus-serial offers a buffered TCP mode.

This mode is also available in this package. In your modbus configuration select TCP TYPE: "RTU-BUFFERED"

or you simply change the following line in your flows.json at the modbus-serial configuration:
From: "tcpType": "DEFAULT",
To: "tcpType": "TCP-RTU-BUFFERED",

I hope this helps also somebody else.
@DirkMu: Does this also fix it on your side?

DirkMu commented

@martinroehder thanks for debugging it. I am currently running a test. So far, it looks promising.

DirkMu commented

@martinroehder with RTU-BUFFERED it is working correctly. Thank you.