Cloud
Topic Author
Posts: 11
Joined: 25 Apr 2018, 03:18
Answers: 0

Node-Red Double Word to 32 bit Int Conversion

01 Nov 2022, 03:29

Hello guys ,

I want to use Node-Red to receive data from codesys via modbus tcp and then send to cloud using MQTT. The original data is a DINT (say -593) in codesys, I split it into two words to Modbus TCP (High word "FFFF" and low word "FDAF").
Now in Node-Red I have received two words in sequence and combined them to a DWORD "FFFFFDAF" , but after I use parseInt in JS I got the number 4294966703, instead of -593. I suppose it is converted into a 64-bit int rather then 32. How can I change it to a 32-bit int? Below is my convert code. Thank you for your support.
Code.png
Code.png (95.25 KiB) Viewed 4270 times
Zhiyao Yin
Best Answerby dfilsinger-erminas » 09 Nov 2022, 10:15
Hello Zhiyao Yin,
basically, you would have to use the two's complement to convert the DWORD into Int.
To get around this, you can convert the result of parseInt() into 32-bit-int by forcing it with a binary operation. In this case, the or operation is always done by parseInt(), so this has no other effects.
code.png
Regards
Dennis from Erminas
Go to full post
 
dfilsinger-erminas
Official 3rd Party Support Erminas
Posts: 6
Joined: 16 Mar 2022, 18:54
Answers: 1

Re: Node-Red Double Word to 32 bit Int Conversion

09 Nov 2022, 10:15

Hello Zhiyao Yin,
basically, you would have to use the two's complement to convert the DWORD into Int.
To get around this, you can convert the result of parseInt() into 32-bit-int by forcing it with a binary operation. In this case, the or operation is always done by parseInt(), so this has no other effects.
code.png
code.png (32.49 KiB) Viewed 3931 times
Regards
Dennis from Erminas
 
Cloud
Topic Author
Posts: 11
Joined: 25 Apr 2018, 03:18
Answers: 0

Re: Node-Red Double Word to 32 bit Int Conversion

11 Nov 2022, 14:19

Hello Zhiyao Yin,
basically, you would have to use the two's complement to convert the DWORD into Int.
To get around this, you can convert the result of parseInt() into 32-bit-int by forcing it with a binary operation. In this case, the or operation is always done by parseInt(), so this has no other effects.
code.png

Regards
Dennis from Erminas
Got it. Thanks Dennis.

Who is online

Users browsing this forum: No registered users and 0 guests