Amazon Web Services ブログ
【AWS IoTのSAP連携】予知保全により運用コストを削減
この記事は、Kenny Rajan、Patrick Leung、Scott Francis、Will Charlton、Ganesh Suryanarayanが執筆したものです。
オペレーショナルテクノロジー(OT)とインフォメーションテクノロジー(IT)の融合は、企業が製造効率を高める方法を再構築しています。現場のPLC(Programmable Logic Controller)レベルからMES(Manufacturing Execution System)、さらにはSAP PM(Plant Maintenance)やSAP S/4HANA Asset Managementに至るまで、さまざまな場面で活用されています。
AWSのIoTソリューションにより、産業界の企業はプロセスのデジタル化、ビジネスモデルの変革、パフォーマンスと生産性の向上、廃棄物の削減を実現することができます。以下は、お客様がAWS IoTソリューションを適用して、産業プロセスのパフォーマンスと生産性を向上させた例です。
- AWS IoTにより産業活動における品質予測モデルを構築:AWS IoTがどのように産業活動からデータを収集・分析し、品質予測モデルを構築するかをご覧ください。詳細はこちら
- AWS IoTにより産業活動における予知保全をサポート:AWS IoTがどのようにして予防的メンテナンスを計画し、予定外のダウンタイムを削減するかをご覧ください。詳細はこちら
はじめに
このブログ記事では、予知保全のためにAWS IoTソリューションをSAPと統合する方法を紹介します。SAPのプラントメンテナンス(PM)は、技術システムの高い可用性を維持するためのデータとプロセスのセットで構成されています。これにより、お客様は旧来のインターバルまたは故障ベースのメンテナンスサイクルから、計画的または予防的なメンテナンスサイクルに移行することができます。
次の図は、組織内のさまざまな機器、デバイス、資産に関する情報をタイムリーに計画、検査、記録し、対処するためのビジネスプロセスを示しています。各テクニカルオブジェクトの詳細な情報は、SAPのドキュメントに記載されています。
ビジネスプロセスの例 1:
プラントメンテナンスや顧客サービスのプロセスでは、多くの機器の読み取り値が記録されます。アセンブリやサブコンポーネントで潜在的な破壊的イベントが発生した場合、サービス通知をトリガすることができます。
ビジネスプロセスの例 2:
また、しきい値に基づいてメンテナンスオーダーをトリガーするメンテナンスプランを設定することもできます。エッジにあるデバイスが異常を検出すると、AWS Lambda関数がトリガーされ、アセンブリまたはサブアセンブリのSAPでの測定ドキュメントを作成することができます。これにより、メンテナンスオーダーの作成が開始されます。
アーキテクチャとソリューションの概要
本ブログではIoTデバイスシミュレータを使って機器の故障を再現しています。そして、AWSのIoTサービスを使って故障を早期に検知する方法をご紹介します。SAPとの連携のために、RESTベースのOData(Open Data Protocol)サービスとAWS Lambdaを活用して、メンテナンス活動のためのサービス通知を作成します。SAPのメンテナンス通知は、異常や例外的な状況をプロアクティブに通知することで、プラントのメンテナンス業務において重要な役割を果たします。このソリューションは、以下のコンポーネントで構成されています。
- IoTデバイスのシミュレーション環境:AWS Cloud9または独自の統合開発環境(IDE)を使用して、コンプレッサーの温度読み取りをAWS IoT Coreにシミュレートします。
- セキュリティとコネクティビティ:AWS Cloud Development Kit(CDK)は、AWS IoT CoreをデプロイしてIoTのモノを登録し、X.509証明書を生成します。このX.509証明書をシミュレーション環境にインストールして、AWS IoTコアへの接続を確立します。そして、シミュレーションされたデータは、MQTT(Message Queuing Telemetry Transport)プロトコルを使ってAWS IoTコアに送信されます。さらに、AWS IoTはIoTのモノを管理するためのレジストリを提供しています。この例では、このレジストリでコンプレッサーを管理しています。
- メッセージペイロード解析: AWS IoTアクションルールは、シミュレータからの特定のMQTTペイロードをリッスンし、データをフォーマットして、AWS IoTアナリティクスサービスにデータを送信します。
- AWS IoT Analyticsによるメッセージのリアルタイム監視:AWS IoT Analyticsチャンネルは、AWS IoT Coreからデータを受信します。 AWS IoT Analyticsは、データが特定の閾値内にあるかどうかを検証します。ここでは、セットID、ソース、データ保持期間を設定し、チャンネルを適切なパイプラインにルーティングします。
- AWS IoT Analyticsのパイプラインのアクティビティを設定:
- データ処理:メッセージの属性を変換し、メッセージ全体をフィルタリングします。ここでは、アクティビティを連鎖させて、メッセージを保存する前に処理して準備します。
- データの強化:AWS IoT Analyticsデータストアにデータを送信する前に、IoTコアからのデータを強化します。AWS IoTデバイスレジストリからのデータをメッセージに追加するアクティビティです。
- データの正規化:メッセージから属性を削除して、IoTペイロードメッセージを正規化し、必要なデータをルートレベルでフィルタリングします。
- AWS Lambdaによるデータ変換:Lambda関数を呼び出して上流のメッセージを変換・強化し、Amazon DynamoDBから製品範囲を取得します。この活動を通じて、AWS IoT Analyticsは、IoTシミュレータから送信されたデータに温度変動があるかどうかを判断するためにAmazon DynamoDBを呼び出すことで、特定のデバイスの標準的な温度範囲を理解することができます。この例ではコンプレッサーです。
- SAP製品データの取得:DynamoDBのセットアップには、デバイス名に対してマッピングされたSAP属性が含まれています。これらの属性を使って、IoT AnalyticsはSAP製品情報を取得し、さらに下流の処理を行います。
- データストア:AWS IoT Analyticsのデータストアは、メッセージを受信して保存します。ここでは、期間中の最新の温度測定値を選択するSQLクエリを構成します。データセットはAmazon Simple Storage Service(S3)に保存され、同時にAWS IoT Eventsに通して温度の状況を把握します。
- 異常の検出:AWS IoT Events 探知器モデルを使用して、受信したインプットを評価する条件付き(ブール)ロジックを定義し、異常イベント(温度が15分以上正常範囲外)を検出します。イベントが検出されると、状態が変更され、IoTイベントに対する追加アクションがトリガーされます。今回のデモでは、このモデルがSAPを呼び出して、AWS Lambdaを使ってSAPサービスの通知を作成するように構成されています。
- SAP Lambda ODataへのAPI統合:本サンプルパッケージには、SAPと接続し、REST APIコールでODataサービスを消費するLambdaレイヤーが含まれています。 異常が検出されると、IoT Event 探知器モデルがAWS Lambda関数を呼び出し、SAPの機器番号と機能的な位置情報を渡して、SAPのサービス通知を作成します。
- サービス通知の作成:環境変数(Entity-Set Name、Service-name、SAP-host、SAP-port、SAP authentication)を使用してSAP ODataサービスを呼び出すために、上記のペイロードでHTTP POSTリクエストが開始されます。HTTP POST レスポンスは、SAP システムからサービス通知番号を返します。
- 警告メッセージ:AWS Lambda は SAP のサービス通知番号を含む応答を受け取ります。これは解析され、サブスクライバに警告するためにAWS Simple Notification Service (SNS)トピックに送信されます。
ソリューションのデプロイ
デプロイプロセスには2つの重要なステップがあります。1つ目はSAPシステムの設定で、2つ目はAWSのデプロイです。詳細な手順を以下に示します。
SAP の構成
SAP バックエンドシステムで OData サービスを作成します。これを実現するには 2 つの方法があります。
- SAP OData サービス SAP EAM_NTF_CREATE を使用して OData サービスを有効にします。
- ペイロードに対してカスタマイズされたストラクチャを使用して SAP OData サービスを作成します。
このデプロイでは、カスタマイズされたストラクチャを使用しており、その手順を以下に示します。
- SAP Transaction SE11 を使用して、カスタムSAP ABAPストラクチャZSERVICE_MESSAGE_IOT を作成します。
- SAP Transaction SE11 を使用してカスタム SAP ABAP ストラクチャZPM_SERVICE_NOTIF_STRを作成します。
- 前の手順で作成した SAP ABAPストラクチャを使用して、SAP Transaction SEGW で SAP ゲートウェイサービスを作成します。
- Service Implementation セクションで、メソッド NOTIF_CREATESET_CREATE_ENTITY を再定義します。
- 関数モジュール BAPI_ALM_NOTIF_CREATE、BAPI_ALM_NOTIF_SAVE、BAPI_TRANSACTION_COMMIT を呼び出すように ABAP コードを更新します。コードのこの部分は、SAP ODataサービスから HTTP POST リクエストがトリガされたときにサービス通知を作成します。
- SAP トランザクション /IWFND/MAINT_SERVICE を使用して OData サービスを登録します。
- SAP トランザクション /IWFND/GW_CLIENT で OData サービスをテストします。
- HTTP POST リクエストが成功した場合、返されるステータスコードは 201 となります。スクリーンショットの例を以下に示します。
AWSソリューションのデプロイ
AWS Cloud Development Kit (CDK)を使用すると、サポートされている5つのプログラミング言語のいずれかのコードとしてクラウドインフラストラクチャを定義することができます。AWS CDK のインストール手順については、AWS CDK のドキュメントを参照してください。
- リポジトリaws-iot-sap-condition-monitoring-demoをクローンします。
- このデモ用に SAP ユーザーを作成し、OData サービスをバックエンド PFCG ロールのメニューに追加します。これには、バックエンドシステムのODataサービスの開始権限と、サービス通知を作成するためのビジネス権限を含める必要があります。
- cdk.jsonを更新します。変数の例を以下に示します。
変数 説明 例 thing_name Name of the IoT device IoT_thing Type Name of the device type Compressor Equipment SAP Equipment number 299998888 FunctLoc SAP Functional location SAPFunction temperature_min Minimum temperature 12 temperature_max Maximum temperature 14 sns_alert_email_topic Temperature alarm TemperatureAlarm alarm_emails Email address example@email.address odpEntitySetName ODP entity set name NOTIF_CREATESet odpEntityServiceName ODP service name ZPM_SERVICE_NOTIFICATION_SRV sapHostName SAP host name saponawshostname sapPort SAP port 8000 sapUsername SAP user name, CDK stored this in AWS Secrets Manager Johndoesap sapPassword SAP user password, CDK stored this in AWS Secrets Manager Johdoepassword - リポジトリのReadmeセクションの指示に従って、セットアップを完了し、シミュレータを実行します。
- AWS CloudFormationでスタックのデプロイを確認します。デプロイが成功した例を以下に示します。
コンプレッサーの故障をシミュレートする
ソリューションのデプロイに成功したので、テストを実行してみましょう!
- シミュレータでは、コンプレッサーの温度をシミュレートするために、temperature_minとtemperature_maxという変数を使用します。これらの変数は、CDK のデプロイの一部として cdk.json ファイルに定義されています。このシミュレータのコードについては、simulator.pyスクリプトを参照してください。
- これらは、DynamoDBのテーブルにエントリとして格納されます。最小温度(12)と最大温度(14)は、以下のようにDynamoDBテーブルに表示されます。
- AWS IoT Analyticsでは、CDKスタックで定義されていたcdksapbloganalyticsdatasetというDATA SETを選択します。そして、Run nowをクリックすると、実際に生成されたtemperateが表示されます。以下に例を示します。
- AWS IoT Eventsでは、シミュレータで生成された測定値を見ることができます。Detector modelsに移動し、detector modelsでCDKSAPBlogDetectorModelを選択し、key valueでtrackerを選択します。温度を度単位で表示した例を以下に示します。
- 異常をシミュレートするには、ステップ2で示したようにDynamoDBのテーブルの温度値を変更します。例として、以下のように最大値を14から13に変更しています。
- AWS IoT Eventsでシミュレータが生成した測定値を確認すると、これでDynamoDBで設定した温度範囲が反映されているはずです。
- 異常な状態が5分以上続くと、アラームが発生してSAPのサービス通知が作成されます。さらに、Amazon Simple Notification Services(SNS)の通知をサブスクライバに行います。メール通知の例を以下に示します。
- SAPでサービス通知を検証します。SAP トランザクション IW23 にアクセスします。生成された SAP サービスメンテナンス通知を入力します。Enter をクリックして入力内容を確認します。
クリーンアップ
このブログで作成したリソースの継続的な課金を避けるために、AWSアカウントのクリーンアップを忘れないでください。Githubリポジトリのクリーンアップセクションに記載されている指示に従いましょう。
まとめ
機械の故障は製造業の業務効率に悪影響を及ぼし、そのような重大な故障を特定することは従来の製造業環境では課題となっていました。今回のブログ記事では、AWS IoT Core、AWS IoT Analytics、SAPを活用して機器の異常を特定する例をご紹介しました。
SAP on AWSとの連携シナリオは他にもたくさんあります。例えば、Amazon Lookout for Equipmentを利用することで、予知保全を迅速に行うことができます。また、AWSでは、Amazon SageMakerを使って、LSTM(Long Short-Term Memory)ニューラルネットワークなど、独自の機械学習(ML)モデルを簡単に作成することができます。SAP on AWSのイノベーションについてご質問がある場合や知りたい場合は、SAP on AWSチームにお問い合わせいただくか、aws.com/sapで詳細をご確認ください。今すぐAWSでの構築を始めましょう。
翻訳はPartner SA 松本が担当しました。原文はこちらです。