并行增加 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】:要记住的重要一点是,每次有新消息到达输入时,函数节点中的代码都会运行。
所以前两行将始终将ok
和under
变量设置为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的主要内容,如果未能解决你的问题,请参考以下文章