Modbus rtu RS485 leading zeros in communication package

Hello,

We have an inverter connected to an Edge embedded device using RS485 using Modbus RTU. Things were working fine, until some days ago when we received CRC errors from the communication packages received from the inverter.
I get a connection with the inverter and the data is there but there are leading zeros in the communication package, resulting in a CRC error. Something happened resulting the the leading zeros being present.

Does anyone have a clue why these zeros suddenly appeared?


Correct data:
Aug 11 09:35:22 bash[30104]: MinimalModbus debug mode. Response from instrument: 01 03 FA 00 14 00 50 00 00 00 01 15 7C 00 00 00 01 13 EC 00 5F 15 18 00 64 00 01 01 F4 00 01 00 01 00 02 1F 40 00 0B 00 01 00 FF 00 01 00 64 02 BC 03 84 04 B0 06 A4 08 34 23 1E 23 00 1F 40 21 34 23 28 23 28 13 24 13 24 13 24 13 24 13 24 13 24 00 14 00 14 00 14 00 14 00 14 00 14 00 01 00 01 00 01 00 01 00 01 00 01 2A FA FF FF 00 3C 00 00 00 00 00 00 00 01 0A 5A 07 3A 14 1E 12 C0 00 01 13 88 13 88 00 64 03 E8 00 00 00 00 75 30 00 00 AF C8 00 00 01 90 00 00 00 32 00 00 01 86 00 00 00 37 00 03 A2 0E 00 00 14 82 00 00 00 96 00 F0 00 20 13 5A 00 0B 04 CF 00 AA 01 04 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF 0E EB 00 00 FF FF FF FF FF FF FF FF FF FF 00 00 00 01 00 01 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03 03 (255 bytes), roundtrip time: 0.3 ms. Timeout for reading: 500.0 ms.

Wrong data:

Aug 14 08:26:42 bash[3906]: MinimalModbus debug mode. Response from instrument: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 03 FA 00 50 00 00 00 01 15 7C 00 00 00 01 13 EC 00 5F 15 18 00 01 05 D1 00 01 00 01 00 02 1F 40 00 0B 00 01 00 FF 01 00 64 02 BC 03 84 04 B0 06 A4 08 34 23 1E 23 00 00 21 34 23 28 23 28 13 24 13 24 13 24 13 24 13 24 13 24 45 40 40 40 40 40 00 01 00 01 2A FA FF FF 00 3C 00 00 00 00 00 00 00 01 02 40 07 3A 14 1E 12 C0 00 01 13 88 13 88 00 64 03 E8 00 00 00 75 30 00 00 AF C8 00 00 01 90 00 00 00 32 00 00 00 00 00 37 00 03 A2 0E 00 00 14 82 00 00 00 96 00 F0 45 A2 20 10 D0 1D FF FF FF FF FF FF FF 0E EB 00 00 FF FF FF FF FF FF FF FF FF 00 00 00 01 00 01 00 00 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF E5 (244 bytes),

Regards
Tony
 
Many years ago I had a similar problem with a very cheap (too cheap I guess) Honeywell frequency invertor in a butchers oven that was used for cooking/baking/smoking sausages.
All worked fine until a few years when (at that moment) strange communication failures started to happen. From my experience while working in China I immediately suspected the frequency invertor, but the OEM supplier that built the equipment didn't believe me of course. So I went there and found that the cable for the power supply had a neutral wire that was originally light blue but turned brown because of the heat.
When I read our the temperature controllers that communicated via modbus with our RKC Instrument controllers I saw in the maximum detected temperature registers that they were running hot at about 82°C, but that is fine for RKC Instrument temperature controllers, they keep on working at high temperature.
After long discussions with the OEM supplier they finally replaced the frequency invertor and the problem was gone.
My take is that because of the high temperature, the filters in the frequency invertor finally got damaged and therefore the noise of that caused the communication problems. Filters often contain ferrite ceramics (which is very temperature dependent by the way!!! often cannot stand freezing below 0°C !!!) and capacitors. Capacitors cannot stand high temperature very long, this really deteriorates their lifetime.
 
How many wires are being used in the RS-485 cabling between the devices? Are you using a reference wire?

Is termination installed/enabled on the RS-485 bus? If so, are network idle biasing resistors also installed?

If this network has termination without idle biasing, it's possible it has been operating right on the edge of the undefined -200mV to +200mV differential voltage region. It's possible that now the network's idle voltage has dipped below this threshold and is causing the receiving device to interpret the bus idle condition as 00's.

As a test, try removing/disabling any termination installed/enabled on the bus.
 
The inverter and the Edge device was working in one location, then we moved it to another room, and it was working for a while then this error was appearing. Therefore I don't think it is the settings. We use minimalmodbus using python and I saw this note in their documentation: "Empty bytes added in the beginning or the end on the received message This is due to interference. Use biasing of modbus lines, by connecting resistors to GND and Vcc from the the two lines. This is sometimes named “failsafe”." So probably we have to add some resistors.
 
Top