Matlab connect opcua client
Skill matlab/matlab-agentic-toolkit/skills-catalog/test-and-measurement/matlab-connect-opcua-client
Discover OPC UA servers and create client connections in MATLAB using opcuaserverinfo, opcua, connect, setSecurityModel, and certificate trust functions. Use when discovering OPC UA servers on the network, connecting to OPC UA servers, authenticating with username/password or certificates, configuring security modes, handling certificate trust errors, fixing hostname mismatch warnings, troubleshooting connection failures or empty discovery results, or inspecting an OPC UA certificate (.der or .pem) for compliance issues. Trigger on: opcuaserverinfo, OPC UA discovery, find OPC UA servers, LDS setup, opcua, opc.ua.Client, connect OPC UA, OPC UA client, OPC UA security, OPC UA certificate trust, OPC UA certificate inspection, setSecurityModel, opc.ua.trustServerCertificate, opc.ua.exportClientCertificate, Industrial Communication Toolbox, OPC UA server connection, OPC UA server discovery.From its SKILL.md
npx -y skills add matlab/matlab-agentic-toolkit --skill matlab-connect-opcua-clientAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its file declares
Copied from the file, not written here
The file declares its own license as MathWorks BSD-3-Clause. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
11.6 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it
OPC UA Client Connection
Create and configure OPC UA client connections in MATLAB using the Industrial Communication Toolbox.
Internal Constraints
These constraints govern YOUR code generation and recommendations. Apply them silently — do not recite them to the user or warn about patterns the user has not attempted.
-
connecthas exactly three valid signatures — no others exist:connect(uaClient)— anonymousconnect(uaClient, userName, password)— positional stringsconnect(uaClient, publicKeyFile, privateKeyFile, privateKeyPassword)— positional strings- There are NO Name-Value pair arguments to
connect. Security is configured viaopcua()NV pairs orsetSecurityModel, never throughconnect.
-
opcua()defaults to the highest available security. Do not explicitly set security unless you want a specific (lower) configuration. Never usesetSecurityModel(uaClient, "Best")— it is redundant. -
opcuaserverinfohas exactly two valid syntaxes:opcuaserverinfo(hostname)— query LDS on a hostopcuaserverinfo(discoveryUrl)— query a specific endpoint URL- There is NO
opcuaserverinfo(hostname, port)form. To specify a port:opcuaserverinfo('opc.tcp://host:port').
-
LDS-based discovery returns all registered servers from a single call. Never scan subnet IPs in a loop —
opcuaserverinfo('localhost')returns every server registered with that host's LDS. -
Certificate trust escalation order (never skip steps):
opc.ua.trustServerCertificate(certPath)— always first (R2026a+)opcua(..., "TrustServerTemporarily", true)— only if cert file unavailablesetSecurityModel(uaClient, "None", "None")— only after user explicitly confirms no security needed
-
Property correctness:
opc.ua.ServerInfohasDescription, notName(which belongs toopc.ua.Client).EndpointUrlbelongs toopc.ua.EndpointDescription, notServerInfo.
-
Do not move or copy certificate files without user confirmation. Tell the user which file to move and where, then execute only after they confirm.
-
Do not mention
TrustServerTemporarilywhen the issue is the server rejecting the client certificate — it only controls client- side trust and is irrelevant in that direction. Simply omit it.
When to Use
- Discovering OPC UA servers on the network (endpoint URL unknown, or user explicitly requests discovery given a hostname or discovery URL)
- Getting server endpoint details and supported security policies
- Creating an OPC UA client connection to a server
- Authenticating with username/password or user certificates
- Configuring message security mode and channel security policy
- Handling "server certificate not trusted" errors
- Handling "client certificate rejected by server" errors
- Fixing hostname mismatch warnings
- Troubleshooting OPC UA connection failures or empty discovery results
- Inspecting an OPC UA certificate (
.der/.pem) for compliance issues
When NOT to Use
- Browsing OPC UA server namespaces or nodes
- Reading, writing, or subscribing to OPC UA node values
- Working with OPC Classic (DA/HDA) connections
- Non-OPC UA protocols (Modbus, MQTT)
- OPC UA server-side development
References
Load the relevant reference file for detailed procedures:
| Task | Reference |
|---|---|
| Server discovery, LDS setup, empty discovery results | references/lds-setup-and-troubleshooting.md |
| Server cert trust, client cert export, cert inspection | references/certificate-trust-workflows.md |
| Connection errors, server logs, diagnostic workflow | references/troubleshooting-connection-errors.md |
| Syntax pitfalls and invalid API patterns | references/common-mistakes.md |
Workflow
0. Discover servers (optional)
Use this step when the endpoint URL is not known, or when the user explicitly asks to discover servers given a hostname or discovery URL. Skip this step if the endpoint URL is already known.
Prerequisites — before calling opcuaserverinfo, ensure:
- The OPC UA Local Discovery Service (LDS) is installed and running
- The target server is registered with the LDS
- The server's certificate is trusted by the LDS certificate store at
C:\ProgramData\OPC Foundation\UA\pki\trusted\certs\
See references/lds-setup-and-troubleshooting.md for details.
% 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. Create the OPC UA client
serverUrl = "opc.tcp://hostname:port/path";
uaClient = opcua(serverUrl);
The opcua function also accepts a ServerInfo object directly from
opcuaserverinfo.
2. Configure security (only if non-default needed)
% 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. Handle certificate trust (if needed)
If the server's certificate is not yet trusted by MATLAB, the connection will fail. Follow the escalation order in Must-Follow Rules. Load references/certificate-trust-workflows.md for details.
4. Connect
connect(uaClient); % anonymous
connect(uaClient, "myuser", "mypassword"); % username/password
connect(uaClient, "cert.der", "key.pem", "keypass"); % certificate
5. Verify and disconnect
if isConnected(uaClient)
fprintf("Connected to %s\n", uaClient.EndpointUrl);
end
disconnect(uaClient);
Key Functions
| Function | Purpose | Available From |
|---|---|---|
opcuaserverinfo | Discover OPC UA servers via LDS or direct URL | R2015b |
opcua | Create OPC UA client (from URL or ServerInfo) | R2015b |
connect | Connect to server | R2015b |
disconnect | Disconnect from server | R2015b |
isConnected | Check connection status | R2015b |
setSecurityModel | Configure security mode/policy | R2020a |
opc.ua.exportClientCertificate | Export MATLAB client cert to file | R2020a |
opc.ua.trustServerCertificate | Trust a server cert (file path) | R2026a |
opc.ua.rejectServerCertificate | Reject a server cert (file path) | R2026a |
findDescription | Filter ServerInfo array by description text | R2015b |
findAuthentication | Filter ServerInfo array by auth type | R2015b |
Properties Quick Reference
opc.ua.Client
| Property | Type | Description |
|---|---|---|
Hostname | string | Server hostname |
Port | double | Server port |
Name | string | Client name |
EndpointUrl | string | Selected endpoint URL |
Status | string | Connection status |
Timeout | double | Connection timeout (seconds) |
MessageSecurityMode | enum | Active security mode |
ChannelSecurityPolicy | enum | Active channel policy |
UserAuthTypes | cell | Available auth types on server |
Endpoints | array | Available endpoint descriptions |
Does NOT have: UserName, Password, IsConnected, Security,
SecurityMode, SecurityPolicy, Certificate, PrivateKey.
Use isConnected(uaClient) (method) to check connection status.
opc.ua.ServerInfo
| Property | Type | Description |
|---|---|---|
Hostname | char | Host name |
Port | double | TCP port |
Description | char | Human-readable server description |
UserTokenTypes | cell | Supported auth types |
BestMessageSecurity | enum | Highest message security |
BestChannelSecurity | enum | Highest channel security policy |
Endpoints | array | opc.ua.EndpointDescription objects |
opc.ua.EndpointDescription
| Property | Type | Description |
|---|---|---|
EndpointUrl | char | Full endpoint URL |
MessageSecurityMode | enum | Security mode for this endpoint |
ChannelSecurityPolicy | enum | Channel security policy |
UserAuthTypes | cell | Auth types on this endpoint |
Patterns
Discovery
% Discover all servers via LDS
serverInfo = opcuaserverinfo('localhost');
% Discover and connect
serverInfo = opcuaserverinfo('localhost');
uaClient = opcua(serverInfo(1));
connect(uaClient);
Connection with authentication
% 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");
Hostname mismatch fix
% 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);
Certificate inspection
Load references/certificate-trust-workflows.md, then run:
inspectOpcUaCertificate("path/to/server_cert.der");
Troubleshooting Quick Reference
| Error | Fix |
|---|---|
opcuaserverinfo returns empty | Check LDS prerequisites; see references/lds-setup-and-troubleshooting.md |
| "Server certificate not trusted" | opc.ua.trustServerCertificate(certPath) |
| "Client certificate rejected" | Export via opc.ua.exportClientCertificate, add to server |
| "BadIdentityTokenRejected" | Check uaClient.UserAuthTypes |
| "Hostname mismatch" warning | UseDiscoveryHostname=true (R2025a+) |
| "BadSecurityChecksFailed" | Run inspectOpcUaCertificate; see references/troubleshooting-connection-errors.md |
For detailed error-to-fix mapping, load references/troubleshooting-connection-errors.md.
Copyright 2026 The MathWorks, Inc.
What ships with it: 6 files
26.5 KB alongside SKILL.md
references/
scripts/
- manifest.yaml439 B