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

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サーバーに接続して値を取得する構造になります。

サポート範囲

このゲートウェイのOPC-UAクライアントはEclipse Milo 1.1.8 SDKに基づいています。

  • Transport: opc.tcp:// (UA Binary encoding)
  • セキュリティモード: None · Sign · SignAndEncrypt · 自動 — 下記の セキュリティ接続 を参照
  • セキュリティポリシー: 自動 · Aes256_Sha256_RsaPss · Basic256Sha256 · Aes128_Sha256_RsaOaep (レガシーポリシー Basic256 · Basic128Rsa15 は別途許可が必要)
  • ユーザー認証: 匿名(Anonymous) または ユーザー名 + パスワード
  • 読み取り / 書き込み: 両方サポート。読み取りは timecycle 周期のポーリングであり、UA購読(MonitoredItem)は使用しません

DCS・ロボットコントローラーのOPC UAサーバーに接続する場合は、DCSを接続する · ロボットを接続する も併せて参照してください。


登録フォームの入力値​

IP・ポートの下にある OPC UA プロトコルオプション グループの項目は、サーバー名・ユーザー・パスワード・ディスカバリの4つです。チャンネル暗号化はその下の セキュリティ (チャンネル暗号化) グループで設定します — セキュリティ接続 を参照。

入力項目内容例
IPアドレスOPC-UAサーバーPCのIP192.168.0.40
ポートOPC-UAサーバーポート49320 (Kepwareデフォルト) / 4840 (標準)
サーバー名 (servername)エンドポイントURIのパス部分空欄、または OPCUAServer · iotgateway など
ユーザー (username)OPC-UAサーバーに登録されたユーザーID。匿名の場合は空欄kopens (サーバーにより異なる)
パスワード (password)そのユーザーのパスワード***
ディスカバリ (discovery)true の場合、接続時にノードツリー全体をブラウジングfalse (推奨)

ユーザー / パスワード を両方入力するとユーザー名トークンとして、どちらか一方が空欄の場合は匿名(Anonymous)で接続します。匿名の場合は、サーバー側で匿名接続が許可されている必要があります。セキュリティモードがNoneの場合、アカウント情報が平文チャンネルで送信されるため、アカウントを使用する場合はSignAndEncryptを推奨します。

エンドポイントの決定方式​

  1. 入力値を用いて opc.tcp://<IP>:<port>/<servername> を作成し、サーバーにエンドポイント一覧を問い合わせます。
  2. 一覧から セキュリティモード・セキュリティポリシーに適合する エンドポイントを選択します。
    • セキュリティモード None — Noneエンドポイントの中で、使用するユーザートークン(匿名またはユーザー名)を広報しているものを優先し、なければ最初に見つかったNoneエンドポイントを選択します。
    • Sign · SignAndEncrypt · 自動 — 選択したモード・ポリシーおよび使用するユーザートークンをすべて満たすエンドポイントの中で、最も強力なポリシーを選択します。適合するものがない場合は、Noneにフォールバックせずに接続に失敗します(OPCUA_NO_MATCHING_ENDPOINT)。
  3. 選択したエンドポイントURLの ホストを入力したIPに置き換えて 接続します(ポート・パスはサーバーが広報した値を使用)。サーバーが自身のホスト名を広報しても、DNS・hostsの設定は不要です。

サーバーがどの方針のエンドポイントを広報しているかは、[エンドポイント照会] ボタンで画面から直接確認できます — エンドポイント照会 を参照。

ディスカバリはエンドポイント検索ではありません​

discovery=true は、接続時にルートフォルダから ノードツリー全体をブラウジングしてゲートウェイログに記録します。 エンドポイントを探す機能や、タグを自動登録する機能ではありません。サーバーが提供するエンドポイント(セキュリティモード・ポリシー)を確認したい場合は、ディスカバリではなく [エンドポイント照会] を使用してください。ノード数が多いサーバーでは負荷が高くなるため、通常は false に設定し、NodeIdは以下の方法で確認してください。


セキュリティ接続 (チャンネル暗号化)​

接続画面の セキュリティ (チャンネル暗号化) グループで設定します。None以外の場合、Edgeが 自身のクライアント証明書でセキュリティチャンネルを開き、適合するエンドポイントがなくてもNoneにフォールバックしません。

接続画面の «セキュリティ (チャンネル暗号化)» グループ — 番号は読む順序

