OPC UAの情報モデルの型は規格で決まっています。
フリー(無料)のサーバーを作成して、実際にどのような仕様になっているのか調べてみました。
OPC UAのデータ構造を分かりやすく紹介します。
OPC UAの情報モデルをサーバー作って確認してみた
OPC UAのサーバーをフリー(無料)で作成して、情報モデルを確認してみました。
PythonでOPC UAサーバーを作っています。
無料のソフト・ライブラリで試していますので、誰でも同様にテストできます。
サーバーの作り方から情報モデルの確認方法まで紹介していきます。
実際にPythonでOPC UAサーバーを動かしたテストの動画が下記です。
是非一緒にご覧ください。
情報モデルの実例をクライアントソフトで確認します
OPC UAの情報モデルは規格によって型が決まっています。
多くのルールがあり、データの構造体も決まっています。
(筆者含めて)OPC UA初心者の方が、規格の全てを理解するのも難しいと思われます。
今回は実際の情報モデルの例を、クライアントソフトUaExpertを使って確認していきます。
クライアントソフトのUaExpertの使い方に関しては下記記事で紹介しています。
OPC UAクライアントのフリーソフトUaExpertを使ってみた

OPC UAの情報モデルのガイドライン
OPC UAの公式の情報モデルについてのドキュメントはフリーでは見られません。
但し設計ガイドラインは無料で見られるため、情報モデルを学ぶ上で参考になると思います。
OPC UA情報モデルの設計ガイドライン (バージョン1.0).pdf
OPC UAサーバーをフリーで作成する
OPC UAサーバーをPythonのフリーのライブラリを使って立ち上げていきます。
下記記事でクライアントを作成しています。サーバーも同様に作ることが可能です。
PythonでOPC UAを実装!クライアントを作ってサーバーに接続

今回筆者の環境はラズベリーパイ(raspberry pi)で実施しています。
Linuxの環境で無線も搭載しているので、簡単にOPC UAサーバーを作れます。
またPythonも最初からインストールされていますのでプログラムするのも楽です。
PythonのフリーのライブラリFreeOpcUa
PythonのOPC UAライブラリ「FreeOpcUa」はサーバー・クライアント両方に対応しています。
そしてExamplesも豊富かつ無料で使えるという非常に便利なライブラリです。
「FreeOpcUa」はgithubにあり、多くのリポジストリがあります。(リンク先はこちら)
インストール作業も簡単です。下記コマンドでインストールできます。
1 |
sudo pip3 install opcua |
OPC UA serverのPythonのテストプログラム
今回はExamplesにあった一番シンプルなプログラムを応用します。
OPC UAサーバーのプログラム「server-minimal.py」を応用します。
元々は単純にカウントアップしていく値をOPC UAで送るプログラムです。
折角なので少し弄って、ラズパイのCPUクロック・温度も送信するようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import sys sys.path.insert(0, "..") import time from opcua import ua, Server from subprocess import getoutput if __name__ == "__main__": # setup our server server = Server() server.set_endpoint("opc.tcp://192.168.100.125:4840/freeopcua/server/") # setup our own namespace, not really necessary but should as spec uri = "http://examples.freeopcua.github.io" idx = server.register_namespace(uri) # get Objects node, this is where we should put our nodes objects = server.get_objects_node() # populating our address space myobj = objects.add_object(idx, "MyObject") myvar = myobj.add_variable(idx, "MyVariable", 6.7) myvar.set_writable() # Set MyVariable to be writable by clients myclock = myobj.add_variable(idx, "MyClock", "") mythermal = myobj.add_variable(idx, "MyThermal", "") # starting! server.start() try: count = 0 while True: time.sleep(1) count += 0.1 myvar.set_value(count) # CPUクロックを取得する clock = getoutput('vcgencmd measure_clock arm') myclock.set_value(clock) # CPU温度を取得する thermal = getoutput('vcgencmd measure_temp') mythermal.set_value(thermal) finally: #close connection, remove subcsriptions, etc server.stop() |
PLCでも同様にテスト可能です
今回はPythonで実施しましたが、PLCに搭載されているOPC UAでもテストできます。
下記記事のようにソフトウェアPLC(CODESYS)ならば無料でOPC UAサーバーを作れます。
OPC UAでPLC(シーケンサ)と接続!サーバーの環境構築してみた

クライアントソフトのUaExpertで確認します
OPC UAサーバーを起動したら、クライアントソフトのUaExpertで確認します。
UaExpertの使い方に関しては下記記事で紹介しています。
OPC UAクライアントのフリーソフトUaExpertを使ってみた

正常にOPC UAサーバーが起動できていれば、クライアント側でデータを確認できます。
冒頭でも紹介しましたが、下記動画で実際のテストの様子を紹介しています。
OPC UAサーバーとクライアントの両方の動作が分かります。
OPC UAの情報モデルの例を確認してみる
OPC UAの通信が出来ましたので、情報モデルを確認していきます。
あくまで今回の内容は情報モデルの一例、ほんの一部であることをご了承下さい。
また情報モデルに関してはOPC UAクライアントソフトのUaExpertのHPにも情報が載っています。
https://documentation.unified-automation.com/
各SDKの「Reference Documentation」リファレンスドキュメントは無料で見れます。
その中に「OPC UA Information Models」の項目があり、参考になると思います。
OPC UAのAddress Spaceの例
OPC UAのアドレス空間(Address Space)を確認していきます。
構成としては一番上位層にRootがあり、その直下にObjects,Types,viewsがあります。
今回Pythonで作成したOPC UAサーバーの変数はObjectsの下にあります。
Objects→Serverの中身は下記のようになっています。
サーバーのパラメータ(Namespaces,ServerStatus…など)が数多くあります。
Typesに関しては下記5つのベースモデルが入っていました。OPC UAのコアとなる箇所です。
- Object Types
- Event Types
- Data Types
- Reference Types
- Variable Types
Viewsの中身に関しては特に何も入っていませんでした。
OPC UAのノードの例
今回はCPU温度を測定しているノードに関して、各パラメータを確認していきます。
Python側からは「temp=48.0℃」のように文字列(String)で出力しています。
NodeIdの例
今回の例のNodeIdは「ns=2;i=4」となっています。
(NameSpaceIndexが「2」でIdentifierが「4」)
NodeIDの詳細に関しては、この章の一番で紹介したUaExpertのHPに記載ありました。
※OPC UA Fundamentals→OPC UA NodeId Conceptsの箇所です。
Valueの例
Valueの中に実際の文字列が入っています。
また近くにタイムスタンプ(SourceTimestamp)、ステータスコード(StatusCode)もあります。
DataTypeの例
今回は出力しているのが文字列のため、DataTypeは「String」となっていました。
OPC UAはクラウドに接続できます
今回のOPC UAサーバーを応用すれば、クラウドにも接続することが可能です。
別記事でAWSとOPC UAを接続した事例を紹介しています。
AWSでOPC UAの使い方!Greengrassで接続してみた

まとめ
今回はOPC UAのサーバーと情報モデルに関して紹介させていただきました。
記事をまとめますと下記になります。
OPC UAはラズベリーパイ(raspberry pi)で無料で作れて、通信テストもすることも可能です。
皆様もぜひ試してみてください。
コメント