亚马逊AWS官方博客

利用亚马逊云科技构建传统设备监控告警系统

背景

第一次工业革命以机械化为标志,第二次工业革命的批量生产和装配线实现了规模化,而第三次工业革命的计算机和数字化则简化了运营,使工厂变得更加高效。如今,第四次工业革命正在兴起,此次革命被称为“工业 4.0”。通过利用云计算、物联网(IoT)、实时分析和机器学习,企业能以更低的成本获得额外的生产效益。通过云端进行连接的大量设备,正在推动传统工业流程的转型。

智能工厂为制造业提供了进入第四次工业革命的机会。在第四次工业革命以前,工业制造设备的维护,面临着巨大的挑战,设备计划外停机,维护难、维护贵等不仅严重影响了制造效率和质量,也给制造商带来高额的维护保养成本。而智能工厂可以从工厂生产线,机械设备或者远程装置上收集大量传感器数据,对这些数据的分析确保了制造资产的实时可见性,并且为执行预测性维护提供了工具,以减少设备停机时间。同时,依托于这些传感器数据,人们可以实线全链路跟踪,远程监控并且进行资源优化,例如农业公司利用传感器收集从土壤到运输环节的数据用于现场监控、食品跟踪等;运输业在货运和物流服务量攀升的情况下,仍然可以借助工业物联网精确定位货物并优化配送线路。此外,通过 IoT 设备结合如今高速发展的 AI 技术可以进一步提高生产效率和产品质量,例如用人工智能支持的视觉分析替代了手动检验,大大降低了次品率;通过摄像头对高危区域进行实时监测,提高生产安全性。

虽然工业物联网可以使多个行业获利,但是很多行业在利用工业物联网数据的同时,也面临着许多共同的挑战。在数据访问方面需要整合来自数百种不同通信协议以及不同版本设备的数据,相当困难;同时在工业物联网数据处理的能力上,由于工业物联网机器采集记录温度、运动或声音等过程,产生大量的非结构化数据,并且机器数据也可能存在明显的缺陷,受损的信息和错误读数,导致数据分析变得不可靠;完成数据采集和管理后,许多工业公司在做设备运行状况跟踪,异常检测,以及远程排查问题,软件管理和固件更新等运维工作时,需要随着设备出厂的数量,种类和复杂性的增长而进行扩展;大量数据上传到云端等待响应的做法可能会增加延迟时间,降低数据处理分析的速度。

基于以上工业企业在进行工业物联网项目时遇到的挑战,亚马逊云科技提供了一系列 IoT 服务用于设备数据的收集整理和存储,例如 Amazon IoT Core 便于您轻松安全地将设备连接到云端,并与其它云应用程序和设备交互。在设备连接安全方面提供细粒度的身份验证、授权、日志记录审核以及端到端的加密;Amazon IoT SiteWise 可以对您的实物资产、流程和设施进行建模,监控跨设施的运营;对于工业企业在数据收集存储以及分析时对数据实时性的要求,可以通过 Amazon IoT Greengrass 实现将相应的云能力扩展到边缘设备,能够在本地对生成的数据进行操作,同时也使用云进行管理、分析和持久存储。

本文中将以斯特林发动机作为模拟工业设备为大家展示设备管理人员如何通过亚马逊云科技服务实现数据采集以及远程设备监控。本文中的设备监控主要涉及:

  • 通过 Amazon IoT Greengrass,Amazon IoT SiteWise,Amazon IoT Core 等服务进行设备数据采集,预处理,并发送到云端,通过 Amazon SNS 服务实现相应的告警功能
  • 通过 Amazon TwinMaker 以及 Amazon Managed Grafana 给设备管理人员提供不同的可视化监控数据实时获取设备状态

所有涉及的相关服务只需按量付费,没有任何预付费用,并且所有的服务都为亚马逊托管服务,您只需要关注相关的业务逻辑,而无需担心基础运维工作。

本博客为系列博客的第一篇,主要介绍方案概览与架构,将会在接下来的系列中描述详细配置与代码。

架构设计

本实验中用于模拟传统工业设备的斯特林发动机模型为 HB32,发动机通过加热在封闭系统中的空气,从而推动活塞使飞轮运转,将热能转化成动能。外接的传感器和电机主要模拟用于监控非智能的大型工业设备的传感器系统,树莓派(本实验采用树莓派 4B/8G 开发板)主要模拟工业场景下的边缘网关,用于边缘设备的管理,本实验中传感器的数据通过安装在树莓派中的 Amazon IoT Greengrass 进行处理,同时发送给云端进行远程的数据分析展示并返回相应的指令给设备端。