番号項目内容
①セキュリティモードNone (암호화 없음) · Sign (서명) · SignAndEncrypt (서명+암호화, 권장) · 자동 (Sign·SignAndEncrypt 중 가장 강한 것)
②セキュリティポリシー자동 (서버가 제공하는 가장 강한 정책) または Basic256Sha256 · Aes128_Sha256_RsaOaep · Aes256_Sha256_RsaPss のいずれか。セキュリティモードがNoneの場合は表示されません
③詳細展開すると レガシーポリシー許可 チェックボックスが表示されます。Basic256 · Basic128Rsa15 (廃止済みポリシー) のみをサポートする古いサーバーの場合のみ有効にします。安全ではありません
  • デフォルト値 — 既存の接続は None のままです。接続追加画面の DCS・ロボットカード で新しく作成する接続は SignAndEncrypt から始まります。
  • 自動ポリシーの順序 — Aes256_Sha256_RsaPss > Basic256Sha256 > Aes128_Sha256_RsaOaep.
  • 変更した値は 保存して から適用されます。

エンドポイント照会​

IP・ポート・サーバー名を入力して [エンドポイント照会] を押すと、Edgeがサーバーにエンドポイント一覧(GetEndpoints)を問い合わせ、表形式で表示します。セッションを開かないためアカウントは不要であり、サーバー証明書を信頼する前でも実行可能です(接続3秒・全体6秒制限)。

[エンドポイント照会] 結果 — 番号は読む順序

番号場所内容
①グループヘッダー右側[エンドポイント照会] — IPとポートを先に入力する必要があります
②表ヘッダー照会したアドレスと列 — セキュリティモード · セキュリティポリシー · ユーザー認証(Anonymous · UserName · Certificateなど) · サーバー証明書(主体とSHA-1フィンガープリント)
③行末[この設定を使用] — その行のセキュリティモード・ポリシーを上の項目に適用します。保存して適用します
  • ポリシー列の 廃止済みポリシー バッジは Basic256 · Basic128Rsa15 です。その行の [この設定を使用] を押すと レガシーポリシー許可 が同時に有効になり、ポリシー列は特定のポリシーではなく 自動 になります。
  • サポート外 バッジが付いたポリシーでは、Edgeは接続できません。
  • ユーザー認証列に Certificate があっても、Edgeは匿名またはユーザー名でのみログインします — サポート外の機能 を参照。

初回接続 — サーバー証明書の信頼​

Edgeは 初めて見るサーバー証明書を自動的に信頼しません。 セキュリティモードで初めて接続するとサーバー証明書が拒否され、接続画面(編集)と接続詳細画面のセキュリティグループに以下の案内が表示されます。

サーバー証明書をまだ信頼していない状態 — 番号は読む順序

番号場所内容
①案内1行目サーバー証明書をまだ信頼していないため接続しなかった旨の案内
②証明書主体 · フィンガープリント (SHA-1)サーバーが提示した証明書。フィンガープリントをサーバー(DCS・コントローラー)画面の証明書フィンガープリントと照合します
③[この証明書を信頼]確認ウィンドウを開きます
④証明書管理OPC UA サーバー › クライアント接続証明書 タブへ移動します

[この証明書を信頼] を押すと、確認ウィンドウで再度フィンガープリントが表示されます。

サーバー証明書信頼確認ウィンドウ — 番号は読む順序

番号場所内容
①主体 · フィンガープリント信頼する証明書。前の案内に出たフィンガープリントと同一か再確認します
②案内フィンガープリントがサーバー画面と異なる場合は信頼しません
③[この証明書を信頼]信頼します。 «信頼しました。すぐに再接続します。» と表示されます

信頼すると、その証明書を待機していた接続の再接続待機が解除され、すぐに再接続します。 接続されると案内が緑色に変わります。

セキュリティ接続成功 — 番号は読む順序

番号場所内容
①ステータス行«セキュリティ接続済み (SignAndEncrypt)» — 括弧内は接続に設定したセキュリティモードです(自動の場合は auto)

信頼リストは このEdgeのすべてのOPC UA接続で共有されます。 同じサーバーに接続する複数の接続がある場合、一度だけ信頼すれば十分です。

サーバーがEdge証明書を拒否する場合​

DCS・コントローラー側も、初めて見るクライアント証明書を拒否する場合が多くあります。その場合、セキュリティチャンネルが拒否され、以下の案内が表示されます。

サーバーがEdgeのクライアント証明書を拒否した状態 — 番号は読む順序

