Problems reading modbus REAL from energymeters

Hi!

I´m trying to read values from several Schneider iEM3250 energy meters, all of them giving me the same problem.
Refer to the manual for modbus info: (https://www.se.com/ww/en/product/A9MEM3250/iem3250-energy-meter---ct---modbus/)

For example, on page 60 there's a list of registers for voltages, starting at 3020 and incrementing by 2.
The document says size:2 and type Float32. Each being 16bit value I suppose which then makes sense.

In citect I connect using the MODBUS1 protocol, and addressing them as Holding, function 4 in citect.
So the addresses are 43020, 43022, 43024 ... etc.

All the phase-phase voltages reads good, but only the first two phase-neutral reads good. The last one reports -nan in runtime. (address 43032).

When using a modbus poll program (AVreporter modbus communication tester) I find that the addresses I read from citect varies a lot in value, while the following address stays quite still.
I suppose when addressing REAL citect combines two bytes into a REAL value?

All the addresses that works has a following value of around 17500, but the non-working address has a value of 65470.
I don´t know, but starting to guess that citect expects a signed INT, but gets an unsigned INT a freaks out?

Anyone got an idea?

Regards
Anders

Parents
  • I would advise you to test your communication using some other registers too, preferrably variables that use only 1 modbus register. This is because the address offset difference of 2 you thought you noticed is normally not possible.
    It might well be that you are now mixing registers of 2 different variables to one REAL variable in Citect.

    Switching from MODBUS1 to MODBUS or vice versa should fully correct the address offset of single register variables. In addition you can set the citect.ini parameter [MODBUS]FloatMode to a value between 0 and 3 to correct the byte and word order of REAL (floating point) variables. For LONG (32 bit integer) variables there is a similar parameter called [MODBUS]LongDataType
Reply
  • I would advise you to test your communication using some other registers too, preferrably variables that use only 1 modbus register. This is because the address offset difference of 2 you thought you noticed is normally not possible.
    It might well be that you are now mixing registers of 2 different variables to one REAL variable in Citect.

    Switching from MODBUS1 to MODBUS or vice versa should fully correct the address offset of single register variables. In addition you can set the citect.ini parameter [MODBUS]FloatMode to a value between 0 and 3 to correct the byte and word order of REAL (floating point) variables. For LONG (32 bit integer) variables there is a similar parameter called [MODBUS]LongDataType
Children
No Data