Я хочу прочитать данные через красный узел узла Modbus из источника данных. Диапазон от -20000 до 20000, но узел не может обрабатывать отрицательные числа, поэтому мне пришлось преобразовать их в двоичные числа (DWORD), разделить их на младшее и старшее слово и преобразовать эти слова обратно в целые числа.
var low
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
var a = msg.payload
if (a >= 0){
a = dec2bin(a);
a = parseInt(a,2);
} else {
a = dec2bin(a);
a = a.substr(16);
a = parseInt(a,2);
}
low = { payload: a };
return low;
Для визуализации я хочу использовать узлы панели мониторинга, но для этого мне нужно соединить две двоичные строки вместе и преобразовать их в целое число.
Проблема:
node red преобразует их как qword, поэтому двоичное число 1111 1111 1111 1111 1111 1100 0001 1000 воспринимается как 4.294.966.296, а не как -1000. Но если я заполню следующую паузу 1 лаймом, так: 1111 1111 1111 1111 1111 1111 1111 1111 1111 1100 0001 1000 получится 18446744073709552000
Спасибо