前回は、PLCnext Control 上の OPC UA サーバにて任意の変数を公開し、OPC UA クライアントからアクセスする方法をご紹介しました。
OPC UA はこのように任意の変数を自由に公開できますが、各種団体によりあらかじめ容易されたデータセットを用いるとメーカーが異なる産業装置間でも共通の変数名やメソッド名でアクセスすることができるようになり、よりデータ交換性が高くなります。
このようなデータセットが「コンパニオン情報モデル」と呼ばれるもので、OPC UA の大きなアドバンテージです。
今回はプラスチック・ゴム産業用のコンパニオン情報モデル「EUROMAP」の定義ファイルをインターネットからダウンロードし、PLCnext コントローラへ取り込んで使用するための具体的な手順を紹介します。
OPC UA の変数とメソッドについて
OPC UA はオブジェクト指向という考え方に乗っ取っており、変数とメソッドによってオブジェクトの動作が定義されます。
要素名 | 説明 |
---|---|
変数 | 数値や文字列情報など。OPC UA クライアントはサーバ上の変数値を読み書きすることが可能です。 |
メソッド | 装置の具体的な動作。例えば「装置のモーター部の電源を ON にする」というメソッドを OPC UA クライアントから呼び出せば、サーバはそのメソッドを実際に実行します。 |
PLCnext では、情報モデルで定義された変数やメソッドをユーザの作成した PLCnext 内部の変数やプログラムへ結びつけることができるため、任意のコンパニオン情報モデルに対応した OPC UA サーバを柔軟に構築することができます。
今回の記事ではコンパニオン情報モデルを PLCnext へ取り込み、情報モデル上の変数と PLCnext 内部の変数を結びつけます。
コンパニオン情報モデル取込み実験用の環境
前回の記事でご紹介した手順が完了している状態からスタートしますので、まだの方は「PLCnextによるOPC UAの活用(2):PLCnextのOPC UAサーバへアクセス」の手順を実施してください。
コンパニオン情報モデルは OPC UA 情報モデルの第 3 層です。「PLCnextによるOPC UAの活用(1):概要と構成例」の記事もご参照ください。
アプリケーション種類 | 機材/ソフト |
---|---|
EUROMAP | この例では EUROMAP 82.1 を使用します (詳細は次の項目で解説します)。 |
OPC UA サーバ | PLCnext コントローラ:AXC F 2152 (前回と同じ) |
OPC UA クライアント | UaExpert (無償、前回と同じ) |
OPC UA モデリングツール | UaModeler (無償):Unified Automation 社製の OPC UA クライアントアプリ。Windows 版を使用します。 |
テキストエディタ | Windows 標準の notepad など、任意のテキストエディタ。 |
ファイル転送ツール | WinSCP (無償) : SFTP を使用できるクライアントソフトウエアなら何でも構いません。 |
プログラミング環境 | 今回は使用しません。 |
想定している産業装置の構成
今回は、射出成型機に付属している温調器用のコントローラとして PLCnext が使用されていると仮定します。
図では圧力センサからの値を PLCnext で受けるとるようにしていますが、今回はプログラムを単純化するために前回の記事で作成した PLCnext プロジェクト内の counter_var 変数を圧力センサから受け取った値とみなして使用することとします。
EUROMAP 用ノードセットの取り込みと確認
情報モデルはノードセットと呼ばれる xml ファイルで定義されています。
この項目では PLCnext へ Euromap のノードセットを取り込み、本当に取り込まれているのかを確認します。
使用するノードセット用 xml ファイル
今回の例で使用する EUROMAP 82.1 は、射出成形機で使用される温調器のコンパニオン情報モデルです。
ノードセットファイル名 | 説明 |
---|---|
Opc.Ua.NodeSet2.xml | OPC UA 全体で共通となる、情報モデル第 1 層「メタモデル」及び第 2 層「ビルトインモデル」の定義です。 GitHub の OPCFoundation/UA-Nodeset から入手可能です。 参考URL: https://github.com/OPCFoundation/UA-Nodeset/blob/latest/Schema/Opc.Ua.NodeSet2.xml |
Opc.Ua.PlasticsRubber.GeneralTypes.NodeSet2.xml | EUROMAP 83用の「コンパニオン情報モデル」(情報モデル第 3 層)。EUROMAP で共通に使用される型の定義です。 EUROMAP83_Release_x.xx.zip に含まれます (x はバージョン番号)。 参考URL: https://www.euromap.org/euromap83 |
Opc.Ua.PlasticsRubber.TCD.NodeSet2.xml | EUROMAP 82.1用の「コンパニオン情報モデル」(情報モデル第 3 層)。温調器用インターフェースの定義です。これを使用するには上述の EUROMAP 83 が必要です。 EUROMAP82.1_Release_x.xx.zip に含まれます (x はバージョン番号)。 参考URL: https://www.euromap.org/euromap82-1 |
各ファイルを、上記の参考 URL からダウンロードしてください。(インターネット上での検索でも見つけることができます)
また、上記ファイルのうち EUROMAP 用のものはそれぞれの zip ファイルの中に含まれていますので、zip を展開して取り出してください。 .xml の他に .ua ファイルも含まれており、そちらも後ほど使用します。
ノードセットファイルを OPC UA サーバへ配置
PLCnext へコピーするノードセットファイル | PLCnext のコピー先ディレクトリ |
---|---|
Opc.Ua.NodeSet2.xml Opc.Ua.PlasticsRubber.GeneralTypes.NodeSet2.xml Opc.Ua.PlasticsRubber.TCD.NodeSet2.xml | /opt/plcnext/projects/Default/Services/OpcUA/NodeSets |
上記 3 点の xml ファイルを WinSCP 等のファイル転送ソフトを使用して PLCnext へコピーしてください。(WinSCPの導入方法や使用方法の詳細は、WinSCP のサイト等をご参照ください)
(WinSCP 参考 URL: https://winscp.net/eng/download.php)
ファイルのコピーが完了したら、PLCnext を再起動してください。
新しい Type の確認
前回記事を参考に UaExpert を起動し、PLCnext の OPC UA サーバへ接続してください。
Address Space に http://opcfoundation.org/UA/PlasticsRubber/TCD/ が追加されていれば、EUROMAP 82.1 が追加されています。
その Address Space を選択した状態で Types の中身を閲覧すると、選択している Address Space で定義されているノードの型が黒い太字で強調表示されます。
上記の例では、TCDSpecification Type や TCD_Interface Type 等が EUROMAP 82.1 用に取り込まれた定義であることがわかります。
インスタンス ノードセット ファイルの作成
ノードのインスタンス化:PressureMainLine ノード
EUROMAP 82.1 で定義されているノードを具体的に使用するために、ノードのインスタンスを作成する必要があります。
今回は、温調器の圧力計の値を示す PressureMainLine というノードのインスタンスを作成します。
なおこのノードの型は、UaExpert にて Types を以下の様に展開していくと確認することができます。
Types > ObjectTypes > BaseObjectType > TCD_Interface Type > DeviceZone > PressureMainLine
確認できたら、いったん UaExpert を終了してください。
UaModeler のダウンロードとインストール
Unified Automation 社のサイトから UaModelerをダウンロードし、インストールしてください。
ダウンロードには、UaExpert をダウンロードする際に無料で登録したユーザアカウントが使用できます。
詳細は Unified Automation 社のサイトをご参照ください。
UaModelerによるプロジェクトの作成
UaModeler を起動し、プロジェクトを作成します。
このときに EUROMAP82.1_Release_x.xx.zip 及び EUROMAP83_Release_x.xx.zip にそれぞれ含まれていた .ua ファイルをプロジェクトへ読み込みます。
ここでは作成するプロジェクト名を euromap_inst としています。
インスタンスの追加
温調器の型である TCD_InterfaceType のインスタンスを Objects > DeviceSet の直下に作成します。
今回使用する PressureMainLine ノードは TCD_InterfaceType の中に含まれていますがオプション (必須ではない) なので、デフォルトではインスタンス化されません。忘れずに Optional components 用のダイアログボックスでチェックボックスをチェックしてインスタンス化するようにします。
インスタンス ノードセット ファイルを作成
euromap_inst.ua を xml へエクスポートして、インスタンス ノードセット ファイルを作成します。
作成された euromap_inst.xml ファイルは、プロジェクトの保存先と同じフォルダへ出力されます。
UaModeler を使用する操作はここまでです。
インスタンス ノードセット ファイルを PLCnext へコピー
PLCnext へコピーするノードセットファイル | PLCnext のコピー先ディレクトリ |
---|---|
euromap_inst.xml | /opt/plcnext/projects/Default/Services/OpcUA/NodeSets |
上記 の xml ファイルを WinSCP 等のファイル転送ソフトを使用して PLCnext へコピーしてください。
ファイルのコピーが完了したら、PLCnext を再起動してください。
インスタンス化されたノードの存在確認
UaExpert を起動し、PLCnext の OPC UA サーバへ接続してください。
TCD_Interface デバイスのノードが追加され、その下に PressureMainLine ノードがあることを確認できます。
この段階でのノード値は単なる静的な数値です。
次の項目で、このノードを PLCnext 内のプログラムで使われている実際の変数と紐付けます。
インスタンス化されたノードと PLCnext 変数の紐付け
PLCnext のプログラム上の変数の値を PressureMainLine のインスタンス ノードの値に反映させるためには、インスタンス ノードセット ファイル (xml) をテキストエディタで少し修正する必要があります。
PLCnext 変数のインスタンス パスの取得
UaExpert で、PLCnext 変数「counter_var」のインスタンス パスを確認し、テキストファイル等へメモしておきます。
インスタンス ノードセット ファイルの編集
インスタンス ノードセット ファイル「euromap_inst.xml」を編集し、PressureMainLine 用の <UAVariable> 要素内に <Extensions> 要素を追加します。
このとき、GdsValueAttribute 値に前述のインスタンス パスを指定します。
<Extensions>
<Extension>
<AttributeSource xmlns="http://phoenixcontact.com/OpcUA/2019/NodeSetExtensions.xsd" GdsValueAttribute="Arp.Plc.Eclr/MainInstance.counter_var"/>
</Extension>
</Extensions>
編集後のファイルをサーバへ適用
編集後のインスタンス ノードセット ファイル「euromap_inst.xml」を WinSCP 等のファイル転送ソフトを使用して PLCnext へコピーしてください。
上書きするかどうか尋ねられた場合は、上書きしてください。
ファイルのコピーが完了したら、PLCnext を再起動してください。
情報モデルのノード値が正しく更新されることを確認
UaExpert で PLCnext の OPC UA サーバへ接続してください。
(もし UaExpert を開いたままだったら、いったん Disconnect して Connect しなおしてください)
EUROMA 82.1 の PressureMainLine ノードが、PLCnext 内部の変数値を反映している様子を確認できます。
PLCnext の SerialNumber を EUROMAP の SerialNumber から参照
PLCnext の OPC UA サーバは PLCnext 自身のシリアル番号を格納した SerialNumber というノードを持っています。
一方、前項でインスタンス化した EUROMAP の TCD_Interface オブジェクトも SerialNumber ノードを持っています。
PLCnext が温調器 (TCD_Interface) に組み込まれたコントローラとして使用されているなら、温調器の SerialNumber としてPLCnext の SerialNumber を使用できれば管理上好都合です。
この項目では、温調器 (TCD_Interface) の SerialNumber 値にアクセスすると PLCnext の SerialNumber 値が参照されるようにするための手順をご紹介します。
初期状態での SerialNumber 値の確認
まず、手を加えていない状態で SerialNumbner ノードの値がどうなっているかをみてみましょう。
UaExpert で PLCnext の OPC UA サーバへ接続し、以下の手順で PLCnext の SerialNumber ノード値と TCD_Interface の SerialNumber ノード値を確認してください。
PLCnext の SerialNumber ノードにのみ値があり、 TCD_Interface の SerialNumber ノードは空であることがわかります。
PLCnext の SerialNumber のノード ID 確認
PLCnext の SerialNumber ノードのノードID を以下の手順で確認してください。次のステップでこの情報を使用します。
インスタンス ノードセット ファイルの編集
インスタンス ノードセット ファイル euromap_inst.xml を以下のように編集して保存します。
追加する PLCenxt Devices 用の Namespace Uri
<Uri>http://phoenixcontact.com/OpcUA/PLCnext/Devices/</Uri>
変更後の NodeId 属性
NodeId="ns=5;s=ThisDevice.SerialNumber"
編集後のファイルをサーバへ適用
編集後のインスタンス ノードセット ファイル「euromap_inst.xml」を WinSCP 等のファイル転送ソフトを使用して PLCnext へコピーしてください。
上書きするかどうか尋ねられた場合は、上書きしてください。
ファイルのコピーが完了したら、PLCnext を再起動してください。
SerialNumber 値の動作確認
UaExpert で PLCnext の OPC UA サーバへ接続してください。
(もし UaExpert を開いたままだったら、いったん Disconnect して Connect しなおしてください)
TCD_Interface 用の SerialNumber ノードとして PLCnext (AXC F 2152) の SerialNumber ノードが参照されている様子を確認できます。
以上が、PLCnext の OPC UA サーバへ外部からコンパニオン情報モデルを取り込み、コンパニオン情報モデル上の変数を具体的に利用するまでの基本的な手順です。
情報モデル上のメソッドと PLCnext 内のプログラムを結びつける方法については、別の回で紹介させていただく予定です。