OPC-UA ノード
node-red-contrib-opcua のようなコミュニティノードを通じて、外部 OPC-UA サーバー(Kepware, Ignition, 他のゲートウェイ)と直接通信できます。ゲートウェイ自体の OPC-UA サーバーに接続する場合も同じノードを使用します (opc.tcp://127.0.0.1:12000/opcua, NodeId ns=2;s=...)。
画面メニュー OPC UA サーバー › サーバー情報タブにある TCP エンドポイント 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/opcua |
| 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回のみ使用してください |