【问题标题】:Increment 2 variables in paralell Node-RED并行增加 2 个变量 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 的标准,有效负载是我从服务器获得的响应,我从中接收数据。

【问题讨论】:

    标签: javascript mqtt 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 论坛的一个无关主题中发现了上下文使用情况,并从那里获取了它。虽然花了我很多时间。我只是来这里结束这个问题,因为我认为没有人会回答,但找到了你的答案。无论哪种方式都非常感谢您!为您的答案投票并将其标记为解决方案。再次感谢您的回答和您的时间
    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多