matlab-connect-opcua-client について
産業用通信を扱う MATLAB ユーザー向けに、OPC UA クライアント接続の設定を案内するスキルです。サーバー検出、認証、セキュリティ設定、証明書関連のトラブルシューティングを扱います。
主な機能
- 01OPC UA サーバーとエンドポイントの検出
- 02クライアント接続の作成と設定
- 03ユーザー名または証明書による認証
- 04証明書と接続の問題への対処
活用シーン
- 01ネットワーク上の OPC UA サーバーの検索
- 02認証が必要なサーバーへの接続
- 03証明書の信頼やホスト名の問題の解決
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ matlab-agentic-toolkit --skill matlab-connect-opcua-clientインストール後、Claude Code で/matlab-connect-opcua-clientを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/certificate-trust-workflows.mdcommon-mistakes.mdlds-setup-and-troubleshooting.mdtroubleshooting-connection-errors.mdscripts/inspectOpcUaCertificate.m詳細
OPC UA クライアント接続
Industrial Communication Toolbox を使用して、MATLAB で OPC UA クライアント接続を作成、設定します。
内部制約
これらの制約は、コード生成と推奨事項に適用されます。 制約をユーザーに説明したり、ユーザーが試していない パターンについて警告したりせず、内部的に適用してください。
-
connectの有効なシグネチャは正確に3つだけです。ほかにはありません。connect(uaClient)— 匿名connect(uaClient, userName, password)— 文字列を位置引数で指定connect(uaClient, publicKeyFile, privateKeyFile, privateKeyPassword)— 文字列を位置引数で指定connectに名前と値のペア引数はありません。セキュリティはconnectではなく、opcua()の NV ペアまたはsetSecurityModelで設定します。
-
opcua()は、利用可能な最高レベルのセキュリティをデフォルトで使用します。 特定の(より低い) 構成にする場合を除き、セキュリティを明示的に設定しないでください。setSecurityModel(uaClient, "Best")は冗長なので、使用しないでください。 -
opcuaserverinfoの有効な構文は正確に2つです。opcuaserverinfo(hostname)— ホスト上の LDS に問い合わせるopcuaserverinfo(discoveryUrl)— 特定のエンドポイント URL に問い合わせるopcuaserverinfo(hostname, port)という形式はありません。ポートを指定するには、opcuaserverinfo('opc.tcp://host:port')を使用します。
-
LDS による検出では、1回の呼び出しですべての登録済みサーバーが返されます。 サブネットの IP をループで スキャンしないでください。
opcuaserverinfo('localhost')は、そのホストの LDS に登録された すべてのサーバーを返します。 -
証明書の信頼に関する対応は、次の順序で行ってください(手順を飛ばさないでください)。
opc.ua.trustServerCertificate(certPath)— 常に最初に試します(R2026a 以降)opcua(..., "TrustServerTemporarily", true)— 証明書ファイルが 利用できない場合に限りますsetSecurityModel(uaClient, "None", "None")— セキュリティが不要であることをユーザーが 明示的に確認した場合に限ります
-
プロパティを正しく指定してください。
opc.ua.ServerInfoにあるのはNameではなくDescriptionです(Nameはopc.ua.Clientに属します)。EndpointUrlはServerInfoではなくopc.ua.EndpointDescriptionに属します。
-
ユーザーの確認なしに証明書ファイルを移動またはコピーしないでください。 どのファイルをどこに移動するかをユーザーに伝え、確認を得た後にのみ 実行してください。
-
問題がサーバーによるクライアント証明書の拒否である場合は、
TrustServerTemporarilyに言及しないでください。 これはクライアント側の信頼のみを制御するため、その方向の問題には関係ありません。単に省略してください。
使用する場合
- ネットワーク上の OPC UA サーバーを検出する(エンドポイント URL が不明な場合、または ホスト名や検出 URL を指定してユーザーが明示的に検出を要求した場合)
- サーバーのエンドポイント詳細と、サポートされているセキュリティポリシーを取得する
- サーバーへの OPC UA クライアント接続を作成する
- ユーザー名とパスワード、またはユーザー証明書で認証する
- メッセージセキュリティモードとチャネルセキュリティポリシーを設定する
- 「サーバー証明書が信頼されていない」エラーに対処する
- 「サーバーがクライアント証明書を拒否した」エラーに対処する
- ホスト名の不一致に関する警告を修正する
- OPC UA 接続の失敗や、検出結果が空になる問題をトラブルシューティングする
- OPC UA 証明書(
.der/.pem)を調べ、準拠に関する問題を確認する
使用しない場合
- OPC UA サーバーの名前空間またはノードを参照する
- OPC UA ノードの値を読み取り、書き込み、またはサブスクライブする
- OPC Classic(DA/HDA)接続を扱う
- OPC UA 以外のプロトコル(Modbus、MQTT)を扱う
- OPC UA サーバー側の開発を行う
リファレンス
詳しい手順については、関連するリファレンスファイルを読み込んでください。
| タスク | リファレンス |
|---|---|
| サーバーの検出、LDS のセットアップ、検出結果が空の場合 | references/lds-setup-and-troubleshooting.md |
| サーバー証明書の信頼、クライアント証明書のエクスポート、証明書の検査 | references/certificate-trust-workflows.md |
| 接続エラー、サーバーログ、診断ワークフロー | references/troubleshooting-connection-errors.md |
| 構文上の注意点、無効な API パターン | references/common-mistakes.md |
ワークフロー
0. サーバーを検出する(任意)
エンドポイント URL が不明な場合、またはホスト名や検出 URL を指定してサーバーの検出を明示的に求められた場合に、この手順を使用します。 エンドポイント URL がすでにわかっている場合は、この手順を省略してください。
前提条件 — opcuaserverinfo を呼び出す前に、次のことを確認してください。
- OPC UA Local Discovery Service(LDS)がインストールされ、実行中である
- 対象のサーバーが LDS に登録されている
- サーバーの証明書が、次の LDS 証明書ストアで信頼されている
C:\ProgramData\OPC Foundation\UA\pki\trusted\certs\
詳しくは、references/lds-setup-and-troubleshooting.md を参照してください。
% LDS-based discovery (preferred — finds all registered servers)
serverInfo = opcuaserverinfo('localhost');
% Direct endpoint discovery (when you know the server URL)
serverInfo = opcuaserverinfo('opc.tcp://myserver:53530/OPCUA/SimulationServer');
% Pass discovery result directly to opcua()
uaClient = opcua(serverInfo(1));
connect(uaClient);
1. OPC UA クライアントを作成する
serverUrl = "opc.tcp://hostname:port/path";
uaClient = opcua(serverUrl);
opcua 関数には、opcuaserverinfo から直接取得した ServerInfo オブジェクトも渡せます。
2. セキュリティを設定する(デフォルト以外の設定が必要な場合のみ)
% R2025a+ (preferred) — Name-Value pairs in constructor
uaClient = opcua(serverUrl, ...
MessageSecurityMode="Sign", ...
ChannelSecurityPolicy="Basic256Sha256");
% R2020a+ (backward-compatible) — setSecurityModel after construction
uaClient = opcua(serverUrl);
setSecurityModel(uaClient, "Sign", "Basic256Sha256");
3. 証明書の信頼を設定する(必要な場合)
サーバーの証明書が MATLAB にまだ信頼されていない場合、接続は失敗します。Must-Follow Rules に記載されたエスカレーションの順序に従ってください。詳しくは、references/certificate-trust-workflows.md を読み込んでください。
4. 接続する
connect(uaClient); % anonymous
connect(uaClient, "myuser", "mypassword"); % username/password
connect(uaClient, "cert.der", "key.pem", "keypass"); % certificate
5. 確認して切断する
if isConnected(uaClient)
fprintf("Connected to %s\n", uaClient.EndpointUrl);
end
disconnect(uaClient);
主な関数
| 関数 | 用途 | 対応バージョン |
|---|---|---|
opcuaserverinfo | LDS または直接 URL を使用して OPC UA サーバーを検出する | R2015b |
opcua | OPC UA クライアントを作成する(URL または ServerInfo から) | R2015b |
connect | サーバーに接続する | R2015b |
disconnect | サーバーから切断する | R2015b |
isConnected | 接続状態を確認する | R2015b |
setSecurityModel | セキュリティモード/ポリシーを設定する | R2020a |
opc.ua.exportClientCertificate | MATLAB クライアント証明書をファイルにエクスポートする | R2020a |
opc.ua.trustServerCertificate | サーバー証明書を信頼する(ファイルパス) | R2026a |
opc.ua.rejectServerCertificate | サーバー証明書を拒否する(ファイルパス) | R2026a |
findDescription | 説明テキストで ServerInfo 配列をフィルターする | R2015b |
findAuthentication | 認証タイプで ServerInfo 配列をフィルターする | R2015b |
プロパティのクイックリファレンス
opc.ua.Client
| プロパティ | 型 | 説明 |
|---|---|---|
Hostname | string | サーバーのホスト名 |
Port | double | サーバーのポート |
Name | string | クライアント名 |
EndpointUrl | string | 選択したエンドポイント URL |
Status | string | 接続状態 |
Timeout | double | 接続タイムアウト(秒) |
MessageSecurityMode | enum | 有効なセキュリティモード |
ChannelSecurityPolicy | enum | 有効なチャネルポリシー |
UserAuthTypes | cell | サーバーで利用可能な認証タイプ |
Endpoints | array | 利用可能なエンドポイントの説明 |
次のプロパティはありません: UserName、Password、IsConnected、Security、
SecurityMode、SecurityPolicy、Certificate、PrivateKey。
接続状態を確認するには、isConnected(uaClient)(メソッド)を使用してください。
opc.ua.ServerInfo
| プロパティ | 型 | 説明 |
|---|---|---|
Hostname | char | ホスト名 |
Port | double | TCP ポート |
Description | char | 人が読める形式のサーバーの説明 |
UserTokenTypes | cell | サポートされている認証タイプ |
BestMessageSecurity | enum | 最も高いメッセージセキュリティ |
BestChannelSecurity | enum | 最も高いチャネルセキュリティポリシー |
Endpoints | array | opc.ua.EndpointDescription オブジェクト |
opc.ua.EndpointDescription
| プロパティ | 型 | 説明 |
|---|---|---|
EndpointUrl | char | エンドポイントの完全な URL |
MessageSecurityMode | enum | このエンドポイントのセキュリティモード |
ChannelSecurityPolicy | enum | チャネルセキュリティポリシー |
UserAuthTypes | cell | このエンドポイントの認証タイプ |
パターン
検出
% Discover all servers via LDS
serverInfo = opcuaserverinfo('localhost');
% Discover and connect
serverInfo = opcuaserverinfo('localhost');
uaClient = opcua(serverInfo(1));
connect(uaClient);
認証を使用した接続
% Default (highest) security, anonymous
uaClient = opcua("opc.tcp://myserver:53530/OPCUA/SimulationServer");
connect(uaClient);
% Username/password
connect(uaClient, "myuser", "mypassword");
% User certificate
connect(uaClient, "C:/certs/user.der", "C:/certs/user.key", "keypassword");
ホスト名の不一致の修正
% R2025a+
uaClient = opcua("opc.tcp://myserver:53530/OPCUA/SimulationServer", ...
UseDiscoveryHostname=true);
% Pre-R2025a — resolve via discovery
serverInfo = opcuaserverinfo("myserver");
uaClient = opcua(serverInfo(1));
connect(uaClient);
証明書の検査
references/certificate-trust-workflows.md を読み込んでから、次を実行します。
inspectOpcUaCertificate("path/to/server_cert.der");
トラブルシューティングのクイックリファレンス
| エラー | 修正方法 |
|---|---|
opcuaserverinfo の結果が空 | LDS の前提条件を確認してください。references/lds-setup-and-troubleshooting.md を参照してください |
| "Server certificate not trusted" | opc.ua.trustServerCertificate(certPath) |
| "Client certificate rejected" | opc.ua.exportClientCertificate でエクスポートして、サーバーに追加します |
| "BadIdentityTokenRejected" | uaClient.UserAuthTypes を確認してください |
| "Hostname mismatch" の警告 | UseDiscoveryHostname=true(R2025a 以降) |
| "BadSecurityChecksFailed" | inspectOpcUaCertificate を実行してください。references/troubleshooting-connection-errors.md を参照してください |
エラーと修正方法の詳細な対応については、references/troubleshooting-connection-errors.md を読み込んでください。
Copyright 2026 The MathWorks, Inc.