このページは https://www.softech.co.jp/mm_250205_tr.htm のキャッシュです。2025-04-02T00:01:19.649+0900 に存在していたページのスナップショットです。
技術レポート「OPC UAのPub/Sub<strong>通信</strong>」|ソフテックだより|株式会社ソフテック
HOME > ソフテックだより > 第467号(2025年2月5日発行) 技術レポート「OPC UAのPub/Sub通信

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第467号(2025年2月5日発行)
技術レポート

「OPC UAのPub/Sub通信

1. はじめに

私は入社1年目の本社事業所勤務の社員です。
先日OPC UAやPub/Sub通信を用いるシステムの開発案件に携わる機会がありました。
ソフテックだよりでも度々テーマとして取り上げられるOPC UAですが、今回はPub/Sub通信について紹介いたします。

2. OPC UAとは

OPC UAとは、OPCを拡張したサービス指向アーキテクチャです。
このOPCとは、産業オートメーション分野にて安全なデータのやり取りを目的とした標準規格で、現在はOPC Classicと呼称することもあります。
2008年にOPC Foundationが発表し、のちに国際標準化(IEC62541)されました。
主に以下の特徴があります。

  • OPC Classicとの機能の同等性
    OPC Classicにて使用できた機能と同等のものを使用することができます。
  • プラットフォーム非依存性
    使用するプラットフォームに依存せず、異なるプラットフォーム間でも通信ができます。
  • 安全性
    盗聴や改ざん、なりすましなどの対策がされています。
  • 拡張性
    今後フレームワークが改良されるときにも、機能の追加や性能向上がしやすいよう設計されています。
  • 包括的情報モデリング
    複雑な多階層構造などにおいてもモデル化し、拡張性があります。

3. Pub/Subとは

マルチキャストやBrokerによる1対多の通信を目的とした通信モデルです。PublisherとSubscriberに分かれ、それぞれが以下の役割を持っています。

  • Publisher
    マルチキャストアドレスやMQTTのBrokerへデータの送信(Publish)
  • Subscriber
    自分に必要なデータの受信(Subscribe)

Pub/Sub通信 例
図1. Pub/Sub通信

なお、サーバ内でPublisherとSubscriberを共存させることもできます。

次にPub/Subのメリット、デメリットを表にまとめました。
一般的なUDP通信となりますので、同じ特徴があります。

メリット
  • 一度の送信で複数の相手にデータを送ることができる
  • 送信先を知る必要が無い
  • 複数のSubscriberが同じデータを受信するので、複数の機器で同じデータを用いることができる
  • コネクションレスのため、Client-Server方式と比べて比較的処理が軽い
デメリット
  • 誰が受信しているのかを知ることができない
  • データが確実に届いたか判別できないため、抜けがある可能性がある

OPC UAサーバを用いたPub/Subでは、これらに加えて、「2.OPC UAとは」で紹介した特徴を持っています。

4. 設定項目

Pub/Subを用いるにあたり、設定する項目を紹介いたします。
本来はもっと多くありますが、イメージを掴むために一部分を抜粋しました。

Publisher側

設定項目 説明
PublishingInterval データを送信する間隔です。
NodeID PublishするNode(※)です。
データ型 Publishするデータ型を指定します(intやDoubleなど)
PublisherID Subscribeするときに取捨選択を行うためのIDです。
データ一つ一つに対して設定し、ネットワーク内で一意にする必要があります。
IPアドレス 自サーバのアドレスやデータのPublishに使用するマルチキャストアドレスなどを設定します。

※AddressSpaceと呼ばれる構造体内のメンバをNodeと呼びます。NodeIDはNodeを特定するためのIDで、AddressSpace内で一意です。

Subscriber側

設定項目 説明
PublisherID Publisher側で設定したPublisherIDを設定します。
ネットワーク内にPublishされたデータのうち、この値で指定されたデータをSubscribeします。
NodeID Subscribeしたデータの格納先Nodeを設定します。
MessageReceiveTimeout 前回データなどを受信してから、タイムアウトのエラーとするまでの時間です。
IPアドレス 自サーバのアドレスやデータのSubscribeに使用するマルチキャストアドレスなどを設定します。

他にも数多くの設定項目がありますが、Pub/Sub通信のイメージはできるのではないかと思います。
気になる方は参考サイトをご覧ください。

5. 設定の確認

OPC UAサーバのPub/Subの設定を確認するのには、UaExpertを使用しました。
UaExpertはUnified Automation社が無償提供しているOPC UAクライアントソフトです。
まずはPub/Subの設定が表示できるように設定を変更します。
UaExpertを起動したら、上部のメニューからSettingをクリックし、Configure UaExpertをクリックします。

ウィンドウが表示されたら、Filterに「PubSub」と入力します。
「PubSubCofigPlugin.EnableConfigurationViewTab」のValueをtrueにし、OKをクリックします。

続いてOPC UAサーバに接続します。
細かい操作については題意とそれるため、省略いたします。
今回はPubSubTestServerに接続しました。

次にウィンドウ上部のAdd Documentをクリックし、ウィンドウを表示させます。
Document TypeでPubSubConfigViewを選択し、Addをクリックします。

Network Viewが表示され、接続中のサーバの設定が表示されます。
ここではUDP Multicastの設定など、Pub/Subのネットワークに関する設定が見られます。
なお、ここに何も表示が無ければ、サーバのPub/Sub設定が上手くいっていないことになります。
最初に設定を変更したことで、Configuration Viewに切り替えることができます。

左下の「Configuration View」をクリックします。
ここではNodeIDやPublish先アドレス、Publishing Intervalなどの設定が見られます。

6. 実践

UaExpertを用いて、Pub/Sub通信が行われていることを確認します。
2つのサーバ「PublishTestServer」と「SubscribeTestServer」を用意しました。
前者にてPublishしたデータを、後者にてSubscribeする設定となっております。
それぞれPublishとSubscribeに設定したNodeをDataAccessViewに表示させます。
まずはProjectにてPublishTestServerをクリックし、AddressSpaceからPublishの左側の>をクリックします。「PublishNode」が表示されたら、これをData Access Viewにドラッグ&ドロップします。

同様にSubscribeTestServerのSubscribe内にあるSubscribeNodeをDataAccessViewに表示させます。

PublishTestServerのValueに「10」を入力すると……。

SubscribeTestServerのValueが「10」になりました。

7. おわりに

今回はOPC UAのPub/Sub通信について、簡単にご紹介いたしました。
私自身は、最初はPub/Subモデルのイメージもよくわかっておりませんでした。
今回では紹介しきれないほどの細かい設定項目やOPC UA機能との連携などまだまだ多くの機能があります。
設定する必要のパラメータが多く、小さなミスでも失敗してしまうなど、扱いや開発が難しい面もあります。
しかしTCP/IPと違い、通信相手がいなくてもよいので、Publisher側の設定だけを確認するなど、やりやすい面もありました。
これからPub/Subに触れる際の足掛かりとして、Pub/Sub通信がどのようなものか知っていただけたら幸いです。
最後までお読みいただきありがとうございました。

(Y.I.)

[参考]

関連ページへのリンク

関連するソフテックだより

ページTOPへ