亚马逊AWS官方博客

快速落地AWS智能工厂解决方案

智能工厂背景

很多的制造企业正在利用数字化技术进行转型,并利用机器学习,计算机视觉和机器人等技术提升制造自动化程度。智能工厂便是在制造数字化的基础上,整合信息技术(IT)和运营技术(OT),利用物联网,AI,机器学习等技术进行实时收集、连接、分析和推断企业数据。这些数据可以通过各种应用实现可操作性,这些数据还可用于有效衡量某条生产线或工厂的性能,与组织中的其他生产线或全球基准进行比较,以提高生产过程可控性、减少生产线人工干预,优化计划排程,并在性能、质量和安全方面进行持续的优化。

然而大部分制造企业的数字化和智能工厂转型道路并不是一帆风顺,在这个进程中他们都会面临着各种各样的问题,这其中包括了很多产线设备数据因网络,协议等问题没有被很好的收集;海量的运营数据因本地存储限制而被丢弃,没有被很好的利用;企业紧缺的IT人才被繁琐的系统维护花费了大量的精力,而没有时间投入到能为生产制造带来价值的创新和优化上。近些年云计算、物联网、大数据、人工智能等技术正在从各个方面改变我们的生活,同时这些技术也可以为制造企业的数字化转型扫清很多技术障碍,为智能工厂提供技术保障。本文将介绍AWS如何利用这些技术为智能工厂提供解决方案并展示如何利用物理网技术将产线数据上云,如何利用边缘计算技术实时控制设备。

 

 

AWS智能工厂解决方案简述

要让数据驱动我们向智能制造的转型,就需要数字化和智能工厂平台让数据真正流动起来,这里我们介绍AWS的智能工厂的解决方案如何让工业数据流动起来,下图我们给出一个端,边,云的智能工厂参考架构。

在左边的工厂站点“端”侧是底层的工业设备和PLC控制器,这是数据的源头,这些源头数据我们可以通过协议转换将特定的工业协议转换为物联网通用的协议。在工厂侧的小数据中心我们称“边缘“侧,这里可以部署边缘网关负责数据的收集和预处理工作,预处理后的数据通过专线或者互联网发送到“云端”,并且作为实时的热数据存储起来,对于这些实时数据一方面给到操作KPI仪表板展示给工厂经理和主管,同时对于一些异常数据比如温度过高,震动异常等数据需要立即触发报警管理系统。另外这些热数据也会最终流入数据湖中作为温数据或者冷数据存储起来,用于机器学习和大数据分析或者构建数据仓库的数据源。数据湖除了具有各种类型和体量数据的存储能力之外,还要具有灵活的数据访问能力,以便于为数据工程师和科学家提供训练机器学习模型的能力。同时也为工厂经理企业决策者提供业务智能报表的能力。对于工厂生产工艺或者业务经理人员,也可以利用自助服务即可访问数据湖的数据做相应的业务分析。对于企业的IT数据例如ERP,CRM等可以通过远端的服务调用访问相应的数据做OT和IT的融合。
在这个参考架构的每一部分AWS都提供了相应的服务来帮助企业快速构建自己的智能工厂平台,如下图所示,在工厂本地端和边缘侧,AWS提供的AWS IoT Greengrass服务可以帮助做边缘数据的收集,预处理工作;在云端,AWS也提供了各种的服务来满足不同业务的需求,比如使用IoT服务做工业数据的入口,使用Amazon S3做数据湖的载体,使用Amazon SageMaker服务做机器学习的训练等等。在后边的章节中将展示如何利用AWS的合作伙伴研华的硬件设备来实际搭建智能工厂的演示环境。

 

 

利用研华硬件实际搭建智能工厂的演示环境

整体架构图

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

如下是实际的演示环境:

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

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

数据采集与上传aws iot core

什么是OPC UA

OPC UA的全名是OPC Unified Architecture(OPC统一架构), 他着重在数据收集以及控制为目的的通讯,用在工业设备以及系统中,并且它是一个跨平台的开源标准。

为什么工业现场需要OPC UA
工业现场有多种通信协议,不完全统计:工业现场常用的通讯协议不低于20种。OPC基金会在旧的开放平台通信(OPC)协议基础上开发一个针对全新而且独立的OPC UA通讯协议栈来取代COM/DCOM。目前,OPC UA是多数工业现场事实上的统一协议标准?

aws-iot-greengrass-opcua-adapter是如何实现的?

基于OPC UA的协议,aws-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订阅收集数据外,aws iot OPC UA adapter并且整合了Greengrass SDK,使之能成为一个Lambda function,这样一来就能随着Greengrass的部署从云端download到边缘端执行该function。

以下将介绍如何将aws-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下载aws 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 文件夹中(aws-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 文件夹(aws-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 aws-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

– 设定环境变量AWS_LAMBDA_OPC UA_ADAPTER_CONFIG_FILE_PATH

– 设定环境变量AWS_LAMBDA_OPC UA_ADAPTER_SEND_ALL_DATA_TO_CLOUD

2.4 配置Greengrass的“订阅”权限,

2.5 在aws iot core中订阅“/OPC UA/#” Topic,并测试数据。

2.6 设置aws IoT rule,过滤并导出数据到新的Topic,方便其他服务调用。

2.8 配置NodeRED server,读取上一步中指定的Topic,并在web上显示实时的数据状态。

设备本地控制

什么是Local shadow
影子是用于存储事物的当前或所需状态信息的 JSON 文档,demo中安装在UNO-2484G里面的aws Greengrass保存有本地设备的设备影子文件。使用本地影子可以不同步到云,当 AWS IoT 连接到 Internet 时,可以启用云同步,影子可以同步到 AWS IoT Greengrass Core 。

为什么要用Local shadow
在设备、应用程序和其他云服务连接到 AWS IoT 后,它们可以通过设备影子访问和控制设备的当前状态。例如,应用程序可以更新影子以请求更改设备的状态。AWS IoT 发布一条消息以指示对设备所做的更改。设备接收该消息,更新其状态以保持匹配,然后发布一条消息以指示其更新状态。Device Shadow 服务在相应的影子中反映该更新状态。应用程序可以订阅影子的更新,也可以查询影子以获取其当前状态。
在设备脱机时,应用程序仍然可以与 AWS 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的状态同步到云端。

设备本地控制部分,全部操作可以在不连接aws iot core的离线情况下执行。

本篇作者

陈雪杰

AWS制造业解决方案架构师,负责制造行业的方案咨询和架构设计,致力于智能制造,智能产品的方案应用和推广

林俊

AWS高级解决方案架构师,主要负责现代应用程序的方案咨询与架构设计,致力于无服务器 (Serverless) 技术的推广与应用

孫銘鴻

AWS物联网实验室 軟體開發工程師,負責基於AWS IoT服務之設備端的開發,設計,以及應用。在加入AWS之前曾在芯片廠服務多年, 專精於嵌入式系統領域。

徐开

AWS物联网实验室 解决方案架构师,主要负责物联网解决方案,致力于AWS IoT 相关技术的的推广与应用