BACnet 日期里的 FF 是错误吗:怎样保留通配符而不强造时间戳

2026-10-24

BACnet Date/Time中的FF可表示未指定字段,不能一律当损坏字节,也不能直接补成当前日期。四字节Date的年份以1900为偏移,Time最后一字节是百分之一秒;保留字段级未知状态,只有具体字段齐全才构造本地日历时间。

适用版本与输入范围

依据维护者 bacnet-stack 固定标签 bacnet-stack-1.4.0 的下列源码解释公开实现子集。该参考不是 ASHRAE 标准全文;涉及具体楼控设备时仍需记录型号、固件和对象支持范围。 本文所有输入均为原创合成数据,未接真实设备。

日期和时间各有四个字段

附件Date=[126,10,24,6]表达2026年10月24日及星期六;Time=[14,3,5,25]表达14:03:05.25。年份字节126需要加1900,时间小数字段25乘一万才是Python微秒250000,不能误读为25毫秒或所谓“百秒”。输入使用JSON整数数组直接展示字节值,不含应用标签,也不暗含时区。程序构造的local_datetime是无时区日历表示,不会自动加Z冒充UTC。

未指定字段不允许猜补

第二条输入将日与星期设为255,报告中对应null,concrete=false,local_datetime也为null。它可以表示一个部分日期条件,而不是一个可直接写入时序库的瞬间。程序不会取电脑当前日、不将255截成31,也不会把星期缺失当作必然错误。若具体年月日与时分秒齐全,即使星期未指定,仍可构造日历时间;星期的可用性与日期是否完整应分开保存。

明确公开实现子集和拒绝范围

BACnet日期还存在其他特殊月份或日选择含义,本演示只支持普通1到12月、1到31日和FF未指定,不把特殊取值假装成普通日期。范围检查后还调用datetime校验真实日历,避免接受2月30日。时间字段的上限分别为23、59、59、99,显式负例百分之一秒100被拒绝,不进行进位归一化。这样保留了输入错误,避免上层以为数据源确实给了下一秒。

部分日期与绝对时间分别交付

报告同时保留date_fields、time_fields和能否组成具体日历时间的判断,便于计划表、日程与采集值采取不同处理方式。仅凭Date/Time值不能推断设备所处时区、夏令时或时钟准确性,工程若需要UTC必须另有可靠配置和转换规则。本附件未连接控制器,也没测对时误差,适合检查导出数据的字段解释。遇到未支持特殊日期时应保留原始字节并扩展有依据的解析,不应随意猜成现场某一天。

下载与复跑

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

本次实际运行通过 3 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。local_datetime没有时区;null表示字段未指定,不能替换为零或当前系统时间。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。

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

一级依据

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

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

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

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

去留微信

留言讨论

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

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

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

    这个页面有问题?

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