使用 亚马逊云科技 IoT SiteWise 计算设备整体效率 (OEE)

简介

这篇博客文章代表了关于在 亚马逊云科技 IoT SiteW ise 中使用整体设备效率 (OEE) 的系列文章中的第二篇文章。在这篇文章中,我们将深入探讨如何使用 亚马逊云科技 IoT SiteWise 原生功能来计算 OEE,以收集、存储、转换和显示计算结果作为端到端解决方案。我们将以位于机场的行李处理系统 (BHS) 作为用例来说明该流程。请先阅读本系列的第 1 部分, 亚马逊云科技 IoT SiteWise 的 工业设备整体效率 (OEE) 指南,了解有关该用 例的更多背景信息。

此外,我们将展示如何实现OEE元素的自动化,以简化该解决方案在许多其他用例中的实施,例如制药、食品和饮料行业的制造生产线。为了帮助您实践本博客中介绍的概念,我们还提供了一个代码存储库,允许您将合成数据流式传输到 亚马逊云科技 IoT SiteWise,从而使用此处提供的计算方法创建 OEE 控制面板。

用例

在深入研究 OEE 计算之前,让我们定义将用作参考框架的示例。我们的示例是 BHS,计算 OEE 所需的必要数据点是从旋转木马中的 BHS 上安装的硬件中收集的。硬件由四个传感器组成:两个用于电机监控的振动传感器,一个用于输送机监控的速度传感器,以及一个用于计算行李吞吐量的光电传感器。

该解决方案的架构如下所示:

Data Ingestion Reference Architecture
传感器数据是通过 CloudRail 收集和格式化的,CloudRail 是 亚马逊云科技 的合作伙伴 ,其解决方案极大地简化了将工业物联网数据收集和传输到 亚马逊云科技 IoT SiteWise 的过程。这种集成可直接通过 CloudRail 管理门户 进行配置。该架构包括其他组件,用于通过 S3 存储桶将传感器数据提供给其他 亚马逊云科技 服务。

亚马逊云科技 IoT SiteWise 的先决条件

在向 亚马逊云科技 IoT SiteWise 发送数据之前,您必须 创建模型 并定义其属性。如前所述,我们有四个传感器将分组为一个模型,其测量结果如下(来自设备的数据流):

型号:旋转木马

资产名称:CarouseLasset

财产 {

测量:照片。距离

测量:speed.pdv1

测量:振动。温度

测量:振动、温度

}

除了测量值外,我们还将在资产模型中添加一些 属性 (静态数据)。这些属性代表我们在 OEE 计算中所需的不同值。

型号:旋转木马

资产名称:CarouseLasset

财产 {

属性:序列号

属性:photo.distanceBase

属性:photo.distancetHold

属性:speed.max_speed_alarm

属性:speed.min_speed_alarm

属性:振动.max_temp_c_alarm

属性:理想运行速度_5_min

}

现在,让我们进入并创建代表机场 BHS 的旋转木马模型和资产。

打开左侧的导航菜单,选择 构建,模型 ,然后选择 创建模型 来定义该模型的属性和测量值:

IoT SiteWise Model creation

有关创建资产模型的更多信息,请访问 文档

计算 OEE

让我们来看看 OEE 的定义及其组成部分。

标准的 OEE 公式是:

Component Formula
Availability Run_time/(Run_time + Down_time)
Quality Successes / (Successes + Failures)
Performance ((Successes + Failures) / Run_Time) / Ideal_Run_Rate
OEE Availability * Quality * Performance

让我们来看看 BHS 的参数定义。有关 OEE 参数的完整描述,请访问 文档

  • Ideal_Run_Rate:在我们的例子中,理想的运行速率为 300 袋/小时,相当于 0.83333 袋/秒。该值取决于系统,应从制造商那里获得或基于现场观测性能。

可用性

可用性 = 运行时间/(运行时间 + 停机时间)

我们在BHS上有4个传感器,我们需要定义要在计算中包括传感器的哪些 测量值 (温度、振动等)。来自两个振动传感器的温度(摄氏度)和来自速度传感器的旋转木马速度(m/s)将决定可用性状态。

正确操作的可接受值基于资产模型的以下属性。

振动。max_temp_c_alarm = 50

speed.min_speed_alarm = 28

speed.max_speed_alarm = 32

让我们定义一下 Equipment_State,一种以数字代码提供 BHS 当前状态的数据 转换 :10
24 — 机器处于空闲状态
1020 — 故障,例如系统异常运行、温度过高或速度值不在定义的正常范围内
1000 — 计划停止
1111 — 正常运行

在这个简化的用例中并未定义 BHS 的空闲状态,但是,可以将其他数据流集成到 亚马逊云科技 IoT SiteWise 中,并注册来自可编程逻辑控制器 (PLC) 或其他系统的信息,在这些系统中,由人工操作员决定系统是否处于空闲状态。

