发布于: Nov 30, 2022
【概要】不少制造业企业都在寻求能够快速落地的智能工厂整体解决方案,今天我们就用研华硬件搭建一个智能工厂演示环境。
不少制造业企业都在寻求能够快速落地的智能工厂整体解决方案,今天我们就用研华硬件搭建一个智能工厂演示环境。
我们基于 Amazon IoT 合作伙伴研华的硬件设备,快速搭建了一个演示环境。整体架构图如下:
如下是实际的演示环境:
图中所涉及到的各类硬件设备介绍如下:
- ECU-1251 工业网关
负责协议转换和通信。可以采集多个 PLC 的数据,并转换为工业标准协议,如 OPC UA 等。通过这个网关进行多种协议聚合和协议转换,对外提供标准的 OPC UA 或者 MQTT 协议格式。 - PLC 可编程逻辑控制器
负责工业环境的数字/模拟量采集和控制。这里用于采集下方多个按钮的状态,并且实时反应在其下方的多个 LED 上面,和电机上面 - ADAM-4055 传感器采集器
提供 8 路数字输入通道和 8 路数字输出通道。采集工业现场的数字/模拟类型的传感器,比如电表等。 - 电机
本地可执行部件,用于多种场景,如启动风扇等。 - UNO-2484G 工业边缘计算单元
基于 x86 架构的边缘计算单元,安装了 Amazon Greengrass,协调 1 和 6 之间的本地通讯,以及与 Amazon IoT Core 的交互。工厂的应用场景中可能有一台或多台的边缘计算设备,利用 Greengrass 的 lambda 等功能进行 local shadow 或者 ML 等高级功能。 - ADAM-3600 无线智能 RTU
集合了 1 和 2 和 3 的功能,并且带有无线传输的可选功能。提供 8 路数字输入通道和 4 路数字输出通道,以及 8 路模拟输入和 USB/ETH/RS485 等接口。 - 按钮
用于演示触发本地电机运转。本地可模拟多种事件,比如烟雾报警器等。 - SCADA 工业现场软件(研华)
本地数据采集与监控系统。
什么是 OPC UA
OPC UA 的全名是 OPC Unified Architecture(OPC 统一架构),他着重在数据收集以及控制为目的的通讯,用在工业设备以及系统中,并且它是一个跨平台的开源标准。
为什么工业现场需要 OPC UA
工业现场有多种通信协议,不完全统计:工业现场常用的通讯协议不低于 20 种。OPC 基金会在旧的开放平台通信(OPC)协议基础上开发一个针对全新而且独立的 OPC UA 通讯协议栈来取代 COM/DCOM。目前,OPC UA 是多数工业现场事实上的统一协议标准?
amazon-iot-greengrass-opcua-adapter 是如何实现的?
基于 OPC UA 的协议,amazon-iot-greengrass-opcua-adapter 利用了 node-OPC UA 编写的 OPC UA stack 模拟成 OPC UA client, 而根据 OPC UA 的 client-server 的架构向 OPC UA Server 订阅 node 的 information,OPC UA Server 会在这些 node 的数据改变时,将数据发送给这些订阅者。除了向 OPC UA Server 订阅收集数据外,amazon iot OPC UA adapter 并且整合了 Greengrass SDK,使之能成为一个 Lambda function,这样一来就能随着 Greengrass 的部署从云端 download 到边缘端执行该 function。
以下将介绍如何将 amazon-iot-greengrass-opcua-adapter Lambda 设定:
- Nodejs 安装
- 请确认安装 Greengrass 的边缘装置有安装 nodejs 版本 x:请参考 https://nodejs.org/en/download/
- 安装完后将 node 执行档 copy 到 /usr/bin/node or /usr/local/bin
- 将 node 执行档更名成 x
- 从 github 下载 amazon iot OPC UA adater 代码,并且透过 npm 安装 package
git clone https://github.com/aws-samples/aws-iot-greengrass-OPC UA-adapter.git cd greengrass-OPC UA-adapter-nodejs npm install
2.3.2.1 npm install 时遇到 openssl 相关的 issue,solution 如下:
git apply patch/Fix-the-npm-install-issue-due-to-openssl.patch npm rebuild
2.3.2.2 安装完后,另外需要在 apply patch:
git apply patch/factories.patch
2.3.3 编辑 config 文件夹中(amazon-iot-greengrass-OPC UA-adapter/greengrass-OPC UA-adapter-nodejs/config/)的 json 配置文件案,并且移动至指定位置。
2.3.3.1 published_nodes.json:将 OPC UA Server 及 node 相关信息填入
{ "serInfo": [ { "endpointName": "UNO-1372G", "endpointUrl": "opc.tcp://localhost:26543", "certExist": false, "userIdentity": { "userName": "", "password": "" }, "OpcNodes": [ { "Id": "ns=1;s=Temperature", "DisplayName": "M140001" }, { "Id": "ns=1;s=FanSpeed", "DisplayName": "M140002" }, { "Id": "ns=1;s=PumpSpeed", "DisplayName": "M140003" } ] } ] }
endpointName:OPC UA Server 名称
endpointUrl:OPC UA Server 的 IP 及 Port 编号
OpcNodes:OPC UA Server 支持的 node 信息
OpcNodes:
2.3.3.2 client_config.json:OPC UA client 相关的设定
2.3.4 移动 config 文件夹(amazon-iot-greengrass-OPC UA-adapter/greengrass-OPC UA-adapter-nodejs/config/)至指定位置 /etc/greengrass/OPC UA-adapter/config,或是客户自行指定位置但需要自行记录在 Lambda 的环境变量。
2.3.5 打包代码,并且将之上传到 Lambda Function。
2.3.5.1 打包代码
cd amazon-iot-greengrass-OPC UA-adapter/greengrass-OPC UA-adapter-nodejs
zip -r OPC UALambda.zip
2.3.5.2 上传压缩包至 Lambda
2.3.6 在 Greengrass Group 设定 Lambda
2.3.6.1 添加 Lambda,并且加入以下设定
– 生命周期为 Long-Lived
– 设定 Memory Limit
– 设定环境变量 AMAZON_LAMBDA_OPC UA_ADAPTER_CONFIG_FILE_PATH
– 设定环境变量 AMAZON_LAMBDA_OPC UA_ADAPTER_SEND_ALL_DATA_TO_CLOUD
2.4 配置 Greengrass 的 “订阅” 权限,
2.5 在 Amazon iot core 中订阅 “/OPC UA/#” Topic,并测试数据。
2.6 设置 Amazon IoT rule,过滤并导出数据到新的 Topic,方便其他服务调用。
2.8 配置 NodeRED server,读取上一步中指定的 Topic,并在 web 上显示实时的数据状态。
什么是 Local shadow
影子是用于存储事物的当前或所需状态信息的 JSON 文档,demo 中安装在 UNO-2484G 里面的 Amazon Greengrass 保存有本地设备的设备影子文件。使用本地影子可以不同步到云,当 Amazon IoT 连接到 Internet 时,可以启用云同步,影子可以同步到 Amazon IoT Greengrass Core。
为什么要用 Local shadow
在设备、应用程序和其他云服务连接到 Amazon IoT 后,它们可以通过设备影子访问和控制设备的当前状态。例如,应用程序可以更新影子以请求更改设备的状态。Amazon IoT 发布一条消息以指示对设备所做的更改。设备接收该消息,更新其状态以保持匹配,然后发布一条消息以指示其更新状态。Device Shadow 服务在相应的影子中反映该更新状态。应用程序可以订阅影子的更新,也可以查询影子以获取其当前状态。
在设备脱机时,应用程序仍然可以与 Amazon IoT 和设备的影子进行通信。在设备重新连接时,它接收其影子的当前状态,以便它可以更新其状态以与其影子的状态匹配,然后发布一条消息以指示其更新状态。同样,如果应用程序脱机并且设备状态在其脱机时发生变化,则设备将影子保持更新状态,以便应用程序可以在设备重新连接时查询影子以获取其当前状态。
如何利用 Local shadow 实现本地设备联动。
- 按下按钮,模拟烟雾报警器被触发。
- Greengrass 通过 OPC UA adapter lambda 采集 PLC 中的按钮触发信息,并发送到另一个本地触发的 lambda 中(这里叫做 shadow_example)。
- 本地触发的 lambda 判断收到的信息为烟雾报警后,会更改 local shadow 的期望值,希望启动喷淋系统(这里以转动电机来表示)。
- Shadow 负责把期望值和原有值的差距(开启或者停止电机转动的 JSON)发送给网关 ECU-1251。
- ECU-1251 收到后差距值后,通过现场的控制总线(这里是 RS485 总线)发送控制命令给 PLC。
- PLC 收到 RS485 总线上的命令后,开启或者停止转动电机。
- 最后,进入 Greengrass 的 Devices 设置,把本地设备上的 local shadow 的状态同步到云端。
设备本地控制部分,全部操作可以在不连接 Amazon iot core 的离线情况下执行。
相关文章