OPC-UA LADS 动态映射架构重构记录 (v0.3.83)
1. 背景与目标
在先前的版本中,色谱仪后端与底层硬件的 OPC-UA 映射存在以下局限性:
- 目录结构使用了自定义的临时域名,不符合 OPC 基金会官方 LADS (Laboratory and Analytical Device Standard) 规范。
- OPC-UA Server 初始化时强绑定了伪 DeviceID(
"1"),导致使用老主板(Legacy Board)时,底层真实 MAC 地址(如GC97002020100110)采集的温度、FID 信号和循环次数等状态,无法映射到 OPC-UA 暴露的节点中。 - 底层第三方库
gopcua在动态生成NewFolderNode文件夹节点时存在Variant类型断言导致的 Panic 崩溃漏洞。
目标:完全遵循国际标准协议(OPC-UA LADS),重构设备目录树,支持多设备动态绑定(Dynamic Twins),确保物理层的数据(采集时间、温度PV/SV、FID信号等)全量且实时地映射到标准模型中。
2. 架构重构与改动说明
2.1 命名空间与目录标准化
- 废除原有的私有命名空间,切换为官方标准命名空间:
http://opcfoundation.org/UA/LADS/。 - 构建了规范的设备目录树。所有的分析仪器均严格挂载在
Root -> Objects -> AnalyticalDevices -> [DeviceID]目录下。
2.2 动态多核映射 (Dynamic Twins)
- 重构了
src/edge/internal/opcua/server.go。 - 原本强绑定的单一
*models.DigitalTwin变更为支持多设备并发监控的*sync.Map(globalTwins)。 - 当底层通过串口或网络侦测到硬件接入时,OPC-UA Server 守护协程会自动在
AnalyticalDevices下为其创建以真实 MAC 地址命名的独立设备目录,并实时桥接该设备的真实运行状态。
2.3 老主板 (Legacy Board) 组件代理
- 对于通过 Cmd 143 / Cmd 128 上报状态的遗留主板,新增了
legacyTempComp(温度组件) 和legacyDetComp(检测器组件) 代理模型 (src/edge/cmd/collector/legacy_components.go)。 - 确保每次主板上报状态时,真实温度 (PV)、设定温度 (SV) 及 FID (pA) 能够实时推送到对应 DeviceID 的
DigitalTwin,再由 OPC-UA 引擎向外暴露,解决了无真实数据跳动的 Bug。
2.4 参数查漏补缺
新增并确立了对以下重要参数的映射:
CurrentCycleCount(当前循环次数,跟随底层 Cmd 物理信号递增)SamplingInterval(采样周期 / dtS,真实配置映射如 0.05s)- 各个组件的实时 State (状态)、PV (真实值)、SV (设定值)
2.5 gopcua 底层库修复
在 vendor 模式下,直接修改了 src/edge/vendor_local/gopcua/server/node.go。
修复了 NewFolderNode 函数内部给 NodeClass 和 LocalizedText 设置 Value 时,类型不匹配导致的 panic: trying to create a variant from a type that it is not supported 致命错误。
3. 复盘结论
通过本次重构,系统成功实现了“脱虚向实”。色谱工作站彻底摆脱了前端的逻辑依赖与假数据绑定,后端核心自主状态机配合完全标准化的 OPC-UA LADS 协议,具备了真正的即插即用和数字孪生(Digital Twin)能力。
2.6 LADS 目录树规范化与多通道扩充 (v0.3.83)
- 将 LADS 文件夹 (ParameterSet, ComponentSet, ResultSet 等) 的挂载方式由 HasComponent 修正为更符合层级规范的 Organizes。
- 将原本仅包含 Col (柱箱) 等少量温度信号的模拟数据,全量扩充了 FID (通道0)、FID2 (通道1)、Inj1、Inj2、Det1、Det2、Det3 等真实的硬件实时信号,确保所有数据均来自于下位机的实时解析。