要添加转换,请前往 亚马逊云科技 SiteWise 控制台上的模型并选择 编辑。 滚动到转换定义并提供名称、数据类型(双精度),然后在相应的字段中输入以下公式:

设备状态 =

if ((speed.pdv1>speed.max_speed_alarm) 或 (speed.pdv1Vibration.max_temp_c_alarm) 或 (vibrationr.pdv1>vibration.max_temp_c_alarm) ,1000,1111)

Equipment state transform definition for OEE calculation

在控制台中输入公式时,公式应如下所示。用户界面将提供建议,供您选择模型中已定义的属性和测量值来构建公式。

Complete formula for equipment state

定义了 Equipment_State 后,创建以下派生变换以捕获 BHS 的不同状态。变换可以引用其他变换。

Defining other transforms for OEE calculation

继续定义以下 指标 以汇总一段时间内的计算机数据。每个指标保持相同的间隔。

Fault_Time = 状态时间(故障)— 计算机的总故障时间(以秒为单位)

STOP_Time = 状态时间(停止)— 计算机的总计划停止时间(以秒为单位)

Run_Time = 状态时间(正在运行)— 计算机正常运行的总时间(以秒为单位)。

停机时间 = 空闲时间 + 故障时间 + 停止时间 — 机器的总停机时间

模型的指标定义应如下所示:

Metric Definitions-OEE Availability

质量

质量 = 成功/(成功+失败)

在这里,我们需要定义什么是成功和失败。在这种情况下,我们的生产单位是已计数的袋子,那么我们如何定义何时成功计算袋子,何时不成功计数呢?我们使用BHS的四个传感器提供的测量结果和数据。

通过观察光电传感器提供的距离来计算袋子,因此,当有物体通过波段时,传感器报告的距离将小于 “基本” 距离。这是计算通过行李的简单方法,但同时它容易出现多种情况,从而影响测量的准确性。

我们在质量计算中使用这些模型属性:

photo.distanceBase = 108

photo.distancetHold = 0.1

Photo.DistanceBase 是传感器在前面没有物体时报告的距离。该值可能需要定期校准和调整,振动和偏差等因素可能会导致误报。
Photo.distancetHold 用于定义传感器的灵敏度阈值,以避免将碎片或小物体(例如行李附件或皮带)计为普通行李。

然后,我们为行李数建立了两个变换:

Bag_Count = if(照片。距离 < photo.distanceBase1,,0)

Dubious_Bag_Count = i f (gt(Photo.distanceBase*,photo.distanceBase*(1-photo.distanceHold))和 lt(照片.distanceBase,photo.distanceBase *0.95)或(speed.pdv1>speed_speed_Alarm)或(photo.distance Base),1,0)

Formula for dubious bag count

Bag_Count 将考虑通过光电传感器前面的所有行李,Dubious_Bag_Count 将在两种异常条件下将检测到的物体计为行李:

  1. 检测到的距离在基本距离的95%和90%之间;考虑到小物体和测量结果的极小变化,有由于振动而发生变化的迹象,或者传感器未正确安装。
  2. 当旋转木马的速度超过规定的极限时,传感器可能会错过计数旋转木马上距离过近的行李。

注意:上述条件是简单的规则,需要使用现场数据检查和分析正确的距离基数值和阈值,以获得更好的结果。

让我们将成功和失败定义为指标:

成功次数 = 总和(行李数)— 总和(Dubious_Bag_Count)

失败次数 = 总和(Dubious_Bag_Count)

最后,我们也可以将 OEE 可用性定义为指标:

质量 = 成功/(成功+失败)

请记住使用与所有其他指标定义相同的指标间隔。

性能

性能 =((成功次数 + 失败次数)/运行时间)/Ideal_Run_Rate

我们从质量计算中得出成功和失败,从可用性中得出 Run_Time。因此,我们只需要使用 Ideal_run_rate_5_min,在我们的系统中,它是 300 袋/小时 = 0.0833333 包/秒。

OEE 价值

有了可用性、质量和性能,我们着手定义 OEE 的最后一个指标。

OEE = 可用性 * 质量 * 性能

简化转换和指标定义

作为替代方案,可以以编程方式定义定义为转换和指标的 OEE 组件,而不必使用 亚马逊云科技 控制台。当存在涉及多个变量的复杂公式时,这尤其有用,例如 Equipment_State 和 Dubious_Bag_Count 变换;而且,与手动解决方案相比,自动解决方案不易出错,并且可以在多个环境中进行一致的配置。让我们来看看如何使用适用于 Python 的 亚马逊云科技 开发工具包 (Boto3 ) 来做到这一点。

首先,确定您将在变换/指标计算中引用的测量值和属性属性 ID 以及模型 ID。

Carousel Model Property IDs

然后为指标/转换定义 JSON。例如,要创建新的变换来计算 BHS 的 Equipment_State,我们需要以下属性:

