次の方法で共有


チュートリアル: Azure Industrial IoT の参照ソリューション アーキテクチャを実装する

製造メーカー各社は、産業用 IoT ソリューション全体を世界規模でデプロイし、すべての生産サイトをこのソリューションに接続して、個々の生産サイトの効率を高めたいと考えています。

これらの効率の向上は、生産の高速化とエネルギー消費量の削減につながり、ほとんどの場合、品質を向上させながら、生産された商品のコストを削減することにつながります。

このソリューションは、可能な限り効率的でなければならず、条件の監視、総合設備効率 (OEE) の計算、予測、異常検出など、必要なすべてのユース ケースを可能にするものである必要があります。 これらのユース ケースから得られた分析情報を活用すると、最適化やその他の変更を生産プロセスに適用できるデジタル フィードバック ループを作成できます。

相互運用性は、ソリューション アーキテクチャの迅速なロールアウトを実現するための鍵です。 OPC UA などのオープン標準を使用すると、この相互運用性を実現するのに大きく役立ちます。

このチュートリアルでは、Azure サービスを使用して産業用 IoT ソリューションをデプロイする方法について説明します。 このソリューションでは、すべてのオペレーショナル テクノロジ (OT) データに IEC 62541 Open Platform Communications (OPC) Unified Architecture (UA) を使用します。

前提条件

このチュートリアルの手順を完了するには、Azure サブスクリプションが必要です。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

ソリューション アーキテクチャの参照

次の図は、産業用 IoT ソリューションのアーキテクチャを示しています。

Azure と Microsoft Fabric の両方のオプションを示す簡略化されたアーキテクチャ:

単純な産業用 IoT アーキテクチャの図。

Azure オプションを示す詳細なアーキテクチャ。

産業用 IoT アーキテクチャの図。

次の表では、このソリューションの主要なコンポーネントについて説明します。

コンポーネント 説明
産業用資産 Docker コンテナーでホストされるシミュレートされた OPC UA 対応生産ラインのセット。
Azure IoT Operations Azure IoT Operations は、エッジ用の統合データ プレーンです。 これには、Azure Arc 対応エッジ Kubernetes クラスター上で実行される一連のモジュール式のスケーラブルな高可用性データ サービスが含まれます。
データ ゲートウェイ このゲートウェイは、オンプレミスのデータ ソース (SAP など) をクラウド内の Azure Logic Apps に接続します。
Azure Event Hubs クラウド メッセージ ブローカーは、エッジ ゲートウェイから OPC UA パブリッシュ/サブスクライブ メッセージを受信し、それらがサブスクライバーによって取得されるまで格納します。
Azure Data Explorer 詳細なクラウド分析のための時系列データベースとフロントエンド ダッシュボード サービス (組み込みの異常検出および予測を含む)。
Azure Logic Apps Azure Logic Apps はクラウド プラットフォームであり、コードをほとんど、またはまったく使用せずに、自動化されたワークフローを作成して実行できます。
Azure Arc このクラウド サービスは、エッジでオンプレミスの Kubernetes クラスターを管理するために使用されます。
Azure Managed Grafana Azure Managed Grafana は、Grafana Labs によって Grafana ソフトウェアの上に構築されたデータ視覚化プラットフォームです。 Grafana は、Microsoft がホストしサポートするフル マネージド サービスです。
Microsoft Power BI Microsoft Power BI は SaaS ソフトウェア サービス、アプリ、コネクタのコレクションであり、これらが連携して、関連のないデータ ソースを、一貫性があり視覚的に没入型で対話形式の分析情報に変換します。
Microsoft Dynamics 365 Field Service Microsoft Dynamics 365 Field Service は、フィールド サービス要求を管理するためのターンキー SaaS ソリューションです。
UA Cloud Commander このオープン ソース参照アプリケーションは、MQTT または Kafka ブローカー (場合によってはクラウド内) に送信されたメッセージを、接続された OPC UA サーバーの OPC UA クライアント/サーバー要求に変換します。 アプリケーションは Docker コンテナーで実行されます。
UA Cloud Action このオープン ソース参照クラウド アプリケーションは、特定のデータ値について Azure Data Explorer に対してクエリを実行します。 データ値は、シミュレートされた生産ライン マシンの 1 台の負荷です。 特定のしきい値 (4,000 mbar) に達すると、Azure Event Hubs 経由で UA Cloud Commander が呼び出されます。 その後、UA Cloud Commander は、OPC UA を介してマシン上で OpenPressureReliefValve メソッドを呼び出します。
UA Cloud Library UA Cloud Library は OPC UA 情報モデルのオンライン ストアであり、OPC Foundation によってホストされています
UA Edge Translator このオープンソースの産業用接続性参照アプリケーションは、専用の資産インターフェイスから OPC UA に変換されます。 このソリューションでは、W3C モノの Web の説明をスキーマとして使用して、産業用資産インターフェイスを記述します。

