PLCNEXT#OPC UA PubSub使ってみよう

OPC UA(Open Platform Communication Unified Architecture)は、単なる通信プロトコルではなく、データモデルや相互作用の概念も含むアーキテクチャで、新しい市場標準としてますます普及し、オープンで標準化された通信の基礎を提供します。それにより、異なるプラットフォーム間で標準化されたデータ交換を可能にします。

そしてOPC UAはPLCnext Technologyに不可欠な要素であるため、サードパーティシステムとの接続においてOPC UAが対応しています。今回紹介するのはそのOPC UA PubSub機能です。

OPC UA PubSub Communication

OPC UA PubSub(Publish-Subscribe)は、OPC UA Frameworkの一部であり、PublisherとSubscriberの組み合わせでMessageを提供し、リアルタイムおよび非リアルタイムのデータを高効率に配信するために設計されます。通信は、標準のIPネットワーク上でUDP(User Datagram Protocol)メカニズムを使用して処理され、特定のシステムに結びつかず、柔軟性があるアプローチです。

一般的に、PubSub通信はOPC UAサーバーの構成や動作と独立しています。ネットワークにデータを配信する場合はPublisherとデータを受信する側は1つまたは複数のSubscriberで、なおかつ同時にOPC UAサーバーまたはクライアントである場合があります。

注意するのはOPC UA PubSub通信には、コントローラネットワークでIGMP対応のスイッチが必要で、IGMP(Internet Group Management Protocol)は、TCP/IPプロトコルファミリーの通信プロトコルです。

OPC UA PubSub通信は、OPC UAクライアントサーバー通信とは独立しています。ただし、ここで説明されているパブリッシャーやサブスクライバーは、同時にOPC UAサーバーまたはクライアントである場合があります。

Flow

OPC UA Pub/Subの初期設定を行う際には、以下のように手順に設定しましょう。

注意するにはPLCNEXTの場合、ControllerはPublisherとSubscriber両方として動作できますが、異なるPLCnext Engineerプロジェクトで定義する必要があります。

  1. Publishするデータセットを定義する
  2. Data SetのPublish/Subscribeのためのネットワーク接続設定する
  3. ControllerをPublisherとして設定する
  4. ControllerをSubscriberとして設定する

Data Set

Data Setとは、ネットワークに公開されるポートと変数をグループ化したもので、逆に言えばデータセットは公開可能なポート/変数のコレクションです。

データセットを定義した後、プロジェクトで定義されたWriter(もしくはPublisher)で選択できます。これにより、データセットは再利用可能になり、データセットに含まれるアイテムはネットワークに対して公開することができます。

Which data can be used?

PLCNEXT Controllerでは、以下のComponentsがData setとして使用できます。

  • OUTポートに設定された変数
  • GlobalのIEC変数(Local変数、Program Global変数、In/Out変数は含まれません)
  • 基本データ型および基本データ型の一次元配列

Be carefu-1

変数をデータセットに設定する順序は、このデータセットを読み取るすべてのSubscriberにとって重要です。Readerの構成は、対象の変数は正確にこの順序で正しいデータ型で作成されている必要があります。そうしないと、受信した値と対象の変数のMappingが正しく行われません。

Be carefu-2

PublisherとSubscriberの構成は別々のプロジェクトで行われるため、自動的なチェックはありません。End-UserはSubscriberを構成する際に必要な情報をPublisher側からいただく必要があります。

Be carefu-3

POU変数テーブルのOPC属性は宣言でチェックボックスが選択されていなくても、Data Setに追加できます。

Be carefu-4

データセットは再利用可能です。データセットは何度も選択することができ、つまり複数のWriterによって公開されます。

Publisher?

Publisherとは、Port/変数の値を定義されたネットワークに書き込み、それに応じて設定されたSubscriberが読み取ることができます。

Address指定されたネットワークは、特定の接続に定義したNetwork address(Multicast address)によって指定されます。なので、WriterはConnectionのしたであります。

WriterはいわゆるWriter Groupで構成されています。各Connectionには複数のWriter Groupを構成でき、またGroupは複数のWriterが可能です。

Subscriber?

Subscriberとは、定義されたNetworkからPublishedされたData Setを読み取ることです。

Address指定されたネットワークは、特定の接続に定義したNetwork address(Multicast address)によって指定されます。なので、ReaderはConnectionのしたであります。

ReaderはいわゆるReader Groupで構成されています。各Connectionには複数のReaderGroupを構成でき、またGroupは複数のReaderが可能です。

ReaderをSubscribeするデータセットはPublishのPublish ID・Writer Group ID・Writer IDに合わせる必要があります。

