1. KNX协议分层(OSI模型简化)
KNX协议主要基于 OSI模型的简化版本,分为四层:
| OSI层 | KNX実装 | 功能説明 |
|---|---|---|
| 物理層は | TP(ツイストペア)、RF、IP | 定义物理介质(如KNX TP1バス、无线射频、KNXnet/IP隧道)。 |
| データ链路层 | KNX Data Link Layer | 管理バス仲裁、冲突检测、フレームチェック(如チェック和)。 |
| 网络层 | KNX Network Layer | 処理路由(组播/broadcast)、アドレス过滤(物理アドレス与组アドレス)。 |
| アプリケーション層 | KNX Application Layer | 定义データ语义(如DPTType)、デバイス间交互逻辑(读/写/Response)。 |
2. 通信モード
(1) 组播(Group Communication)
- 用途:デバイス向组アドレス送信データ,すべての订阅该组アドレス的デバイス受信并処理。
- 特点:高效的一对多通信,適用される灯光控制、场景触发等。
- example:
组アドレス 1/2/3受信开灯指令,すべての绑定此アドレス的灯执行操作。
(2) 点对点(Point-to-Point)
- 用途:デバイス直接経由物理アドレス通信(如設定、诊断)。
- 特点:需明确指定目标物理アドレス,用于デバイス初期化或维护。
- example:中控デバイス
0.0.1向センサーは1.1.10リクエスト温度データ。
3. message type
KNX报文分为 標準フレーム(L_Data) 和 扩展フレーム(L_Data Extended):
| Type | 控制字段值 | データ長さ限制 | 適用可能なシーン |
|---|---|---|---|
| 標準フレーム | 0xBC | ≤ 15バイト | 常规控制指令(switch、百分比) |
| 扩展フレーム | 0xBF | ≤ 255バイト | 大データ传输(如日志、設定) |
4. アドレス構造
(1) 物理アドレス(Individual Address)
- format:
エリア(4bit).线(4bit).device(8bit)→ 2バイト。 - example:
1.2.3→0x12 0x03(binary0001 0010 0000 0011)。 - 用途:唯一标识デバイス,用于点对点通信或デバイス設定。
(2) 组アドレス(Group Address)
- format:
主组(5bit)/中间组(3bit)/子组(8bit)或主组(5bit)/子组(11bit)→ 2バイト。 - example:
3/2/1→0xE3 0x21(binary1110 0011 0010 0001)。5/2047→0xA5 0xFF(binary1010 0101 1111 1111)。- 用途:逻辑分组,デバイス订阅组アドレス実装一对多通信。
5. データ表示(APDU)
(1) DPT(Data Point Type)
KNX経由 DPT標準 定义データ语义,格式为 主タイプ.子タイプ(如 DPT 1.001 表示布尔开关):
| DPTexample | データ長さ | 説明 |
|---|---|---|
| DPT 1.001 | 1 bit | 布尔值(0=关,1=开)。 |
| DPT 5.001 | 1バイト | 百分比(0x00=0%,0xFF=100%)。 |
| DPT 9.001 | 2バイト | temperature(浮動小数点数,如 0x0C00=24°C)。 |
| DPT 16.001 | 14バイト | ストリング·ストリング(ASCIICoding,如 "KNX")。 |
(2) APDU構造
- TPCI(Transport Control):1バイト,标记报文タイプ(如データリクエスト、Confirm)。
- APCI(Application Control):1バイト,定义操作タイプ(读、写、Response)。
- データ負荷:根据DPT编码的实际データ。
example:
- 开关写入指令:
TPCI=0x00(写),APCI=0x80(DPT 1.001), data=0x01(开)。 - 温度読み取りリクエスト:
TPCI=0x40(读),APCI=0x00(无データ)。
6. 通信服务
(1) ポーリング(Polling)
- 主デバイス主动向从デバイスリクエストデータ(如查询センサーはステータス)。
- 报文サンプル:
控制字段=0xBC,目标アドレス=センサーは物理アドレス,APCI=读リクエスト。
(2) Confirm(Acknowledge)
- 受信方需回复確認フレーム(ACK)以确保可靠性。
- example:デバイス收到控制指令后戻る
ACKmessage(0xB0)。
(3) 重试机制
- 若未收到ACK,送信方在指定タイムアウト后重传报文(通常最多3次)。
7. セキュリティ机制
- 传统モード:无加密,依赖物理層はセキュリティ(如バスアクセス控制)。
- KNX Secure:新增データ加密(AES-128)和身份验证,防止篡改与窃听。
- セキュリティ报文サンプル:在標準フレーム基础上增加加密負荷和MAC(メッセージ认证码)。
8. 实际デバッグ建议
- 抓包工具:使用Wireshark + KNX插件 分析バストラフィック,过滤特定组アドレス。
- エラートラブルシューティング:
- チェックサムエラー:チェック报文异或结果。
- アドレス冲突:确保物理アドレス和组アドレス唯一。
- ETS設定:在ETS工程中绑定DPTType,避免データの解析エラー。
KNX协议中,报文タイプ主要経由控制字段和TPCI(Transport Control Information)区分,不同报文タイプ適用される不同场景(如控制指令、データリクエスト、レスポンス等)。以下是常见KNX报文タイプ的详细説明及サンプル:
1. 標準フレーム(L_Data Standard)
- 控制字段:
0xBC - データ長さ:≤ 15バイト
- 適用可能なシーン:常规控制指令(switch、百分比、ステータス読み取り等)。
example:スイッチ制御
BC 11 0A E1 03 01 01 80
- 控制字段
0xBC:標準フレーム,正常优先级。 - 源アドレス
0x110A(1.1.10)。 - 目标アドレス
0xE103(组アドレス1/2/3)。 - data
0x01:开关ステータス(开)。 - checksum
0x80:异或計算结果。
2. 扩展フレーム(L_Data Extended)
- 控制字段:
0xBF - データ長さ:≤ 255バイト
- 適用可能なシーン:大データ传输(如ストリング·ストリング、日志、复杂設定)。
example:送信ストリング·ストリング信息
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:14Bytesのデータ。 - data
0x10 4B 4E 58 20 54 65 73 74 00 00 00: - DPT 16.001(ストリング·ストリング),内容为
"KNX Test"(ASCIICoding)。 - checksum
0x5C:計算略。
3. 確認フレーム(ACK/NACK)
- 控制字段:
0xB0(ACK)或0xB1(NACK) - 構造:无データ部分,仅控制字段和チェック和。
- 適用可能なシーン:受信方回复確認或拒绝。
example:ACKConfirm
B0 00 00 00 00 00 00 B0
- 控制字段
0xB0:確認フレーム(ACK)。 - checksum
0xB0:仅自身异或结果为0xB0。
4. ポーリングリクエスト(Polling Request)
- 控制字段:
0xBC(標準フレーム) - TPCI:
0x40(读リクエスト) - 適用可能なシーン:主デバイス主动リクエスト从設備のデータ。
example:読み取り温度センサーデータ
BC 00 01 12 34 01 40 00 2D
- 源アドレス
0x0001(中控デバイス0.0.1)。 - 目标アドレス
0x1234(センサーは物理アドレス1.2.52)。 - データ長さ
0x01:1Bytesのデータ。 - TPCI+APCI
0x40:读リクエスト(无データ負荷)。 - checksum
0x2D:計算略。
5. レスポンスフレーム(Response)
- TPCI:
0x80(写レスポンス)或0xC0(读レスポンス) - 適用可能なシーン:デバイス回复リクエスト的データ或ステータス。
example:温度センサー戻るデータ
BC 12 34 00 01 02 06 00 5C
- 源アドレス
0x1234(センサーはアドレス1.2.52)。 - 目标アドレス
0x0001(中控デバイス0.0.1)。 - データ長さ
0x02:2Bytesのデータ。 - data
0x0600:温度值(DPT 9.001,24.0°C)。 - checksum
0x5C:計算略。
6. 广播フレーム(Broadcast)
- 目标アドレス:
0x0000(全零アドレス) - 適用可能なシーン:デバイス向バスすべての节点送信全局指令(如系统复位)。
example:全局复位指令
BC 00 01 00 00 01 FF 01
- 源アドレス
0x0001(中控デバイス)。 - 目标アドレス
0x0000:放送アドレス。 - data
0xFF:复位指令(自定义编码)。
7. セキュリティ报文(KNX Secure)
- 控制字段:
0xBC或0xBF(结合加密标志) - 構造:在標準フレーム基础上增加加密負荷和MAC(メッセージ认证码)。
- 適用可能なシーン:防止データ篡改或窃听。
example(简化的加密报文)
BC 11 0A E1 03 10 01 80 [加密負荷] [MAC] 2A
- データ部分:明文データ
0x01被加密为更长バイト。 - MAC:用于データの検証完全性(如AES-128計算)。
关键对比表
| message type | 控制字段 | データ長さ | TPCI | 典型场景 |
|---|---|---|---|---|
| 標準フレーム | 0xBC | ≤15バイト | 0x00 | スイッチ制御、百分比调节 |
| 扩展フレーム | 0xBF | ≤255バイト | 0x00 | 长文本、复杂設定 |
| ACKConfirm | 0xB0 | 无 | - | 受信成功レスポンス |
| NACK拒绝 | 0xB1 | 无 | - | 受信失敗レスポンス |
| 读リクエスト | 0xBC | 1バイト | 0x40 | 主动リクエストセンサーはデータ |
| 写レスポンス | 0xBC | 可变 | 0x80 | デバイスステータス更新確認 |
| 广播フレーム | 0xBC | 可变 | 0x00 | 系统级指令(如复位) |
Precautions
- TPCI与APCI:
- TPCI(传输控制)标记报文タイプ(读、写、Response)。
- APCI(应用控制)定义具体操作(如DPTType)。
- アドレス过滤:デバイス仅処理目标アドレスマッチング的报文(物理アドレス或订阅的组アドレス)。
- checksum:始终为前面すべてのバイト的异或(XOR)值。
希望这些サンプル能帮助你理解KNX不同报文タイプ的写法!实际开发中建议结合官方プロトコルのドキュメント和ETS工具验证。
以下サンプル説明:
example1:スイッチ制御(標準フレーム)
Scenarios:物理アドレス 1.1.10 的デバイス向组アドレス 1/2/3 送信开灯指令。
message:
BC 11 0A E1 03 01 01 80
- 控制字段
0xBC:標準フレーム,正常优先级。 - 源アドレス
0x110A:Device address1.1.10。 - 目标アドレス
0xE103:组アドレス1/2/3(E1表示组アドレスタイプ)。 - データ長さ
0x01:1Bytesのデータ。 - data
0x01:开关ステータス(0x01=开,0x00=关)。 - checksum
0x80:BC XOR 11 XOR 0A XOR E1 XOR 03 XOR 01 XOR 01 = 80。
example2:温度センサーデータ(扩展フレーム)
Scenarios:Sensors 2.3.5 上报温度 22.5°C 到组アドレス 2/5/1。
message:
BF 23 05 E2 51 02 06 00 5C
- 控制字段
0xBF:扩展フレーム,低优先级。 - 源アドレス
0x2305:Device address2.3.5。 - 目标アドレス
0xE251:组アドレス2/5/1。 - データ長さ
0x02:2Bytesのデータ。 - data
0x0600: - DPT 9.001(temperature),编码为
0x0600→22.5°C(浮点格式)。 - checksum
0x5C:計算略。
example3:シーンコントロール(多Bytesのデータ)
Scenarios:中控デバイス 0.0.1 触发场景 3(组アドレス 5/0/3)。
message:
BC 00 01 E5 03 03 03 00 00 6F
- 控制字段
0xBC:標準フレーム。 - 源アドレス
0x0001:中控アドレス0.0.1。 - 目标アドレス
0xE503:组アドレス5/0/3。 - データ長さ
0x03:3Bytesのデータ。 - data
0x030000:场景编号3,附加参数。 - checksum
0x6F:計算略。
关键点
- アドレス编码:
- 物理アドレス:
エリア(4bit).线(4bit).device(8bit)→ 2バイト(如1.1.10→0x11 0x0A)。 - 组アドレス:
主组(5bit)/中间组(3bit)/子组(8bit)→ 2バイト(如1/2/3→0xE1 0x03,高位1110表示组アドレス)。
- データ编码:
- switch:1バイト(
0x00=关,0x01=开)。 - temperature:2バイト浮点(如 DPT 9.001)。
- 百分比:1バイト(
0x00=0%,0xFF=100%)。
- checksum:对すべての前面バイト进行异或运算(如
BC XOR 11 XOR 0A XOR E1 XOR 03 XOR 01 XOR 01 = 80)。
实际应用建议
- 使用ETS(KNX工程工具软件)設定デバイス,无需手动组包。
- 报文サンプル主要用于理解底层协议,デバッグ时可借助抓包工具(如Wireshark + KNX插件)。
- 深入学习可参照KNX官方ドキュメント《KNX Standard》或书籍《KNX for IoT》。
Leave a Reply