Note

現実世界のデプロイでは、圧力逃がし弁を開けるような重要な処理は、オンプレミスで行われます。 この例では、デジタル フィードバック ループを実現する方法を示します。

生産ラインのシミュレーション

このソリューションでは、ステーション OPC UA 情報モデルと単純な製造実行システム (MES) を使用して、複数のステーションで構成される生産ライン シミュレーションを使用します。 ステーションと MES の両方がコンテナー化され、デプロイが容易になります。

このシミュレーションは、2 つの生産ラインを含むように構成されます。 既定の構成は次のとおりです。

生産ライン 理想的なサイクル時間 (秒単位)
ミュンヘン 6
シアトル 10
シフト名 スタート 末尾
午前 07:00 14:00
午後 15:00 22:00
夜間 23:00 06:00

Note

シフト時間は現地時刻です。具体的には、生産ライン シミュレーションをホストする仮想マシン (VM) が設定されているタイム ゾーンです。

ステーション OPC UA サーバーは、次の OPC UA ノード ID をクラウドへのテレメトリのために使用します。

  • i=379 - 製造製品のシリアル番号
  • i=385 - 製造製品の数
  • i=391 - 破棄された製品の数
  • i=398 - 実行時間
  • i=399 - 失敗した時間
  • i=400 - 状態 (0= ステーションの作業の準備完了、1= 進行中の作業、2= 作業完了と良好なパーツの製造済み、3= 作業完了とスクラップ製造済み、4= ステーションは障害状態にある)
  • i=406 - エネルギー消費量
  • i=412 - 理想的なサイクル時間
  • i=418 - 実際のサイクル時間
  • i=434 - 圧力

UA Cloud Commander と UA Cloud Action を使用したデジタル フィードバック ループ

このソリューションでは、デジタル フィードバック ループを使用して、シミュレートされたステーションの圧力を管理します。 フィードバック ループを実装するために、ソリューションはシミュレーションの OPC UA サーバーの 1 つでクラウドからコマンドをトリガーします。 シミュレートされた時系列の圧力データが特定のしきい値に達すると、トリガーがアクティブになります。 組立機械の圧力は、Azure Data Explorer ダッシュボードで確認できます。 シアトルの生産ラインでは、圧力は一定間隔で解放されます。

生産ライン シミュレーションとクラウド サービスのインストール

[展開する] ボタンを選択して、必要なすべてのリソースを Azure サブスクリプションにデプロイします。

Azure に展開する

このデプロイ プロセスでは、生産ライン シミュレーションと Edge インフラストラクチャをホストする仮想マシン (VM) のパスワードを指定するように求められます。 パスワードには、小文字、大文字、数字、特殊文字のうちの 3 種類を含める必要があります。 パスワードの長さは 12 文字から 72 文字である必要があります。

Note

コスト削減のため、このデプロイでは、生産ラインのシミュレーションと Edge インフラストラクチャの両方のために 1 台の Windows 11 Enterprise VM を作成します。 生産シナリオでは、生産ラインのシミュレーションは必要ありません。また、ベース OS としては Windows IoT Enterprise 長期サービス チャネルを使用する必要があります。

デプロイが完了したら、RDP を使用して、デプロイされた Windows VM に接続します。 RDP ファイルは、Azure portal の VM のページにある [Connect]\(接続\) オプションからダウンロードできます。 デプロイ時に指定した資格情報を使ってサインインし、Windows コマンド プロンプトを開き、次のコマンドを使って Linux 用 Windows サブシステム (WSL) をインストールします。

