Azure IoT EdgeでPLCnextを最適化:エッジ分析とクラウド統合
Azure IoT Edgeを使用すると、クラウド分析とカスタムロジックを「エッジ」、つまり私たちの場合はPLCnextデバイスに移動できます。これにより、使用帯域幅とレイテンシの削減というメリットがあります。Azure IoT Edgeでは、中央のクラウドアプリケーションから独自のアプリケーションを開発・デプロイできます。このブログでは、Azure IoT Edgeのセットアップと基本原則について学びます。
はじめに
Azure IoT EdgeソリューションのすべてをMakers Blogで説明するのは範囲が広すぎますが、続ける前にこちらのポータルでよく理解しておくことをお勧めします。それではランタイムをインストールしましょう。

インストール
Azure IoT Hubの作成とデバイス登録
まずAzureポータルでいくつかの設定が必要です。Azureアカウントはすでに作成済みと仮定します。
最初にリソースグループを作成し、わかりやすい名前を付けます。「新しいリソースグループの作成」をクリック。一覧にない場合は「+」ボタンから検索してください。

新しいIoT Hubサービスを作成します。無料のIoT Hubサービスを1つ利用できるので、種類をStandardからFreeに変更することをお勧めします。他はデフォルトのままデプロイを進めます。最後のステップはIoTデバイスの作成です。サービスを開き、左パネルで「IoT Edge」を探してクリックし、新しいIoT Edgeデバイスを作成します。デバイスIDを指定し、他の設定はデフォルトのままにします。

新しく作成したデバイスをクリックし、「Primary Connection String(主接続文字列)」をメモしておきます。次のステップでデバイスのプロビジョニングに必要です。

Azure IoT Edgeランタイムのインストール
以下のコマンドを順番に実行します。最新版は常にこちらで確認できます。
git clone https://github.com/pxcbe/azure-iot-edge.git
cd azure-iot-edge/install
sudo passwd root
su
chmod +x SetupEdge.sh
./SetupEdge.sh
次のステップはデバイスのプロビジョニングです。これは半自動または完全自動でも可能です。詳細についてはインフォポータルのこちらを参照してください。次のコマンドをシェルで実行し、yamlファイルの55行目に接続文字列を貼り付けます(保存はctrl+s、終了はctrl+x)。
nano /etc/iotedge/config.yaml
変更を反映するためにコントローラを再起動します。
reboot
インストールの確認
root権限で次のコマンドを実行します:
iotedge check --verbose
エラーがなければ先に進めます!エラーが出た場合はGitHubリポジトリで修正版がないか確認するか、Issueを作成してください。
モジュールのデプロイ
ランタイムだけでは意味がありません。モジュールをデプロイしましょう!「Set modules」をクリックし、「Runtime settings」を選択します。ここではPLCnextで動作しているNGINXサーバーと競合しないよう「Hostport」を変更する必要があります。最後にマーケットプレースモジュール「Simulated Temperature Sensor」を追加。「Review + create」を押してPLCnextデバイスにデプロイします。


設定は以下のようになります:
{
"HostConfig": {
"PortBindings": {
"443/tcp": [{ "HostPort": "444" }],
"5671/tcp": [{ "HostPort": "5671" }],
"8883/tcp": [{ "HostPort": "8883" }]
}
}
}

テレメトリメッセージの監視
メッセージが届いているか確認するには、こちらの手順に従ってVisual Studio CodeにAzure IoT Toolsをインストールしてください(Azureへのサインインが必要です。証明書を使用している場合は開発マシンにも配置しておいてください)。
PLCnextデータをIoT Hubへ送信
次のステップは、PLCnext Engineerのデータをクラウドに送ることです。これにはいくつかの方法があります。Modbusモジュールを使ってPLCnextプロジェクトにModbusサーバーを作成する方法、RESTサービスとカスタムモジュールでGETリクエストを使う方法、マーケットプレースで適切なモジュールを探す方法などです。ここではOPC Publisherをセットアップして、PLCnextの組み込みOPC UAサーバーからデータを発行する方法を説明します。
更新: 現在OPC Publisherモジュールにエラーがあるようです。しばらくは他の方法をお試しください。
免責: このブログではPLCnextのセキュリティ機能を無効化しています。本番環境では使用しないでください!
PLCnextデバイスのWBMでユーザー認証を無効化してから続行してください。
「Simulated Temperature Sensor」と同じ要領でマーケットプレースからOPC Publisherを追加します。モジュールをクリックし、「Container Create Options」に移動。以下の設定をウィンドウにコピペしてください。
{
"Hostname": "publisher",
"Cmd": [
"publisher",
"--pf=/appdata/publishednodes.json",
"--di=60",
"--to",
"--aa",
"--si=10",
"--ms=262144"
],
"HostConfig": {
"Binds": [ "/iiotedge:/appdata" ],
"PortBindings": {
"62222/tcp": [{ "HostPort": "62222" }]
},
"ExtraHosts": [ "localhost:127.0.0.1" ]
}
}
ノードIDに合わせて以下の設定を変更し、/appdataフォルダを作成して「publishednodes.json」というファイルに新しい設定を保存します。
[
{
"EndpointUrl": "opc.tcp://192.168.10.10:4840",
"UseSecurity": false,
"OpcNodes": [
{
"Id": "ns=3;s=Counter",
"OpcSamplingInterval": 2000,
"OpcPublishingInterval": 5000
},
{
"Id": "ns=3;s=Sinusoid",
"OpcSamplingInterval": 2000,
"OpcPublishingInterval": 5000
}
]
}
]
すべて順調なら、Visual Studio CodeのAzure IoT Toolsでデータが見えるはずです。
まだ問題がある場合?
次のコマンドで状況を確認できます。
iotedge logs -f "namemode"
謝辞
Oliver Warneke氏に特別な感謝を。彼の仕事を基に構築でき、私をキャッチアップさせるために時間を割いてくれました!
問い合わせ先
問題が発生した場合、または詳細を知りたい場合は、axsupport@phoenixcontact.beまでご連絡ください。
参考資料
産業技術
- SprintとEricsson、5G対応IoTエッジインテリジェンスプラットフォームを立ち上げ
- IoT向けPCB設計の完全ガイド:フレックス基板とHDI基板の活用
- エッジデバイス:ローカルネットワークとクラウドを繋ぐ、シームレスなIoTデータフローの要
- ルネサス、産業IoT/エッジ向けセキュアRA MCUシリーズ発表
- エッジ・コンピューティングがIoT成功に不可欠な理由
- エッジからクラウドへ:IoTデータパイプラインのマスター
- IoT World 2019から見るエッジコンピューティングとIoT戦略のインサイト
- エッジコンピューティングを活用したIoT、AI、新興テクノロジーの推進
- エッジとIoT:デジタル成功のためのデータ調和
- IoTとエッジ・コンピューティングが相互補完する仕組み
- オープンソースがIoTとエッジコンピューティングの台頭を支える