Преобразовать 3 выхода в один вход в NODE-RED - PullRequest
0 голосов
/ 20 мая 2018

Вопрос о Node-RED для Raspberry Pi 3. У меня есть 3 входа, которые дают ускорение по осям X, Y, Z.Я хочу сделать один вывод из этих 3 входов.Для этого я использую формулу √X^2+Y^2+Z^2.Согласно моей функции мой вывод все еще 3 части и дает вывод NaN , когда я отлаживаю.Что я должен делать в соответствии с функцией Freq

Вот мой сбор информации X, Y, Z из моего sql.

var str = msg.payload;
str = str[0]['IX']; // Choose last data from IX column
a = str * 10;   // Scaling the value
msg.payload = a
return msg;

var str = msg.payload;
str = str[0]['IY']; // Choose last data from IY column
b = str * 10;   // Scaling the value
msg.payload = b
return msg;

var str = msg.payload;
str = str[0]['IZ']; // Choose last data from IZ column
c = str * 10;   // Scaling the value
msg.payload = c
return msg;

И функция, которую я пытаюсь вычислить один выход (в соответствии с Freq)

var str = msg.payload;
var a;
var b;
var c;

str = Math.pow(a^2+b^2+c^2);
d = str * 10;
msg.payload = d;
return msg;

enter image description here

1 Ответ

0 голосов
/ 20 мая 2018

Следует помнить, что функциональный узел запускается каждый раз, когда приходит сообщение. Если вы отправите ему 3 отдельных сообщения, он будет запущен 3 раза.Также каждый функциональный узел полностью независим от всех остальных, вы не можете объявить переменную в одном и использовать ее в другом (ну, есть нечто, называемое Context , но здесь это не особенно полезно)

Вы на самом деле не показывали свой поток, поэтому нам придется немного догадаться здесь, но вы подразумеваете, что все начальные значения поступают из одного запроса SQL, который возвращает несколько столбцов.Если это так, то у вас есть 2 варианта.

  1. Просто выполните все вычисления в одном месте, например, в одном функциональном узле со следующими данными:

    var str = msg.payload;
    var strA = str[0]['IX']; // Choose last data from IX column
    var a = strA * 10;   // Scaling the value
    var strB = str[0]['IY']; // Choose last data from IY column
    var b = strB * 10;   // Scaling the value
    var strC = str[0]['IZ']; // Choose last data from IZ column
    var c = strC * 10;   // Scaling the value
    var strC = Math.pow(a^2+b^2+c^2);
    var d = strC * 10;
    msg.payload = d;
    return msg;
    
  2. Вы можете запустить вывод ваших текущих трех узлов функции в узел Join, установленный для сбора трех значений.Это создаст новый объект msg с полезной нагрузкой, содержащей массив из 3 значений.Затем вы можете изменить конечный функциональный узел следующим образом:

    var a = msg.payload[0];
    var b = msg.payload[1];
    var c = msg.payload[2];
    var d = Math.pow(a^2+b^2+c^2) * 10 ;
    msg.payload = d;
    return msg;
    
...