内容目录
1. KNX协议分层(OSI模型简化)
KNX协议主要基于 OSI模型的简化版本,分为四层:
| OSI层 | KNX实现 | 功能说明 |
|---|---|---|
| 物理层 | TP(双绞线)、RF、IP | 定义物理介质(如KNX TP1总线、无线射频、KNXnet/IP隧道)。 |
| 数据链路层 | KNX Data Link Layer | 管理总线仲裁、冲突检测、帧校验(如校验和)。 |
| 网络层 | KNX Network Layer | 处理路由(组播/广播)、地址过滤(物理地址与组地址)。 |
| 应用层 | KNX Application Layer | 定义数据语义(如DPT类型)、设备间交互逻辑(读/写/响应)。 |
2. 通信模式
(1) 组播(Group Communication)
- 用途:设备向组地址发送数据,所有订阅该组地址的设备接收并处理。
- 特点:高效的一对多通信,适用于灯光控制、场景触发等。
- 示例:
组地址 1/2/3接收开灯指令,所有绑定此地址的灯执行操作。
(2) 点对点(Point-to-Point)
- 用途:设备直接通过物理地址通信(如配置、诊断)。
- 特点:需明确指定目标物理地址,用于设备初始化或维护。
- 示例:中控设备
0.0.1向传感器1.1.10请求温度数据。
3. 报文类型
KNX报文分为 标准帧(L_Data) 和 扩展帧(L_Data Extended):
| 类型 | 控制字段值 | 数据长度限制 | 适用场景 |
|---|---|---|---|
| 标准帧 | 0xBC | ≤ 15字节 | 常规控制指令(开关、百分比) |
| 扩展帧 | 0xBF | ≤ 255字节 | 大数据传输(如日志、配置) |
4. 地址结构
(1) 物理地址(Individual Address)
- 格式:
区域(4bit).线(4bit).设备(8bit)→ 2字节。 - 示例:
1.2.3→0x12 0x03(二进制0001 0010 0000 0011)。 - 用途:唯一标识设备,用于点对点通信或设备配置。
(2) 组地址(Group Address)
- 格式:
主组(5bit)/中间组(3bit)/子组(8bit)或主组(5bit)/子组(11bit)→ 2字节。 - 示例:
3/2/1→0xE3 0x21(二进制1110 0011 0010 0001)。5/2047→0xA5 0xFF(二进制1010 0101 1111 1111)。- 用途:逻辑分组,设备订阅组地址实现一对多通信。
5. 数据表示(APDU)
(1) DPT(Data Point Type)
KNX通过 DPT标准 定义数据语义,格式为 主类型.子类型(如 DPT 1.001 表示布尔开关):
| DPT示例 | 数据长度 | 说明 |
|---|---|---|
| DPT 1.001 | 1 bit | 布尔值(0=关,1=开)。 |
| DPT 5.001 | 1字节 | 百分比(0x00=0%,0xFF=100%)。 |
| DPT 9.001 | 2字节 | 温度(浮点数,如 0x0C00=24°C)。 |
| DPT 16.001 | 14字节 | 字符串(ASCII编码,如 "KNX")。 |
(2) APDU结构
- TPCI(Transport Control):1字节,标记报文类型(如数据请求、确认)。
- APCI(Application Control):1字节,定义操作类型(读、写、响应)。
- 数据负载:根据DPT编码的实际数据。
示例:
- 开关写入指令:
TPCI=0x00(写),APCI=0x80(DPT 1.001), 数据=0x01(开)。 - 温度读取请求:
TPCI=0x40(读),APCI=0x00(无数据)。
6. 通信服务
(1) 轮询(Polling)
- 主设备主动向从设备请求数据(如查询传感器状态)。
- 报文示例:
控制字段=0xBC,目标地址=传感器物理地址,APCI=读请求。
(2) 确认(Acknowledge)
- 接收方需回复确认帧(ACK)以确保可靠性。
- 示例:设备收到控制指令后返回
ACK报文(0xB0)。
(3) 重试机制
- 若未收到ACK,发送方在指定超时后重传报文(通常最多3次)。
7. 安全机制
- 传统模式:无加密,依赖物理层安全(如总线访问控制)。
- KNX Secure:新增数据加密(AES-128)和身份验证,防止篡改与窃听。
- 安全报文示例:在标准帧基础上增加加密负载和MAC(消息认证码)。
8. 实际调试建议
- 抓包工具:使用Wireshark + KNX插件 分析总线流量,过滤特定组地址。
- 错误排查:
- 校验和错误:检查报文异或结果。
- 地址冲突:确保物理地址和组地址唯一。
- ETS配置:在ETS工程中绑定DPT类型,避免数据解析错误。
KNX协议中,报文类型主要通过控制字段和TPCI(Transport Control Information)区分,不同报文类型适用于不同场景(如控制指令、数据请求、响应等)。以下是常见KNX报文类型的详细说明及示例:
1. 标准帧(L_Data Standard)
- 控制字段:
0xBC - 数据长度:≤ 15字节
- 适用场景:常规控制指令(开关、百分比、状态读取等)。
示例:开关控制
BC 11 0A E1 03 01 01 80
- 控制字段
0xBC:标准帧,正常优先级。 - 源地址
0x110A(1.1.10)。 - 目标地址
0xE103(组地址1/2/3)。 - 数据
0x01:开关状态(开)。 - 校验和
0x80:异或计算结果。
2. 扩展帧(L_Data Extended)
- 控制字段:
0xBF - 数据长度:≤ 255字节
- 适用场景:大数据传输(如字符串、日志、复杂配置)。
示例:发送字符串信息
BF 23 05 E2 51 0E 10 4B 4E 58 20 54 65 73 74 00 00 00 5C
- 控制字段
0xBF:扩展帧,低优先级。 - 源地址
0x2305(2.3.5)。 - 目标地址
0xE251(组地址2/5/1)。 - 数据长度
0x0E:14字节数据。 - 数据
0x10 4B 4E 58 20 54 65 73 74 00 00 00: - DPT 16.001(字符串),内容为
"KNX Test"(ASCII编码)。 - 校验和
0x5C:计算略。
3. 确认帧(ACK/NACK)
- 控制字段:
0xB0(ACK)或0xB1(NACK) - 结构:无数据部分,仅控制字段和校验和。
- 适用场景:接收方回复确认或拒绝。
示例:ACK确认
B0 00 00 00 00 00 00 B0
- 控制字段
0xB0:确认帧(ACK)。 - 校验和
0xB0:仅自身异或结果为0xB0。
4. 轮询请求(Polling Request)
- 控制字段:
0xBC(标准帧) - TPCI:
0x40(读请求) - 适用场景:主设备主动请求从设备数据。
示例:读取温度传感器数据
BC 00 01 12 34 01 40 00 2D
- 源地址
0x0001(中控设备0.0.1)。 - 目标地址
0x1234(传感器物理地址1.2.52)。 - 数据长度
0x01:1字节数据。 - TPCI+APCI
0x40:读请求(无数据负载)。 - 校验和
0x2D:计算略。
5. 响应帧(Response)
- TPCI:
0x80(写响应)或0xC0(读响应) - 适用场景:设备回复请求的数据或状态。
示例:温度传感器返回数据
BC 12 34 00 01 02 06 00 5C
- 源地址
0x1234(传感器地址1.2.52)。 - 目标地址
0x0001(中控设备0.0.1)。 - 数据长度
0x02:2字节数据。 - 数据
0x0600:温度值(DPT 9.001,24.0°C)。 - 校验和
0x5C:计算略。
6. 广播帧(Broadcast)
- 目标地址:
0x0000(全零地址) - 适用场景:设备向总线所有节点发送全局指令(如系统复位)。
示例:全局复位指令
BC 00 01 00 00 01 FF 01
- 源地址
0x0001(中控设备)。 - 目标地址
0x0000:广播地址。 - 数据
0xFF:复位指令(自定义编码)。
7. 安全报文(KNX Secure)
- 控制字段:
0xBC或0xBF(结合加密标志) - 结构:在标准帧基础上增加加密负载和MAC(消息认证码)。
- 适用场景:防止数据篡改或窃听。
示例(简化的加密报文)
BC 11 0A E1 03 10 01 80 [加密负载] [MAC] 2A
- 数据部分:明文数据
0x01被加密为更长字节。 - MAC:用于验证数据完整性(如AES-128计算)。
关键对比表
| 报文类型 | 控制字段 | 数据长度 | TPCI | 典型场景 |
|---|---|---|---|---|
| 标准帧 | 0xBC | ≤15字节 | 0x00 | 开关控制、百分比调节 |
| 扩展帧 | 0xBF | ≤255字节 | 0x00 | 长文本、复杂配置 |
| ACK确认 | 0xB0 | 无 | - | 接收成功响应 |
| NACK拒绝 | 0xB1 | 无 | - | 接收失败响应 |
| 读请求 | 0xBC | 1字节 | 0x40 | 主动请求传感器数据 |
| 写响应 | 0xBC | 可变 | 0x80 | 设备状态更新确认 |
| 广播帧 | 0xBC | 可变 | 0x00 | 系统级指令(如复位) |
注意事项
- TPCI与APCI:
- TPCI(传输控制)标记报文类型(读、写、响应)。
- APCI(应用控制)定义具体操作(如DPT类型)。
- 地址过滤:设备仅处理目标地址匹配的报文(物理地址或订阅的组地址)。
- 校验和:始终为前面所有字节的异或(XOR)值。
希望这些示例能帮助你理解KNX不同报文类型的写法!实际开发中建议结合官方协议文档和ETS工具验证。
以下示例说明:
示例1:开关控制(标准帧)
场景:物理地址 1.1.10 的设备向组地址 1/2/3 发送开灯指令。
报文:
BC 11 0A E1 03 01 01 80
- 控制字段
0xBC:标准帧,正常优先级。 - 源地址
0x110A:设备地址1.1.10。 - 目标地址
0xE103:组地址1/2/3(E1表示组地址类型)。 - 数据长度
0x01:1字节数据。 - 数据
0x01:开关状态(0x01=开,0x00=关)。 - 校验和
0x80:BC XOR 11 XOR 0A XOR E1 XOR 03 XOR 01 XOR 01 = 80。
示例2:温度传感器数据(扩展帧)
场景:传感器 2.3.5 上报温度 22.5°C 到组地址 2/5/1。
报文:
BF 23 05 E2 51 02 06 00 5C
- 控制字段
0xBF:扩展帧,低优先级。 - 源地址
0x2305:设备地址2.3.5。 - 目标地址
0xE251:组地址2/5/1。 - 数据长度
0x02:2字节数据。 - 数据
0x0600: - DPT 9.001(温度),编码为
0x0600→22.5°C(浮点格式)。 - 校验和
0x5C:计算略。
示例3:场景控制(多字节数据)
场景:中控设备 0.0.1 触发场景 3(组地址 5/0/3)。
报文:
BC 00 01 E5 03 03 03 00 00 6F
- 控制字段
0xBC:标准帧。 - 源地址
0x0001:中控地址0.0.1。 - 目标地址
0xE503:组地址5/0/3。 - 数据长度
0x03:3字节数据。 - 数据
0x030000:场景编号3,附加参数。 - 校验和
0x6F:计算略。
关键点
- 地址编码:
- 物理地址:
区域(4bit).线(4bit).设备(8bit)→ 2字节(如1.1.10→0x11 0x0A)。 - 组地址:
主组(5bit)/中间组(3bit)/子组(8bit)→ 2字节(如1/2/3→0xE1 0x03,高位1110表示组地址)。
- 数据编码:
- 开关:1字节(
0x00=关,0x01=开)。 - 温度:2字节浮点(如 DPT 9.001)。
- 百分比:1字节(
0x00=0%,0xFF=100%)。
- 校验和:对所有前面字节进行异或运算(如
BC XOR 11 XOR 0A XOR E1 XOR 03 XOR 01 XOR 01 = 80)。
实际应用建议
- 使用ETS(KNX工程工具软件)配置设备,无需手动组包。
- 报文示例主要用于理解底层协议,调试时可借助抓包工具(如Wireshark + KNX插件)。
- 深入学习可参考KNX官方文档《KNX Standard》或书籍《KNX for IoT》。