wsl --install

このコマンドが完了したら、VM を再起動し、もう一度サインインします。 コマンド プロンプトで WSL のインストールが完了し、WSL 用の新しいユーザー名とパスワードを入力するように求められます。 次に、WSL で次のコマンドを使用して、軽量 Kubernetes ランタイムである K3s をインストールします。

curl -sfL https://get.k3s.io | sh

これで、VM で生産ライン シミュレーションを実行する準備ができました。

生産ラインのシミュレーションを実行する

VM で Windows コマンド プロンプトを開き、「wsl」と入力し、Enter キーを押します。 /mnt/c/ManufacturingOntologies-main/Tools/FactorySimulation ディレクトリに移動し、StartSimulation シェル スクリプトを実行します。

sudo ./StartSimulation.sh "<Your Event Hubs connection string>"

<Your Event Hubs connection string> は、Event Hubs 名前空間の接続文字列です。 詳細については、「Event Hubs の接続文字列の取得」を参照してください。 接続文字列は、Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh= のようなみためです。

Note

Kubernetes サービスの外部 IP アドレスが <pending> と表示される場合は、次のコマンドを使用して、traefik サービスの外部 IP アドレスを割り当てます: sudo kubectl patch service <theService> -n <the service's namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["<the traefik external IP address>"]}}'

ヒント

WSL と K3s が自動的にシャットダウンしないようにするために、WSL のコマンド プロンプトは開いたままにしておきます。

UA Cloud Library

Azure Data Explorer から直接 OPC UA 情報モデルを読み取る場合は、OPC UA 情報モデルで定義されている OPC UA ノードをテーブルにインポートできます。 インポートした情報を使って、クエリ内でより多くのメタデータを検索できます。

まず、Azure Data Explorer クラスターで次のクエリを実行して、UA Cloud Library の Azure Data Explorer コールアウト ポリシーを構成します。 開始する前に、クラスター内の AllDatabasesAdmin ロールのメンバーであることを確認します。これは、Azure portal で Azure Data Explorer クラスターの [権限] ページに移動して構成できます。

.alter cluster policy callout @'[{"CalloutType": "webapi","CalloutUriRegex": "uacloudlibrary.opcfoundation.org","CanCall": true}]'

次に、Azure portal から次の Azure Data Explorer クエリを実行します。 クエリの内容は次のとおりです。

  • <INFORMATION_MODEL_IDENTIFIER_FROM_THE_UA_CLOUD_LIBRARY> は、UA Cloud Library からインポートする情報モデルの一意の ID に置き換えます。 この ID は、UA Cloud Library の情報モデルのページの URL にあります。 たとえば、このチュートリアルで使用するステーション ノードセットの ID は、1627266626 です。
  • <HASHED_CLOUD_LIBRARY_CREDENTIALS> は、UA Cloud Library の資格情報を持つ基本 Authorization ヘッダーに置き換えます。 https://www.debugbear.com/basic-auth-header-generator などのツールを使用して、ハッシュを生成します。 次の bash コマンドを使用することもできます。echo -n 'username:password' | base64
let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/<INFORMATION_MODEL_IDENTIFIER_FROM_THE_UA_CLOUD_LIBRARY>';
let headers=dynamic({'accept':'text/plain', 'Authorization':'Basic <HASHED_CLOUD_LIBRARY_CREDENTIALS>'});
evaluate http_request(uri, headers)
| project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
| mv-expand UAVariable=nodeset.UANodeSet.UAVariable
| project-away nodeset
| extend NodeId = UAVariable.['@NodeId'], DisplayName = tostring(UAVariable.DisplayName.['#text']), BrowseName = tostring(UAVariable.['@BrowseName']), DataType = tostring(UAVariable.['@DataType'])
| project-away UAVariable
| take 10000

