OPC UA 服务端
通过内置 OPC UA Server 将转发组内的变量公开为节点。外部客户端可以浏览、读取,并在权限允许时写入节点;还可关联历史数据和历史报警目标。
转发组范围和目标启停见数据转发。本页只说明 OPC UA 端点、安全认证、历史目标、节点属性和专用调试。
功能入口
进入“开发配置 → 数据转发”,按以下顺序配置:
- 保存转发组变量范围;只有范围内变量才会创建 OPC UA 节点。
- 新增目标,选择“OPC UA 服务端”,填写目标基本信息。
- 打开“目标属性”,配置端点、身份、安全策略、证书和历史目标绑定。
- 保存并启用目标,确认服务端运行后,再在“变量属性”中设置节点数据类型和写入权限。
目标基本信息
| 参数 | 默认值 | 如何配置 |
|---|---|---|
| 所属转发组 | - | 必须选择已保存的转发组。 |
| 目标名称 | - | 必填,同一转发组内不能重复。 |
| 启用 | 开启 | 关闭时不会启动 OPC UA Server。 |
| 日志级别 | Info | 排查证书、会话或节点问题时临时使用 Debug。 |
| 启动超时 | 60 秒 | 页面可填 1~3600 秒。 |
原生 Method 调用
先开启被调用设备或转发目标的“允许方法调用”,再启动或重启本 UA 目标。在 ThingsGateway/Methods 下按实例名称找到公开方法,第一个输入为 TimeoutMs,随后是业务参数。无需建立方法变量,调用仍使用当前 UA 会话认证。
关闭被调用实例的开关后,已发布节点也会拒绝执行;之后才开启方法或改变插件定义,需要重启本 UA 目标并重新浏览。基础类型使用 UA 类型,复杂对象、Decimal 和可空值使用 JSON 字符串。输出、类型约定和验证步骤见插件方法调用。原节点写入仍按目标与变量的“允许RPC写入”执行。
目标属性
端点配置
| 参数 | 默认值 | 如何配置 |
|---|---|---|
| 服务地址 | opc.tcp://127.0.0.1:48410 | OPC UA Endpoint。多个地址用英文分号分隔;必须填写客户端实际可访问的地址。 |
| 名称标识 | TGateway_OPC_UA_Server | Identify 返回的应用名称,同时用于自动生成服务端应用证书主题。 |
安全与认证
| 参数 | 默认值 | 如何配置 |
|---|---|---|
| 安全策略 | 关闭 | 关闭时只发布 None 安全端点;开启时发布 SignAndEncrypt,策略为 Basic256Sha256、Aes128_Sha256_RsaOaep 和 Aes256_Sha256_RsaPss。客户端需选择双方支持的组合。 |
| 允许证书登录 | 关闭 | 仅安全端点可用;开启后发布 X509 用户身份令牌。 |
| 客户端证书信任模式 | ManualTrustList | ManualTrustList 在调试页维护信任库;SpecifiedCA 只信任指定 CA 签发的客户端证书。 |
| 受信客户端CA | 空 | 仅 SpecifiedCA 使用。选择后只接受该 CA 签发的客户端应用证书和用户证书;留空则自动信任有效客户端证书,并未限定组织签发根。 |
| 用户名 | 空 | 用户名登录时的固定账号;客户端必须提交非空用户名。 |
| 密码 | 空 | 与用户名完全匹配的密码;不要在截图或日志公开。 |
| 服务端证书名称 | 空 | 安全端点建议选择带私钥的服务端证书;留空时系统按应用名称生成。 |
| 服务端签发CA | 空 | 服务端证书由 CA 签发时选择对应 CA,客户端需要完整证书链时必须配置。 |
配置身份与加密会话
- 在“证书管理”准备服务端证书,包含私钥、客户端实际访问的域名/IP,以及匹配 OPC UA 应用身份的 Application URI。
- 在目标选择“服务端证书名称”和对应“服务端签发CA”,开启安全策略,保存后用客户端重新获取端点。
- 核对端点为
SignAndEncrypt,服务证书、应用 URI 和完整链符合预期。安全策略关闭时发布 None 和匿名令牌;仅填写用户名密码不会关闭匿名。安全策略开启后不再发布 None 或匿名令牌。 - 用正确用户名密码建立新会话并读取节点;再用错误密码核对身份拒绝,避免继续使用已有会话。
- 需要证书用户登录时开启“允许证书登录”,在端点发现中核对 Certificate 令牌,再实际使用 X509 用户证书激活会话。
客户端应用证书用于建立安全通道,用户证书用于登录,两份身份分别信任。应用已受信不代表用户已获准;“允许证书登录”也不替代信任配置。指定 CA 模式应明确选择组织 CA,不能把该字段留空解释为只信任本组织。
手工模式下,在证书库分别维护应用信任锚、应用签发者、用户信任锚和用户签发者。签发者用于补链,信任锚用于建立信任;通过 CA 信任时还需满足 CRL 吊销检查。直接信任自签名叶子时,也应分别上传准确的应用与用户公钥并核对指纹。删除用户信任后,使用相同应用建立的新用户会话应被拒绝,服务端原有节点和值仍可保留。
写入与历史
| 参数 | 默认值 | 说明 |
|---|---|---|
| 允许RPC写入 | 开启 | OPC UA 客户端写入的目标级总开关。变量级权限也必须允许。 |
| 历史数据目标 | - | 填写稳定的 组名/目标名;留空时不开放历史数据读取。 |
| 历史报警目标 | - | 填写支持历史报警查询的 组名/目标名;留空时不开放历史事件读取。 |
历史目标名称必须填写稳定目标名称(组名/目标名),且目标实现对应的历史查询能力;配置后先确认目标在线并已有查询时间范围内的记录。
开放历史数据与报警事件
- 先创建历史数据存储,让同一变量产生至少两个不同值,在网关历史查询中确认这两个样本及时间。
- 将其稳定名称填入 OPC UA 目标的“历史数据目标”,保存后重新连接并浏览。节点应声明
Historizing和HistoryRead。 - 在独立客户端执行标准 Raw History 读取,使用覆盖实际样本的 UTC 时间窗口,核对值、质量、源时间及续读信息。循环读取当前值不能代替历史读取。
- 需要事件历史时,另外创建历史报警存储并生成一次实际越限,填入“历史报警目标”。通过根事件通知节点执行事件 HistoryRead,按选择字段的顺序读取来源、消息和严重度。
- 清空相应绑定后重新连接,核对对应历史访问位取消、请求被拒绝,同时原数据库仍可查询,实时节点继续可读。
清除绑定只控制协议暴露能力,不删除旧历史、不关闭变量报警。数值历史和报警事件使用不同查询结构,必须分别验证。
目标变量属性
保存目标后,打开“变量属性”,为需要公开的变量配置节点属性。
| 参数 | 默认值 | 说明 |
|---|---|---|
| 数据类型 | Object | OPC UA 节点对外使用的数据类型,应与源变量和客户端预期一致。 |
| 允许RPC写入 | 开启 | 当前节点的写入权限。目标、变量和客户端用户权限必须同时允许。 |
变量必须已在转发组范围内;新增目标变量属性不会把变量加入转发组。
核对标量与数组类型
| 目标类型 | 客户端应核对的结果 |
|---|---|
Object | 从源值推导类型;Int16 源仍暴露 Int16,不能按任意 JSON 理解。源 decimal 的自动投影使用 Double。 |
| Boolean、各整数、Float、Double | 同时核对节点 DataType 与线上 Variant,不只比较显示文本。非零数值可转换为 true,但源寄存器值并未改变。 |
Decimal | 显式类型使用标准 DecimalDataType 的 ExtensionObject,客户端需支持该十进制结构。 |
String | 数值 100 会成为文本 "100",消费端应按字符串处理。 |
| 一维数组 | 核对 ValueRank、元素类型及每个元素;Byte 数组应保持数组形态,不能误作 ByteString 标量。 |
目标类型变宽不会扩展现场源点的有效值域。更改类型后重新浏览,写入使用新声明的类型,并继续满足源变量范围。
验证写入权限
先由外部客户端写入一个允许的测试值,核对写结果、采集回读和现场源端三处一致。再分别关闭目标级“允许RPC写入”和单节点的同名开关,每次保存并建立新会话:读取应继续可用,写入应被拒绝,现场值保持原值。恢复权限后再次测试写入,不能把客户端本地缓存变化当作现场执行成功。
目标调试
进入“开发配置 → 数据转发”,选择 OPC UA 服务端目标后打开“调试”。
| 功能 | 作用 |
|---|---|
| 证书库 | 维护手工信任模式下的客户端信任证书。 |
| 协议调试 · OpcUaServer | 查看端点和服务状态,执行 OPC UA 服务端专用操作。 |
证书库

