Modbus - %MD from Schneider M221 - FlowMeter Int to Float

Hi there

Newbie of the forum and with Node Red.

I 'm doing a pumpstation dashboard with a raspberry connected to the Schneider PLC. I have managed to connect with the modbus node, and get some register (Int16) without issues, and i'm using the Buffer Parser node to separate the message/value.

Now i'm trying to get the flowmeter value, and the value is stocked in a double word (%MD) which is composed of two value of Int16. The guy who did the program told me the first value is LE and second one is BE.

I'm receiving from the PLC in Node red : [39696,145] which seems to be UInt16. I have managed to converse it to Int16, but the value is conform of the 16b value from the PLC only if is it BE (should be LE for the first one).

Then I have a function doing :

let pay = msg.payload;
const buf = Buffer.allocUnsafe(4);

buf.writeInt16LE(pay[0],0);
buf.writeInt16BE(pay[1],2);

msg.payload = buf.readInt32BE(0);
return msg;

And of course the result should be 9542416 and I have it wrong...

In PLC : %MD84 = 9542416
%MW84 = -25840
%MW85 = 145

In Nodered : array of [2]: 0 : 0x-64f0
1 : 0x91

Anyone could help or give a hint ? Thank you

I found the solution
data are coming in Uint16, then buffer parser to Int16 with "swap 16", and again buffer parser to Int36.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.