Amazon Web Services ブログ

AWS IoT SiteWise による設備総合効率 (OEE) の計算

はじめに

このブログ記事は、AWS IoT SiteWise での設備総合効率 (OEE) の使用に関するシリーズの第2回目です。この投稿では、AWS IoT SiteWise のネイティブ機能を使用して OEE を計算し、エンドツーエンドのソリューションとして計算値を収集、保存、変換、表示する方法を詳しく説明します。このプロセスを説明するユースケースとして、空港に設置された手荷物処理システム (BHS) を取り上げます。ユースケースの詳細については、まずこのシリーズのパート1、「AWS IoT SiteWise による総合設備効率(OEE)ガイド」をお読みください。

さらに、OEE 要素を自動化して、製薬、食品、飲料業界の製造生産ラインなど、他の多くのユースケースでこのソリューションの実装を効率化する方法についても説明します。このブログで説明されている概念を実践しやすいように、合成データを AWS IoT SiteWise にストリーミングし、本ブログで説明する計算を使用して OEE ダッシュボードを作成できるコードリポジトリも提供しています。

ユースケース

OEE の計算を掘り下げる前に、基準系として使用する例を確認しましょう。この例は BHS で、OEE 計算に必要なデータポイントは、荷物を運ぶ回転式コンベア(カルーセル)内の BHS に設置されたハードウェアから収集されます。ハードウェアは4つのセンサーで構成されています。モーター監視用の振動センサー2つ、コンベア監視用のスピードセンサー1つ、手荷物の処理量をカウントする光電センサー1つです。

ソリューションのアーキテクチャは次のとおりです。

Data Ingestion Reference Architecture
センサーデータは、AWS パートナーの CloudRail を通じて収集および整形されます。CloudRail のソリューションを利用すると、IIoT データの収集と AWS IoT SiteWise へのストリーミングが大幅に簡素化されます。この統合は、CloudRail 管理ポータルから直接設定できます。このアーキテクチャには、センサーデータを S3 バケットを経由して他の AWS サービスで利用できるようにするための追加コンポーネントが含まれています。

AWS IoT SiteWise の前提条件

データを AWS IoT SiteWise に送信する前に、モデルを作成してそのプロパティを定義する必要があります。前述のように、次の測定値(機器からのデータストリーム)をもつ、4つのセンサーを1つのモデルにグループ化します。

Model:Carousel

Asset Name: CarouselAsset

Property {

Measurement: Photo.Distance

Measurement: Speed.PDV1

Measurement: VibrationL.Temperature

Measurement: VibrationR.Temperature

}

測定値に加えて、アセットモデルにいくつかの属性(静的データ)を追加します。属性は、OEE 計算に必要な様々な値となります。

Model:Carousel

Asset Name: CarouselAsset

Property {

Attribute: SerialNumber

Attribute: Photo.distanceBase

Attribute: Photo.distanceThold

Attribute: Speed.max_speed_alarm

Attribute: Speed.min_speed_alarm

Attribute: Vibration.max_temp_c_alarm

Attribute: Ideal_Run_Rate_5_min

}

それでは、AWS IoT SiteWise コンソールに進み、空港の BHS を表すカルーセルモデルとアセットを作成しましょう。

左側のナビゲーションメニューを開き、ビルド、モデル、モデルの作成の順に選択して、このモデルの属性と測定値を定義します。

IoT SiteWise Model creation

アセットモデルの作成について詳しくは、ドキュメントをご覧ください。

OEE の計算

OEE の定義とその構成要素を見てみましょう。

OEE の標準計算式は次のとおりです。

コンポーネント
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 bags/hour で、これは 0.83333 bags/second に相当します。この値はシステムによって異なるため、製造元から入手するか、現場での観測性能に基づいて取得する必要があります。

Availability

Availability = Run_time/(Run_time + Down_time)

BHSには4つのセンサーがあり、そのセンサーのどの測定値(温度、振動など)を計算に含めるかを定義する必要があります。2つの振動センサーからの温度(摂氏)と速度センサーからの回転式コンベアの速度 (m/s) によって、稼働状況が決まります。

正しく動作するための許容値は、アセットモデルの以下の属性に基づいています。

Vibration.max_temp_c_alarm = 50

Speed.min_speed_alarm = 28

Speed.max_speed_alarm = 32

それでは、BHS の現在の状態を次のような数値コードで提供するデータ変換 Equipment_State を定義してみましょう。
1024 – マシンはアイドル状態です
1020 – システムの異常動作、高温、または定義された正常範囲外の速度値などの障害
1000 – 計画的な停止
1111 – 通常運転