OPC UA 情報モデルのグラフィカル表現を表示するには、Kusto Explorer ツールを使用します。 ステーション モデルをレンダリングするには、Kusto Explorer で次のクエリを実行します。 最適な結果を得るには、Layout オプション Grouped に変更し、Labelsname に変更します。

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/1627266626';
let headers=dynamic({'accept':'text/plain', 'Authorization':'Basic <HASHED_CLOUD_LIBRARY_CREDENTIALS>'});
let variables = evaluate http_request(uri, headers)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAVariable = nodeset.UANodeSet.UAVariable
    | extend NodeId = UAVariable.['@NodeId'], ParentNodeId = UAVariable.['@ParentNodeId'], DisplayName = tostring(UAVariable['DisplayName']), DataType = tostring(UAVariable.['@DataType']), References = tostring(UAVariable.['References'])
    | where References !contains "HasModellingRule"
    | where DisplayName != "InputArguments"
    | project-away nodeset, UAVariable, References;
let objects = evaluate http_request(uri, headers)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAObject = nodeset.UANodeSet.UAObject
    | extend NodeId = UAObject.['@NodeId'], ParentNodeId = UAObject.['@ParentNodeId'], DisplayName = tostring(UAObject['DisplayName']), References = tostring(UAObject.['References'])
    | where References !contains "HasModellingRule"
    | project-away nodeset, UAObject, References;
let nodes = variables
    | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)
    | join kind=fullouter (objects
        | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)) on source
        | project source = coalesce(source, source1), target = coalesce(target, target1), name = coalesce(name, name1);
let edges = nodes;
edges
    | make-graph source --> target with nodes on source

ステーション Info Model のグラフ。

必要に応じて、エッジに Azure IoT Operations をデプロイする

既定では、生産ライン シミュレーションは、Event Hubs 名前空間のデータ ハブ エンドポイントにデータを直接送信します。

このプロセスを管理するには、代わりにエッジで Azure IoT Operations を使用できます。 Azure IoT Operations は、エッジ用の統合データ プレーンです。 これには、Azure Arc 対応エッジ Kubernetes クラスター上で実行される一連のモジュール式のスケーラブルな高可用性データ サービスが含まれます。

Azure IoT Operations をデプロイする前に、生産ライン シミュレーションを開始したことを確認します。 次に、Azure IoT Operations のデプロイの詳細の手順に従います。

ヒント

このチュートリアルで前にデプロイした VM と K3s インスタンスを使用して、Azure IoT Operations をデプロイして実行できます。

Azure IoT Operations デプロイを構成する

操作エクスペリエンス Web UI を使用して、Azure IoT Operations のデプロイを構成できます。 生産ライン シミュレーションからデータを処理し、それを Event Hubs 名前空間のデータ ハブにルーティングする資産エンドポイント、資産とデータ フローを追加します。

Azure IoT Operations デプロイで、生産シミュレーションの中で次の OPC UA サーバーへの接続を定義する資産エンドポイントを作成します。

  • opc.tcp://assembly.munich/
  • opc.tcp://test.munich/
  • opc.tcp://packaging.munich/
  • opc.tcp://assembly.seattle/
  • opc.tcp://test.seattle/
  • opc.tcp://packaging.seattle/

Azure Data Explorer での条件の監視、OEE の計算、異常検出、予測のユース ケース

状態の監視、生成またはメンテナンスの予測、異常検出のためのコードなしのダッシュボードを作成する方法については、「Azure Data Explorer のドキュメント」を参照してください。 デプロイできるサンプル ダッシュボードもあります。 ダッシュボードをデプロイする方法については、「Azure Data Explorer ダッシュボードを使用してデータを視覚化する > ファイルから作成」を参照してください。 ダッシュボードをインポートしたら、そのデータ ソースを更新します。 ダッシュボードの右上隅にある Azure Data Explorer サーバー クラスターの HTTPS エンドポイントを指定します。 HTTPS エンドポイントは、https://<ADXInstanceName>.<AzureRegion>.kusto.windows.net/ のようになります。

サンプル データを含む Azure Data Explorer ダッシュボードのスクリーンショット。

Note

特定のシフトの OEE を表示するには、Azure Data Explorer ダッシュボードの左上隅にある [時間の範囲] ドロップダウンで [カスタムの時間の範囲] を選択し、関心のあるシフトの開始から終了までの日付と時刻を入力します。

Kusto Explorer での組み込みの統一名前空間 (UNS) と ISA-95 モデル グラフのレンダリング

