25、工业物联网中的高级分析与机器学习

工业物联网中的高级分析与机器学习

1. 远程工业物联网解决方案与可持续性

远程监控是工业物联网(IIoT)中易于实现的应用之一,其收益明显超过投资。它还为向面向服务的架构设计发展提供了机会,并且可构建和集成到该平台的应用程序和业务用例数量众多。

在确立了远程监控的重要性后,我们面临着数据采集和围绕缓解路径构建解决方案架构的挑战。可持续性是其中的关键信息,在未来几年将变得尤为突出。在设计解决方案时,围绕约束条件和需求,聚焦于价值驱动因素,特别是可持续性,将是为下一代构建解决方案的关键。这里通过两个实际用例来阐述核心概念:
- 远程太阳能农场监控 :还展示了该解决方案的AWS参考架构。
- 碳捕获和储存工厂的解决方案架构 :深入探讨了作为环境、社会和治理(ESG)及可持续性一部分的节能主题。

2. 高级分析与机器学习概述

机器学习(ML)和人工智能(AI)在行业中仍是相对较新且令人兴奋的话题。实时对数据进行推理以确定行动方案具有强大的功能。在ML中,对数据进行推理是指基于证据和推理得出结论,我们将探讨如何根据先前或现有数据推断结果或条件。

需要说明的是,我们并非数据科学家,而是具备广泛技能的物联网和云架构师,专注于交付复杂物联网解决方案所需的主题。本章的目的不是让你成为数据科学家,而是展示如何与数据科学家合作,做出更明智的决策,并说明从数据消费到分析的端到端过程。

本章将涵盖以下主要主题:
- ML和工业物联网
- 数据工程
- 构建模型
- 实时推理

3. 技术要求

本章的技术要求与之前的实践技术章节相似。若要理解过程,只需具备基本的技术背景;但要跟随示例操作并重现场景,则需要额外的技术技能。通过学习之前的内容,积累使用AWS IoT Core、AWS Glue和AWS IoT Greengrass的经验会很有帮助。我们将深入研究获取更好的Modbus数据,并扩展AWS Lambda示例以解码该数据。具备Python编程知识对Lambda工作会有帮助,因为我们将使用Python和Jupyter笔记本进行深入分析和模型构建。代码示例可在 此处 找到。

4. ML和工业物联网

目前,AI和ML这两个术语被过度使用。当有新且令人兴奋的事物出现时,供应商的营销机器会将其用于各种可销售的产品。毫无疑问,过去几年AI和ML取得了巨大进展,云提供商的一个重要关注点是将这些能力普及到大众或至少技术社区。

AI旨在创建智能机器,模仿人类的学习和解决问题的能力。近期,AI的定义有了新趋势,更强调理性,即机器在决策时能够理性行动。AI分为多个领域,如自然语言处理、视觉或图像识别以及ML等,每个领域都以特定方式推动该领域的发展。

ML是AI的重要子集,也是本章的主要焦点。ML的目标是创建能够根据现有数据中的模式进行学习和适应的系统。通过应用算法和统计模型,我们可以分析数据并得出封装在模型中的相关模式。这些预构建的模型可以通过推理得出结论,并根据传入数据提供决策能力。

5. 推理与规则

在设置物联网环境时,通常会使用规则和警报来识别和管理系统中的潜在问题。例如,如果知道温度应在特定范围内,可以检查该范围,当值不匹配时触发警告,这是基于规则的监控的简单示例。更复杂的规则也可以进行分析,如温度在范围内且压力低于30 PSI时不采取任何行动。这些规则和范围可以从设备服务手册或当前的操作员和维护团队处获得。

AWS IoT规则是一个简单的规则引擎,可以根据消息的类型或内容进行路由。但消息在发送到IoT Core时通常会进行编码或加密,以减少带宽。例如,Modbus数据包中的值可能以两个8位有符号整数的形式提供,需要将其转换为一个16位无符号整数才能进行数据决策,这使得对某些数据使用简单的规则方法变得困难。

因此,数据应发送到某个中间异步服务进行评估。理想情况下,这可以是一个数据队列,数据可以在其中排队并快速评估,而不会影响通过中央系统的数据流。以下是数据工程总体流程的示例:

graph LR
    A[数据源] --> B[数据采集]
    B --> C[数据编码]
    C --> D[IoT Core]
    D --> E[规则引擎]
    E --> F[数据队列]
    F --> G[评估]
    G --> H[决策]

规则和推理并非相互排斥,一些规则非常严格,如冷藏温度不在规定范围内会导致物品损坏,这种情况下使用规则进行监控是合适的,规则应成为监控环境的重要组成部分。

6. 从数据中学习