架构图

技术概览

从以上架构图中可以看到,整个实验架构分为两个部分:

  • 边缘端:工业场景下,设备数据不会直接连接到云端进行数据发送,而是需要通过一个设备网关进行数据的采集以及初步的数据处理后,将整合的数据发送到云端。本实验中通过将 Greengrass 部署在树莓派开发板上,作为模拟的边缘网关,采集边缘的传感器数据,并在本地进行初步的数据处理以降低延迟及时反馈,同时可以节省数据传输的成本。
  • 云端:边缘端的数据通过 Amazon IoT Greengrass 采集处理后上传到云端的 IoT 网关,即 Amazon IoT Core,进行进一步的数据分析,告警,展示等。Amazon IoT Core 可以通过规则引擎将数据发送给不同的后端服务,进行不同业务逻辑的处理。实验中涉及了三个不同的数据处理逻辑,本文着重介绍 Route #1 的数据数据处理场景。
    • Route #1: 数据通过规则引擎从 Amazon IoT Core 发送到 Amazon IoT SiteWise,对不同的设备创建相应的资产模型,反映不同的数据流,并且创建设备的逻辑分组构造工业运营的资产层次结构。同时 Amazon IoT SiteWise 也支持创建监控门户来可视化流程、设备以及连接到 Amazon IoT 的装置中的数据。通过 Amazon IoT SiteWise,您可以轻松的将已经存在的模型和资产应用在 Amazon IoT TwinMaker 上,快速构建资产的数字孪生。亚马逊云科技托管的 Grafana 支持 Amazon IoT TwinMaker 类型的数据源,可以将设备资产的数字孪生集成到 Grafana 面板中,实时监控分析设备的各项指标。
    • Route #2: Amazon IoT Core 可以通过规则引擎触发 lambda 函数,在设备状态超出某个阈值时,lambda 函数被触发,在 lambda 函数中可以按照不同的业务规范要求编写相应的处理逻辑,例如,通过 Amazon Simple Notification Service(SNS)发送告警邮件/短信给操作员。
    • Route #3: Amazon IoT SiteWise 支持通过 Cloudformation 的形式创建相应的 S3 桶并完成数据的传输备份。S3 中的数据可以通过 Amazon Athena 利用 SQL 语句轻松进行数据的筛选分析后通过 Amazon Quicksight 生成数据的可视化报表,供生产线经理进行更详细的业务分析。

边缘数据采集

通过对斯特林发动机加装上图的多个传感器,我们可以实时收集到发动机上的飞轮转速以及气缸的温度,并使用速度仪表盘和温度指示 LED 等来实时观测数据。同时,本地数据将通过树莓派采集并上传至云端,后续可以进行数据存储与分析。而在实际工业生产环境中,通常是由工业 PC 来完成这一任务。在树莓派中,我们安装了 Amazon IoT Greengrass,它可以作为边缘网关在本地收集、聚合、筛选和发送数据,管理和控制哪些数据将进入云端以实现最佳分析和存储。

安装了 Greengrass 的树莓派边缘网关设备主要负责以下数据的采集,管理和反馈:

  • 红外测温传感器(DS18B20):用于检测发动机在加热后高温区和低温区的平均温度数据
  • RPM 光敏传感器(TCRT5000):用于检测发动机飞轮的转速
  • 风扇电机驱动(L293D 驱动+8520 空心杯电机马达+风扇):温度达到阈值后从云端下发指令开启风扇降温模拟根据设备不同状态从云端下发命令缓解可能故障
  • RPM 转速 Guage 电机(DMS-MG90-A 270 度舵机):RPM 传感器采集发动机转速数据后,反馈给 guage 电机组件通过转速仪表盘本地实时显示转速数据
  • LED 显示灯:对于不同的温度阈值,LED 显示灯通过不同的颜色及闪烁方式在本地进行实时告警
  • 树莓派摄像头通过采集给发动机加热的酒精灯图片数据,对 Amazon Lookout for Vision 进行预训练,用于分辨发动机是否正在被加热(酒精灯是否被点燃)

那么您可能会好奇,这些传感器数据是如何通过 Amazon IoT Greengrass 进行采集的?每个传感器通过有线的方式接入了树莓派,并由部署在 Greengrass 中的组件(Component)进行数据的采集。这些数据通过本地的主题进行流式传输并发送至云端。下图为组件和本地主题以及云端的消息交互:

