并行增加 2 个变量 Node-RED

Posted

技术标签:

【中文标题】并行增加 2 个变量 Node-RED【英文标题】:Increment 2 variables in paralell Node-RED 【发布时间】:2022-01-18 13:38:01 【问题描述】:

我正在尝试创建一个创建 2 个变量并根据条件递增每个变量的脚本。通过与服务器的 MQTT 连接实时接收实际 NetWeight,并以折线图显示值。当这个值大于或等于 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 的标准,有效负载是我从服务器获得的响应,我从中接收数据。

【问题讨论】:

【参考方案1】:

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

所以前两行将始终将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;

【讨论】:

是的,这正是我修复它所做的。我在 Node red 论坛的一个无关主题中发现了上下文使用情况,并从那里获取了它。虽然花了我很多时间。我只是来这里结束这个问题,因为我认为没有人会回答,但找到了你的答案。无论哪种方式都非常感谢您!为您的答案投票并将其标记为解决方案。再次感谢您的回答和您的时间

以上是关于并行增加 2 个变量 Node-RED的主要内容,如果未能解决你的问题,请参考以下文章

python--并行计算

并行程序没有速度增加与线性程序

使用 C 和并行化在 R 中快速关联

Spark 并行度

强制同时修改变量 (C++)

Camunda 动态增加会签