我们常常不清楚设备的正常运行状态是什么样的。操作员通常能察觉到设备出现问题或即将出现问题,但可能难以清晰解释。物联网的重点在于利用数据来填补这种理解上的差距,区分正常运行条件和超出范围且未被检查的数据。

7. 数据工程

当需要超越规则(即使是复杂规则)来定义设备的已知参数或条件时,就需要使用ML。ML作为AI的一个子集,允许我们以新的方式检查数据,构建能够从现有数据中学习并随着时间改进的模型,以预测设备或过程的异常或故障。

我们的总体目标是结合之前学到的知识,包括从边缘收集数据、处理和存储数据,并将ML添加到整个过程中,然后使用构建的模型对新传入的数据进行实时推理。以下是目标架构的重点关注领域:
- 获取电压和电流数据 :从修改后的Modbus TCP示例开始,从模拟可编程逻辑控制器(PLC)中提取电压和电流数据。之前我们提取的是PLC的线圈数据(布尔值),而ML使用实际的十进制值更合适。电流数据将每隔60秒进行查询和检查。
- 修改消息示例:

message = '{ "id": "00824502", "function": "ReadInputRegisters", "address": 11, "quantity": 1 }'
- 此消息与之前的相比有几个变化:将id值替换为序列号,以便识别请求关联的设备;将功能从ReadCoils改为ReadInputRegisters,告知Modbus TCP组件读取数据的方式;地址空间为11,不同的PLC或Modbus设备地址空间和寻址方案可能不同,可能需要进行一些试验才能找到合适的寻址方案。
  • 处理和解码Modbus消息 :模拟PLC的新值需要额外的解码,类似于之前对编码的LoRaWAN消息的解码。我们将通过一个Lambda函数来解码和存储传入的消息。以下是Lambda解码函数的示例:
import json, csv, boto3, os, io, sys, uuid, datetime, dateutil.parser, time
from botocore.exceptions import ClientError

def lambda_handler(event, context):
    print(os.environ)
    print("Received event: ", type(event), json.dumps(event))

    eui = event['id']
    print("eui: ", type(eui), eui)
    datenow = datetime.datetime.now()
    print("datenow: ", type(datenow), datenow)
    event['datetime'] = datenow.strftime("%Y-%m-%dT%H:%M:%SZ")
    year = datenow.strftime("%Y")
    month = datenow.strftime("%m")
    day = datenow.strftime("%d")
    minute = datenow.strftime("%M")
    hour = datenow.strftime("%H")
    second = datenow.strftime("%S")

    # 存储初始消息到原始数据湖
    s3 = boto3.client("s3")
    bucket_name = "s3-datalake-iot-raw"
    file_name = str(minute) + ":" + str(second) + ".json" 
    folder_path = "modbus/conveyer/" + str(eui) + "/current/" + str(year) + "/" + str(month) + "/" + str(day) + "/" + str(hour) + "/" + file_name 
    s3.put_object(Bucket=bucket_name, Key=folder_path, Body=json.dumps(event, indent=2))

    values = event['bytes']
    print("bytes: ", type(values), values)

    # 提取两个有符号整数
    current1 = event['bytes'][0]
    current2 = event['bytes'][1]

    # 将整数转换为十六进制字符串
    current_str1 = hex((current1) & 0xFF)
    current_str2 = hex((current2) & 0xFF)

    # 转换回十六进制整数
    current_int1 = int(current_str1, 16)
    current_int2 = int(current_str2, 16)

    # 组合两个值为一个16位无符号整数
    decimal_value = hex((current_int1<<8) | current_int2)

    current = int(decimal_value, 16)

    event['current'] = int(decimal_value, 16)
    # 从JSON字符串中删除不必要的字段
    del event['bytes']
    del event['type']

    print("final json: ", type(event), event)
  • 使用AWS Glue执行ETL :在使用Amazon SageMaker构建模型之前,使用AWS Glue执行一些ETL操作,将数据转换为格式化的数据湖,以大CSV文件的形式存储,然后将新格式的数据导入SageMaker Studio。

通过完成这些准备工作,我们可以更好地理解数据在架构中的端到端流动,为后续的模型构建和实时推理奠定基础。

工业物联网中的高级分析与机器学习

8. 解码值的详细步骤

在数据工程中,解码Modbus消息中的值是关键步骤。下面详细介绍如何将接收到的字节列表转换为最终可用的十进制值。

首先,我们从接收到的JSON事件对象中提取字节列表:

values = event['bytes']
print("bytes: ", type(values), values)

假设接收到的字节列表为 [0, -6] ,上述代码将在控制台输出:

bytes: <class 'list'> [0, -6]

