在 PLCnext Control 上配置 OPC UA 客户端:分步指南
固件 2023.0 包含期待已久的 OPC UA 客户端组件。PLCnext Info Center 有良好技术参考。
本教程分步指导如何在 PLCnext Control 设备配置 OPC UA 客户端以与 OPC UA 服务器交换数据。
所需条件:
- 运行固件 2023.0 或更高版本的 PLCnext Control 设备作 OPC UA 客户端。需升级固件可按 Info Center 程序操作。
- PLCnext Engineer 2023.3 或更高版本。
- OPC UA 服务器。本文用第二个 PLCnext Control 设备作服务端,也可用同一设备或第三方 OPC UA 服务器(如 Windows PC)。第三方服务器需自行调整下文"服务端"步骤。
- Unified Automation 的 UaExpert,用于获取 OPC UA 服务器标签信息用于客户端配置。
配置 OPC UA 通信关键点:为安全起见,客户端和服务端必须互信。因此必须在客户端和服务端设备间交换安全证书。此过程涉及在客户端和服务端设备间切换,可能令人困惑。若有简化建议(不禁用安全检查!),欢迎评论区分享。
步骤
OPC UA 服务端设备
浏览 PLC IP 地址打开 Web 管理 (WBM) 站点。
从配置菜单选择系统服务。
激活OPC UA 服务器服务(若未启用)。
如需按应用并重启按钮。
打开 PLCnext Engineer。
用 PLCnext Control 设备模板创建新项目。
在 PLCnext Engineer 项目设置 PLC IP 地址。
在OPC UA 服务器配置页:
将DNS 名称 / IP 地址设为 PLC 的 DNS 名称或 IP 地址,取决于 OPC UA 客户端将用 DNS 名称还是服务器 IP 访问。此信息将包含在 OPC UA 服务器安全证书中。若证书中此信息与服务器 URL 不匹配,许多 OPC UA 客户端将拒绝服务器证书。
将变量可见性设为标记。意味着勾选 OPC 属性的变量将通过 OPC UA 服务器访问。
创建将由 OPC UA 服务器暴露的变量。确保这些变量勾选OPC复选框。下例在主程序创建两个变量。
添加逻辑在收到新输入值时改变输出变量。本例主程序执行:
Server_Data_Out := Server_Data_In + 1;编写并启动项目。注意 PLCnext Engineer 2025.0 及更高版本含"浏览"功能可用于在 OPC UA 客户端创建变量条目。若使用浏览功能,则无需用 UaExpert 获取服务器变量信息,可跳过后三步。
用 UaExpert 用 PLC 用户名密码连接 OPC UA 服务器。应见证书"不受信"警告,但无其他警告。
永久或仅本会话信任服务器证书。
为每个服务器变量记录节点 ID和命名空间名称。
再次打开服务端 PLC 的 WBM 站点。
从安全菜单选择证书认证。
选择身份存储选项卡。
从OPC UA-self-signed[服务端]身份存储下载证书。密钥对无需下载。
OPC UA 客户端设备
浏览 PLC IP 地址打开 WBM 站点。
从配置菜单选择系统服务。
激活OPC UA 客户端服务(若未启用)。
如需按应用并重启按钮。
重启完成后,重新登录 WBM 站点选择安全菜单证书认证。
选择信任存储选项卡。
将之前下载的OPC UA-self-signed[服务端]证书添加到名为OPC UA Client的信任存储。现在 OPC UA 客户端将信任 OPC UA 服务器验证身份用的安全证书。每次服务器证书变更需重复此步。
选择身份存储选项卡。
从OPC UA Client self-signed身份存储下载证书。密钥对无需下载。
OPC UA 服务端设备
打开服务端 PLC 的 WBM 站点。
从安全菜单选择证书认证。
选择信任存储选项卡。
将之前下载的OPC UA Client self-signed证书添加到名为OPC UA-configurable的信任存储。现在 OPC UA 服务器将信任 OPC UA 客户端验证身份用的安全证书。每次客户端证书变更需重复此步。
OPC UA 客户端设备
打开 PLCnext Engineer。
用 PLCnext Control 设备模板创建新项目。若同一设备作客户端和服务端,则用同一 PLCnext Engineer 项目。
在项目设置 PLC IP 地址。
仅固件 2023.6 前版本 PLC 需:在OPC UA 服务器配置页将变量可见性设为标记。为 OPC UA 客户端要求此服务端设置似怪异。固件 2023.6 及更高版本已修复。
创建将连接到 OPC UA 服务器变量的变量。仅固件 2023.6 前版本 PLC 需:确保这些变量勾选OPC复选框(固件 2023.6 或更高版本无需勾选)。下例在主程序创建两个变量。
在 OPC UA 客户端连接选项卡添加一个服务器和两个变量组,如下所示。
服务器 URL、用户名、密码应改为适配您使用的 OPC UA 服务器。
在"订阅"变量组添加一个变量映射,如下所示。
这自动将远程变量(OPC UA 服务器上)值传输到 PLCnext Engineer 项目本地变量。
在"写入"变量组添加一个变量映射,如下所示。
这自动将 PLCnext Engineer 项目本地变量值传输到远程变量(OPC UA 服务器上)。
编写并启动 PLCnext Engineer 项目。
调试模式改变变量
Client_Data_out值。值将写入 OPC UA 服务器变量Server_Data_In。服务端将值加 1 写入Server_Data_Out。该变量值再传输到客户端变量Client_Data_In。
不工作?
请查看 PLCnext Info Center 底部故障排除指南。
常见问题
问:客户端能用证书/密钥认证连接 OPC UA 服务器吗?
答:目前不能。
问:OPC UA 客户端如何存储服务器密码?
答:目前 OPC UA 服务器密码以明文存储在客户端配置文件,但 PLCnext Runtime 开发者正研究更安全存储方法。
问:能获取从 OPC UA 服务器读取数据的质量信息(如状态码、时间戳)吗?
答:目前不能,抱歉。
本文于 24.03.2025 更新,包含 PLCnext Engineer 现可用的服务器浏览功能信息。
附录:基于文件配置
PLCnext Engineer 中 OPC UA 客户端配置以 XML 格式存储在控制器上。不使用 PLCnext Engineer 的应用可直接在控制器上写入 XML 配置配置 OPC UA 客户端。
本例准备的配置在以下 XML 文件表示:
默认 OPC UA 客户端设置所需更改定义在
/opt/plcnext/projects/current/Services/OpcUA/Modules/Client/client.module.config:<?xml version="1.0" encoding="utf-8" standalone="yes"?> <OpcUAClientModuleConfigurationDocument schemaVersion="1.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.phoenixcontact.com/schema/opcuaclientmoduleconfig" xmlns="https://www.phoenixcontact.com/schema/opcuaclientmoduleconfig"> <Application> <CertificateStore> <SelfSignedIdentityStoreName>OPC UA Client self-signed</SelfSignedIdentityStoreName> <GivenIdentityStoreName>OPC UA Client</GivenIdentityStoreName> <TrustStoreName>OPC UA Client</TrustStoreName> </CertificateStore> <SessionSecurity> <ApplicationAuthentication>false</ApplicationAuthentication> <ApplicationUriCheck>true</ApplicationUriCheck> <CertificateHostnameCheck>true</CertificateHostnameCheck> <CertificateTimeCheck>true</CertificateTimeCheck> <CertificateIssuerTimeCheck>true</CertificateIssuerTimeCheck> <PasswordEncryptionCheck>true</PasswordEncryptionCheck> </SessionSecurity> <Timeouts> <SessionTimeout>1200000</SessionTimeout> <ConnectTimeout>5000</ConnectTimeout> <WatchdogTimeout>5000</WatchdogTimeout> <CallTimeout>10000</CallTimeout> </Timeouts> </Application> </OpcUAClientModuleConfigurationDocument>OPC UA 客户端连接定义在
/opt/plcnext/projects/current/Services/OpcUA/Modules/Client/Configs/ clientconnections.xml:<?xml version="1.0" encoding="utf-8"?> <eUAClientConfigurationDocument xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:uax="https://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="https://phoenixcontact.com/OpcUA/PLCnext/UAClientConfig/Types.xsd"> <eUAClientConfiguration> <Name>ClientConnectionsConfiguration</Name> <NamespaceArray> <uax:String>https://phoenixcontact.com/OpcUA/PLCnext/GlobalDataSpace/</uax:String> </NamespaceArray> <ServerConnections> <eUAClientServerConnection> <EncodingMask>3</EncodingMask> <Endpoint> <uax:EndpointUrl>opc.tcp://192.168.1.10:4840</uax:EndpointUrl> <uax:SecurityMode>Sign_2</uax:SecurityMode> <uax:SecurityPolicyUri>https://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</uax:SecurityPolicyUri> </Endpoint> <UserTokenType>UserName_1</UserTokenType> <UserName>admin</UserName> <Password>xxxxxxxx</Password> </eUAClientServerConnection> </ServerConnections> <VariableGroups> <eUAClientVariableGroup> <GroupType>Write_1</GroupType> <CycleTime>100</CycleTime> <NodeMappings> <eUAClientNodeMapping> <LocalVariable> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Client_Data_Out</uax:Identifier> </LocalVariable> <RemoteVariableDescriptor> <EncodingMask>2</EncodingMask> <ServerIndex>1</ServerIndex> <NodeId> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Server_Data_In</uax:Identifier> </NodeId> </RemoteVariableDescriptor> </eUAClientNodeMapping> </NodeMappings> </eUAClientVariableGroup> <eUAClientVariableGroup> <GroupType>Subscribe_0</GroupType> <CycleTime>100</CycleTime> <NodeMappings> <eUAClientNodeMapping> <LocalVariable> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Client_Data_In</uax:Identifier> </LocalVariable> <RemoteVariableDescriptor> <EncodingMask>2</EncodingMask> <ServerIndex>1</ServerIndex> <NodeId> <uax:Identifier>ns=1;s=Arp.Plc.Eclr/MainInstance.Server_Data_Out</uax:Identifier> </NodeId> </RemoteVariableDescriptor> </eUAClientNodeMapping> </NodeMappings> </eUAClientVariableGroup> </VariableGroups> </eUAClientConfiguration> </eUAClientConfigurationDocument>此文件用之前用 UaExpert 记录的命名空间和节点 ID信息指定客户端将访问哪些服务器变量。
在上述文件中修改以下以适配您的应用:
元素
uax:EndpointUrl必须包含您 OPC UA 服务器的 IP 地址(或 DNS 名称)。Username和Password元素必须包含 OPC UA 服务器所需凭据。
重要:本例中 UaExpert 节点 ID 字符串含
ns=6文本。上述 XML 文件中改为ns=1,因"命名空间"参数 (ns) 是本地客户端命名空间列表索引。本例中从 UaExpert 复制的命名空间名称是clientconfig.xml中命名空间列表第一个(且唯一)命名空间。
更改 OPC UA 客户端配置文件后必须重启 PLCnext Runtime。
工业技术
- 金属强度大全:抗拉、屈服、硬度、密度对照表——CNC加工与设计必备
- CNC雕刻机六大核心应用场景:极致速度、精度与一致性
- 快速 PCB 打样服务的 10 大核心优势:加速创新、降低风险
- 多普勒雷达原理与应用全解析:从测速枪到双极化气象雷达
- 超越正弦波:功率电子如何塑造谐波
- 革命性CPU技术:同步任务与温度振荡,将能耗降至兰道尔极限千分之一
- 首件良率 (FPY):定义、计算与改进策略
- 掌握 PCB 接地:可靠电路设计的关键技术
- 开关柜故障决策指南:改造、翻新还是整体更换?
- 协作机器人助力中小制造商提效增收
- Fusion 360 进阶:用曲面建模驾驭复杂几何加工
- 构建明天:Fast Radius创新使命