KNX DPT5.001 的 128 为什么接近 50%:怎样保留量化误差
DPT5.001将一字节0到255映射到0到100%,所以128约为50.196%,不是精确50%。原始值每增加一,百分比增加约0.392157个百分点;界面四舍五入不能改变底层原始值。
适用版本与输入范围
依据 XKNX 维护者仓库固定标签 3.6.0 的下列源码,只实现本文明示的数据点或组值解析子集。它不是 KNX 规范全文,也不是设备互通认证;组地址与DPT应由项目点表明确提供。 本文所有输入均为原创合成数据,未接真实设备。
缩放分母是255而不是256
一个字节有256种状态,但端点是0和255;要让255对应100%,必须使用raw×100/255。若误用256,最大值会停在99.609375%,即使界面显示100也隐藏了映射错误。附件0、128和255三条正例分别检查低端、中点和高端,报告percent保留浮点计算结果,roundtrip_raw再用相同尺度还原,确保显示与存储之间没有擅自换比例。
量化误差与浮点误差不是一回事
原始编码只有256档,很多整数百分比不能精确落在某个原始码上。50%转换成原始值需要按既定舍入策略选127或128,相应解码不会恰好50。本题从原始码解码后回编,不处理所有外部小数输入的舍入约定;若要扩展发送路径,应明确采用维护者实现的舍入行为并增加边界测试。不要把不到半个百分点的量化差异直接诊断为传感器或灯具精度问题。
类型长度相同也不能借用缩放
DPT5主类包含不同子类型,整数0到255、角度或百分比并非同一语义。程序明示只解释5.001 Scaling,不因负载恰好一字节就自动乘100/255。设备点表应提供完整主次编号,尤其是遮阳位置、风阀和调光值,它们虽然常用百分比,仍要核对方向与反馈规则。显式负例256不再是一字节,程序拒绝,不能取低八位变成零后让设备误读为关闭。
报告用于编码核对,不测亮度
step_percent是编码刻度,不代表灯具实际发光线性。灯具可能有自己的曲线、最小输出限制或内部调光特性,显示50%也不承诺光通量达到满量程的一半。离线输入是原创数字,没有连接照度计、灯具或KNX总线。工程交接可保存原始码与解码百分比两列,界面显示位数单独约定,避免每次导出再舍入造成累计差异,也方便追踪同一个原始电报是否被不同系统采用不同分母。
下载与复跑
将输入 fixture.json与独立程序 verify.py放在同一目录,用 Python 3.12 执行 python verify.py,无需安装第三方包。程序从自身目录读取输入并写入 report.json,不要求当前终端恰好位于下载目录。也可查看本次实跑报告和复跑说明。
本次实际运行通过 4 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。percent是编码比例;step_percent为一个原始码的刻度,roundtrip_raw检查同尺度还原。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。
对象或字段的基础关系可回到KNX 组地址与DPT入门核对,更多接口入口在设备协议库。若需要把已确认的数据点接入展项编排,可了解SoftControl 展厅中控;具体接入能力以项目确认和实际测试为准。
一级依据
来源核对日期:2026-10-24。离线结果只证明给定输入的解析或计算行为;现场兼容性、响应时间、硬件准确度和具体产品支持均未测量。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。