接下来,我们分别提取这两个有符号整数:

current1 = event['bytes'][0]
current2 = event['bytes'][1]

这将得到两个独立的整数变量,控制台输出如下:

current1: <class 'int'> 0
current2: <class 'int'> -6

由于这些值是大端字节序,即第一个字节包含高阶位和最重要的值,第二个字节是低阶位。为了进一步处理,我们将这两个有符号整数转换为十六进制字符串:

current_str1 = hex((current1) & 0xFF)
current_str2 = hex((current2) & 0xFF)

转换后的控制台输出为:

current_str1: <class 'str'> 0x0
current_str2: <class 'str'> 0xfa

然后,我们再将这些十六进制字符串转换回十六进制整数:

current_int1 = int(current_str1, 16)
current_int2 = int(current_str2, 16)

此时控制台输出为:

current_int1: <class 'int'> 0
current_int2: <class 'int'> 250

为了得到最终的十进制值,我们需要将这两个十六进制整数组合起来。由于第一个字节是最重要的,我们将其左移8位,然后使用按位或操作将两个值合并为一个16位无符号整数:

decimal_value = hex((current_int1<<8) | current_int2)

这一步可能有点复杂,对于不熟悉位运算的人来说可能较难理解。例如,当第一个字节为0,第二个字节为250时,通过上述操作得到的结果在十六进制下为 0xfa 。最终,我们将这个十六进制值转换为十进制整数:

current = int(decimal_value, 16)

控制台输出最终的电流值:

final current: <class 'int'> 250

最后,我们将最终的电流值添加到事件对象中,并删除不必要的字段:

event['current'] = int(decimal_value, 16)
del event['bytes']
del event['type']
print("final json: ", type(event), event)
9. 构建模型

在完成数据工程的准备工作后,我们可以开始构建模型。使用经过处理和转换的数据,我们可以利用机器学习算法来训练模型。在这个过程中,我们可以使用Python和Jupyter笔记本,结合AWS SageMaker等工具。

以下是构建模型的一般步骤:
1. 数据准备 :确保数据已经经过清洗、转换和特征工程,适合用于模型训练。在前面的数据工程部分,我们已经完成了数据的采集、解码和ETL操作,得到了格式化的数据湖。
2. 选择算法 :根据问题的类型和数据的特点,选择合适的机器学习算法。例如,如果是预测设备故障,可以选择分类算法;如果是预测设备的性能指标,可以选择回归算法。
3. 训练模型 :使用准备好的数据和选择的算法,在AWS SageMaker中训练模型。可以通过调整算法的参数来优化模型的性能。
4. 评估模型 :使用测试数据集对训练好的模型进行评估,计算模型的准确率、召回率、均方误差等指标,评估模型的性能。
5. 优化模型 :根据评估结果,调整算法的参数或选择不同的算法,以优化模型的性能。

10. 实时推理

构建好模型后,我们可以将其应用于实时推理。实时推理是指根据新传入的数据,使用训练好的模型快速得出结论或预测结果。

以下是实时推理的一般流程:

graph LR
    A[新传入数据] --> B[数据预处理]
    B --> C[模型推理]
    C --> D[结果输出]

具体操作步骤如下:
1. 数据预处理 :对新传入的数据进行与训练数据相同的预处理操作,包括解码、转换和特征工程等,确保数据的格式和特征与训练数据一致。
2. 模型推理 :将预处理后的数据输入到训练好的模型中,使用模型进行推理,得到预测结果。
3. 结果输出 :将推理结果输出,可以用于决策、报警或其他应用。

例如,在工业物联网中,我们可以实时监测设备的电压和电流数据,将这些数据进行预处理后输入到训练好的模型中,预测设备是否会出现故障或异常。如果预测结果显示设备可能出现问题,可以及时发出警报,通知维护人员进行处理。

11. 总结

工业物联网中的高级分析与机器学习是一个充满挑战和机遇的领域。通过远程监控和可持续性设计,我们可以更好地利用工业物联网的优势,提高生产效率和降低成本。在数据工程方面,我们需要处理和解码各种数据,使用ETL工具将数据转换为适合模型训练的格式。构建模型和实时推理是实现工业物联网智能化的关键步骤,通过选择合适的算法和优化模型,我们可以实现对设备和过程的准确预测和决策。

在实际应用中,我们需要具备一定的技术背景和实践经验,熟悉AWS IoT Core、AWS Glue、AWS Lambda和Amazon SageMaker等工具和服务。同时,我们还需要与数据科学家和分析师合作,共同推动工业物联网的发展。

希望本文能够帮助你更好地理解工业物联网中的高级分析与机器学习,为你在实际项目中提供一些参考和指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值