OPC UA 客户端
插件用途
连接 OPC UA 服务端的采集驱动
选择入口
进入“开发配置 → 采集配置”,创建设备并在“采集插件”中选择“OPC UA 客户端”。
支持的通道和数据类型
| 通道类型 | 配置前检查 |
|---|---|
| 插件内置连接 | 连接参数在设备动态属性中配置,不使用公共 TCP、UDP 或串口通道参数。 |
可选数据类型: 对象(由协议节点或载荷决定)
插件参数
OPC UA 客户端在设备属性中直接维护会话,不使用普通 TCP、UDP 或串口通道字段;失败重试、写优先等采集公共属性仍按采集配置配置。
连接配置
| 参数 | 说明 |
|---|---|
| 连接Url | 默认:opc.tcp://127.0.0.1:49320;填写:文本输入。设置建立连接时使用的连接Url。 |
连接 URL 必须是服务端实际发布的 OPC UA Endpoint(包括协议、主机、端口和必要路径),不能只填写主机或浏览器 URL。
安全认证
| 参数 | 说明 |
|---|---|
| 登录账号 | 填写:文本输入。设置身份校验或安全连接使用的登录账号。 |
| 登录密码 | 填写:文本输入。设置身份校验或安全连接使用的登录密码。 |
| 安全策略 | 默认:否;填写:开关。控制“安全策略”功能是否启用。 |
| 接受不受信任证书 | 默认:否;填写:开关。控制“接受不受信任证书”功能是否启用。 |
| 证书 | 填写:证书选择。设置身份校验或安全连接使用的证书。 |
启用“安全策略”后,客户端按服务端 Endpoint 的安全策略建立加密会话;“接受不受信任证书”仅适用于首次联调,生产环境应改为在证书管理/服务端信任列表中建立信任链。
订阅配置
| 参数 | 说明 |
|---|---|
| 数据变化触发条件 | 默认:1;填写:下拉选择。设置当前插件使用的数据变化触发条件。 |
| 激活订阅 | 默认:是;填写:开关。控制“激活订阅”功能是否启用。 |
协议参数
| 参数 | 说明 |
|---|---|
| 名称标识 | 默认:ThingsGateway_OPC_UA_Master;填写:文本输入。设置协议通信使用的名称标识。 |
| 加载服务端数据类型 | 默认:是;填写:开关。控制“加载服务端数据类型”功能是否启用。 |
数据格式
| 参数 | 说明 |
|---|---|
| 是否使用SourceTime | 默认:是;填写:开关。控制“是否使用SourceTime”功能是否启用。 |
运行参数
| 参数 | 说明 |
|---|---|
| 更新频率 | 默认:1000;填写:数字输入。设置插件运行时使用的更新频率。 |
| 心跳频率 | 默认:3000;填写:数字输入。设置插件运行时使用的心跳频率。 |
变量配置
| 参数 | 说明 |
|---|---|
| 死区 | 默认:0;填写:数字输入。设置当前目标对该变量使用的死区。 |
打包规则
| 参数 | 说明 |
|---|---|
| 最大组大小 | 默认:500;填写:数字输入。设置单次读写或组包使用的最大组大小。 |
“数据变化触发条件”可选 Status、StatusValue、StatusValueTimestamp:分别在状态变化、状态或值变化、状态/值/时间戳变化时触发订阅回调。需要时间戳变化也触发时选择最后一项。
地址规则
普通变量
普通采集变量的地址填写 OPC UA NodeId,例如 ns=2;s=Channel1.Temperature。建议先在设备调试页浏览并读取节点,再复制完整的命名空间和标识符。
OPC UA 方法变量
需要让外部系统调用 OPC UA 服务端方法时,先在当前设备下创建一个专用变量,再按下表配置。
| 配置项 | 填写要求 |
|---|---|
| 变量名称 | 使用能表达控制动作的名称,例如“启动方法”或“配方切换方法”。外部 RPC 使用该名称定位方法变量。 |
| 其他方法 | 选择 CallMethodByNodeIdAsync,页面显示名称为“调用 OPC UA 方法”。 |
| 变量地址 | 填写 ["对象节点Id","方法节点Id"] 格式的标准 JSON 数组,例如 ["ns=2;s=Machine1","ns=2;s=Machine1.Start"]。第一个元素必须是提供方法的对象节点,第二个元素必须是方法节点。 |
| 读写权限 | 选择“只写”。控制方法不应进入周期采集,否则可能被重复触发。 |
| RPC写使能 | 开启。关闭后,Web API、MQTT 等外部入口会拒绝调用。 |
| 写入检查 | 关闭。方法调用不是可回读点位,应通过 RPC 返回结果和设备状态确认执行结果。 |
保存变量后,外部 RPC 的变量值按 OPC UA 方法 InputArguments 的顺序填写。最外层数组表示“参数列表”:
| 方法输入 | RPC 变量值 |
|---|---|
| 无输入参数 | [] |
| 一个标量参数 | [123] |
| 两个参数 | [123, "start"] |
| 一个数组参数 | [[1, 2, 3]] |
客户端会读取服务端方法的标准 InputArguments 元数据,并把 JSON 值转换为声明的数据类型。服务端返回的所有输出参数按顺序组成 JSON 数组;没有输出参数时返回空数组。
方法变量应只绑定已经过现场确认的控制方法。为集成账号仅授予必要的变量写入权限,并在联调阶段使用不会影响生产的对象和参数。
外部 RPC 调用
Web API
调用变量写入接口 /api/gatewaywritevariablecontroller/setvariablevalue,请求体按“设备名称 → 方法变量名称 → 输入参数数组”组织:
{
"OPC设备": {
"启动方法": [123, "start"]
}
}
接口会先检查变量是否存在、是否为只写或可写、是否允许 RPC 写入以及设备是否暂停,再调用 OPC UA 方法。响应中该变量的 Content 是服务端输出参数数组;失败时查看 ErrorMessage、RPC 日志和设备日志。
MQTT 等入口
MQTT RPC 和其它已经接入变量 RPC 服务的入口使用同一个方法变量。外部消息经过目标的 RPC Topic 或脚本解析后,只要最终得到相同的“设备名称、变量名称、JSON 参数数组”,就会执行同一个 OPC UA 方法。Topic、认证和响应规则见反向 RPC 详解。
设备调试
进入“开发配置 → 采集配置”,选择当前设备后点击“更多功能”并打开“调试”。
协议调试 · OpcUaClient