上传或删除证书后,页面提示重启目标时应按提示执行。
OPC UA 服务端调试

证书变更、节点写入和断开客户端连接要求相应权限。执行前确认客户端身份和现场影响。
“特殊方法”目录中即使列出 UploadAsync,也不代表当前服务端支持任意主题消息上传。该方法在此目标返回“未提供通用消息上传通道”的业务失败;节点读写应使用 OPC UA 客户端或对应调试入口。检查方法业务结果,不能只看外层请求成功。
独立客户端可创建订阅及 Value 监视项,先记录分配的 SubscriptionId、发布周期、采样周期和队列策略,再改变源值,核对随后通知中的节点、新值和质量。初始快照与普通 Read 不算变化通知。删除订阅后普通 Read 应继续工作,删除订阅不会关闭会话或删除节点。
验证方法
- 启用目标,使用 OPC UA 客户端连接服务地址。
- 浏览命名空间,找到一个已纳入转发范围的变量节点。
- 读取节点值并与源变量比较。
- 只有在目标、变量、客户端用户和现场权限均允许时测试写入。
- 配置历史目标后,使用包含实际记录的时间范围验证历史数据或事件。
常见问题
| 现象 | 检查方法 |
|---|---|
| 客户端无法连接 | 服务地址、目标状态、防火墙、安全策略、服务端证书和客户端信任。 |
| 客户端证书被拒绝 | 信任模式、手工信任库、指定 CA、证书链和证书用途。 |
| 用户名登录失败 | 用户名、密码、证书登录设置、安全策略和用户权限。 |
| 看不到节点 | 转发组范围、目标变量属性、目标重启状态和客户端浏览权限。 |
| 读取值不正确 | 源变量状态、目标变量数据类型、转发组范围和目标日志。 |
| 写入被拒绝 | 目标权限、变量权限、OPC UA 用户权限、节点访问级别和现场安全。 |
| 历史读取为空 | 历史目标名称、目标类型、已有记录和查询时间范围。 |