番号場所内容
①案内1行目サーバーがセキュリティチャンネルを拒否した旨の案内 — 通常、サーバーがこのEdgeの証明書をまだ信頼していない場合に発生します
②証明書主体 · フィンガープリント (SHA-1)Edgeの クライアント証明書。サーバーの拒否リストからこのフィンガープリントを探します
③[クライアント証明書ダウンロード (.der)]この接続のEdge証明書をダウンロードします
④証明書管理OPC UA サーバー › クライアント接続証明書 タブへ移動します
  1. ③ で証明書(.der)をダウンロードします。OPC UA サーバー › クライアント接続証明書 タブの «Edgeのクライアント証明書» からも接続別にダウンロード可能です。
  2. DCS・コントローラーの管理者に 전달し、サーバーの信頼リスト に追加します(サーバーの拒否リストに既に存在する場合は、それを信頼に移動させます)。手順はサーバーメーカーのマニュアルに従ってください。
  3. Edgeは次回の接続試行時に再接続します。

証明書管理 — OPC UA サーバー › クライアント接続証明書​

OPC UA サーバー 画面(/ui/opcua)の クライアント接続証明書 タブでは、Edgeがクライアントとして使用する証明書を一覧で確認できます。EdgeがSCADAに提供するOPC UAサーバーの証明書(クライアント証明書 タブ)とは異なります。

クライアント接続証明書タブ — 番号は読む順序

番号場所内容
①タブクライアント接続証明書
②拒否されたサーバー証明書Edgeが拒否したサーバー証明書 — 主体 · Application URI · フィンガープリント · 有効期限 · 待機中の接続。[信頼] または [削除]
③信頼したサーバー証明書管理者が信頼したサーバー証明書。[信頼解除] すると拒否リストに戻り、次回の接続試行からそのサーバーに接続しません
④Edgeのクライアント証明書OPC UA接続ごとに1つ — 接続 · セキュリティモード · Application URI · フィンガープリント · 有効期限。まだセキュリティモードで接続したことがない接続は «未設定»
⑤[ダウンロード (.der)]その接続のEdge証明書。サーバーの信頼リストに追加する際に使用します
  • [削除] した拒否証明書は、同じサーバーに再度接続を試みると再び表示されます。
  • [信頼解除] しても、既に開いている接続は次回の再接続時に切断されます。

Edgeのクライアント証明書​

項目値
種類自己署名(self-signed), RSA 2048
有効期限10年。期限が切れると新しく生成されるため、サーバー側で再度信頼させる必要があります
生成タイミングその接続がセキュリティモードで初めて接続を試みたとき
Application URIurn:plantpulse:edge:<OPC ID> — 接続ごとに1つ
保存場所/data1/pp-data/opcua-client ($PE_DATA_DIR/pp-data/opcua-client)。信頼リストもここに保存されます
  • 接続を削除しても証明書は残り、同じOPC IDで再作成するとその証明書を再利用します。 DCSへの再信頼設定は不要です。
  • このディレクトリは バックアップ の対象です。復元するとEdge証明書と信頼リストが同時に復旧します。

サポート外の機能​

  • X.509 ユーザー証明書ログイン — ユーザー認証は匿名またはユーザー名 + パスワードのみです。
  • CA署名済みクライアント証明書 — Edge証明書は自己署名のみを使用します。
  • HAペアボックス間での信頼リスト複製 — 信頼リストはボックスごとに個別の管理となります。HA構成の場合は、ボックスごとに サーバー証明書を信頼させ、サーバー側にもボックスごとのEdge証明書を登録してください。

タグのPLCアドレス表記​

OPC-UAのタグアドレスは、通常 NodeId と呼ばれる以下の形式です。

表記説明
ns=2;s=Channel1.Device1.Tag1namespace 2, 文字列識別子 — Kepwareで最も一般的
ns=2;i=1234namespace 2, 数値識別子
ns=3;g=09087e75-8e5e-499b-954f-f2a8624db28aGUID形式
  • ns= はnamespace番号。通常は 2.
  • s= の後に “Channel.Device.Tag” 形式のパスが入ります (Kepwareで作成したパスそのまま)。

NodeIdの確認方法​

  1. PLCメーカー / Kepwareメーカーのマニュアル にマッピング表が記載されている場合が多いです。
  2. UA Expert などの無料OPC-UAクライアントで直接接続し、ツリー上のノードを右クリックするとNodeIdをコピーできます。
  3. Kepware自体の OPC Quick Client ツールでも同様のことが可能です。

Kepwareクイック設定​

よく使われる組み合わせであるKepware基準の手順です。

  1. Kepware Server → Project → チャネル追加 (例: Simulator)
  2. デバイス追加 (例: Simulator) → モデル = 16 Bit Device
  3. タグ追加 → 名前 Sine1, type Float, scan rate 100ms
  4. Project Properties → OPC UA → Server Endpoint でポート 49320 を有効化
  5. サーバーエンドポイントのセキュリティポリシー(Security Policies)を選択します。セキュリティ接続の場合は Basic256Sha256 以上と Sign and Encrypt を有効にし、Edge証明書をKepwareの信頼リストに追加します — サーバーがEdge証明書を拒否する場合 を参照
  6. 匿名またはユーザーアカウントを有効化

