在NODE-RED将3输出转换为一个输入

时间:2018-05-20 16:58:24

标签: node.js raspberry-pi3 node-red

问题是关于树莓派3的Node-RED。我有3个输入,可以加速X,Y,Z轴。我想从这3个输入中输出一个输出。为此,我使用√X^2+Y^2+Z^2公式。根据我的功能,我的输出仍然是3件,并在我调试时给出 NaN 输出。我该怎么做才能使用Freq功能

这是我从我的sql收集X,Y,Z信息。

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;

我试图计算一个输出的函数(Acc to 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 :(得分:0)

需要记住的是,每次消息到达时都会运行一个功能节点,如果你发送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. 您可以将当前3个功能节点的输出运行到Join节点集以收集3个值。这将生成一个新的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;