MODBUS/RTU RS 485 Data Reading Problem


Thread Starter

Ashish K

Dear Sir,

I have MODBUS/RTU (RS485) communication between my DCS and IS-PC (HMI Located at field). My communication is okay, but it shows only DI value like on/off only. AI value is fluctuating, i.e., if I have given 25 as force value from DCS, it’s appearing fluctuating sometimes showing just #### and again 0 or -0 like this.

please suggest why such kind of thing is happening.

Please note: Terminator resistor is in line for Tx and Rx and two-wire communication. IS-PC is STAHL make.

Ashish K
It might help if you know what command is being sent by the DCS and the reply is. Troubleshooting Modbus strange problems almost always requires looking at the commands once your are past wiring problems. Can you communicate with the HMI with a Modbus simulator? Several are available on the Internet.

William (Bill) L. Mostia, Jr. PE
ISA Fellow, FS Engineer (TUV Rheinland)

Winner of the 2018 ISA Raymond D. Molloy Award

Sr. Safety Consultant
SIS SILverstone, LLC
If you are truly sending the same 'forced' value (same bit pattern) with the same command from the master, then a misinterpretation of the value (due to mis-interpretation of the data format) on the HMI would be displayed as an incorrect value, but that incorrect value would remain constant, it would not fluctuate.

Since the forced value appears to fluctuate, it leads me to believe that your HMI is displaying some 'noisy' value other than the forced value 25 because the display register is pointed to some other register holding a value that is fluctuating; the HMI is not displaying the forced value.

The reason for the weird values could be that the HMI is reading only 'half' of the 32 bit floating point value as an integer value. Since the bit pattern of integers and FP do not match up, the resulting value can be way of reasonable range (by many orders of magnitude) or it could be truncated to 0.

If it were a serial problem or noise problem with the 485 communication with corrupted bits, the CRC error check would flag an error and the message and its data would be discarded. Serial communications does not use corrupted data, it discards corrupted data.