文档｜EdgeX 设备微服务之 OPC-UA -- device-opcua 完整使用手册
EdgeX Foundry （以下统一简称：EdgeX）设备微服务 device-opcua 由我司根据已有代码优化后贡献给社区，文档也是必不可少的环节，社区要求英文，现翻译成中文，方便国内客户阅读和使用。 目的 入门 配置 协议属性 API 参考 源代码 目的 该服务的目的是将 OPC-UA 设备连接到 EdgeX。 入门 本页介绍如何将 OPC-UA 设备连接到 EdgeX。 在此示例中，我们使用模拟器来实现（OPC UA Simulation Server）。 这提供了一种测试设备服务功能的简单方法。 环境 您可以使用任何可以安装 docker 和 docker-compose 的操作系统。 在本例中，我们使用 Ubuntu 使用 docker 部署 EdgeX。 设置 Prosys OPC UA Simulation Server 设备 !!! warning "警告" 本页面并不是设置 OPC-UA 设备的完整指南，仅介绍了几个重要步骤供参考。 下载 Prosys OPC UA 模拟服务器 从 OPC UA 模拟服务器下载 下载最新版本的 OPC UA Simulation Server Download。 安装模拟服务器 启动模拟服务器 验证模拟服务器 Status 复制连接地址(UA TCP)值：opc.tcp://jiekemacbookpro14.lan:53530/OPCUA/SimulationServer Objects 启动微服务之前 以下部分介绍如何在启动服务之前完成设置。 使用预定义的配置进行测试 设置新配置 使用预定义的配置进行测试 文件夹中的预定义配置：cmd/res/ 预定义 Device Profile 设备配置 Device Profile profiles/Simple-Driver.yaml 描述了一个 OPC-UA 设备，它包含 3 个资源，如下所示： name: OPCUA-Server manufacturer: Prosys model: Simlulator labels: - OPCUA - TEST description: Simulation OPCUA Server deviceResources: - name: Constant description: generated constant number properties: valueType: Float64 readWrite: RW attributes: nodeId: ns=3;i=1001 - name: Counter description: generated counter number properties: valueType: Int32 readWrite: R attributes: nodeId: ns=3;i=1002 - name: Random description: generated random number properties: valueType: Float64 readWrite: R attributes: nodeId: ns=3;i=1003 deviceCommands: - name: ConstantNum isHidden: false readWrite: RW resourceOperations: - deviceResource: Constant defaultValue: 0.0 - name: CounterNum isHidden: false readWrite: R resourceOperations: - deviceResource: Counter defaultValue: 0 - name: RandomNum isHidden: false readWrite: R resourceOperations: - deviceResource: Random defaultValue: 0.0 该表描述了设备配置文件的每个资源： Resource Name valueType of EdgeX nodeId Description Constant Float64 ns=3;i=1001 generated constant number Counter Int32 ns=3;i=1002 generated counter number Random Float64 ns=3;i=1003 generated random number 预定义设备配置 Device Configuration 设备配置 Device Configuration devices/Simple-Devices.yaml 描述了如下所示的两种设备。 deviceList: - name: SimulationServer profileName: OPCUA-Server description: OPCUA device labels: - OPCUA - TEST protocols: opcua: Endpoint: 'opc.tcp://192.168.123.21:53530/OPCUA/SimulationServer' 设置一个新的配置 Configuration 创建自定义配置文件夹 运行以下命令： mkdir -p custom-config 设置新的设备配置 Device Profile 运行以下命令来创建您的设备配置文件： cd custom-config vi new-device-profile.yaml 插入您的设备配置文件定义，这取决于您的 OPC-UA 设备配置。 设置设备服务配置 Configuration cd custom-config vi new-device-config.yaml 填写 new-device-config.yaml 文件。 准备 docker-compose 文件 生成 docker compose 文件 Clone edgex-compose git clone https://github.com/edgexfoundry/edgex-compose.git 生成 docker-compose.yml 文件 cd edgex-compose make gen no-secty ds-opcua 将自定义配置添加到 docker-compose 文件 将准备好的配置文件添加到 docker-compose 文件中，您可以使用卷挂载它们并更改 device-opcua 内部使用的环境。 打开 docker-compose.yml 文件，然后添加卷路径和环境，如下所示： device-opcua: ... environment: ... DEVICE_PROFILESDIR: /custom-config DEVICE_DEVICESDIR: /custom-config volumes: ... - /path/to/custom-config:/custom-config 在 Docker 上启动 EdgeX Foundry 由于我们在上一步中生成了 docker-compose.yml 文件，因此我们可以部署 EdgeX，如下所示： cd edgex-compose/compose-builder docker compose -p edgex up -d [+] Running 12/12 ✔ Container edgex-core-consul Started 0.0s ✔ Container edgex-ui-go Started 0.0s ✔ Container edgex-redis Started 0.0s ✔ Container edgex-core-common-config-bootstrapper Started 0.1s ✔ Container edgex-support-scheduler Started 0.0s ✔ Container edgex-kuiper Started 0.0s ✔ Container edgex-support-notifications Started 0.1s ✔ Container edgex-core-metadata Started 0.1s ✔ Container edgex-core-command Started 0.0s ✔ Container edgex-core-data Started 0.0s ✔ Container edgex-app-rules-engine Started 0.0s ✔ Container edgex-device-opcua Started 0.0s 启动服务后设置 如果服务已在运行并且您想要添加设备，则可以使用本节中概述的“核心元数据 API”。 如果您按照启动服务之前的设置中的说明设置设备配置文件和服务，则可以跳过此部分。 要在启动服务后添加设备，请完成以下步骤： 使用 POST 将上面的设备配置文件上传到元数据：http://localhost:59881/api/v3/deviceprofile/uploadfile ，并以表单数据格式将文件作为密钥“文件”添加到正文，以及创建的 ID 将被退回。 以下示例命令使用 curl 发送请求： curl http://localhost:59881/api/v3/deviceprofile/uploadfile -F "file=@new-device-profile.yml" 确保 OPC-UA 设备服务正在运行，如有必要或使用其他设备服务，请调整下面的服务名称以匹配。 使用 POST 将设备添加到 http://localhost:59881/api/v3/device，正文将类似于： curl http://localhost:59881/api/v3/device -H "Content-Type:application/json" -X POST \ -d '[ { "apiVersion" : "{{api_version}}", "device" : { "adminState" : "UNLOCKED", "description" : "OPCUA device", "labels" : [ "OPCUA", "TEST" ], "name" : "SimulationServer1", "operatingState" : "UP", "profileName" : "OPCUA-Server", "protocols" : { "opcua" : { "Endpoint" : "opc.tcp://192.168.123.21:53530/OPCUA/SimulationServer" } }, "serviceName" : "device-opcua" } } ]' 服务名称必须匹配/引用目标设备服务（“device-opcua”），并且配置文件名称必须与前面步骤中的设备配置文件名称("OPCUA-Server") 执行命令 现在我们准备运行一些命令。 查找可执行命令 使用以下查询查找可执行命令： curl http://localhost:59882/api/v3/device/name/SimulationServer1 | json_pp { "apiVersion": "v3", "deviceCoreCommand": { "coreCommands": [ { "get": true, "name": "ConstantNum", "parameters": [ { "resourceName": "Constant", "valueType": "Float64" } ], "path": "/api/v3/device/name/SimulationServer1/ConstantNum", "set": true, "url": "http://edgex-core-command:59882" }, { "get": true, "name": "CounterNum", "parameters": [ { "resourceName": "Counter", "valueType": "Int32" } ], "path": "/api/v3/device/name/SimulationServer1/CounterNum", "url": "http://edgex-core-command:59882" }, { "get": true, "name": "RandomNum", "parameters": [ { "resourceName": "Random", "valueType": "Float64" } ], "path": "/api/v3/device/name/SimulationServer1/RandomNum", "url": "http://edgex-core-command:59882" }, { "get": true, "name": "Constant", "parameters": [ { "resourceName": "Constant", "valueType": "Float64" } ], "path": "/api/v3/device/name/SimulationServer1/Constant", "set": true, "url": "http://edgex-core-command:59882" }, { "get": true, "name": "Counter", "parameters": [ { "resourceName": "Counter", "valueType": "Int32" } ], "path": "/api/v3/device/name/SimulationServer1/Counter", "url": "http://edgex-core-command:59882" }, { "get": true, "name": "Random", "parameters": [ { "resourceName": "Random", "valueType": "Float64" } ], "path": "/api/v3/device/name/SimulationServer1/Random", "url": "http://edgex-core-command:59882" } ], "deviceName": "SimulationServer1", "profileName": "OPCUA-Server" }, "statusCode": 200 } 执行设置命令 根据url和parameterNames执行 SET 命令，运行 SET 命令时将localhost替换为服务器 IP。 这里我们使用“heartbeat”命令： curl http://localhost:59882/api/v3/device/name/SimulationServer1/Constant \ -H "Content-Type:application/json" -X PUT \ -d '{"Constant": "199.99"}' {"apiVersion":"v3","statusCode":200} 执行获取命令 运行 GET 命令时，将 localhost 替换为服务器 IP。 这里我们使用“heartbeat”命令： curl http://localhost:59882/api/v3/device/name/SimulationServer1/Constant { "apiVersion": "v3", "event": { "apiVersion": "v3", "deviceName": "SimulationServer1", "id": "cc8ea84d-0a5f-4d5b-b4db-9126368f4aa3", "origin": 1702613269923352589, "profileName": "OPCUA-Server", "readings": [ { "deviceName": "SimulationServer1", "id": "5c1ea763-bb50-4837-b78c-8ef1c2ed0035", "origin": 1702613269921, "profileName": "OPCUA-Server", "resourceName": "Constant", "value": "1.999900e+02", "valueType": "Float64" } ], "sourceName": "Constant" }, "statusCode": 200 } 自动事件 AutoEvent 在设备定义文件的 autoEvents 部分中定义： deviceList: autoEvents: interval: '30s' onChange: false sourceName: 'Constant' 服务启动后，查询 core-data API。 结果显示该服务每“30 秒”自动执行一次命令。 配置 OPC-UA 设备服务具有以下配置来实现 OPCUAServer 协议。 OPCUAServer 示例如下图： # configuration.yml OPCUAServer: DeviceName: SimulationServer Policy: None Mode: None CertFile: '' KeyFile: '' Writable: Resources: 'Counter,Random' Configuration Default Value Description DeviceName SimmulationServer Device name of OPC-UA Policy None Security Policy of OPC-UA- None- Basic128Rsa15- Basic256- Basic256Sha256- Aes128Sha256RsaOaep- Aes256Sha256RsaPss Mode None Security Mode of OPC-UA-None- Sign- SignAndEncrypt CertFile none Cert file of OPC-UA, path to cert.pem KeyFile none Key file of OPC-UA, path to private key.pem Writable.Resources none Subscritions of OPC-UA 协议属性 设备为 opcua 定义以下协议属性。 这些属性位于每个设备定义的协议部分中的“opcua”键下。 Property Description Endpoint The Connection Address(UA TCP) of OPC-UA server !!! example "opcua 协议属性示例" ```yaml ... protocols: opcua: Endpoint: "opc.tcp://jiekemacbookpro14.lan:53530/OPCUA/SimulationServer" ``` API 参考 该服务继承了 SDK 中的通用设备服务 API API。 源代码 Device Service OPC-UA 的源代码可以在 https://github.com/edgexfoundry/device-opcua 中找到（社区还未合并，目前在 https://github.com/yiqisoft/device-opcua-go/tree/refactor-v3 ）。 关于我们 !!! success "亿琪软件" 上海亿琪软件有限公司成立于 2016 年，专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域，致力于物联网领域前沿技术的创新，为用户提供全方位、智能化和安全的物联网解决方案。 2023 年，公司发布“YiFUSION ｜工业边缘智能融合一体机”产品，为工业客户提供一整套的边缘计算+AI 能力：高性能数据采集、多类型数据融合、AI 算法集成、云端业务对接。在边缘网关的基础上，集成了 IoT 平台的边缘协同能力、本地 Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。 2022 年，公司推出 “YiCLOUD ｜亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域，公司软硬件产品和解决方案获得华为技术认证，得到中国移动 OCP 认证，公司还是边缘计算产业联盟 ECC 成员。 !!! tip "关注我们" !!! warning "联系我们--商业服务" 网站：http://yiqisoft.cn 邮件：support@yiqisoft.cn 电话：021-68863086 手机：186-1666-9123
EdgeX Foundry 边缘计算框架的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。 OPC-UA Micro Service - 用于 OPC-UA 设备连接到 EdgeX 的设备服务。 01 介绍 EdgeX Foundry 边缘计算框架的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。 OPC-UA Micro Service - 用于 OPC-UA 设备连接到 EdgeX 的设备服务。 02 技术要点 工业互联网应用场景中，OPC-UA 是非常常见的工业控制设备，边缘计算框架 EdgeX 对于其驱动一直在 EdgeX Foundry 社区没有开源支持，我司经过项目的验证和长期的维护，在社区原有项目基础之上进行了 V3.2.0 版本驱动的移植和扩展。 本开源 EdgeX 设备驱动使用 github.com/goopcua/opcua 作为基础库，在基于 EdgeX device-sdk-go 的框架下，完成了驱动的开发和验证。 03 版本支持 本次开源的 EdgeX 驱动支持 EdgeX v3.x（最新版本，且持续更新和维护）。 开源代码：https://github.com/edgexfoundry-holding/device-opcua-go 04 使用文档 预计发布在：https://docs.edgexfoundry.org/3.1/microservices/device/services/device-opcua，敬请期待。 05 产品应用 EdgeX 框架应用于我司的边缘计算产品 YiEDGE（边缘计算软件） 和 YiFUSION（工业边缘智能融合网关）。 YiFUSION: 边缘融合智能网关是指具备边缘计算、智能分析、数据融合等功能的智能网关，能够在边缘侧实现数据采集、处理、分析、融合和应用，为用户提供更加智能、高效和低成本的服务。 简洁定义 英文名称：YiFUSION 中文名称：工业边缘智能融合网关 产品形态：软硬件一体机 硬件架构：X86/ARM/超融合/国产化 软件架构：全微服务化 关于我们 "亿琪软件" 上海亿琪软件有限公司成立于 2016 年，专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域，致力于物联网领域前沿技术的创新，为用户提供全方位、智能化和安全的物联网解决方案。 2023 年，公司发布“YiFUSION ｜工业边缘智能融合一体机”产品，为工业客户提供一整套的边缘计算+AI 能力：高性能数据采集、多类型数据融合、AI 算法集成、云端业务对接。在边缘网关的基础上，集成了 IoT 平台的边缘协同能力、本地 Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。 2022 年，公司推出 “YiCLOUD ｜亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域，公司软硬件产品和解决方案获得华为技术认证，得到中国移动 OCP 认证，公司还是边缘计算产业联盟 ECC 成员。 "联系我们--商业服务" 网站：http://yiqisoft.cn 邮件：support@yiqisoft.cn 电话：021-68863086 手机：186-1666-9123
目录 01 介绍 02 技术要点 03 版本支持 04 产品应用 关于 亿琪软件 欢迎关注 EdgeX Foundry 中文社区公众号，及时获取最新资料和分享。 01 介绍 EdgeX Foundry 边缘计算框架的分层和服务为边缘设备/节点和云/企业应用之间提供了一个双向转换引擎。EdgeX 作为边缘计算平台是非常不错的选择。 S7 Micro Service - 用于通过 ISO-on-TCP 将西门子 S7（S7-200、S7-300、S7-400、S7-1200、S7-1500）设备连接到 EdgeX 的设备服务。 02 技术要点 工业互联网应用场景中，Siemens S7 PLC 是非常常见的工业控制设备，边缘计算框架 EdgeX 对于其驱动一直在 EdgeX Foundry 社区没有开源支持，我司经过项目的验证和长期的维护，保证了 S7 驱动的稳定性。 本开源 EdgeX 设备驱动采用了 Gos7(https://github.com/robinson/gos7) 底层驱动为基础，在基于 EdgeX device-sdk-go(https://github.com/edgexfoundry/device-sdk-go) 的框架下，完成了驱动的开发和验证。 03 版本支持 本次开源的 EdgeX 驱动支持 EdgeX v2.x（早期版本） 和 EdgeX v3.x（最新版本，且持续更新和维护）。 开源代码： EdgeX v2.x: https://github.com/yiqisoft/device-s7/tree/v2 EdgeX v3.x: https://github.com/edgexfoundry-holding/device-s7 04 产品应用 EdgeX 框架应用于我司的边缘计算产品 YiEDGE（边缘计算软件） 和 YiFUSION（工业边缘智能融合网关）。 YiFUSION: 边缘融合智能网关是指具备边缘计算、智能分析、数据融合等功能的智能网关，能够在边缘侧实现数据采集、处理、分析、融合和应用，为用户提供更加智能、高效和低成本的服务。 简洁定义 英文名称：YiFUSION 中文名称：工业边缘智能融合网关 产品形态：软硬件一体机 硬件架构：X86/ARM/超融合/国产化 软件架构：全微服务化 关于 亿琪软件 上海亿琪软件有限公司成立于2016年，专注于 5G 通信、AI 人工智能、边缘计算和大数据网络安全多项技术领域，致力于物联网领域前沿技术的创新，为用户提供全方位、智能化和安全的物联网解决方案。 2023年，公司发布“YiFUSION｜工业边缘智能融合一体机”产品，为工业客户提供一整套的边缘计算+AI能力：高性能数据采集、多类型数据融合、AI算法集成、云端业务对接。在边缘网关的基础上，集成了 IoT 平台的边缘协同能力、本地Web SCADA 和 HMI 功能、本地数据存储、边缘 AI 视频分析、行业应用集成等。 2022年，公司推出 “YiCLOUD｜亿琪云”一站式物联网应用解决方案。公司的业务涵盖了智慧城市、智慧农业、智能工厂和智慧园区等多个领域，公司软硬件产品和解决方案获得华为技术认证，得到中国移动OCP认证，公司还是边缘计算产业联盟ECC成员。 感知物联，畅快无限。 联系我们 网站：http://yiqisoft.cn 邮件：support@yiqisoft.cn 电话：021-68863086 手机：186-1666-9123