Hi everyone !
I have a problem with a Socomec I31. It send me a DWord Signed on ModBus and I can't add the two Word for make a Decimal Value.
How I can read my S32 in decimal ?
Thank you !
Hi everyone !
I have a problem with a Socomec I31. It send me a DWord Signed on ModBus and I can't add the two Word for make a Decimal Value.
How I can read my S32 in decimal ?
Thank you !
Feed the value into a debug node and post the result here so we can see exactly what you have
Hi !
This is the result of my debug node :
Blockquote :
msg.payload : array[2]
array[2]
0: 65535
1: 65534
Thanks !
I should think you need something like
msg.payload = (msg.payload[0] << 16) + msg.payload[1]
return msg
Your code return me :
-2
which would be correct for a 32 bit signed int when passed that data.
In hex that is FFFFFFFE which is -2.
I create a function :
msg.payload=parseInt(msg.payload[0]+msg.payload[1] << 16);
return msg;
The message returned is : -3604480
With a Usigned 32 bits it's OK...
I don't understand what you are saying. What result are you trying to get?
You have not made it clear whether everything is now working as you expect. If not the what output are you expecting?
Sorry,
It does'nt work. I expected read 1 500w or even 2 000w...
Well the problem is not in the conversion. The value 0xfffffffe as a 32 bit signed integer is -2. Considering it as an unsigned integer gives a huge number.
Yeah, the MSB is : 65535, but, how do I read those two words correctly ?
I have found the solution.
For me, I read with this function :
msg.payload=(msg.payload[0])+(-msg.payload[1] << 32)
return msg;
And it's work !
In output, it's my value in decimal.
Thanks @Colin
Can you give an example of the data in and out for that formula, I would like to see why it works.