| 功能 | 作用 |
|---|---|
| 浏览节点 | 展开 OPC UA 地址空间,查看 NodeId、显示名称、数据类型、值、状态码和时间戳。 |
| 读取/写入节点 | 单独读取选中节点;写入会修改服务端点值。 |
| 导出 Excel | 把勾选节点导出为变量配置文件。 |
| 导入变量 | 把勾选节点直接导入当前设备变量。 |
| 订阅管理 | 按 NodeId 列表创建、查看或取消订阅组。 |
调试要点
先浏览节点并读取值,再建立订阅;导入变量后复核 NodeId、数据类型和采集周期,写入只在点位允许时执行。
验证重点
- 浏览到一个已知 NodeId,读取当前值并确认状态码正常。
- 在服务端改变该测试节点,确认调试页读取结果或订阅值同步更新。
- 导入少量测试节点后,核对 NodeId、数据类型、当前值和时间戳。
- 启用订阅时,确认更新频率、死区和最大组大小符合现场要求;需要服务端时间时核对 SourceTime。
- 节点写入只在服务端明确允许的测试节点上执行,写入后重新读取确认结果。
- 方法调用先使用无生产影响的测试方法,确认对象节点、方法节点和输入参数数量正确。
- 分别通过变量写入弹窗和目标外部 RPC 入口调用一次,核对输出参数、RPC 日志和服务端执行结果。
排障差异
- 无法连接或浏览节点:检查连接 URL、账号密码、安全策略、应用证书和服务端信任列表。
- 提示证书不受信任:优先把客户端证书加入服务端信任列表;不要在生产环境长期依赖“接受不受信任证书”。
- 能浏览但读取状态码异常:核对 NodeId、服务端节点权限和数据质量。
- 订阅没有更新:检查“激活订阅”、更新频率、数据变化触发条件、死区和订阅组节点数量。
- 导入后类型不正确:开启“加载服务端数据类型”,重新浏览并核对自定义类型映射后再导入。
- 特殊方法列表中没有“调用 OPC UA 方法”:确认设备使用当前版本的 OPC UA 客户端插件,并在更新程序后重启 GatewayRuntime。
- 提示输入参数数量不正确:确认 RPC 值的最外层是参数列表;方法只有一个数组参数时必须使用双层数组,例如
[[1, 2, 3]]。 - 提示参数类型不匹配:核对服务端方法的
InputArguments数据类型和值阶,并确认服务端公开了标准输入参数元数据。 - 提示方法无效或不可执行:核对对象节点与方法节点是否属于同一对象、当前用户是否有执行权限,以及服务端方法的 Executable 状态。
- 方法被周期性重复触发:把方法变量的读写权限改为“只写”,不要将控制方法配置为可读变量。
- 外部 RPC 被拒绝:检查方法变量是否允许 RPC 写入、设备是否暂停、集成账号是否有变量写入权限。