BACnet 写空值为何能释放优先级:怎样离线核对 16 槽优先级数组

2026-10-24

对支持命令优先级的BACnet对象,较小编号优先,NULL表示释放本优先级槽位,不表示把目标值写成零。释放后应重新选择最高有效槽;十六槽全空才回退RelinquishDefault,不能总回到程序自己的默认值。

适用版本与输入范围

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

把优先级数组看成十六个独立槽

附件从全空状态开始:优先级8给22后有效值22;优先级4给18后有效值18;释放4后恢复22;再释放8后回退RelinquishDefault=25。这组序列能证明NULL的含义是放弃当前优先级控制权,而不是关闭设备,也不是恢复此前缓存的任意一个值。槽位必须按1到16编号保存;数组实现可以0基,但日志仍应输出协议优先级,避免交接时差一档。

选择第一个非NULL,不是第一个真值

示例用Python is not None判断有效槽。第二条正例在优先级1写入数值零,有效结果必须保留零,不能因为if value为假就继续寻找低优先级。命令值的业务含义由对象类型与属性定义决定,这里以数字演示仲裁,不假设零代表停机。现场如果还存在其他客户端持有高优先级,自己的低优先级写入即使被接受也可能不成为最终PresentValue。

释放事件不修改其他槽

每一步只更新指定槽位,NULL释放优先级4时,优先级8原有22应继续存在。错误实现常在释放时清空整张表,或者把NULL转换成RelinquishDefault写回当前槽,都会改变后续仲裁。本脚本的timeline逐步记录effective和source,让测试能发现这些状态错误。显式负例优先级0直接拒绝,不尝试夹到1;越界参数应在本地暴露,而不是静默扩大控制权。

本地模型不代替设备可写性验证

公开实现中不同对象、保留优先级及设备策略可能有额外约束;本题只演算通用十六槽选择关系,没有实现某个真实AnalogOutput的全部WriteProperty行为。并非每个BACnet属性都拥有PriorityArray,也不能从此模型推断现场账号有写权限。实际交付应记录对象支持、有效优先级、RelinquishDefault及释放责任,避免客户端退出后遗留命令。本附件不连接系统、不写属性,仅提供确定性的离线状态序列。

下载与复跑

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

本次实际运行通过 3 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。timeline.source明确有效槽位或RelinquishDefault;释放只影响指定槽,零不是空值。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。

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

一级依据

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

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

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

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

去留微信

留言讨论

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

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

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

    这个页面有问题?

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