火花塞 B 和 BIRTH 主题

Sparkplug B and BIRTH topics

我在 Sparkplug B SCADA 主机上工作,希望了解 Sparkplug B SCADA 主机如何与它感兴趣的 Sparkplug B EoN 节点和设备保持同步。我关心的是什么这里是 EoN 节点和设备的元数据,如他们的 NBIRTH 和 DBIRTH 主题所述。

场景是:

  1. 最初,一个EoN节点已经上线,并发布了它的NBIRTH 话题。 SCADA 主机处于离线状态,因此它看不到 NBIRTH。

  2. SCADA 主机上线。它不知道 EoN 节点上的指标。

我在 Sparkplug B 规范中没有看到任何建议 SCADA 主机如何让 EoN 节点再次发送其 NBIRTH 主题的内容。有 Rebirth 指标,它将要求重新发布 BIRTH 主题,但我不确定这是不是所有 Sparkplug B 实现都支持的东西。

有人向我建议,当 SCADA 主机上线时,它会发布一个 STATE 主题以表明这已经发生,并且 EoN 节点会看到这个并且节点会再次发布其 NBIRTH 主题。但是,我没有在 Sparkplug B 规范中看到这种行为。

主要应用程序(您称之为 SCADA 主机)发送 NCMD 消息告诉 EON 重新发布其 NBIRTH 和 DBIRTH(s),详见 https://www.eclipse.org/tahu/spec/Sparkplug%20Topic%20Namespace%20and%20State%20ManagementV2.2-with%20appendix%20B%20format%20-%20Eclipse.pdf 第 66 页第 17.5 节。更多细节可能隐藏在该规范的其他地方。 您可以与客户一起测试所有这些,例如。我们的免费 Sparkplug 实验室 https://mqttlab.iotsim.io/sparkplug

这个话题真的很长。

首先,有一条NBIRTH记录。它有两个计数器,bdseq 和 seq 计数器。 bdseq 是在每个 MQTT 连接之前选择的“随机”数字。它也包含在“Last Will and Testament”记录中,因此当发生 MQTT 断开连接时,将生成 NDEATH 记录并且可以关联 bdseq,并且只有在它们匹配时才被监听。

接下来,NBIRTH 记录开始第二个 'seq',这是一个无符号字节,并将其设置为 0。

在收到 NDATA 记录时,您需要首先检查 bdseq 是否与您最近的 NBIRTH 值匹配,然后检查序列是否比收到的最后一条消息大一。如果不是,则消息顺序不对,是时候发出节点控制重生命令了。

您确实需要深入研究规范以获取完整的详细信息。

https://www.eclipse.org/tahu/spec/Sparkplug%20Topic%20Namespace%20and%20State%20ManagementV2.2-with%20appendix%20B%20format%20-%20Eclipse.pdf