KNX 两字节温度不能按 IEEE half 解:怎样拆 DPT9 符号与指数

2026-10-24

KNX DPT9的两字节浮点不是IEEE754 half。它由符号位、四位指数和十一位尾数组成,值为0.01×尾数×2的指数次方;负数尾数需要按该格式处理,不能用通用半精度浮点解码器。

适用版本与输入范围

依据 XKNX 维护者仓库固定标签 3.6.0 的下列源码,只实现本文明示的数据点或组值解析子集。它不是 KNX 规范全文,也不是设备互通认证;组地址与DPT应由项目点表明确提供。 本文所有输入均为原创合成数据,未接真实设备。

先拆位域再做缩放

附件0CE2中符号0、指数1、尾数1250,所以结果为0.01×1250×2=25。程序先将两字节按高字节在前合并,再用移位和掩码取出各字段。只将整字0CE2当作定点数除一百,会得到32.98,不是正确值;直接用struct的半精度格式也采用另一套指数偏置和尾数定义。名称都叫十六位浮点,不等于线上布局可以互换。

负尾数不能只添加一个负号

860C的低十一位是1548,符号位为一时应减2048,得到-500,再乘0.01后为-5。若简单把1548乘负号,会得到-15.48。负温度案例能暴露这种错误,而只测常见正室温时算法可能长期看似正确。报告保留sign、exponent、mantissa,使每一步有证据;这比只输出一个结果更适合核对网关与工程调试工具的差异。

指数改变可表达分辨率

第三条输入1001的指数2、尾数1,值为0.04,quantum也为0.04。它展示编码分辨率随指数增长,并非所有量程都固定0.01。量化台阶不等于传感器测量误差,不能根据这个数字宣称设备精度。示例只解码给定两字节,没有完整复刻维护者的编码舍入策略;若要实现浮点到DPT9的发送路径,还需增加正负临界值、舍入与范围测试。

主类格式和子型单位分别绑定

9.xxx共享格式,但温度、温差或其他量有不同单位与范围约定。本文按9.001温度场景展示25和-5,通用解码报告本身仍保留原数值,不凭字节猜单位。长度负例多出一字节直接拒绝,不能忽略尾部后宣称输入完整。离线程序不访问KNX网关,也没有测真实温度;用于工程交付时应将完整DPT编号、组地址、原始字节与单位一并保存,避免只传一个浮点数而失去解释依据。

下载与复跑

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

本次实际运行通过 4 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。mantissa是处理符号后的整数;quantum为该指数下尾数一单位对应的数值变化。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。

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

一级依据

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

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

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

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

去留微信

留言讨论

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

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

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

    这个页面有问题?

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