この簡略化されたユースケースでは BHS のアイドル状態は定義されていませんが、他のデータストリームを AWS IoT SiteWise に統合することで、例えば、プログラマブルロジックコントローラー (PLC) や、人間のオペレーターがシステムのアイドル状態かどうかを入力するシステムから情報を登録することも可能です。

変換を追加するには、AWS IoT SiteWise コンソールでモデルに移動し、編集を選択します。変換の定義までスクロールし、名前、データ型 (ダブル) を入力し、それぞれのフィールドに次の数式を入力します。

Equipment_state =

if((Speed.PDV1>Speed.max_speed_alarm) or (Speed.PDV1<Speed.min_speed_alarm) or (VibrationL.Temperature>Vibration.max_temp_c_alarm) or (VibrationR.temperature>Vibration.max_temp_c_alarm),1020).elif(eq(Speed.PDV1,0),1000,1111)

Equipment state transform definition for OEE calculation

数式は、コンソールに入力すると次のようになります。UI は、数式の構築を支援するため、モデルで既に定義されている属性や測定値が提案表示されます。

Complete formula for equipment state

Equipment_State の定義が完了したら、BHS の他の状態を捕捉するため以下のように派生する変換を作成します。変換は他の変換を参照できます。

Defining other transforms for OEE calculation

次のメトリクスを定義して、マシンデータを時系列で集計します。各メトリクスの時間間隔は同じにしてください。

Fault_Time = statetime(Fault) – The machine’s total fault time (in seconds)

Stop_Time = statetime(Stop) – The machine’s total planned stop time (in seconds)

Run_Time = statetime(Running) – The machine’s total time (in seconds) running without issue.

Down_Time = Idle_Time + Fault_Time + Stop_Time – The machine’s total downtime

モデルのメトリクスの定義は次のようになります。

Metric Definitions - OEE Availability

Quality

Quality = Successes / (Successes + Failures)

ここでは、何が成功と失敗を構成するのかを定義する必要があります。このケースでの計測単位はバッグ数ですが、バッグの個数計数が成功した場合とそうでない場合をどのように定義すれば良いでしょうか。BHS の4つのセンサーから得られる測定値とデータを使用します。

バッグの数は、光電センサーが提供している距離を見てカウントされます。つまり、バンドを通過する物体があると、センサーは「ベース」距離よりも小さい距離を報告することを利用します。これはバッグの通過数を算出する簡単な方法ですが、同時に、測定の精度に影響を与えうる複数の条件を考慮する必要があります。

品質計算には以下のモデル属性を使用します。

Photo.distanceBase = 108

Photo.distanceThold = 0.1

Photo.DistanceBase は、センサーの前に物体がないときにセンサーによって報告される距離です。この値は定期的に校正して調整する必要がある場合があります。振動や位置ずれなどの要因により、バッグが誤検出される可能性があるためです。
Photo.DistanceThold は、センサーの感度の閾値を定義するのに使用されます。これにより、ゴミや小さな物体(バッグのアタッチメントやベルトなど)が通常のバッグのようにカウントされるのを防ぐことができます。

次に、バッグカウント用に2つの変換を設定します。

Bag_Count = if(Photo.Distance < Photo.distanceBase,1,0)

Dubious_Bag_Count = if((gt(Photo.Distance,Photo.distanceBase*(1-Photo.distanceThold)) and lt(Photo.Distance,Photo.distanceBase*0.95)) or (Speed.PDV1>Speed.max_speed_alarm) or (Photo.Distance>Photo.distanceBase),1,0)

Formula for dubious bag count

Bag_Count は光電センサーの前を通過する全てのバッグをカウントし、Dubious_Bag_Count は次の2つの異常と判定する条件下でバッグとして検出されたオブジェクトをカウントします。

  1. 検出される距離が基準距離の 95% から 90% の範囲に入るものです。これは、小さな物体や測定値のごくわずかな変動、振動による変化、またはセンサーが正しく取り付けられていないことを考慮したものです。
  2. 回転式コンベアの速度が定義された制限を超えた時にカウントされたバッグです。この状態では、センサーは回転式コンベア上で隣接するバッグをカウントできない可能性があります。

注:上記の条件は単純なルールであり、より良い結果を得るには、ベースの距離と閾値をフィールドデータで検証および分析することで適切な値を設定する必要があります。

成功と失敗をメトリクスとして以下のように定義します。

Successes = sum(Bag_Count) – sum(Dubious_Bag_Count)

