我一直试图在Azure IOT Edge的自定义模块中检索OPC仿真服务器生成的传感器数据( excel文件中列出的数据,OPC仿真读取的数据)。当记录在控制台中的数据时,它会显示数据没有按顺序记录。下面是作为一个模块托管在物联网边缘的JSON。
"OPCPublisher": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/iotedge/opc-publisher:2.8",
"createOptions": {
"Hostname": "publisher",
"Cmd": [
"publisher",
"--pf=/appdata/publishednodes.json",
"--lf=/appdata/publisher.log",
"--aa"
],
"HostConfig": {
"Binds": [
"/home/sineth/iiotedge:/appdata"
]
}
}
}
}以下是网关设备中已发布的节点json。

以下是我的excel工作表数据的屏幕截图

但是order不会将数据路由到模块,以便从任何地方()开始,而是按顺序()。例如,它从行开始发送值11 ( Tag11 ),然后再发送下一行(标记11的值为17 ),有时还发送一批数据。没有适当的命令。这不是OPC服务器模拟的问题,因为我已经用一个独立的OPC客户端测试了模拟服务器,并且它得到了有序的数据。Excel由仿真服务器读取。下面的图片是我的IoT边缘模块(Python)的屏幕截图,我将数据记录到控制台从OPC路由检索。

感谢你在这方面的任何帮助。非常感谢。
发布于 2021-08-14 13:00:48
在这里添加来自GitHub问题讨论的摘要:
receive_on_message_input,请参阅API文档。如果没有复制,所有的值更改都是有序的,但操作仍然不需要这种行为。
多个消息(包含所有三个标记的值更改)被批处理。
OPC发布者试图优化成本和性能,一次发送每个消息都不是它们,但是可以通过将批处理大小设置为一个直接发送数据的方式配置OPC Publisher。
命令行参数--bs=1
不从第一个值开始
OPC建立到OPC服务器的连接,并为其配置文件中的每个OPC节点创建受监视的项。默认情况下,OPC监视项将发送带有当前值的默认通知。如果您想忽略它,可以先使用skip。
命令行参数--sk=true
但在上述情况下,第一个值也是相关的。如果第一条消息(message = 1)不包含第一个值,那么OPC服务器模拟之前会更改它们。
请注意,OPC发布服务器只能在完全建立OPC UA客户机/服务器连接(包括信任证书)、订阅和监视项创建之后才能发布。这一次也取决于OPC UA服务器和网络的性能。
提案:
多次检索相同的消息
如果多次接收消息,则从一个IoT边缘模块到另一个边缘模块的消息路由可能会出现错误。请确保显式地命名发送模块(在本例中是OPC发布服务器)
"$edgeHub": {
"properties.desired": {
"schemaVersion": "1.2",
"routes": {
"opcPublisherToPyDataConsumer": "FROM /messages/modules/opc-publisher INTO BrokeredEndpoint(\"/modules/PyDataConsumer/inputs/fromOPC\")"
}
}
}发布于 2021-08-02 23:35:19
所以有些问题:
https://stackoverflow.com/questions/68591571
复制相似问题