并行递增 2 个变量的 Node-RED

Increment 2 variables in paralell Node-RED

我正在尝试创建一个脚本来创建 2 个变量,并根据条件递增每个变量。 actualNetWeight 是通过与服务器的 MQTT 连接实时接收的,并且这些值显示在折线图中。当这个值大于或等于 0.500 时,我必须将该项目条目计为“ok”项目,如果它低于 0.500,我应该将其计为“under”项目。问题是像我在代码中那样初始化这些变量,每次收到新值时将它们重置为 0,使计数器仅在满足条件时从 0 变为 1,而在条件不满足时返回 0遇见了。所以从逻辑上讲,这个脚本是有效的,但它只做了一半的工作。我尝试了许多不同的方法来解决这个问题,但似乎无法获得所需的结果。我也查看了 Node-RED 论坛,但在线上几乎没有关于此工具的有用信息。

var ok = 0;
var under = 0;
var scartoTotale;
var actualNetWeight = msg.payload.actualNetWeight.value;
var numeroPezziTot = msg.payload.identity;

if(actualNetWeight >= 0.500)
{
    ok++;
}
else
{
    under++;
    scartoTotale += (0.500 - actualNetWeight);
}

msg.payload.ok = ok;
msg.payload.under = under;
msg.payload.scartoTotale = scartoTotale;
return msg;

'msg' 是 Node-RED 的标准,有效负载是我从服务器获得的响应,我从服务器接收数据。

要记住的重要一点是,每次有新消息到达输入时,功能节点中的代码都会 运行。

因此前两行总是将 okunder 变量设置为 0。

如果你想在消息之间存储状态,那么你需要使用所谓的上下文。详情在这里 https://nodered.org/docs/user-guide/writing-functions#storing-data

要修复您的代码,您需要进行如下更改:

var ok = context.get('ok')||0;;
var under = context.get('under')||0;;
var scartoTotale;
var actualNetWeight = msg.payload.actualNetWeight.value;
var numeroPezziTot = msg.payload.identity;

if(actualNetWeight >= 0.500)
{
    ok++;
}
else
{
    under++;
    scartoTotale += (0.500 - actualNetWeight);
}

context.set('ok', ok)
context.set('under', under)

msg.payload.ok = ok;
msg.payload.under = under;
msg.payload.scartoTotale = scartoTotale;
return msg;