304.ラズパイ無双[29 OPC-UA asyncua]
初回:2023/3/22
Raspberry Pi (ラズベリーパイ、通称"ラズパイ")で何か作ってみようという新シリーズです。これから数回に分けて、ラズパイ上にOPC-UAサーバーと、クライアントを入れて、通信させるところまで行ってみたいと思います。今回は、非同期サーバーとクライアントの基本サンプルを動かしてみたいと思います。
P子「非同期サーバーが本命ね」※1
まだ、大規模な処理を行ったことがないので、前回までのサーバーとの性能差などは判りません。また時間があれば、比較してみたいと思います。
【目次】
1.解説記事と「asyncua library」のインストール
まずは、今回ご紹介する非同期 OPC-UA サーバーに関する記事のご紹介です。
≪参考1≫
https://devnote.tech/ja/2022/12/how-to-subscribe-data-change-on-variable-nodes-of-opc-ua-server-ja/
OPC UA サーバー Variable ノードのデータ変更をサブスクライブする方法
以下に紹介するソースの解説も、≪参考1≫ のソースを元にしています。
インストールも簡単です。
$ sudo pip3 install asyncua
なんでも sudo で入れちゃいましたが、無しでも動くと思います。
2.async_server.py
上記URLの #toc2 のサーバーサンプルソースです。これをコピペして、async_server.py というファイル名で保存しています。
元ネタでは『server.py』というファイル名ですが、色々なサンプルを評価する関係上、判りやすい名前に変更しています。
from asyncua import Server が、本体です。
インスタンス作成から、初期化(init())、set_endpoint、register_namespace、start() までは、一連の流れです。
後の処理は、前回の opcua と、似た感じで行けます。
async、await のあたりが、非同期サーバー特有の記述になっています。
3.async_client.py
上記URLの #toc3 のクライアントサンプルソースです。これをコピペして、async_client.py というファイル名で保存しています。
先のサーバーと同様に、元ネタでは『client.py』というファイル名ですが、変更しています。
クライアント側は、SubHandler のサブクラスを作成して、イベント・ハンドラーを定義し、新たに受信した値をキューイングしてprocess 関数で非同期的に処理しています。
P子「≪参考3≫の解説記事のコピペ解説ね」
4.まとめ
今回は、非同期サーバーと非同期でイベントハンドラで処理するクライアントのサンプルをご紹介しました。
このサーバーで、前回のクライアントでも受信できますし、そのあたりが標準化プロトコルの良いところでしょう。
次回は、これを色々と変更しながら動きを確認していきたいと思います。
ほな、さいなら
======= <<注釈>>=======
※1 P子「非同期サーバーが本命ね」
P子とは、私があこがれているツンデレPythonの仮想女性の心の声です。