部署在 Amazon IoT Greengrass 上的组件与主题之间的交互逻辑如下:

  • RPM:通过光电/光敏传感器监测轮机转盘上的黑色块通过传感器的频率,将频率转化为电信号,通过电信号计算出轮盘转速推送至本地主题
  • Temperature:热敏传感器采集 24*32 像素点,通过坐标标记出发动机的高温区(warm_cyl_temp)和低温区(cool_cyl_temp)并取平均值,通过 I2C 协议通信推送至本地主题
  • Gauge servo:RPM 数据化成数字信号,伺服电机通过 PiGPIOFactory 订阅本地主题获取转速数据
  • LED Light:订阅本地主题中的高温数据并判断温度区间,红灯表示过热,绿灯表示正常
  • Fan:布尔值,订阅云端主题中的风扇状态,规则引擎判断当高温区过热时,Lambda 推送消息设置云端主题中 Fan 的值为 1 启动风扇进行降温
  • Lookout4vision:布尔值,通过捕捉火焰的照片,在云端 Lookout for Vision 中进行火焰状态推理并将状态写入本地主题Burning值中
  • IoT  Core:将所有本地主题中的数据整合并通过 MQTT 主题上传至 IoT Core

而要运行 Amazon IoT Greengrass,树莓派上首先需安装 Greengrass 核心组件 Nucleus。您可有根据安装手册配置环境并安装 Greengrass 核心组件。Amazon IoT Greengrass 提供了一个安装程序,您可以在几分钟内设置 Greengrass 核心组件。

安装完成之后,可以通过以下命令确定 Greengrass 服务是否成功运行:

sudo systemctl status greengrass.service

在安装 Greengrass 核心组件时,我们会创建用户 ggc_user,因此需要将该用户加入到树莓派上相应的组中,使得在该用户下运行的 Greengrass 能够访问 RaspberryPi 上的硬件设备。

sudo usermod -a -G gpio ggc_user #GPIO 引脚权限
sudo usermod -a -G i2c ggc_user #I2C 通信权限 
sudo usermod -a -G dialout ggc_user #授予用户对串行设备(如调制解调器、串行端口等)的访问权限

在部署完核心组件之后,我们可以进行应用的部署,每一个应用在 Greengrass 中被称之为自定义的组件,负责数据的采集与传输。而每一个组件又由 recipe 和 artifacts 组成。在本博客中,每一个模块都被定义为组件。其中,Receipes 和 Artifacts 分别负责:

Receipes

每个组件都包含一个用于定义其元数据的配置文件。该文件还指定了组件的配置参数、组件依赖关系、生命周期和平台兼容性。组件生命周期定义了安装、运行和关闭组件的命令。你可以用 JSONYAML 格式定义配置文件。

Artifacts

组件中可以有多个构件。构件可以包括脚本、编译后的代码、静态资源以及组件消耗的任何其他文件。组件还可以使用组件依赖项中的构件。通常会将脚本/代码上传至 S3 桶。

在完成 Receipes 和 Aritifacts 的编写后,可以通过以下步骤进行组件应用的部署与操作,以下为温度组件部署示例:

  1. 创建组件部署:
    sudo /greengrass/v2/bin/greengrass-cli deployment create \
      --recipeDir ~/reinvent/GreengrassCore/recipes \
      --artifactDir ~/reinvent/GreengrassCore/artifacts \
      --merge "com.stirling.Temperature=1.0.0"  
    
  2. 查看组件日志确认组件运行状态:
    sudo tail -f /greengrass/v2/logs/greengrass.log
    sudo tail -f /greengrass/v2/logs/com.stirling.Temperature.log
    
  3. 重启组件:
    sudo /greengrass/v2/bin/greengrass-cli component restart —names com.stirling.Temperature
  4. 删除组件:
    sudo /greengrass/v2/bin/greengrass-cli deployment create —remove="com.stirling.Temperature"

当应用部署完成之后,可以通过以下步骤验证部署是否成功并确保组件可以正常工作:

  1. 检查控制台上的组件部署状态,确保部署状态显示为“成功”, 这表明组件已经成功部署到设备上。
  2. 检查设备上的组件日志,以确认组件是否已成功启动并运行。
  3. 检查设备状态,确保设备处于运行状态,并且与 Amazon IoT 服务正常连接。
  4. 测试组件功能,例如确定传感器数据可以被正确读取和处理。

组件之间会通过 Greengrass SDK 中的 IPC 库(Interprocess Communication)进行通信。 IoT Greengrass 的 IPC 通信支持两种通信方式:

  1. 请求/响应。组件向 IPC 服务发送请求并收到包含请求结果的响应。
  2. 订阅。组件可以向 IPC 请求订阅主题,向主题发布或者接收的消息。

