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 URL と NodeId をそのままコピーして使用します。詳細は OPC-UA ノードビューアを使う を参照してください。
1. ノードの種類 (node-red-contrib-opcua)
| ノード | 用途 |
|---|---|
OpcUa-Endpoint | サーバー接続情報(host/port/security/auth)— 一度作成すれば他のノードで共有 |
OpcUa-Item | 単一ノードの定義 — nodeId を入力へ変換 |
OpcUa-Client | Read / Write / Browse / Method call のメイン動作ノード |
OpcUa-Subscribe | 変更イベント(MonitoredItem)の購読 — ポーリングなしで push 受信 |
OpcUa-Event | OPC-UA Alarm & Event の購読 |
2. Endpoint の作成
OpcUa-Client ノードをダブルクリック → Endpoint 欄の横の鉛筆アイコン → 新しい endpoint:
| 項目 | 値(ゲートウェイ内蔵サーバーの場合) |
|---|---|
| Endpoint | opc.tcp://127.0.0.1:12000 |
| Security Policy | None(内部)または Basic256Sha256(外部運用) |
| Security Mode | None / Sign / Sign & Encrypt |
| Login | OPC-UA ビューア画面の Username/Password、または Anonymous(許可されている場合) |
3. Read / Write パターン
inject ─▶ OpcUa-Item (nodeId, msg.payload type) ─▶ OpcUa-Client (READ/WRITE) ─▶ debug
OpcUa-Item:
| 項目 | 値 |
|---|---|
| Item | ns=2;s=SITE_00001.OPC_00303.TAG_TEST_00042 |
| DataType | Int32(実際のタグのデータ型と一致させる必要あり — 不一致だと BadTypeMismatch) |
OpcUa-Client:
| 項目 | 値 |
|---|---|
| Action | READ または WRITE |
| Endpoint | 上で作成した endpoint |
WRITE 時は OpcUa-Item ノードの前に change で msg.payload = 9999 のように値をセットしてください。
4. Subscribe — ポーリングなしで変更のみ受信
ポーリング(周期 read)よりも Subscribe の方がはるかに効率的です。変更がなければトラフィックも発生せず、マイクロ秒単位で到着します。
inject (once after deploy) ─▶ OpcUa-Item ×N ─▶ join (배열) ─▶ OpcUa-Subscribe ─▶ debug / function
OpcUa-Subscribe:
| 項目 | 値 |
|---|---|
| Action | SUBSCRIBE |
| Interval | 100 ms 推奨(サーバーがクライアントへ通知する最小周期) |
| Queue size | 10(サーバー急増時のバッファ) |
受信メッセージには 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 に設定 |
BadTypeMismatch | OpcUa-Item の DataType が実際のノード型と異なる |
| 毎回 接続切断 メッセージが出る | Endpoint URL のホストドメインが証明書の CN と異なる — 証明書を再発行するか、URL のホスト を証明書の CN に合わせる |
| Subscribe が一度しか発火しない | OpcUa-Subscribe は一度「登録」すれば十分です。inject の once after deploy オプションを1回だけ使用 |