OPC UA DataValue 缺失时间戳不是零,怎样按 EncodingMask 逐项读

2026-10-24

DataValue的EncodingMask决定哪些字段真正出现在流里。时间戳未出现与明确编码一个零值,在原始证据上应分开记录;缺省StatusCode按Good处理。字段消费顺序由表定义,不是把掩码位从低到高排序后逐项读取。

适用版本与输入范围

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

先记录字段存在性再给缺省解释

附件只有值的01 06 2A000000中,01是DataValue掩码,06又是内部Variant类型,42才是Int32内容。status未编码时规范缺省为Good,程序输出status=0,同时present列表没有status,保留原始存在性。源时间显式零的输入则present包含source_ticks、数值为0;与未出现字段的None不同。这是记录二进制证据的区别,不表示零时间是有效采样时刻,UA的最小时间边界仍需按时间语义处理。

时间和pico字段交错排列

定义顺序为Value、Status、SourceTimestamp、SourcePicoseconds、ServerTimestamp、ServerPicoseconds。虽然源小数字段标志0x10大于服务器时间标志0x08,消费顺序仍先源pico再服务器时间。附件全部时间案例用源ticks=10、源pico=7、服务器ticks=20,非对称数值能发现简单按位排序导致的错位。程序明确按表列顺序前进游标,每一步先检查剩余字节。

小数部分有规范化约束

Picoseconds字段的单位是10皮秒,它补足100纳秒DateTime的更细部分,编码值应小于10000;规范要求解码遇到更大或相等值时按9999处理。附件服务器pico原码10000验证这一规则,而不是拒绝或原样当作额外100纳秒。若对应时间戳未出现,其pico应忽略,程序会输出None。这里仅展示编解码和存在性,不据此宣称设备能提供10皮秒测量准确度。

掩码与剩余长度必须一致

显式负例声明源时间字段却只给两字节内容,程序报DataValue字段截短;多余尾数据也不能忽略。本示例仅支持值字段中的Int32标量Variant,其他类型明确拒绝,不悄悄按四字节消费。完整接入还需检查节点类型、状态与时间来源,本程序没有读取服务器或模拟会话。报告present方便交付时区分原始省略字段与解析层默认值,避免导出表把缺失时间补成电脑当前时间后丢掉数据质量证据。

下载与复跑

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

本次实际运行通过 5 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。present保留实际编码字段;status缺省Good,零ticks仍是最小时间边界,pico值按规范上限归一化。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。

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

一级依据

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

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

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

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

去留微信

留言讨论

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

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

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

    这个页面有问题?

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