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.30x12 0x03(二进制 0001 0010 0000 0011)。
  • 用途:唯一标识设备,用于点对点通信或设备配置。

(2) 组地址(Group Address)

  • 格式主组(5bit)/中间组(3bit)/子组(8bit)主组(5bit)/子组(11bit) → 2字节。
  • 示例
  • 3/2/10xE3 0x21(二进制 1110 0011 0010 0001)。
  • 5/20470xA5 0xFF(二进制 1010 0101 1111 1111)。
  • 用途:逻辑分组,设备订阅组地址实现一对多通信。

5. 数据表示(APDU)

(1) DPT(Data Point Type)

KNX通过 DPT标准 定义数据语义,格式为 主类型.子类型(如 DPT 1.001 表示布尔开关):

DPT示例数据长度说明
DPT 1.0011 bit布尔值(0=关,1=开)。
DPT 5.0011字节百分比(0x00=0%,0xFF=100%)。
DPT 9.0012字节温度(浮点数,如 0x0C00=24°C)。
DPT 16.00114字节字符串(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. 实际调试建议

  1. 抓包工具:使用Wireshark + KNX插件 分析总线流量,过滤特定组地址。
  2. 错误排查
  • 校验和错误:检查报文异或结果。
  • 地址冲突:确保物理地址和组地址唯一。
  1. 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(标准帧)
  • TPCI0x40(读请求)
  • 适用场景:主设备主动请求从设备数据。

示例:读取温度传感器数据

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)

  • TPCI0x80(写响应)或 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)

  • 控制字段0xBC0xBF(结合加密标志)
  • 结构:在标准帧基础上增加加密负载和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-接收失败响应
读请求0xBC1字节0x40主动请求传感器数据
写响应0xBC可变0x80设备状态更新确认
广播帧0xBC可变0x00系统级指令(如复位)

注意事项

  1. TPCI与APCI
  • TPCI(传输控制)标记报文类型(读、写、响应)。
  • APCI(应用控制)定义具体操作(如DPT类型)。
  1. 地址过滤:设备仅处理目标地址匹配的报文(物理地址或订阅的组地址)。
  2. 校验和:始终为前面所有字节的异或(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/3E1表示组地址类型)。
  • 数据长度 0x01:1字节数据。
  • 数据 0x01:开关状态(0x01=开,0x00=关)。
  • 校验和 0x80BC 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(温度),编码为 0x060022.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:计算略。

关键点

  1. 地址编码
  • 物理地址:区域(4bit).线(4bit).设备(8bit) → 2字节(如 1.1.100x11 0x0A)。
  • 组地址:主组(5bit)/中间组(3bit)/子组(8bit) → 2字节(如 1/2/30xE1 0x03,高位 1110 表示组地址)。
  1. 数据编码
  • 开关:1字节(0x00=关,0x01=开)。
  • 温度:2字节浮点(如 DPT 9.001)。
  • 百分比:1字节(0x00=0%,0xFF=100%)。
  1. 校验和:对所有前面字节进行异或运算(如 BC XOR 11 XOR 0A XOR E1 XOR 03 XOR 01 XOR 01 = 80)。

实际应用建议

  • 使用ETS(KNX工程工具软件)配置设备,无需手动组包。
  • 报文示例主要用于理解底层协议,调试时可借助抓包工具(如Wireshark + KNX插件)。
  • 深入学习可参考KNX官方文档《KNX Standard》或书籍《KNX for IoT》。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

cloud@modbus.cn

QQ
微信