在本次部署中我们主要是使用了第二种方式进行组件之间的通信,也就是订阅主题并向主题推送消息。Amazon IoT Greengrass SDK 支持本地消息推送/订阅和云端消息推送/订阅。通过本地消息推送,组件之间可以直接进行通信,从而降低边缘端数据处理的延迟;而通过云端推送,可以将数据传输至 Amazon IoT Core,以便云上进一步处理和分析。树莓派上运行的不同组件进行数据采集和传输,其中所有传感器数据都会推送至本地主题(“localipc/stirling”),在该主题中,我们定义了消息键值对,各应用组件分别对主题中的键值进行发布或者订阅。

云端数据接收

Amazon IoT Core 使您可以轻松地将设备连接到云,将消息发送到云端,并使设备与其他云应用程序和设备进行交互。IoT Core 可以通过规则引擎对这些消息进行过滤、转发以及路由,并触发其他服务对数据进行进一步处理或将消息重新发布与设备进行交互。

在边缘数据采集部分我们已经在 Amazon IoT Core 中创建了 Greengrass 设备并连接到了云端。而 Greengrass 中的组件“IoT Core”通过 ipc_client.new_publish_to_iot_core()方法,将数据推送至指定的云端主题“reinvent/stirling/hb11-01”中,云中的其他服务可以通过消费该主题获取设备数据。例如,在上节中所提到的 Fan 组件的运作原理,即是通过在 Amazon IoT Core 中设置了以下 SQL 规则,当消息中的高温值(warm_cyl_temp)超过了 335 摄氏度时,触发 Lambda 函数向另一个云端主题“reinvent/stirling/hb32/fan“发送一条消息,设置风扇的状态为 1。而 Greengrass 中运行的 Fan 组件,通过 ipc_client.new_subscribe_to_iot_core()方法订阅了该云端主题,获取风扇状态并触发风扇启动来进行降温。

另外,我们还通过 Amazon IoT Core 中的规则引擎将所有的数据转发至 Amazon IoT SiteWise 的资产属性,以便在下一步中构建 SiteWise 资产以及数字孪生可视化。

数据处理、告警及可视化

通过 Amazon IoT SiteWise 管理多层工业资产数据

Amazon IoT SiteWise 作为工业场景下帮助企业进行资产管理整合的托管服务,支持直接通过 Amazon IoT Greengrass 部署 SiteWise 的网关组件直接从边缘采集数据,同时也支持通过 Amazon IoT Core 使用 MQTT 协议或 REST API 的方式导入。Amazon IoT Core 作为物联网数据在云上的中转网关接入不同类型的后端服务,本文通过规则引擎将数据转发到 Amazon IoT SiteWise 中,并通过 Amazon IoT SiteWise 门户对设备进行远程监管,同时结合 Amazon IoT TwinMaker 和 Amazon Managed Grafana 进行不同维度的设备数据展示。

在使用 Amazon IoT Core 规则引擎将消息转发到 Amazon IoT SiteWise 之前,请确保您的资源拥有相关的 IAM 权限访问 Amazon IoT SiteWise,示例 IAM 规则:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iotsitewise:BatchPutAssetPropertyValue",
            "Resource": [
                "arn:aws:iotsitewise:<your region>:<your account id>:asset/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iotsitewise:BatchPutAssetPropertyValue",
            "Resource": "arn:aws:iotsitewise:ap-southeast-1:<your account id>:time-series/*",
            "Condition": {
                "StringLike": {
                    "iotsitewise:propertyAlias": [
                        "${topic(3)}/cpu",
                        "${topic(3)}/raspberrytemp",
                        "${topic(3)}/cool_cyl_temp",
                        "${topic(3)}/rpm",
                        "${topic(3)}/burning_confidence",
                        "${topic(3)}/accelerate",
                        "${topic(3)}/warm_cyl_temp",
                        "${topic(3)}/memory",
                        "${topic(3)}/burning",
                        "${topic(3)}/running"
                    ]
                }
            }
        }
    ]
}

本文中将所有发送到 Amazon IoT Core ‘reinvent/stirling/#’主题的消息都转发到 Amazon IoT SiteWise 中,当然您也可以根据相关的业务需求在 Amazon IoT Core 规则引擎中通过 SQL 语句对数据进行初步筛选。其中 Condition 的定义中通过 StringLike 的字符串运算符匹配 iotsitewise:propertyAlias 具体的值,主题为“reinvent/stirling/HB11-01”,因此${topic(3)}的值为”HB11-01″。

如果您需要指定账号下所有资产资源或是数据流,请使用通配符:

"Resource": "arn:aws:iotsitewise:<your region>:<your account id>:asset/*"
"Resource": "arn:aws:iotsitewise:<your region>:<your account id>:time-series/*"

