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のIP | 192.168.0.40 |
| ポート | OPC-UAサーバーポート | 49320 (Kepwareデフォルト) / 4840 (標準) |
| サーバー名 (servername) | エンドポイントURIのパス部分 | 空欄、または OPCUAServer · iotgateway など |
| ユーザー (username) | OPC-UAサーバーに登録されたユーザーID。匿名の場合は空欄 | kopens (サーバーにより異なる) |
| パスワード (password) | そのユーザーのパスワード | *** |
| ディスカバリ (discovery) | true の場合、接続時にノードツリー全体をブラウジング | false (推奨) |
ユーザー / パスワード を両方入力するとユーザー名トークンとして、どちらか一方が空欄の場合は匿名(Anonymous)で接続します。匿名の場合は、サーバー側で匿名接続が許可されている必要があります。セキュリティモードがNoneの場合、アカウント情報が平文チャンネルで送信されるため、アカウントを使用する場合はSignAndEncryptを推奨します。
エンドポイントの決定方式
- 入力値を用いて
opc.tcp://<IP>:<port>/<servername>を作成し、サーバーにエンドポイント一覧を問い合わせます。 - 一覧から セキュリティモード・セキュリティポリシーに適合する エンドポイントを選択します。
- セキュリティモード None — Noneエンドポイントの中で、使用するユーザートークン(匿名またはユーザー名)を広報しているものを優先し、なければ最初に見つかったNoneエンドポイントを選択します。
- Sign · SignAndEncrypt · 自動 — 選択したモード・ポリシーおよび使用するユーザートークンをすべて満たすエンドポイントの中で、最も強力なポリシーを選択します。適合するものがない場合は、Noneにフォールバックせずに接続に失敗します(
OPCUA_NO_MATCHING_ENDPOINT)。
- 選択したエンドポイント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秒制限)。
![[エンドポイント照会] 結果 — 番号は読む順序](/ja/assets/images/opcua-sec-endpoints-0ee0b6bafc4d759d75de125ad75c658b.webp)
| 番号 | 場所 | 内容 |
|---|---|---|
| ① | グループヘッダー右側 | [エンドポイント照会] — 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・コントローラー側も、初めて見るクライアント証明書を拒否する場合が多くあります。その場合、セキュリティチャンネルが拒否され、以下の案内が表示されます。

| 番号 | 場所 | 内容 |
|---|---|---|
| ① | 案内1行目 | サーバーがセキュリティチャンネルを拒否した旨の案内 — 通常、サーバーがこのEdgeの証明書をまだ信頼していない場合に発生します |
| ② | 証明書主体 · フィンガープリント (SHA-1) | Edgeの クライアント証明書。サーバーの拒否リストからこのフィンガープリントを探します |
| ③ | [クライアント証明書ダウンロード (.der)] | この接続のEdge証明書をダウンロードします |
| ④ | 証明書管理 | OPC UA サーバー › クライアント接続証明書 タブへ移動します |
- ③ で証明書(.der)をダウンロードします。OPC UA サーバー › クライアント接続証明書 タブの «Edgeのクライアント証明書» からも接続別にダウンロード可能です。
- DCS・コントローラーの管理者に 전달し、サーバーの信頼リスト に追加します(サーバーの拒否リストに既に存在する場合は、それを信頼に移動させます)。手順はサーバーメーカーのマニュアルに従ってください。
- 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 URI | urn: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.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を有効化 - サーバーエンドポイントのセキュリティポリシー(Security Policies)を選択します。セキュリティ接続の場合は
Basic256Sha256以上と Sign and Encrypt を有効にし、Edge証明書をKepwareの信頼リストに追加します — サーバーがEdge証明書を拒否する場合 を参照 - 匿名またはユーザーアカウントを有効化
このゲートウェイの登録フォームへの入力:
| 項目 | 値 |
|---|---|
| IP | Kepwareサーバー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例を参照してください。