振动.max_temp_c_alarm

速度.max_speed_alarm

Speed.min_speed_alarm

以及以下测量值:

振动。温度

振动 r.温度

Speed.pdv1

按照此结构创建文件。记得替换 propertyID 并将其另存为 equipment_state.json:

{
     "name": "Equipment_State",
     "dataType": "DOUBLE",
     "type": {
       "transform": {
         "expression": "if((var_speedpdv1>var_speedmax_speed_alarm) or (var_speedpdv1<var_speedmin_speed_alarm) or (var_vibrationltemperature>var_vibrationmax_temp_c_alarm) or (var_vibrationrtemperature>var_vibrationmax_temp_c_alarm),1020).elif(eq(var_speedpdv1,0),1000,1111)",
         "variables": [
           {
             "name": "var_vibrationrtemperature",
             "value": {
               "propertyId": "b9554855-b50f-4b56-a5f2-572fbd1a8967"
             }
           },
           {
             "name": "var_vibrationltemperature",
             "value": {
               "propertyId": "e3f1c4e0-a05c-4652-b640-7e3402e8d6a1"
             }
           },
           {
             "name": "var_vibrationmax_temp_c_alarm",
             "value": {
               "propertyId": "f54e16fd-dd9f-46b4-b8b2-c411cdef79a2"
             }
           },
           {
             "name": "var_speedpdv1",
             "value": {
               "propertyId": "d17d07c7-442d-4897-911b-4b267519ae3d"
             }
           },
           {
             "name": "var_speedmin_speed_alarm",
             "value": {
               "propertyId": "7a927051-a569-41c0-974f-7b7290d7e73c"
             }
           },
           {
             "name": "var_speedmax_speed_alarm",
             "value": {
               "propertyId": "0897a3b4-1c52-4e80-80fc-0a632e09da7e"
             }
           }
         ]
       }
     }
}

主要表达式如下:

if ((var_speedpdv1>var_speedmax_speedmax_speedmax_speedmax_speed_speed_speed_c_alarm) 或 (var_vibrationmax_temp_c_alarm) ,1000,1111)

访问 此 公共存储库,获取 update_asset_model_sitewise.py 脚本 以及有关如何将数据流式传输到 亚马逊云科技 IoT SiteWise 的更多详细信息。

然后,运行以下脚本,传递模型 ID 和先前定义的文件名。

#python3 update_asset_model_sitewise.py --assetModelId [Asset Model ID] --property_file [JSON File defining the new property] --region [AWS Region]

脚本返回成功响应后,可以如前所述直接从 亚马逊云科技 控制台获取创建的新属性 ID,也可以使用 亚马逊云科技 CLI 查询更新的模型定义并使用 jq 实用程序筛选结果。

#aws iotsitewise describe-asset-model --asset-model-id [model ID] | jq .'assetModelProperties[] | select(.name=="Equipment_State_API")'.id

然后,您可以使用其他变换和指标重复该过程,以创建 OEE 计算所需的所有组件。

有关更新 亚马逊云科技 IoT SiteWise 资产模型的更多信息,请访问 API 参考文档。

结论

在这篇博客文章中,我们探讨了如何使用现实场景中的传感器数据来计算 OEE,并使用 亚马逊云科技 IoT SiteWise 原生功能从物理系统中获取有见地的信息。我们完成了识别可用数据的过程,定义了构成 OEE 主要元素的要素,即可用性、质量和性能,最后深入研究计算以及如何实现计算自动化。

作为行动号召,我们邀请您进一步阅读此处介绍的内容,将 OEE 计算过程应用于您自己的用例,并使用提供的自动化工具来简化和简化数据的创建,从而帮助准确监控您的工业系统。

如果您没有可用数据可供使用,我们鼓励您按照此 公共存储库 中概述的步骤轻松地使用合成数据试用 亚马逊云科技 SiteWise,并发现 OEE 可以为你提供的有见地的信息。

作者简介

Juan Aristizabal

胡安·阿里斯蒂扎巴尔

胡安·阿里斯蒂扎巴尔是亚马逊网络服务的解决方案架构师。他支持加拿大西部绿地客户的云之旅。他拥有超过10年的公司IT转型经验,包括数据中心技术、虚拟化和云技术。在业余时间,他喜欢和家人一起旅行,玩合成器和模块化系统。

Syed Rehan

赛义德·雷汉

赛义德·雷汉 是亚马逊网络服务(亚马逊云科技)的高级全球物联网网络安全专家,在伦敦工作,在亚马逊云科技物联网服务团队工作。他报道了与安全专家、开发人员和决策者合作以推动 亚马逊云科技 IoT 服务的采用的全球客户。Syed 对网络安全、物联网和云有深入的了解,并与从初创企业到企业的全球客户合作,使他们能够使用 亚马逊云科技 生态系统构建物联网解决方案。