为了提高安全性,您也可以选择在 Condition 属性中指定 IoT SiteWise 资产层次结构路径,请参考示例 IAM 规则。详细的 IoT SiteWise IAM 规则请参考配置指导文档

根据实验中传感器数据采集内容,本文中的资产模型只有涉及一层结构,为“Stirling Engine Asset Model”,该资产模型包含的测量值如下:

其中通过转换数据定义 temp_delta(高温区与低温区温差)为 warm_cyl_temp(发动机高温区温度)与 cool_cyl_temp(发动机低温区温度)的差值:

工业运营场景中可能涉及复杂的资产模型逻辑关联,例如,您可以自由定义陆上和海上风力发电场组成的风力发电场。完成相应的资产模型创建后,可以进一步将资产关联到相应的资产模型上形成完整的父子关系 measurements 的数据为设备端上传计算,具体如何定义资产模型之间的关系可以进一步参考:https://docs.thinkwithwp.com/zh_cn/iot-sitewise/latest/userguide/asset-hierarchies.html。完成资产模型的创建并与资产进行关联后,可以在控制台的资产栏中,通过“最新值”观察到数据的实时动态变化,如果希望能够通过 Amazon IoT SiteWise 的数据生成监控门户网站,可以创建托管的 SiteWise 显示器查看和共享您的操作数据,您可以使用控制面板创建项目来可视化流程、设备以及连接到 Amazon IoT Core 的装置中的数据。以下是斯特林发动机的部分展示面板:

Amazon Managed Grafana 结合 Amazon IoT TwinMaker 对系统进行可视化监控

Grafana 是一款开源的数据可视化和监控平台,可以用于资源的实时监控,帮助运维人员提高监控和运维效率,并且由于 Grafana 支持多种数据源,用户可以创建仪表盘来监控业务关键指标。Amazon Managed Grafana 提供 Amazon IoT TwinMaker 插件,帮助您快速将数字孪生模型和数据监控面板集成在 Grafana 中,Amazon Managed Grafana 为您管理 Grafana 服务器,您可以通过“工作空间”创建逻辑上隔离的 Grafana 服务器,然后创建 Grafana 仪表板和可视化来分析您的指标、日志和跟踪,而您无需构建、打包或部署任何硬件或任何其他 Grafana 基础设施。

本文主要将 Amazon IoT TwinMaker 中的资产数据模型,作为 Amazon Managed Grafana 的数据源,向您实时展示设备状态,同时将 Amazon IoT TwinMaker 与 Amazon IoT SiteWise 的资产和模型集成,以在 3D 可视化中显示相应的资产模型以及数据。您可以参考下图中的架构图了解整个展示方案的工作流,Amazon IoT TwinMaker 主要由工作区,实体模型组件,可视化以及增强用户界面组成,资源库中的 3D 文件从 S3 中实时同步,更多关于 Amazon IoT TwinMaker 的组成细节及工作原理请参考文档

下图为集成了 Amazon IoT TwinMaker 的 Grafana 面板,图一展示的为发动机处于静止,正在开始被加热的状态,高温区和低温区温度与环境温度一致,无明显温差,所以发动机转速为零。图二展示的是发动机开始转动的状态,高温区超过 200 度,低温区维持在 40 度,转速达到 1829 转/分钟。同时,Grafana 的面板中也展示了树莓派的指标,包括树莓派的 CPU,内存,以及主板的温度。

图一

图二

总结

本文利用亚马逊云科技托管服务展示了对传统工业设备进行数据采集,在边缘实现初步的数据处理整合,并发送到亚马逊云平台,利用相应的物联网托管服务实现设备的更新,指令下发以及可视化的数据监控功能。

所有在本文中的亚马逊云科技服务都为托管服务,由亚马逊云平台进行底层资源的维护,并提供安全高可用的架构,用户只需设计相关的业务逻辑即可,大大增加了开发和运维的效率。

本篇作者

曹阳

亚马逊云科技解决方案架构师,伦敦大学学院通信工程硕士,负责基于 AWS 云计算方案的架构咨询与设计,目前侧重于移动应用以及物联网领域的研究。

朱文军

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案架构的设计和技术咨询,同时致力于亚马逊云科技在各行业中的应用与推广,在 IoT 领域有丰富经验。

潘显坤

潘显坤是亚马逊云科技解决方案架构师,负责基于亚马逊云科技云平台解决方案的设计和咨询,具有超过 15 年的 IT 行业从业经验。在机器学习、物联网及汽车等多个领域,拥有丰富的理论及实践经验。