首页 > 解决方案 > OPC Publisher - 发布时从节点过滤值

问题描述

我最近在我们的一台机器上设置了 IoT Edge,并安装了 OPC Publisher 并将其连接到我们的一台 opc-ua 服务器。我让它正确地发布节​​点并将它们路由到 iot 集线器,这太棒了。虽然我现在遇到了以下问题:

这就是我们的节点结构看起来像 atm 的样子。(匿名):

节点结构

我们要求 OPC Publisher 发布 OPC-UA_COMM.OUT 节点。发布节点配置如下所示:

[
    {
        "EndpointUrl": "{opcuaConnectionString}",
        ...
        "OpcNodes": [
            {
                "Id": "ns=3;s=\"OPC-UA_COMM\".\"OUT\"",
                "DisplayName": "OUT Message",
                "SkipFirst": false
            }
        ]
    }
]

问题是,温度值非常嘈杂,目前并不相关。我希望能够将其过滤掉,这样我就不会在每次该值更改时都发布节点。

我已阅读文档,似乎可以配置发送的 json 消息的内容。似乎可以过滤掉特定的值,尽管我还没有成功。我创建了以下配置文件:


{
    "Defaults": {
        "EndpointUrl": {
            "Publish": true,
            "Pattern": "(.*)",
            "Name": "EndpointUrl"
        },
        "NodeId": {
            "Publish": true,
            "Name": "NodeId"
        },
        "MonitoredItem": {
            "Flat": true,
            "ApplicationUri": {
                "Publish": true,
                "Name": "ApplicationUri"
            },
            "DisplayName": {
                "Publish": true,
                "Name": "DisplayName"
            }
        },
        "Value": {              
            "SourceTimestamp": {
                "Publish": true,
                "Name": "SourceTimestamp"
            },
            "StatusCode": {
                "Publish": false,
                "Name": "StatusCode"
            },
            "Status": {
                "Publish": false,
                "Name": "Status"
            },
            "Value:": {  
                "Temperature": {
                    "Publish": false,
                    "Name": "Temperature"
                },
                "DoorsOpen": {
                    "Publish": true,
                    "Name": "DoorsOpen"
                }
            }
        }
    }
}

我将它添加到容器中,验证文件在那里,并确保发布者模块以正确的设置启动。这是容器创建选项的样子:

{
 "Hostname": "publisher",
 "Cmd": [
   "OPCPublisher",
   "--tc=/appdata/nodeConfiguration.json",
   "--pf=/appdata/opcPublisher.json",
   "--tp=/appdata/pki/trusted",
   "--rp=/appdata/pki/rejected",
   "--ap=/appdata/pki/own",
   "--ip=/appdata/pki/issuer",
   "--aa",
   "--to",
   "--di=600"
 ],
 "HostConfig": {
   "Binds": [
     "/etc/iotedge/storage/publisher:/appdata"
   ]
 }
}

但是,它仍然在发布!我真的很感激一些帮助。

我也明白我可以把它分成多个不同的发布。我尝试过这样的事情:

[
    {
        "EndpointUrl": "{opcuaConnectionString}",
        ...
        "OpcNodes": [
            {
                "Id": "ns=3;s=\"OPC-UA_COMM\".\"OUT\".\"DoorsOpen\"",
                "DisplayName": "Doors open",
                "SkipFirst": false
            },
            {
                "Id": "ns=3;s=\"OPC-UA_COMM\".\"OUT\".\"Speed\"",
                "DisplayName": "Speed",
                "SkipFirst": false
            },
            {
                "Id": "ns=3;s=\"OPC-UA_COMM\".\"OUT\".\"Weight\"",
                "DisplayName": "Weight",
                "SkipFirst": false
            }
            ...
        ]
    }
]

它有效!我可以控制哪些子值到达。但是它们每个都是分开的,我更愿意将它们全部放在一个节点中。

标签: azure-iot-hubopc-uaazure-iot-edge

解决方案


推荐阅读