问题是关于树莓派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;
答案 0 :(得分:0)
需要记住的是,每次消息到达时都会运行一个功能节点,如果你发送3个单独的消息,它将运行3次。此外,每个函数节点完全独立于其他函数节点,您不能在一个函数中声明一个变量并在另一个函数中使用它(有一个名为Context的东西,但这里并不特别有用)
您实际上并没有显示您的流程,所以我们将不得不在这里猜测一下,但您暗示所有起始值都来自返回多个列的单个SQL查询。如果是这种情况,那么您有2个选项。
只需在一个地方进行所有计算即可一个具有以下功能的节点:
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;
您可以将当前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;