メインコンテンツまでスキップ

OPC-UA ノードを使いこなす

node-red-contrib-opcua のようなコミュニティノードを通じて、外部 OPC-UA サーバー(Kepware、Ignition、他のゲートウェイ)と直接通信できます。ゲートウェイ自身の OPC-UA サーバーへ接続する場合も同じノードを使います(opc.tcp://127.0.0.1:12000、NodeId ns=2;s=...)。

内蔵 OPC-UA サーバーへ接続する場合

画面メニューの OPC-UA ビューア から TCP Endpoint URLNodeId をそのままコピーして使用します。詳細は OPC-UA ノードビューアを使う を参照してください。


1. ノードの種類 (node-red-contrib-opcua)

ノード用途
OpcUa-Endpointサーバー接続情報(host/port/security/auth)— 一度作成すれば他のノードで共有
OpcUa-Item単一ノードの定義 — nodeId を入力へ変換
OpcUa-ClientRead / Write / Browse / Method call のメイン動作ノード
OpcUa-Subscribe変更イベント(MonitoredItem)の購読 — ポーリングなしで push 受信
OpcUa-EventOPC-UA Alarm & Event の購読

2. Endpoint の作成

OpcUa-Client ノードをダブルクリック → Endpoint 欄の横の鉛筆アイコン → 新しい endpoint:

項目値(ゲートウェイ内蔵サーバーの場合)
Endpointopc.tcp://127.0.0.1:12000
Security PolicyNone(内部)または Basic256Sha256(外部運用)
Security ModeNone / Sign / Sign & Encrypt
LoginOPC-UA ビューア画面の Username/Password、または Anonymous(許可されている場合)

3. Read / Write パターン

inject ─▶ OpcUa-Item (nodeId, msg.payload type) ─▶ OpcUa-Client (READ/WRITE) ─▶ debug

OpcUa-Item:

項目
Itemns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042
DataTypeInt32(実際のタグのデータ型と一致させる必要あり — 不一致だと BadTypeMismatch)

OpcUa-Client:

項目
ActionREAD または WRITE
Endpoint上で作成した endpoint

WRITE 時は OpcUa-Item ノードの前に changemsg.payload = 9999 のように値をセットしてください。


4. Subscribe — ポーリングなしで変更のみ受信

ポーリング(周期 read)よりも Subscribe の方がはるかに効率的です。変更がなければトラフィックも発生せず、マイクロ秒単位で到着します。

inject (once after deploy) ─▶ OpcUa-Item ×N ─▶ join (배열) ─▶ OpcUa-Subscribe ─▶ debug / function

OpcUa-Subscribe:

項目
ActionSUBSCRIBE
Interval100 ms 推奨(サーバーがクライアントへ通知する最小周期)
Queue size10(サーバー急増時のバッファ)

受信メッセージには msg.payload(値)+ msg.topic(NodeId)+ msg.timestamp が含まれます。


5. Browse — ノードツリーの自動探索

KEPServerEX のようにノードが数百/数千個ある環境で「どの NodeId が存在するか」を調べるときに使います。

inject ─▶ OpcUa-Client (action=BROWSE, msg.payload="ns=2;i=85") ─▶ debug

応答は子ノードの [ {nodeId, browseName, displayName, ...} ] 配列です。これを function で加工して自動登録フローを作ることもできます。


6. よく陥る落とし穴

症状原因 / 対処
BadIdentityTokenInvalidユーザー/パスワード、または証明書が未信頼。サーバーコンソールでクライアント証明書を Trust に設定
BadTypeMismatchOpcUa-Item の DataType が実際のノード型と異なる
毎回 接続切断 メッセージが出るEndpoint URL のホストドメインが証明書の CN と異なる — 証明書を再発行するか、URL のホスト を証明書の CN に合わせる
Subscribe が一度しか発火しないOpcUa-Subscribe は一度「登録」すれば十分です。inject の once after deploy オプションを1回だけ使用

7. 次のステップ