发布于: Nov 30, 2022

【概要】不少制造业企业都在寻求能够快速落地的智能工厂整体解决方案,今天我们就用研华硬件搭建一个智能工厂演示环境。

不少制造业企业都在寻求能够快速落地的智能工厂整体解决方案,今天我们就用研华硬件搭建一个智能工厂演示环境。

 

我们基于 Amazon IoT 合作伙伴研华的硬件设备,快速搭建了一个演示环境。整体架构图如下:

如下是实际的演示环境:

图中所涉及到的各类硬件设备介绍如下:

  1. ECU-1251 工业网关
    负责协议转换和通信。可以采集多个 PLC 的数据,并转换为工业标准协议,如 OPC UA 等。通过这个网关进行多种协议聚合和协议转换,对外提供标准的 OPC UA 或者 MQTT 协议格式。
  2. PLC 可编程逻辑控制器
    负责工业环境的数字/模拟量采集和控制。这里用于采集下方多个按钮的状态,并且实时反应在其下方的多个 LED 上面,和电机上面
  3. ADAM-4055 传感器采集器
    提供 8 路数字输入通道和 8 路数字输出通道。采集工业现场的数字/模拟类型的传感器,比如电表等。
  4. 电机
    本地可执行部件,用于多种场景,如启动风扇等。
  5. UNO-2484G 工业边缘计算单元
    基于 x86 架构的边缘计算单元,安装了 Amazon Greengrass,协调 1 和 6 之间的本地通讯,以及与 Amazon IoT Core 的交互。工厂的应用场景中可能有一台或多台的边缘计算设备,利用 Greengrass 的 lambda 等功能进行 local shadow 或者 ML 等高级功能。
  6. ADAM-3600 无线智能 RTU
    集合了 1 和 2 和 3 的功能,并且带有无线传输的可选功能。提供 8 路数字输入通道和 4 路数字输出通道,以及 8 路模拟输入和 USB/ETH/RS485 等接口。
  7. 按钮
    用于演示触发本地电机运转。本地可模拟多种事件,比如烟雾报警器等。
  8. 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 的离线情况下执行。

 

相关文章