OPC-UA
OPC-UA (OLE for Process Control - Unified Architecture、IEC 62541) は産業オートメーション分野の標準通信プロトコルです。Kepware、Matrikon、Prosys、Ignition など、ほぼすべての SCADA / ミドルウェア製品が OPC-UA サーバー機能を備えています。
ほとんどの PLC は OPC-UA サーバー機能を直接持たないため、通常は Kepware のようなゲートウェイソフトウェアを介して PLC の値を OPC-UA として公開し、本ゲートウェイがその OPC-UA サーバーに接続して値を取得する構成になります。
対応 spec / セキュリティ
本ゲートウェイの OPC-UA クライアントは OPC UA 1.04 (IEC 62541:2020) まで対応 — Eclipse Milo 0.6.16 SDK ベース。
- Transport: opc.tcp:// (UA Binary encoding)
- Security: None / Basic256Sha256 / Aes128_Sha256_RsaOaep / Aes256_Sha256_RsaPss などの標準ポリシー
- User token: Anonymous / UserName+Password / X.509 Certificate
- Subscription: ゲートウェイは polling 方式 (
timecycle周期) — UA の MonitoredItem 購読は未使用
登録フォームの入力値
| 入力欄 | 入力内容 | 例 |
|---|---|---|
| IP アドレス | OPC-UA サーバー PC の IP | 192.168.0.40 |
| ポート | OPC-UA サーバーのポート | 49320 (Kepware 既定) / 4840 (標準) |
| ユーザー (User) | OPC-UA サーバーに登録されたユーザー ID | kopens (サーバーにより異なる) |
| パスワード | そのユーザーのパスワード | *** |
| サーバー名 (servername) | エンドポイント末尾のサーバー名 | (Kepware の場合は空欄) |
| Discovery 使用 | サーバーのエンドポイントを自動検索するか | 通常は false。動作しない場合は true を試行 |
| Subscription 使用 (subscription-enabled) | polling の代わりに server-push モード | チェック時 true (大量タグに効率的) |
| Publishing (publishing-interval) | サーバーがデータ変更を publish する間隔 (ms) | 1000 (既定) |
| Sampling (sampling-interval) | サーバーが値をサンプリングする間隔 (ms) | 1000 (既定) |
| Queue Size (queue-size) | 変更値の蓄積キューサイズ (notification 損失防止) | 10 (既定) |
ユーザー / パスワード 欄を両方空欄にすると、匿名 (Anonymous) で接続を試行します。サーバー側で匿名接続が許可されている必要があります。
タグの PLC アドレス表記
OPC-UA のタグアドレスは通常 NodeId と呼ばれる次の形式です。
| 表記 | 説明 |
|---|---|
ns=2;s=Channel1.Device1.Tag1 | namespace 2、文字列識別子 — Kepware で最も一般的 |
ns=2;i=1234 | namespace 2、数値識別子 |
ns=3;g=09087e75-8e5e-499b-954f-f2a8624db28a | GUID 形式 |
ns=は namespace 番号。通常は2。s=の後に「Channel.Device.Tag」形式のパスが入ります (Kepware で作成したパスそのまま)。
NodeId の調べ方
- PLC メーカー / Kepware メーカーのマニュアル にマッピング表が記載されている場合が多くあります。
- UA Expert などの無償 OPC-UA クライアントで直接接続し、ツリー上のノードを右クリックすると NodeId をコピーできます。
- Kepware 付属の OPC Quick Client ツールでも同じことができます。
Kepware クイック設定
よく使われる組み合わせである Kepware を前提とした手順です。
- Kepware Server → Project → チャネル追加 (例:
Simulator) - デバイス追加 (例:
Simulator) → モデル =16 Bit Device - タグ追加 → 名前
Sine1、typeFloat、scan rate100ms - Project Properties → OPC UA → Server Endpoint でポート
49320を有効化 - 匿名またはユーザーアカウントを有効化
本ゲートウェイの登録フォームには:
| 欄 | 値 |
|---|---|
| IP | Kepware サーバー PC の IP |
| ポート | 49320 |
| ユーザー/パスワード | 上で作成したアカウント (匿名の場合は空欄) |
| タグ PLC アドレス | ns=2;s=Simulator.Simulator.Sine1 |
よくある問題と対処
| 症状 / メッセージ | 考えられる原因 | 対処 |
|---|---|---|
| 「Connection refused」/ 接続できない | OPC-UA サーバーが停止、またはポート遮断 | OPC-UA サーバーが稼働中か、IP/ポートが正しいか確認 |
| 「User access denied」 | ユーザー/パスワード誤り、またはサーバーで匿名接続が非許可 | サーバーにユーザーを登録するか、匿名接続を許可 |
| 「Security checks failed」 | サーバーのセキュリティポリシー不一致 | サーバーのセキュリティポリシーを「None」または「Basic256Sha256」に合わせる |
接続はできるが値が常に 0 または null | タグ NodeId の誤記、namespace 番号の相違 | UA Expert などで同じ NodeId が実際に動作するか検証 |
| 切断と再接続を繰り返す | ネットワーク不安定、またはサーバー PC の負荷 | サーバー PC のリソース / ケーブル / スイッチを点検 |
よく使うデータ形式
| PLC の値 | データ形式 | 形式補助 | PLC アドレス例 |
|---|---|---|---|
| ON/OFF | Boolean | (空欄) | ns=2;s=Pump.Status |
| 整数 | Integer | (空欄) | ns=2;s=Counter |
| 大きい整数 | Long | (空欄) | ns=2;s=Total |
| 実数 (32-bit) | Float | (空欄) | ns=2;s=Pressure |
| 実数 (64-bit、高精度) | Double | (空欄) | ns=2;s=PrecisionTemp |
| 文字列 | String | (空欄) | ns=2;s=Recipe.Name |
OPC-UA の場合、format 欄は通常 空欄のままにします (サーバーがデータ型を通知します)。
より詳細な例 / 自動登録
スクリプト / API で自動登録する場合は、高度な設定 — REST API ページの OPC-UA 例を参照してください。