このゲートウェイの登録フォームへの入力:

項目値
IPKepwareサーバーPCのIP
ポート49320
ユーザー/パスワード上記で作成したアカウント (匿名の場合は空欄)
タグPLCアドレスns=2;s=Simulator.Simulator.Sine1

よくある問題と解決策​

症状 / メッセージ考えられる原因解決策
“Connection refused” / 接続不可OPC-UAサーバーが停止しているかポートが遮断されているOPC-UAサーバーの稼働状態、IP/ポートの正当性を確認
“User access denied”ユーザー/パスワード誤り、またはサーバーで匿名接続が未許可サーバーでユーザーを登録するか匿名接続を許可
セキュリティモード None なのに接続失敗、ログに no SecurityMode=None endpointサーバーがNoneエンドポイントを開いていないセキュリティモードをSignまたはSignAndEncryptに変更し [エンドポイント照会] で確認
接続はできるが値が常に 0 または nullタグNodeIdの誤記、namespace番号の不一致UA Expertなどで同一のNodeIdが実際に動作するか検証
切断と接続を繰り返すネットワーク不安定、またはサーバーPCの負荷サーバーPCのリソース / ケーブル / スイッチを点検

セキュリティ接続エラー (画面メッセージ)​

セキュリティ接続に失敗すると、接続画面と接続詳細画面のセキュリティグループに以下の文言が表示されます。画面は韓国語・英語で表示されます。

コード画面文言 (ko)画面文言 (en)解決策
OPCUA_SERVER_CERT_UNTRUSTED서버 인증서를 아직 신뢰하지 않아 연결하지 않았습니다. 지문을 서버(DCS·컨트롤러) 쪽 인증서와 대조한 뒤 신뢰하세요.Not connected: the server certificate is not trusted yet. Compare the thumbprint with the server's (DCS / controller) certificate, then trust it.フィンガープリントを照合し [この証明書を信頼]
OPCUA_SERVER_CERT_INVALID신뢰한 서버 인증서가 유효하지 않습니다(만료·폐기·용도 불일치). 서버 쪽 인증서를 확인하세요.The trusted server certificate is not valid (expired, revoked or wrong usage). Check the server's certificate.サーバー証明書を再発行し、新しいフィンガープリントを信頼
OPCUA_CLIENT_CERT_REJECTED서버가 보안 채널을 거절했습니다. 대개 서버가 이 엣지의 클라이언트 인증서를 아직 신뢰하지 않은 경우입니다 — 인증서를 내려받아 서버의 신뢰 목록에 넣으세요.The server refused the secure channel - usually it does not trust this edge's client certificate yet. Download it and add it to the server's trust list.Edge証明書(.der)をサーバーの信頼リストに追加
OPCUA_PKI_DIR_MISSING엣지의 클라이언트 인증서 저장소를 찾지 못했습니다(데이터 볼륨 PE_DATA_DIR 를 확인하세요).The edge's client certificate store is missing (check the data volume PE_DATA_DIR).データボリューム(/data1)がマウントされているか確認
OPCUA_PKI_ERROR엣지의 클라이언트 인증서 저장소를 읽거나 만들지 못했습니다. 서버 로그를 확인하세요.The edge's client certificate store could not be read or created. See the server log./data1/pp-data/opcua-client の権限・ディスク容量を確認
OPCUA_SECURITY_CONFIG_INVALID보안 모드·정책 설정이 올바르지 않습니다(폐기된 정책은 '낡은 정책 허용'을 켜야 합니다).The security mode / policy setting is invalid (a deprecated policy needs 'Allow deprecated policies').セキュリティモード・ポリシー値を確認。廃止済みポリシーの場合は «レガシーポリシー許可»
OPCUA_NO_MATCHING_ENDPOINT서버가 설정한 보안 모드·정책·인증 방식에 맞는 엔드포인트를 제공하지 않습니다. [엔드포인트 조회]로 확인하세요.The server offers no endpoint with this security mode, policy and user token. Check with [Find endpoints].[エンドポイント照会] でサーバーが提示する組み合わせを選択し [この設定を使用]
OPCUA_CONNECT_FAILED연결하지 못했습니다(네트워크·시간 초과·세션).Could not connect (network, timeout or session).IP・ポート・ファイアウォール、サーバー稼働状態を確認

よく使われるデータ形式​

PLCの値データ形式形式補助PLCアドレス例
オン/オフ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例を参照してください。