この参照ソリューションは、クラウド内の Azure Data Explorer 時系列データベースに送信される OPC UA メタデータに基づいて、統一名前空間 (UNS) を実装します。 この OPC UA メタデータには、ISA-95 資産階層が含まれます。 結果のグラフは、Kusto Explorer ツールで視覚化できます。

Azure Data Explorer インスタンスに新しい接続を追加し、Kusto Explorer で次のクエリを実行します。

let edges = opcua_metadata_lkv
| project source = DisplayName, target = Workcell
| join kind=fullouter (opcua_metadata_lkv
    | project source = Workcell, target = Line) on source
    | join kind=fullouter (opcua_metadata_lkv
        | project source = Line, target = Area) on source
        | join kind=fullouter (opcua_metadata_lkv
            | project source = Area, target = Site) on source
            | join kind=fullouter (opcua_metadata_lkv
                | project source = Site, target = Enterprise) on source
                | project source = coalesce(source, source1, source2, source3, source4), target = coalesce(target, target1, target2, target3, target4);
let nodes = opcua_metadata_lkv;
edges | make-graph source --> target with nodes on DisplayName

最良の結果を得るには、Layout オプションを Grouped に変更します。

ISA-95 資産階層を示すグラフ。

Azure Managed Grafana を使用する

Azure Managed Grafana を使用して、この記事で説明するソリューション用のダッシュボードを Azure に作成することもできます。 製造内で Grafana を使用して、リアルタイム データを表示するダッシュボードを作成します。 次の手順では、Azure で Grafana を有効にし、Azure Data Explorer からのシミュレートされた生産ライン データを使用してダッシュボードを作成する方法を示します。

Azure Managed Grafana サービスを有効にする

Azure Managed Grafana サービスを作成し、オントロジ データベースにアクセスするためのアクセス許可を使用して構成するには、次の手順を実行します。

  1. Azure portal で、「Grafana」を検索し、Azure Managed Grafana サービスを選択します。

  2. サービスを作成するには、[Grafana ワークスペースの作成] ページで、インスタンスの名前を入力します。 すべての既定のオプションを選択します。

  3. サービスが作成されたら、Grafana インスタンスにシステム割り当てマネージド ID があることを確認し、Azure portal で Azure Managed Grafana インスタンスの [ID] ブレードに移動します。 システム割り当てマネージド ID が有効になっていない場合は、有効にします。 オブジェクト (プリンシパル) ID 値を書き留めます。後で必要になります。

  4. Azure Data Explorer でオントロジ データベースにアクセスするためのアクセス許可をマネージド ID に付与するには、次の手順を実行します。

    1. Azure portal の Azure Data Explorer インスタンスの [アクセス許可] ブレードに移動します。
    2. [追加] > [AllDatabasesViewer] を選択します。
    3. 以前にメモしたオブジェクト (プリンシパル) ID 値を検索して選択します。

Grafana への新しいデータ ソースの追加

Azure Data Explorer に接続するための新しいデータ ソースを追加します。 このサンプルでは、システム割り当てマネージド ID を使用して Azure Data Explorer に接続します。 認証を構成するには、次の手順に従います。

Grafana でデータ ソースを追加するには、次の手順に従います。

  1. Grafana インスタンスのエンドポイント URL に移動します。 エンドポイント URL は、Azure portal のインスタンスの Azure Managed Grafana ページで確認できます。 次に、Grafana インスタンスにサインインします。

  2. Grafana ダッシュボードで、[接続] > [データ ソース] を選択し、[新しいデータ ソースの追加] を選択します。 下にスクロールし、[Azure Data Explorer データソース] を選択します。

  3. 認証メニューとして [マネージド ID] を選択します。 次に、Azure Data Explorer クラスターの URL を追加します。 この URL は、Azure portal の Azure Data Explorer インスタンス メニューの [URI] にあります。

  4. [保存してテスト] を選択して、データソース接続を確認します。

サンプル ダッシュボードのインポート

