Skip to content

OPC UA Server ​

适用 ThinkLink 2.00.099(功能自 2.00.096 引入)。OPC UA 将设备遥测和指定属性提供给上位机。遥测节点只读;属性写入必须显式开放。配置保存、服务运行、上位机读写和物理设备反馈是分别验收的阶段。

启用与连接 ​

  1. 核对运行模式与权限:组织服务卡片沿用 gw / tke 模式限制,系统 service_enable.OpcUaServer 仅显式 false 时禁用,角色需具备节点菜单权限(510)。管理员禁用会停止实例、保留配置和节点;重新允许不会自动启动。
  2. 在设备基本信息开启 opc_ua(字符串 "TRUE" / "FALSE");设备模板也支持该开关。修改模板不会自动应用到既有设备;按模板创建或重置时核对实际设备值。若启用了离线跟踪,还需确认设备按当前规则在线。
  3. 进入 组织服务配置 → OPC UA Server(/tenant/am/server-config),保存配置后点击“重启”使新配置生效。检查 RUNNING 和实际监听端口;保存成功不代表已经运行。
  4. 进入 运维管理 → OPC UA 节点列表(/tenant/om/opc-ua-node-list),新增、编辑或按物模型生成节点。支持批量删除、Excel 导入导出;这些配置写入会影响正在运行的实例。
  5. 上位机连接 opc.tcp://服务器地址:4840/thinklink。默认端口 4840,默认服务路径 /thinklink。同时核对容器映射、主机防火墙和网络可达性。

同一后端进程只运行一个组织的 OPC UA 实例;启动另一组织会停止并替换当前实例,不能把它当作同进程多组织并行服务。组织的停止请求不能停止其他组织实例。启动需等待 Worker ready 和全量节点同步,异常退出后按已有配置延迟 60 秒尝试恢复;手动停止或管理员禁用会取消恢复。

服务配置与证书 ​

字段含义
port监听端口,默认 4840
resource_path服务路径,默认 /thinklink
security_modeNone 或 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_fromtelemetry_data、shared_attrs、app_attrs、server_attrs
thing_model_id遥测来源的已绑定物模型;属性来源不需要
name_path字段路径,以点号分隔,例如 status.value
value_typeBoolean、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 请求头;提交会保存并同步节点):

json
{
  "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,例如以下只读温度字段:

json
{
  "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-updatedataList;有 id 时合并当前组织已有记录
删除/opc-ua-node-list/batch-delete-by-idsids;有副作用
按模型生成/opc-ua-node-list/add-node-by-thing-modelthingModelId;有副作用
Excel 导入/opc-ua-node-list/import-excelmultipart/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 升级说明。