PLCnextデバイスでgrpcurlを用いた安全なリモートgRPCアクセス
警告:このブログで説明する手順は、現在サポートされていないPLCnext Runtime機能を使用します。自己責任で使用し、絶対に本番アプリケーションで使用しないでください。
gRPCurl GitHubプロジェクトより:
最近のファームウェアバージョンでは、PLCnext Controlデバイス上のgRPCサーバーへアクセス可能になりましたが、ローカルデバイス上で動作するgRPCクライアントのみでした。過去のMakers Blog記事で、C#とPythonで書かれたgRPCクライアント例を紹介しています。
将来のファームウェアバージョンでは、リモートデバイスからPLCnext ControlデバイスのgRPCサーバーへアクセス可能になります。実はこの機能はファームウェアバージョン2022.6に既に含まれていますが、まだ開発中で現在サポートされていません。この記事では、オープンソースgRPCクライアント「gRPCurl」を用いて、テスト・開発目的でこの機能を有効化する方法を説明します。
現在、gRPCサーバーをリモートからアクセスすることは、本番アプリケーションではすべきではありません。
手順
PLCnext Controlデバイス上で(ファームウェア2022.6)
/etc/plcnext/Packages.acf.settingsファイルを編集し、環境変数ARP_PACKAGE:Arp.Services.GrpcRemoteの値を"true"に変更
将来的には、この設定はWebベース管理の「システムサービス」ページから行えるようになります。
/opt/plcnext/config/Services/Grpc/Remote.grpc.configファイルの内容を確認。リスナーソケットアドレスに"0.0.0.0:50051"の値が見えるはず。これはgRPCサーバーがポート50051でgRPCクライアントからのメッセージをリッスンすることを意味します。PLCnext Runtimeを再起動。
リモートデバイス上で
GitHubの手順に従いgRPCurlをインストール。
PLCnext/gRPCリポジトリから、gRPCサービス定義ファイルを含む
protobufディレクトリをダウンロード。コマンドラインで
grpcurlコマンドを実行し、PLCnext Controlデバイスのボード温度を読み取り:
grpcurl -insecure -import-path Documents/plcnext-grpc/protobuf -proto Device/Interface/IDeviceStatusService.proto -d '{"identifier":"Status.Board.Temperature.Centigrade"}' 192.168.1.10:50051 Arp.Device.Interface.Services.Grpc.IDeviceStatusService/GetItem
……ここで-import-pathはprotobufディレクトリへのパス、IPアドレスはPLCnext Controlデバイスのアドレスです。
返答はJSONオブジェクトで、ボード温度(摂氏度)を含みます:
{
"ReturnValue": {
"TypeCode": "CT_Int8",
"Int8Value": 43
}
}
FAQ
可能かもしれませんが、grpcurlをターゲットプラットフォーム向けにソースからビルドする必要があり、依存関係の数を考えるとシンプルではないでしょう。
さらなるヘルプ
grpcurl -helpで利用可能オプションの詳細情報を取得できます。
PLCnext RuntimeのgRPCサーバーについて質問がある場合は、PLCnextコミュニティフォーラムをご利用ください。
産業技術
- Raspberry Pi 3とPubNubでリモート気象監視
- LIRCなしでRaspberry PiにIRリモコンを接続 - Python UARTアプローチ
- モダン産業におけるリモート生産制御の5つの主要メリット
- PLCnextデバイスでgrpcurlを用いた安全なリモートgRPCアクセス
- PLCnextでのクラスタ管理:産業オートメーションにおけるKubernetesの活用
- TableauダッシュボードでPLCnextをリアルタイム監視
- PLCnextクラウドデータからPower BIダッシュボードを作成
- Azure IoT HubのPLCnext ControlデータでリアルタイムGrafanaダッシュボードを作成
- JlinkでPLCnext Control上のJava 9アプリを最適化
- PLCnext LinuxにAPTパッケージマネージャをインストール:ステップバイステップガイド
- C# usingステートメント完全ガイド:名前空間インポート、エイリアス、静的ディレクティブ