これで、サンプル ダッシュボードをインポートする準備ができました。

  1. Grafana 製造ダッシュボードのサンプル ダッシュボードをダウンロードします。

  2. [Grafana] メニューの [ダッシュボード] に移動し、[新規] > [インポート] を選択します。

  3. [ダッシュボード JSON ファイルのアップロード] を選択し、以前にダウンロードした samplegrafanadashboard.json ファイルを選択します。 インポート を選択します。

  4. [OEE ステーション] パネルで、[編集] を選択し、以前に設定した Azure Data Explorer データ ソースを選択します。 次に、クエリ パネルで [KQL] を選択し、次のクエリを追加します: print round (CalculateOEEForStation('${Station}', '${Location}', '${CycleTime}', '${__from:date:iso}', '${__to:date:iso}') * 100, 2)[適用] を選択して変更を適用し、ダッシュボードに戻ります。

  5. [OEE ライン] パネルで、[編集] を選択し、以前に設定した Azure Data Explorer データ ソースを選択します。 次に、クエリ パネルで [KQL] を選択し、次のクエリを追加します: print round(CalculateOEEForLine('${Location}', '${CycleTime}', '${__from:date:iso}', '${__to:date:iso}') * 100, 2)[適用] を選択して変更を適用し、ダッシュボードに戻ります。

  6. [破棄された製品] パネルで、[編集] を選択し、以前に設定した Azure Data Explorer データ ソースを選択します。 次に、クエリ パネルで [KQL] を選択し、次のクエリを追加します: opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry| where Name == "NumberOfDiscardedProducts"| where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend numProd = toint(Value)| summarize max(numProd)[適用] を選択して変更を適用し、ダッシュボードに戻ります。

  7. [製造された製品] パネルで、[編集] を選択し、以前に設定した Azure Data Explorer データ ソースを選択します。 次に、クエリ パネルで [KQL] を選択し、次のクエリを追加します: opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry| where Name == "NumberOfManufacturedProducts"| where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend numProd = toint(Value)| summarize max(numProd)[適用] を選択して変更を適用し、ダッシュボードに戻ります。

  8. [エネルギー消費] パネルで、[編集] を選択し、以前に設定した Azure Data Explorer データ ソースを選択します。 次に、クエリ パネルで [KQL] を選択し、次のクエリを追加します: opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry | where Name == "Pressure" | where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend energy = todouble(Value)| summarize avg(energy)); print round(toscalar(averageEnergyConsumption) * 1000, 2)[適用] を選択して変更を適用し、ダッシュボードに戻ります。

  9. [圧力] パネルで、[編集] を選択し、以前に設定した Azure Data Explorer データ ソースを選択します。 次に、クエリ パネルで [KQL] を選択し、次のクエリを追加します: opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry | where Name == "Pressure" | where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend NodeValue = toint(Value)| project Timestamp1, NodeValue[適用] を選択して変更を適用し、ダッシュボードに戻ります。

アラートを構成する

Grafana では、アラートを作成することもできます。 この例では、生産ラインの 1 つに対して低 OEE アラートを作成します。

  1. [Grafana] メニューで、**[アラート] > [アラート ルール] に移動します。

  2. [新しいアラート ルール] を選択します。

  3. アラートに名前を付け、データ ソースとして [Azure Data Explorer] を選択します。 [クエリとアラート条件の定義] ウィンドウで、[KQL] を選択します。

  4. データベースのクエリ フィールドに、次のクエリを入力します。 この例では、シアトルの生産ラインを使用します。

    let oee = CalculateOEEForStation("assembly", "seattle", 10000, now(), now(-1h));
    print round(oee * 100, 2)
    
  5. [アラート条件として設定] を選択します。

  6. [式] セクションまで下にスクロールします。 Reduce 式は不要なので削除します。

  7. アラートしきい値については、入力として A を選択します。 [IS BELOW] を選択し、「10」を入力します。

  8. [評価動作の設定] セクションまで下にスクロールします。 アラートを保存するための新しいフォルダーを作成します。 新しい評価グループを作成し、2m を指定します。

  9. 右上にある [ルールを保存して終了] ボタンを選択します。

アラートの概要では、OEE が 10 を下回るとアラートがトリガーされることがわかります。

参照ソリューションを Microsoft Power BI に接続する

参照ソリューション Power BI に接続するには、Power BI サブスクリプションにアクセスする必要があります。

