OPC UA Server
适用 ThinkLink 2.00.099(功能自 2.00.096 引入)。OPC UA 将设备遥测和指定属性提供给上位机。遥测节点只读;属性写入必须显式开放。配置保存、服务运行、上位机读写和物理设备反馈是分别验收的阶段。
启用与连接
- 核对运行模式与权限:组织服务卡片沿用
gw/tke模式限制,系统service_enable.OpcUaServer仅显式 false 时禁用,角色需具备节点菜单权限(510)。管理员禁用会停止实例、保留配置和节点;重新允许不会自动启动。 - 在设备基本信息开启
opc_ua(字符串"TRUE"/"FALSE");设备模板也支持该开关。修改模板不会自动应用到既有设备;按模板创建或重置时核对实际设备值。若启用了离线跟踪,还需确认设备按当前规则在线。 - 进入 组织服务配置 → OPC UA Server(
/tenant/am/server-config),保存配置后点击“重启”使新配置生效。检查 RUNNING 和实际监听端口;保存成功不代表已经运行。 - 进入 运维管理 → OPC UA 节点列表(
/tenant/om/opc-ua-node-list),新增、编辑或按物模型生成节点。支持批量删除、Excel 导入导出;这些配置写入会影响正在运行的实例。 - 上位机连接
opc.tcp://服务器地址:4840/thinklink。默认端口4840,默认服务路径/thinklink。同时核对容器映射、主机防火墙和网络可达性。
同一后端进程只运行一个组织的 OPC UA 实例;启动另一组织会停止并替换当前实例,不能把它当作同进程多组织并行服务。组织的停止请求不能停止其他组织实例。启动需等待 Worker ready 和全量节点同步,异常退出后按已有配置延迟 60 秒尝试恢复;手动停止或管理员禁用会取消恢复。
服务配置与证书
| 字段 | 含义 |
|---|---|
port | 监听端口,默认 4840 |
resource_path | 服务路径,默认 /thinklink |
security_mode | None 或 SignAndEncrypt;加密模式使用 Basic256Sha256 |
allow_anonymous | 是否允许匿名;None 仅用于匿名隔离调试 |
username / password | 本 OPC UA 服务专用账号;禁用匿名时必须配置,并使用加密模式,不复用平台 token |
证书和私钥持久化于后端进程工作目录下 opc-ua-pki/<tenant_code>/。升级、重新打包和重启应保留该目录。加密模式不会自动信任未知客户端证书:先核验客户端证书,再通过受控部署放入该组织目录的 trusted/certs;未信任请求进入 rejected。上位机也必须信任服务端证书。证书更改后重启服务,私钥不得写入示例、代码仓库或公开日志。删除组织成功提交后会停止其 Worker 并清理对应 PKI 目录。
节点管理与物模型配置
节点配置的关键字段如下,数据库 ID 使用字符串:
| 字段 | 含义 |
|---|---|
node_id / name | 节点标识和显示名称 |
eui | 当前组织的现有设备 |
data_from | telemetry_data、shared_attrs、app_attrs、server_attrs |
thing_model_id | 遥测来源的已绑定物模型;属性来源不需要 |
name_path | 字段路径,以点号分隔,例如 status.value |
value_type | Boolean、Int16、UInt16、Int32、UInt32、Float、Double、String |
writable | 布尔值;遥测必须 false,属性可显式设 true |
rpc_id | 可写属性的可选 RPC,须有权限且已绑定设备 |
NodeId 为 ns=1;s=<node_id>;自有命名空间 URI 为 urn:thinklink:opc-ua:<tenant_code>。上位机应通过 URI 解析命名空间索引,避免硬编码索引在其他服务器配置中失效。
单个只读属性节点的保存请求体示例(POST /thinklink/opc-ua-node-list/batch-save-update,JSON 与 token 请求头;提交会保存并同步节点):
{
"dataList": [
{
"node_id": "test/temperature",
"name": "测试温度",
"eui": "00112233",
"data_from": "shared_attrs",
"name_path": "opc_test",
"value_type": "Double",
"writable": false
}
]
}先在测试设备共享属性中保存数字 opc_test: 25.6,开启设备 OPC UA,再保存上述节点。需要验证写入时编辑该节点并显式启用 writable;不要通过遥测节点控制设备。
物模型字段配置保存于 opc_ua_config.field_list,例如以下只读温度字段:
{
"opc_ua_config": {
"field_list": [
{
"name": "温度",
"data_from": "telemetry_data",
"name_path": "temperature",
"value_type": "Double",
"writable": false
}
]
}
}在节点页面选择物模型并显式执行生成,只处理当前组织已绑定该模型且已开启 OPC UA 的设备,保留已有映射。未配置 field_list 时,从 telemetry_config.fields 的 number/string/boolean 展示字段生成只读节点。修改模型不会自动覆盖节点表;复核现有节点并按需要编辑。节点保存的数据库事务提交后才同步 Worker;同步失败时配置仍已保存、接口报错且服务进入 ERROR,修复后重启并回读,不能认定配置已回滚。
接口入口
以下均以 /thinklink 为前缀,使用 token 的当前组织,不能用 body 覆盖组织。服务配置复用 system-service/find-by-name 与 batch-save-update,服务名 OpcUaServer;服务管理不在公共用户版 API 检索范围内。
| 操作 | POST 路径 | 请求/结果要点 |
|---|---|---|
| 启动或重启 | /system-service/start-opc-ua-server | 有副作用,按已保存配置启动 |
| 停止 | /system-service/stop-opc-ua-server | 有副作用,停止当前组织实例 |
| 查询 | /opc-ua-node-list/find-page | 查询条件与分页 |
| 保存 | /opc-ua-node-list/batch-save-update | dataList;有 id 时合并当前组织已有记录 |
| 删除 | /opc-ua-node-list/batch-delete-by-ids | ids;有副作用 |
| 按模型生成 | /opc-ua-node-list/add-node-by-thing-model | thingModelId;有副作用 |
| Excel 导入 | /opc-ua-node-list/import-excel | multipart/form-data 的 file,会写配置;不要使用 JSON 上传 |
| Excel 导出 | /opc-ua-node-list/export-excel | 查询条件;返回 XLSX 二进制,不是 JSON |
读写质量与限制
| 状态 | 检查方向 |
|---|---|
Good | 平台处理流程完成;不代表物理设备执行成功 |
BadNoData | 字段缺值 |
BadTypeMismatch | 值与声明类型不一致;不自动转换字符串、布尔、数字 |
BadOutOfService | 设备关闭 OPC UA、设备不存在,或启用离线跟踪且已离线 |
BadNotWritable | 对只读节点写入 |
BadNodeIdUnknown | 节点已删除或 NodeId 不存在 |
仅支持上述八种标量;当前不支持数组、结构体、历史读取、事件和方法调用。遥测时间采用模型 update_time,属性采用 config_update_time,不可用时由 Worker 使用处理时间。
可写属性先校验最新节点映射、类型、设备开关及 RPC 权限/绑定,保留属性树其他字段,更新配置时间并进入持久化缓冲,再转发并执行可选 RPC。后续转发或 RPC 失败不会回滚已更新属性。Worker 等待写入最多 15 秒,已开始的操作超时不表示回滚;先检查属性、RPC 日志和设备反馈,不能直接重复写入。
部署与验收
目标运行环境要求 Node.js ≥22.13.0。必须发布完整后端包,包含 work-thread/opc-ua-server.js、node-opcua 运行依赖和 nodeset/证书资源;仅复制 Worker 不够。2.00.099 沿用 2.00.098 起的完整打包流程。保留 PKI、配置、原程序包和数据库备份,并按当前数据库版本执行正式完整迁移;2.00.096 新增节点表、设备/模板开关和模型配置,但不是本轮唯一需要的迁移。
测试环境依次验证:服务启动/停止及改端口重启、只读拒写、属性写入与其他字段保留、错误类型、缺值、设备离线/关闭、节点删除、模型生成、Excel 往返、证书双向信任及正确/错误密码、组织切换与实例替换。记录平台属性读回、RPC 日志和实际设备反馈,上位机品牌/版本及连接安全模式。
本轮文档的本地构建与静态示例检查,不等于真实数据库迁移、已部署服务、浏览器交互或上位机/物理设备验收。参见 2.00.099 升级说明。