OPC UA 二维数组不能只看元素数:怎样核对 dimensions 与展平顺序

2026-10-24

OPC UA Variant的二维数组需要同时保留元素序列和dimensions,维度乘积应与元素数量一致。展平采用最后一维变化最快的顺序;同样六项在2×3与3×2中对应不同坐标,不能只凭元素数恢复形状。

适用版本与输入范围

依据 OPC Foundation 官方参考,v105 链接在核对时显示 v1.05.07,具体 Part 与章节见文末。示例只处理明确声明的值与结构,不实现网络会话、证书或完整服务端。 本文所有输入均为原创合成数据,未接真实设备。

同样六个数字并不表示同一张矩阵

附件flat固定为10、11、12、20、21、22,第一条dimensions=[2,3]恢复两行三列,第二条[3,2]恢复三行两列。这个对照故意让内容相同、仅形状不同,能发现桥接层只保存列表而丢弃维度的问题。若后续用于区域传感器、坐标表或画面数据,错形状会让数值落到错误位置,即使每个数本身完全正确。

用线性索引推导坐标

对行数rows、列数cols,线性序号i对应行i//cols、列i%cols;取值位置为row×cols+col。程序输出coordinates,与matrix并列给出每个元素的定位证据。不能以“二维数组”就假定第一维变化最快,否则会发生转置或交错。这里限定正整数二维形状,较高维可以按规范推广,但不能在没有测试时宣称程序已经支持任意维数、空维或所有数组类型。

先检查乘积再重建

负例dimensions=[2,4]只配六项,程序报告维度乘积与元素数不同,不用缺省零补成八项,也不把剩余两格当不存在。Python切片可能返回短行而不报错,所以必须显式检验。输入已是从Variant读出的dimensions与flat内容,不含二进制掩码;若从原始流进入,应先正确解析Variant数组长度和维度数组,再做本层形状检查,两层职责不能互相替代。

点表还需约定每一维的业务意义

dimensions只描述形状,不解释第一维是楼层、区域、设备还是采样批次。工程交付应另列维度顺序、轴标签与单位,避免两方都“正确地”处理2×3却把行列含义用反。报告没有向真实节点写入任何数组,也未测服务器对矩阵的支持;它只验证给定形状与线性序列的契约。后续若节点ValueRank或ArrayDimensions要求不同形状,还应在写入前增加节点层约束检查。

下载与复跑

将输入 fixture.json与独立程序 verify.py放在同一目录,用 Python 3.12 执行 python verify.py,无需安装第三方包。程序从自身目录读取输入并写入 report.json,不要求当前终端恰好位于下载目录。也可查看本次实跑报告和复跑说明。

本次实际运行通过 3 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。coordinates对应flat顺序;shape只表示形状,行列业务含义需由项目点表另行定义。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。

对象或字段的基础关系可回到楼宇与工业数据接入链路核对,更多接口入口在设备协议库。若需要把已确认的数据点接入展项编排,可了解SoftControl 展厅中控;具体接入能力以项目确认和实际测试为准。

一级依据

来源核对日期:2026-10-24。离线结果只证明给定输入的解析或计算行为;现场兼容性、响应时间、硬件准确度和具体产品支持均未测量。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。