Power BI ダッシュボードを作成するには、次の手順を実行します。

  1. Power BI デスクトップ アプリをインストールします。

  2. Power BI サブスクリプションにアクセスできるユーザーを使用して、Power BI デスクトップ アプリにサインインします。

  3. Azure portal で、オントロジと呼ばれる Azure Data Explorer データベースに移動し、データベース管理者アクセス許可を、この参照ソリューションのデプロイされたインスタンスに使用されているサブスクリプションのみへのアクセス権を持つ Microsoft Entra ID ユーザーに追加します。 必要に応じて、Microsoft Entra ID で新しいユーザーを作成します。

  4. Power BI から新しいレポートを作成し、[データの取得] > [Azure] > [Azure Data Explorer (Kusto)] を選択して、Azure Data Explorer の時系列データをデータ ソースとして選択します。

  5. ポップアップ ウィンドウで、クラスターの Azure Data Explorer エンドポイント (https://<your cluster name>.<location>.kusto.windows.net)、データベース名 (ontologies)、次のクエリを入力します。

    let _startTime = ago(1h);
    let _endTime = now();
    opcua_metadata_lkv
    | where Name contains "assembly"
    | where Name contains "munich"
    | join kind=inner (opcua_telemetry
        | where Name == "ActualCycleTime"
        | where Timestamp > _startTime and Timestamp < _endTime
    ) on DataSetWriterID
    | extend NodeValue = todouble(Value)
    | project Timestamp, NodeValue
    
  6. 先ほど Azure Data Explorer データベースへのアクセス許可を付与した Microsoft Entra ID ユーザーを使用して、Azure Data Explorer にサインインします。

    Note

    [タイムスタンプ] 列に、すべての行に同じ値が含まれている場合は、クエリの最後の行を | project Timestamp1, NodeValue に変更します。

  7. [読み込み] を選択します。 このアクションにより、過去 1 時間にわたるミュンヘン生産ラインの組立ステーションの実際のサイクル時間がインポートされます。

  8. Table view から、NodeValue 列を選択し、[集計] メニュー項目の [集計しない] を選択します。

  9. Report view に切り替えます。

  10. [視覚化] で、[折れ線グラフ] の視覚化を選択します。

  11. [視覚化] で、TimestampData ソースから X-axis に移動し、[タイムスタンプ] を選択します。

  12. [視覚化] で、NodeValueData ソースから Y-axis に移動し、[中央値] を選択します。

  13. 新しいレポートを保存します。

ヒント

同じ方法を使用して、Azure Data Explorer からレポートに他のデータを追加します。

Power BI ビューのスクリーンショット。

参照ソリューションを Microsoft Dynamics 365 Field Service に接続する

この統合では、次のシナリオが紹介されています。

  • 製造オントロジ参照ソリューションから Dynamics 365 Field Service に資産をアップロードします。
  • 製造オントロジ参照ソリューション テレメトリ データの特定のしきい値に達したときに、Dynamics 365 Field Service でアラートを作成します。

この統合では、Azure Logics Apps が使用されます。 Logic Apps と共にノー コード ワークフローを使用すると、ビジネス クリティカルなアプリとサービスを接続できます。 この例では、Azure Data Explorer からデータをフェッチし、Dynamics 365 Field Service でアクションをトリガーする方法を示します。

Dynamics 365 Field Service のお客様でない場合は、30 日間の試用版をアクティブにします。

ヒント

テナント間認証を構成する必要がないように、製造オントロジ参照ソリューションのデプロイに使用したのと同じ Microsoft Entra ID を使用します。

Dynamics 365 Field Service で資産を作成する Azure Logic Apps ワークフローを作成する

製造オントロジ参照ソリューションから Dynamics 365 Field Service に資産をアップロードするには:

  1. Azure portal に移動し、新しいロジック アプリ リソースを作成します。

  2. Azure Logic Apps に名前を付け、製造オントロジ参照ソリューションと同じリソース グループに配置します。

  3. [ワークフロー] を選択します。

  4. ワークフローに名前を付けます。 このシナリオでは、資産はデータ フローではないので、ステートフルな状態の種類を使用します。

  5. ワークフロー デザイナーで、[トリガーの追加] を選択します。 毎日実行する繰り返しトリガーを作成します。 より頻繁に発生するようにトリガーを変更できます。

  6. 繰り返しトリガーの後にアクションを追加します。 [アクションの追加]Azure Data Explorer を検索して、[KQL クエリの実行] コマンドを選択します。 既定の認証 [OAuth] のままにします。 Azure Data Explorer クラスターの URL と、データベース名として ontologies を入力します。 このクエリで、どの種類の資産があるかを確認します。 次のクエリを使用して、製造オントロジ参照ソリューションから資産を取得します。

    opcua_telemetry
    | join kind=inner (    
        opcua_metadata
        | distinct Name, DataSetWriterID
        | extend AssetList = split(Name, ';')
        | extend AssetName = tostring(AssetList[0])
    ) on DataSetWriterID
    | project AssetName
    | summarize by AssetName
    
  7. 資産データを Dynamics 365 Field Service に取り込むには、Microsoft Dataverse に接続する必要があります。 [アクションの追加]Dataverse を検索し、[新しい行の追加] コマンドを選択します。 既定の認証 [OAuth] のままにします。 Dynamics 365 Field Service インスタンスに接続し、次の構成を使用します:

    • [テーブル名] フィールドで、[顧客資産] を選択します
    • [名前] フィールドで、[前の手順のデータを入力する] を選択し、[AssetName] を選択します。

    資産名をテーブルに追加する方法を示すワークフロー デザイナーのスクリーンショット。

  8. ワークフローを保存して実行します。 Dynamics 365 Field Service で新しい資産が作成されていることを確認できます。

    フィールド サービス資産テーブルの新しい資産定義を示すスクリーンショット。

Azure Logic Apps ワークフローを作成し、Dynamics 365 Field Service でアラートを作成する

このワークフローでは、製造オントロジ参照ソリューションの資産に対する FaultyTime がしきい値に達したときに、Dynamics 365 Field Service でアラートを作成します。

  1. データをフェッチするには、Azure Data Explorer 関数を作成します。 Azure portal の Azure Data Explorer クエリ パネルで、次のコードを実行して、ontologies データベースに FaultyFieldAssets 関数を作成します。

    .create-or-alter function  FaultyFieldAssets() {  
    let Lw_start = ago(3d);
    opcua_telemetry
    | where Name == 'FaultyTime'
    and Value > 0
    and Timestamp between (Lw_start .. now())
    | join kind=inner (
        opcua_metadata
        | extend AssetList =split (Name, ';')
        | extend AssetName=AssetList[0]
        ) on DataSetWriterID
    | project AssetName, Name, Value, Timestamp}
    
  2. ロジック アプリで新しいステートフル ワークフローを作成します。

  3. ワークフロー デザイナーで、3 分ごとに実行される繰り返しトリガーを作成します。 次に、アクションを追加し、[KQL クエリの実行] アクションを選択します。

  4. Azure Data Explorer クラスターの URL を入力し、データベース名として「ontologies」と入力し、FaultyFieldAssets 関数名をクエリとして使用します。

  5. 資産データを Dynamics 365 Field Service に取り込むには、Microsoft Dataverse に接続する必要があります。 [アクションの追加]Dataverse を検索し、[新しい行の追加] コマンドを選択します。 既定の認証 [OAuth] のままにします。 Dynamics 365 Field Service インスタンスに接続し、次の構成を使用します:

    • [テーブル名] フィールドで、[IoT アラート] を選択します
    • [説明] フィールドで、[前の手順のデータを入力する] を使用して、"[AssetName] には [Value][Name] があります" というメッセージを作成します。 AssetNameNameValue は、前の手順のフィールドです。
    • [アラート時間] フィールドで、[前の手順のデータを入力する] を選択し、[タイムスタンプ] を選択します。
    • [アラートの種類] フィールドで、[異常] を選択します。

    アラートを作成するロジック アプリ構成を示すスクリーンショット。

  6. ワークフローを実行し、Dynamics 365 Field Service の [IoT アラート] ダッシュボードに生成された新しいアラートを確認します。

    Dynamics 365 FS のアラートのスクリーンショット。