概述
AWS IoT 是 AWS 云服务中的物联网服务和解决方案,能够连接和管理数十亿台设备,这些设备在连接到 AWS IoT后,即可利用 AWS 提供的云服务实现完整的物联网解决方案,如数据存储、分析、机器学习和行业价值洞察。 将工业设备连接至AWS IoT需要基于AWS IoT设备开发工具包(SDK)构建边缘网关应用,这需要较为复杂的开发工作。本次发布的AwsIotDeviceAgent结合凌顶其他边缘应用软件,能够快速的实现工业设备和AWS IoT Core的交互,从而为终端用户提供开箱即用的解决方案。 AwsIotDeviceAgent提供的服务:
- 通过简单的配置即可将边缘网关连接到 AWS IoT Core。
- 提供从设备到云的数据遥测,将边缘网关内置 MDC OPCUA 服务器的标签数据持续上报到 AWS IoT Core。
- 提供从云到设备的远程控制,如读写工业设备参数,访问边缘网关内部数据库,远程执行网关软件等。
应用架构
凌顶边缘网关通过各类网络接口连接到工业设备的控制系统,通过 MDC OPCUA 服务器获取设备的实时生产数据,然后连接至AWS IoT Core,实现和云端的数据交互。
应用演示
演示步骤:
- 在AWS IoT Core 中创建物品,设置访问策略和获取证书文件。
- 使用 MDC OPCUA服务器的设备模拟驱动模拟一组变化的设备实时生产数据。
- 配置AwsIotDeviceAgent的定时遥测和值变化遥测,将数据上报到AWS IoT Core。
- 通过AwsIotDeviceAgent的日志查看遥测消息,通过AWS IoT 提供的MQTT客户端查看消息。
- 通过AWS IoT 提供的MQTT客户端主动读取OPCUA标签值。
- 通过AWS IoT 提供的MQTT客户端主动修改OPCUA标签值。
步骤一:在AWS IoT Core 中创建物品,设置访问策略和获取证书文件
- 在左侧控制面板选择【管理】【物品】,在右侧页面点击【创建物品】。
- 输入【物品名称】,如EP31010(Edge模块的序列号)。点击【下一步】。
- 下载所有证书和密钥文件。下载后点击【已完成】。后续我们需要使用到的是设备证书和私有密钥文件。
- 点击进入物品EP31010的属性页面,切换到【交互】页面,点击【查看设置】。
- 获取设备的【终端节点】,复制字符串到文本文件,后续在配置AwsIotDeviceAgent时需要使用。
在本页面中为 a31wmfqq9hucsv.ats.iot.cn-north-1.amazonaws.com.cn
- 进入【安全】【策略】页面,点击【创建策略】,创建访问策略。
- 在创建策略页面,输入【策略名称】,如EdgeAccessPolicy,点击【JSON】,切换到策略文档编辑页面。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish",
"iot:Receive",
"iot:RetainPublish"
],
"Resource": [
"arn:aws-cn:iot:cn-north-1:865810612014:topic/${iot:ClientId}/PreDefinedTelemetry/*",
"arn:aws-cn:iot:cn-north-1:865810612014:topic/${iot:ClientId}/direct_method/*/c2d_request",
"arn:aws-cn:iot:cn-north-1:865810612014:topic/${iot:ClientId}/direct_method/*/c2d_response"
]
},
{
"Effect": "Allow",
"Action": "iot:Subscribe",
"Resource": [
"arn:aws-cn:iot:cn-north-1:865810612014:topicfilter/${iot:ClientId}/direct_method/*/c2d_request",
"arn:aws-cn:iot:cn-north-1:865810612014:topicfilter/${iot:ClientId}/direct_method/*/c2d_response"
]
},
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": [
"arn:aws-cn:iot:cn-north-1:865810612014:client/${iot:ClientId}",
"arn:aws-cn:iot:cn-north-1:865810612014:client/${iot:ClientId}_*"
]
}
]
}
- 关于策略资源的用途,这些策略用于服务AwsIotDeviceAgent软件的对应功能。
步骤二:使用 MDC OPCUA服务器的设备模拟驱动模拟一组变化的设备实时生产数据
- 打开EdgePlant,连接到Edge网关,配置 MDC OPCUA 服务器,创建模拟设备。
- 创建三个模拟数据TempCur、TempSet、Count,下载配置文件。
TempCur:在0~200之间的随机值,只读。
TempSet:可读可写,不启用模拟。
Count:0~65535,每隔1秒增1,只读。
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<MDC_OPCUA_SERVER_Project Name="Project" CreateTime="2022-03-08 13:15:00" Comment="默认项目配置">
<Group Name="Group" Enable="1" Comment="组别1">
<Device Name="SIMU" Protocol="Simulator" Enable="1" Comment="" Parm="DataCoding=8 ByteOrder=BigEndian">
<Item Name="TempCur" Alias="" UA_Type="UA_Int16" Enable="1" Writable="0" Comment="" Parm="Area=D||Offset=0||BitNo=0||StringLength=0||InitValue=0||SimEnable=1||SimMode=rand||SimInterval=1000||ValueMin=0||ValueMax=200||IncValue=1||ValueList=" />
<Item Name="TempSet" Alias="" UA_Type="UA_Int16" Enable="1" Writable="1" Comment="" Parm="Area=D||Offset=2||BitNo=0||StringLength=0||InitValue=0||SimEnable=0||SimMode=rand||SimInterval=1000||ValueMin=0||ValueMax=200||IncValue=1||ValueList=" />
<Item Name="Count" Alias="" UA_Type="UA_UInt16" Enable="1" Writable="0" Comment="" Parm="Area=D||Offset=10||BitNo=0||StringLength=0||InitValue=0||SimEnable=1||SimMode=inc||SimInterval=1000||ValueMin=0||ValueMax=65535||IncValue=1||ValueList=" />
</Device>
</Group>
</MDC_OPCUA_SERVER_Project>
- 将MDC_OPCUA_SERVER添加到开机自启,重启Edge网关。
步骤三:配置AwsIotDeviceAgent的定时遥测和值变化遥测,将数据上报到AWS IoT Core
- 打开EdgePlant的AWS IoT设备代理服务软件配置界面。
设备名称:EP31010,自由设置
客户端ID:EP31010,必须设置为 EP31010或者EP31010_开头,否则无法连接到AWS IoT,见上述策略文件。
服务终结点:a31wmfqq9hucsv.ats.iot.cn-north-1.amazonaws.com.cn,见上述步骤。
传输质量:QoS1,注意AWS不支持QoS2.
保活时间:30(秒)。
OPCUA服务终结点:opc.tcp://localhost:4840,即连接到网关内部MDC OPCUA服务器。
OPCUA通讯超时时间:2000毫秒
直接方法:云到设备的控制命令,启用 opcua_read_value opcua_write_value query_edge_info。
- 下载设备证书和设备私钥文件,选择步骤一下载的设备证书(-certificate.pem.crt)和设备私钥文件(-private.pem.key)。
-
配置预配置遥测
-
保存并下载到Edge网关。整个配置文件内容:
<?xml version="1.0" encoding="utf-8"?>
<!--AwsIotDeviceAgent配置文件, 济桓科技IIOT开发部, 2020-->
<AwsIotDeviceAgent_Config Version="1.4.0.RC1">
<IotDevice DeviceName="EP31010" ClientId="EP31010" EndPoint="a31wmfqq9hucsv.ats.iot.cn-north-1.amazonaws.com.cn" ProxyHost="" ProxyPort="8080" QoS="1" KeepAlive="30">
<DirectMethod MethodEnable="opcua_read_value opcua_write_value query_edge_info"/>
</IotDevice>
<PreDefinedTelemetry>
<Topic TopicName="CyclePub_TempCur" TopicType="RegularPublish" RegularTime="1000">
<Field FieldName="DT" FieldAlias="日期时间字段" FieldType="DATETIME(3)" DataFormat="NOW(3)" DataSource="DataFormat" ItemNode=""/>
<Field FieldName="TempCur" FieldAlias="OPC标签值字段" FieldType="INT" DataFormat="%d" DataSource="OpcUaServer" ItemNode="ns=1;s=Project.Group.SIMU.TempCur"/>
<Field FieldName="Count" FieldAlias="OPC标签值字段" FieldType="INT" DataFormat="%d" DataSource="OpcUaServer" ItemNode="ns=1;s=Project.Group.SIMU.Count"/>
</Topic>
</PreDefinedTelemetry>
<OpcUAServer EndpointUrl="opc.tcp://localhost:4840" Timeout="2000"/>
</AwsIotDeviceAgent_Config>
- 将AwsIotDeviceAgent的调试等级设置为TRACE(跟踪),点击【软件列表】【下载软件参数】。
- 将AwsIotDeviceAgent添加到Edge网关的开机自启。重启Edge网关。
步骤四:通过AwsIotDeviceAgent的日志查看遥测消息,通过AWS IoT 提供的MQTT客户端查看消息
在AwsIotDeviceAgent的调试日志中查看设备连接和遥测消息。
双击软件列表中的AwsIotDeviceAgent,打开日志记录。可以看到网关已成功连接到AWS IoT并每秒发送遥测数据。
在AWS IoT平台的MQTT测试客户端输入#订阅所有消息,可以看到上报的消息。
步骤五:通过AWS IoT 提供的MQTT客户端主动读取OPCUA标签值
从云端主动读取TempCur、TempSet和Count的值。要主动读取网关内部的OPCUA数据,我们需要使用直接方法opcua_read_value,将以下消息发送到以下主题: 请求主题:EP31010/direct_method/opcua_read_value/c2d_request 请求消息:
{
"read_id":"1",
"node_prefix":"ns=1;s=Project.Group.SIMU.",
"items_read":["TempCur", "TempSet", "Count"]
}
使用MQTT测试客户端页面测试: 订阅响应主题:EP31010/direct_method/opcua_read_value/c2d_response
在请求主题上发布主题消息,在响应主题上获得响应消息。
{
"status": "200",
"timestamp": "2022.03.08 14:02:25.891",
"payload": {
"read_id": "1",
"node_prefix": "ns=1;s=Project.Group.SIMU.",
"read_values": [
"5",
"0",
"764"
]
}
}
步骤六:通过AWS IoT 提供的MQTT客户端主动修改OPCUA标签值
从云端主动修改TempSet的值。要主动修改网关内部的OPCUA数据,我们需要使用直接方法opcua_write_value,将以下消息发送到以下主题: 请求主题:EP31010/direct_method/opcua_write_value/c2d_request 请求消息:
{
"write_id":"1",
"node_prefix":"ns=1;s=Project.Group.SIMU.",
"items_write":[{"name":"TempSet","value":"123"}]
}
使用MQTT测试客户端页面测试: 订阅响应主题:EP31010/direct_method/opcua_write_value/c2d_response
在请求主题上发布主题消息,在响应主题上获得响应消息。
{
"status": "200",
"timestamp": "2022.03.08 14:15:16.419",
"payload": {
"write_id": "1",
"node_prefix": "ns=1;s=Project.Group.SIMU.",
"write_results": [
"ok"
]
}
}
通过EdgePlant的OPCUA客户端查看TempSet的值,已修改为123。
总结
- AwsIotDeviceAgent 能够快速的将工业设备生产数据(通过内置的OPCUA服务器)快速上报到AWS IoT Core。
- 通过简单的配置即可实现OPCUA数据的定时上报和值变化上报。
- 打通云到设备的远程控制,客户端只需要在预定义好的主题上按照命令格式发布消息即可远程读写OPCUA数据。
- 关于远程控制的更多命令和消息格式见具体技术手册。
|