Failures = sum(Dubious_Bag_Count)

最後に、OEE Quality をメトリクスとして以下のように定義します。

Quality = Successes / (Successes + Failures)

他のすべてのメトリクス定義と同じ時間間隔を使用することを忘れないでください。

Performance

Performance = ((Successes + Failures) / Run_Time) / Ideal_Run_Rate

Quality の計算から成功と失敗のメトリクスを、Availability からの Run_Time のメトリクスを取得できます。従って、必要なのは ideal_run_rate_5_min です。このシステムでは、この値は 300 bags/hour = 0.0833333 bags/second となります。

OEE Value

Availability、Quality、Performance が決まったので、OEE の最後のメトリクスを次のように定義します。

OEE = Availability * Quality * Performance

変換とメトリクスの定義を簡素化

変換とメトリクスとして定義される OEE コンポーネントを、AWS コンソールを使用する代わりにプログラムで定義することもできます。これは、Equipment_State の変換や Dubious_Bag_Count の変換のように複数の変数を含む複雑な式がある場合に特に便利です。また、自動化されたソリューションは手動ソリューションよりもエラーが発生しにくく、複数の環境で一貫して構成できます。Python 用 AWS SDK (Boto3) を使用してこれを行う方法を見てみましょう。

まず、変換/メトリクス計算で参照する測定値と属性のプロパティ ID、およびモデル ID を特定します。

Carousel Model Property IDs

次に、メトリクス/変換の JSON を定義します。例えば、BHS の Equipment_State を計算する新しい変換を作成するには、以下の属性が必要です。

Vibration.max_temp_c_alarm

Speed.max_speed_alarm

Speed.min_speed_alarm

And the following measurements:

VibrationL.Temperature

VibrationR.Temperature

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"
             }
           }
         ]
       }
     }
}

主となる 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)

update_asset_model_sitewise.py というスクリプトの入手と、AWS 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 は、前述のように AWS コンソールから直接取得できます。もしくは、AWS CLI を使用して更新されたモデル定義をクエリし、jq ユーティリティを使用して結果をフィルタリングすることでも取得できます。

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

その後、他の変換やメトリクスについても同じプロセスを繰り返して、OEE の計算に必要なすべてのコンポーネントを作成できます。

AWS IoT SiteWise アセットモデルの更新の詳細については、API リファレンスをご覧ください。

まとめ

このブログ記事では、AWS IoT SiteWise のネイティブ機能を使用して、実際のシナリオのセンサーデータを使用して OEE を計算し、物理システムから洞察に満ちた情報を取得する方法について説明しました。パブリックリポジトリで入手可能なデータを特定しながら、OEE の主要な要素である Availability、Quality、Performance を定義しました。最後に、計算とその自動化方法について詳しく説明しました。

読者の次のアクションとして、ここで紹介した内容をさらに発展させて、OEE 計算プロセスを独自のユースケースに適用すること、さらに、提供されている自動化ツールを使用して、産業システムを正確に監視するのに役立つデータ生成を簡素化および合理化していくことをお勧めします。

使用できるデータがない場合は、このパブリックリポジトリに概説されている手順に従い合成データで AWS IoT SiteWise を使い、OEE が提供する洞察に満ちた情報を発見することをお勧めします。

著者について

Juan Aristizabal

Juan Aristizabal

Juan Aristizabal は、アマゾンウェブサービスのソリューションアーキテクトです。カナダ西部の新規開拓企業のクラウドへの移行を支援しています。彼は、データセンターテクノロジー、仮想化、クラウドに至るまで、企業の IT トランスフォーメーションに10年以上携わってきました。余暇には、家族と一緒に旅行したり、シンセサイザーやモジュラーシステムで演奏したりするのが好きです。

Syed Rehan

Syed Rehan

Syed Rehan は、アマゾンウェブサービス (AWS) のシニアグローバル IoT サイバーセキュリティスペシャリストで、AWS IoT サービスチームで働いており、ロンドンを拠点としています。セキュリティの専門家、開発者、意思決定者と協力して、AWS IoT サービスの運用を推進している世界中の顧客を対象としています。Syed はサイバーセキュリティ、IoT、クラウドに関する深い知識を持っており、スタートアップからエンタープライズに至るまで、世界中のお客様が AWS エコシステムで IoT ソリューションを構築できるよう支援しています。

この記事は Calculating Overall Equipment Effectiveness (OEE) with AWS IoT SiteWise の日本語訳です。IoT Consultant の正村 雄介が翻訳しました。