Error

Configuration Compile結果はOPC UA標準に準拠したバイナリ出力ファイルになります。Filename:pcwe.opcua.pubsub.uabinary

Default保存場所:/opt/plcnext/projects/PCWE/Services/OpcUA/PubSubConfig

Implementation

Firmware

Firmware 22.0以上を搭載したPLCnext Technologyコントローラは、OPC Unified Architecture仕様のPart 14に準拠しているOPC UA PubSub通信モデルが実装されます。

Version

今回自分が使用するPLCNEXT Engineering Versionです

2023.0になります。

Configuration

こちらは今回のConfigurationで、AXCF3152とAXCF2152両方もPublisherとSubscriberとして立ち上げ、最後はWirshark・UaExpertとPLCNEXT Engineering三方面で検証します。

Enable the Function

AXCF2152とAXCF2152のWebサーバーSystem Services?OPC UA PubSubのActivation Checkマークを入れて>Apply and rebootします。

AXCF3152 Side

Add Program

AXCF3152のプロジェクトを作成し>右のCOMPONENTS開いて>Local>Programs>プログラムを作成しましょう。

テスト目的なので、言語はどちらでもOkです。

Code編集画面が表示されます。

Define Publish/Subscribe Variables

VariablesのTabを開きます。

Publish Variables

Publish変数を3つ追加します。

注意するのはUsageのFieldから”OUT Port”を設定してあげてください。

このようにUsageのFieldからDrop-Listを変数の属性を設定いただけます。

Subscribe Variables

次はAXCF2152からSubscribeしたい変数群も定義しましょう。

注意するのはUsageのFieldから”IN Port”を設定してあげてください。

Configure the Program Task

プログラムをCPUの実行Taskに割り付けます。PLCnext(2)をクリックしてください。

Task and Eventsの構築画面が表示されます。

ESM1のEnter task name hereにTask名を入力してください。

ここで仮にOB1にします。

先程のStepで作成したプログラムを”Enter program instance name here”のところにDropしていきます。

Done!いまpAXCF3152は周期に実行されています。

OPC UA PubSubs

次はOPC UAのPubSub設定を行います。OPC UA>OPC UA Pub/SubのTabを開きます。

Configuration

Configurationの項目を開くと、Configuartion画面が表示されます。

”Click here to add a new connection”で新しいConnectionを追加します。

Done!新しいConnectionが追加されました。

Network Address

Network AddressはAXCF3152がデータをPublish/Subscribeするときのアドレスになります。Formatはopc.udp//ipaddress:portになります。注意するのはPLCNEXTプロジェクトがCPU1つしかできないので、手動で各プロジェクトのNetwork addessなどをあわせてる必要があります。

Network Interface

Network interfaceはAXCF3152がPub/SubするネットワークPortになります。AXCF3152にはPortが3つあります。今回はX2を選択します。

Publisher ID

PublishIDを10に設定します。PublishIDは他のCPUと被らないように設定してください。

Published data sets

次はCPUのPublishデータセットを作成します。

Add New Dataset

”Click here to add new published data set”で新しいデータセットを追加します。

DataSet1を追加しました。同時にPublished data setsに”DataSet1:Published data set”の項目が追加されます。

Data set

Publish のDataSetにPublishする変数を追加しましょう。

VariablesのFieldをクリックするとDropListから直接CPUにOut Portだと設定された変数を選択できます。

3つのPublish変数を追加しましょう。

Done!

Configure Pub/Sub

次にやるのは設定したPublish Data SetをConnectionsと繋がる、そしてSubscribeの設定とそれらの変数をプログラム変数とLinkさせる作業です。

Connection1:Connectionsを開きます。

その”Connection1″は先の”Configuration”Stepで作成したものです。

Publishの項目にある”Click here to add a new Writer group”をクリックし新しいWriter groupを作成しましょう。

Writer group ID=1のWriter Groupが作成されました。そのIDも重複できません。

Publish

WriterGroup1を開きます。

Edit Group

ここで”Writer”を追加します。

本来なら1つだけのWriterでよいですが、ここであえて3つのWriterを定義しのちほどで検証してきます。Published data setは同じの”DataSet1″にします。

Subscribe

次はScbscribe側を設定します。Scbscribeを開きましょう。

Add Reader Group

Nameのところに新規のWriter Groupを追加します。

よし、これでOK。EnabledのCheckboxも忘れずに。

Add Reader Group

Nameのところに新規のWriter Groupを追加します。

よし、これでOK。EnabledのCheckboxも忘れずに。

Add Reader 

先程追加したReader GrouperにReaderを追加してきます。

