1. KNX프로토콜分层(OSI模型简化)
KNX프로토콜主要基于 OSI模型的简化버전,分为四层:
| OSI层 | KNX实现 | 功能설명 |
|---|---|---|
| 物理层 | TP(双绞线)、RF、IP | 定义物理介质(如KNX TP1总线、无线射频、KNXnet/IP隧道)。 |
| 데이터链路层 | KNX 데이터 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_데이터) 和 扩展帧(L_데이터 Extended):
| 유형 | 控制필드值 | 데이터길이限制 | 适用시나리오 |
|---|---|---|---|
| 표준帧 | 0xBC | ≤ 15바이트 | 常规控制指令(开关、百分比) |
| 扩展帧 | 0xBF | ≤ 255바이트 | 大데이터传输(如로그、설정) |
4. 주소结构
(1) 物理주소(Individual 주소)
- 형식:
区域(4bit).线(4bit).设备(8bit)→ 2바이트。 - 예제:
1.2.3→0x12 0x03(2진수0001 0010 0000 0011)。 - 用途:唯一标识设备,用于点对点통신或设备설정。
(2) 组주소(Group 주소)
- 형식:
主组(5bit)/中间组(3bit)/子组(8bit)或主组(5bit)/子组(11bit)→ 2바이트。 - 예제:
3/2/1→0xE3 0x21(2진수1110 0011 0010 0001)。5/2047→0xA5 0xFF(2진수1010 0101 1111 1111)。- 用途:逻辑分组,设备订阅组주소实现一对多통신。
5. 데이터表示(APDU)
(1) DPT(데이터 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_데이터 Standard)
- 控制필드:
0xBC - 데이터길이:≤ 15바이트
- 适用시나리오:常规控制指令(开关、百分比、状态읽기等)。
예제:开关控制
BC 11 0A E1 03 01 01 80
- 控制필드
0xBC:표준帧,正常优先级。 - 源주소
0x110A(1.1.10)。 - 目标주소
0xE103(组주소1/2/3)。 - 데이터
0x01:开关状态(开)。 - 체크섬
0x80:异或계산 결과。
2. 扩展帧(L_데이터 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》。
답글 작성