C#アプリのAPIをOPC UAサーバとして公開したいので下調べ

2022/12/19追記

試した結果をまとめました。 qiita.com


OPC UAサーバを開発するために情報を集めた。C#アプリケーションのRPC的なAPIを公開することが念頭にあるので、C言語向けだったりPLC向けだったり情報を垂れ流すのみ系は無視している。

OPC UAサーバを開発する方法

OPC UA対応を行うには、一般的には専用のハードウェアを使用するか、OPC Foundationが提供するOPC UA StackもしくはSDK(Software Development Kit)を活用してOPC UAを装置に組み込むという2つの方法がある。

OPC UAの技術進化、Pub-Sub通信やセキュリティ技術など実用面強化:いまさら聞けないOPC UA入門(3)(1/2 ページ) - MONOist

OPC UA Stackをまず見てみる。

GitHub - OPCFoundation/UA-.NETStandard: OPC Unified Architecture .NET Standard

サンプルを動かしてみたがなんかややこしい印象。XMLからクラスとか生成するにはUA Model Compilerを使うっぽい。GUIツールなどはなくXMLはベタ書きするらしい。

GitHub - OPCFoundation/UA-ModelCompiler: ModelCompiler converts XML files into C# and ANSI C

情報モデルを自作する方法についてはこちらが参考になりそう。

How to create custom OPC UA Information Models • OPC UA rocks

SDKの必要性

OPC UA SDKs and Toolkits | OPCconnect.com

While a stack and examples provides the basic communications infrastructure, a full SDK adds significant application layer libraries and classes to speed up application development. UA developers are recommended to look to one of the third-party vendors listed on this page.

公式実装は、OPC UA Stackとしてインフラストラクチャを提供するが、アプリケーション層の機能を提供する3rdパーティ製のSDKを使うことが推奨されている。なるほど、公式サンプルでの印象は間違っていなかった。

C#でOPC UAサーバを開発できるSDKを探してみると、Unified Automationのがドキュメント・サポートも含めて評判が良い。

OPC-UA client SDK for C#.NET application development - Stack Overflow

Choose SDK - Unified Automation

確かにOPC UA Stackの上にSDKレイヤが載っている。

SDK以外だと、汎用のOPC UAサーバプロセスの上で追加実装することで、既存インターフェースをOPC UAに変換するソリューションも見つかった。

東芝インフラシステムズのは.NET Framework 4.5と書いてあるので使えるかも。

https://www.toshiba.co.jp/sis/seigyo/cnt/prod/ciemac/opcua/index_j.htm

EmpressのはC/C++っぽいので使えない/使いにくそう。

OPC UA ソリューション | 菱洋エレクトロ株式会社

どう開発するか

私の場合はAPIがまだないアプリケーションにOPC UAAPIを設けようとしている。選択肢は三つ。

  • アプリケーションに別途APIを用意してから、別ハードor別プロセスで動作する3rdパーティOPC UAサーバ製品から繋いで公開する
    • OPC UA部分を独立してフットワーク軽く将来の変更・拡張に対応できそう
    • アプリケーション中の別機能や複数のアプリケーションでOPC UA対応する場合に統一的な運用をしやすい
    • OPC UAでないAPIとOPC UAAPIをそれぞれ設計する必要がある分だけ二度手間な感じ
    • OPC UAでないAPIをネットワーク上に公開する場合、セキュリティを別に確保する必要がある
    • 間に別のプロセス・ハードが挟まる分だけオーバーヘッドがありそう
    • 別ハードor別プロセスとの連携絡みで考えることが増える
    • 原価が上がる
  • アプリケーションに別途APIを用意してから、別プロセスで動作するOPC UAサーバも自分で用意してそこから繋いで公開する
    • ローカルでの通信部分はセキュリティを気にしなくて良い
    • 原価は抑えられるが自分で考えることも増える
  • アプリケーションに直接OPC UAサーバを実装する
    • とりあえずミニマルにOPC UAでアクセスするAPI用意するだけならすぐできそう
      • OPC UAをフル活用しようとすると手間がかかるかもしれない(知らない)
    • アプリケーションとOPC UAが密結合する
      • OPC UA部分のメンテナンスでもアプリケーションのバージョンアップが必要
      • OPC UA以外でAPIを公開したくなった時に面倒かも
    • ローカル上でAPIを使う場合にもOPC UAを通すのは冗長かも

バランスが取れるのは2番目か。まず3番目で進めて評価とかして、後でOPC UAサーバ部分を分離する必要が出てから分離しても遅くはないか。

OPC UAの一般的な概要を理解するための記事

OPC UA最新技術解説 - MONOist

いまさら聞けないOPC UA入門 - MONOist

インダストリー4.0の推奨規格「OPC UA」、パブサブモデルでスマート工場に対応:産業用ネットワーク(1/2 ページ) - MONOist

インダストリー4.0で重要な役目を果たす、Windows生まれの「OPC UA」:IoT観測所(20)(1/3 ページ) - MONOist

OPC UAはなぜ「安全に」通信が行えるのか:OPC UA最新技術解説(3)(1/3 ページ) - MONOist

OPC UAとは何か?なぜ「製造業とITの橋渡し役」として最適なのか インダストリー4.0採用やOSS化で大注目|ビジネス+IT

オリジナル解説 OPC UAとは?- 第1回 OPC UAの概要 | オムロン制御機器

OPC UA ソリューション | 菱洋エレクトロ株式会社

産業IoT界隈では良く使われるらしい国際規格OPC-UAについて調べた - Qiita

OPC UA Companion Specifications (OPC UA CS) | OPCconnect.com

書籍

概要をつかむ系

https://www.amazon.co.jp/OPC-Unified-Architecture-Information-Technology/dp/1530505119

仕様をきっちり理解する系

https://www.amazon.co.jp/OPC-Unified-Architecture-Wolfgang-Mahnke/dp/3642088422/