NameのFieldをクリックし新しいReaderを定義します。

Done!注意するのはここで設定するSubscribe項目にある”Publish ID”と”Writer Group ID”はPublish側に合わせる必要があります。

Add New Variables

Reader内の変数を追加します。

”Click here to add a new variables”をクリックし新しい変数を入れましょう。

このように変数が追加されました。

Source Variablesの名前はそのままでOKで、この代わりに設定する必要があるのはとなりにある”Target Variables”です。

Drop Listからプロジェクト内に”In Port”として定義された変数を選択できます。

AXCF2152 Side

Add Program

AXCF3152と同じようにLocals>Programsでプログラムを作成します。今回は3つのプログラムに分けて定義します。

Define Publish/Subscribe

AXCF3152側と同じ操作でPublish・Subscribe用の変数を定義します。基本は3つのプログラム(Station1,Station2,Station3)も同じように変数をもっています。

Station1

IN Port変数は1実数1つ、Out Port変数はBoolean,Int,Realが混在してます。

Station2

Station1と同じです。

Station3

Station1と同じです。

Configure the Program Task

Station1,Station2,Station3のプログラムを実行Taskに設定します。

OPC UA PubSubs

操作は先程とあまり変わらないです。

Configuration

”Click here to add a new connection”で新しいConnectionを追加します。

Network address

ConfigurationにConnectionを追加します。注意するのはAXCF3152のNetwork addressに合わせる必要があります。

Network Interface

AXCF2152のNetwork Portを設定します。

Publish Id

AXCF2152のPublish IDは1にします(Defaut)、他のPublisher IDと重複しないようにしてください。

Publish data sets

AXCF2152のPublish データセットを作成します。

Add new Data Set

Published data setsの項目にStationSetを追加します。

Data Set

次はPublished data set”Station1″にデータを追加します。

先程プログラムで定義した”OUT PORT”変数を追加しましょう。注意するのは変数の追加順番は他のSubscriberにも同じように追加する必要があります。

(データがおかしくなるので)

Configure Pub/Sub

次はPublish/SubscribeのデータをConnectionに載せます。

Publish

新しいDataWriter Setを追加します。

Publised data setは先程追加した”Station” Setを設定しましょう。

Subscribe

次はAXCF3152のPublished データをSubscribeします。新しいReader Groupを追加します。

Published Id

先程、AXCF3152のPublish IDが”10”だと設定したんですよね。なので、DataSetReader1のPublisher IDを10に設定してください。

Reader Data

AXCF3152が定義した3つの実数Published変数を追加します。

同じく、プログラムで”IN PORT”だと設定された変数を選んでいただけます。

Test with UaExpert

プロジェクトをAXCF3152とAXCF2152をDownlaodし、まず接続設定がちゃんと入ってるかを確認しましょう。UaExpertを起動し、3152と2152のCPU両方とも内蔵のOPC UAサーバーと接続します。

Add Documents

Documents>右クリック>Addします。

Document TypeにPubSub Config Viewを選び>Okします。

いま2つのOPC UA Serverにも接続している状態なので、両方のPub/Sub状態にも確認できます。

Check Config

まずUDP MuliticastのFolderにopc.udp://239.0.0.01:48451がありますね。こちらは最初にPLCNEXT EngineeringのConnectionsに設定した”Network address”です。

次はAXCF2152のDataSetWriter1を開くとPLCNEXT Engineeringツールに設定したPublishedデータが全部見えますね。

DataSetReader1にも設定されたようにみえます。

Field NameはStation11.r32subData/Station21.r32subData/Station31.r32subDataになって、PLCNEXT Engineeringツールと設定したものと一緒です。

AXCF3152側にもDataSetReaderがありますね。

AXCF3152のPublished側にDataWriterを3つだけ設定したこと覚えていますか?なので、DataSetWriterが3つあります。

DataSetWriter1、DataSetWriter2、DataSetWriter3には同じ変数が入っています。

Test with Wireshark

Wiresharkからはどうでしょうか。UDP Protocolがありますね!

Test with PLCENXT

最後に、PLCNEXT Engineering側にもデータがありました。

Download

こちらのGithubからSample ProjectをDownlaodしてください。

https://github.com/soup01Threes/PLCNEXT/blob/main/PLCNEXT%20Controller%20OPCUA%20PubSub%20Example.7z

Footer_Basic

Please Support some devices for my blog

Amazon Gift List

Find ME

Twitter:@3threes2
Email:soup01threes*gmail.com (* to @)
YoutubeChannel:https://www.youtube.com/channel/UCQ3CHGAIXZAbeOC_9mjQiWQ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする