极物科技 | KNX协议 - CEMI报文帧格式详解
前言
KNX 之所以能成为全球楼宇自动化的“通用语言”,靠的是严谨到字节级的协议设计——它既是国际标准 ISO/IEC 14543-3,也意味着任何厂商按规范实现的设备都能在同一总线上精确协作。
极物科技的研发团队对 KNX 协议栈做了深度自主研发,从 CEMI 帧解析到 KNXnet/IP 双通道实现全部内置于自研 KNX 主机,自主可控;配合鸿蒙、苹果、安卓三端原生 APP、Apple HomeKit 与小度生态接入及主机远程调试能力,这正是极物主机稳定对接全球上万种 KNX 设备的技术底气。
一句话概述:本文回答"CEMI帧每个字节是什么含义",CEMI(Common External Message Interface)是KNX报文在IP通道上传输的标准封装格式,看懂它就等于拿到了KNX报文的"解剖图"。
1. CEMI在协议栈中的位置
KNXnet/IP(隧道/组播)通道上传输的每一帧,外层是KNXnet/IP报文头,内层载荷就是CEMI帧;knxd的Socket接口吐出的同样是CEMI。可以说:CEMI = 总线L_Data帧在IP世界的化身。
KNXnet/IP帧(RoutingIndication) ┌──────────────────────────┬─────────────────────┐ │ KNXnet/IP Header (6字节) │ CEMI帧(本文主角) │ └──────────────────────────┴─────────────────────┘2. CEMI帧整体结构
┌────────┬──────────┬──────────┬──────────┬─────────────┬───────┬───────────┐ │ 消息码 │ 附加信息长度│ 附加信息区 │ 控制域1/2 │ 源地址+目的地址│ NPDU长度│ TPCI/APCI+数据│ │ 1字节 │ 1字节 │ 0~N字节 │ 2字节 │ 2+2字节 │ 1字节 │ 1~16字节 │ └────────┴──────────┴──────────┴──────────┴─────────────┴───────┴───────────┘3. 逐字段详解
3.1 消息码(Message Code)
| 值 | 含义 |
|---|---|
| 0x11 | L_Data.req(请求发送) |
| 0x2E | L_Data.con(发送确认,含成功/失败状态) |
| 0x29 | L_Data.ind(接收指示,总线收到帧时上报) |
3.2 附加信息区(Additional Information)
常见于隧道与路由通道,用于携带占用通道、射频中继等信息。组播路由帧附加信息长度为0;隧道帧常见4字节附加信息(L_Data.con使用)。
3.3 控制域(Control Field 1 / 2)
控制域1(如0xBC/0xB4)承载帧类型、重复标志、优先级(低优先级为主)、广播标志等;控制域2(如0xE0)承载目的地址类型(0x80=组地址)与跳数计数。
3.4 源地址与目的地址
均为2字节大端。源地址是个体地址(如1.1.0),目的地址通常是组地址(如0/0/37):
高字节 00 25 → 组地址 0/0/37 高字节 09 01 → 组地址 1/1/13.5 NPDU长度与TPCI/APCI
NPDU长度为0表示无数据或仅6bit以内数据(1bit开关等);TPCI 2bit+APCI 8bit共同组成指令字段,APCI高6位是操作码、低2位与后续数据字节拼装数值:
| TPCI/APCI字节 | 指令 |
|---|---|
| 0x00 | GroupValueRead(读请求) |
| 0x40 | GroupValueResponse(读响应) |
| 0x80 | GroupValueWrite,低2bit=值(1bit开关) |
4. L_Data帧逐字节示例
4.1 1bit开关写入帧(开灯)
11 00 B4 E0 11 00 00 25 00 81 │ │ │ │ └┬┘ └┬┘ │ └┬┘ │ │ │ │ 源地址 目的 │ APCI=0x80写 │ │ │ │ 1.1.0 0/0/37│ 低2bit=01 → 开 │ │ │ └ 控制域2(组地址) │ │ └ 控制域1 │ └ 附加信息长度=0 └ 消息码 L_Data.req NPDU长度=00:数据不足1字节,值直接放在APCI字节低2位4.2 1byte百分比写入帧(窗帘行程50%)
11 00 B4 E0 11 00 00 25 01 80 32 └─ 数据 0x32 = 50(%)对比可见:NPDU长度变为1,数据跟随在APCI字节之后。
4.3 读请求帧(状态查询)
11 00 B4 E0 11 00 00 25 00 00 └─ APCI=0x00 读,无数据5. 代码级解析片段
极物主机收发层解析CEMI的核心逻辑(脱敏示意):
typedefstruct{uint8_tmsg_code;/* 0x11 req / 0x29 ind */uint8_tctrl1,ctrl2;uint16_tsrc_ia;/* 源个体地址 */uint16_tdst_ga;/* 目的组地址 */uint8_tnpdu_len;uint8_tapci;/* 低2bit与首数据字节拼接 */uint8_tdata[16];}cemi_frame_t;intcemi_parse(constuint8_t*buf,intlen,cemi_frame_t*out){constuint8_t*p=buf+1+buf[1];/* 跳过消息码+附加信息 */out->ctrl1=*p++;out->ctrl2=*p++;out->src_ia=(p[0]<<8)|p[1];p+=2;out->dst_ga=(p[0]<<8)|p[1];p+=2;out->npdu_len=*p++;out->apci=(*p)&0x03?(*p&0xC0):(*p&0xC0);/* 取APCI高2位 *//* 1bit值在apci字节低2位;多字节数据从下一字节起 */...}6. 解析实战建议
- 先看第1字节:0x11是本机发出、0x29是总线收到,方向立判;
- 再看目的地址:换算成三级组地址后,直接对照ETS工程核查;
- 最后看APCI与数据:0x80/0x00/0x40三类指令覆盖90%日常报文;
- 配合Wireshark的KNXnet/IP解析器,可自动完成上述拆解(见系列第44篇)。
7. 相关文档
- 《极物科技 | KNXnet/IP - 报文结构逐字节解析》
- 《极物科技 | KNX协议 - APCI指令与数据点类型解析》
- 《极物科技 | knxd - Wireshark抓包与总线监控》
- 《极物科技 | KNX协议栈 - 系统架构与分层设计》
关于极物科技(ZEEWO)
极物科技(Zeewo)致力于为用户提供智能控制系统及硬件产品。我们以总线系统为技术底座,以**“稳定、可靠、快速响应”**为产品底线,是国内少有的拥有 KNX、DALI 全套软硬件自主研发能力的厂商之一。
我们的核心能力:
- 系统架构:自研极物 OS,支持多协议无界融合(KNX/DALI/CAN/RS485/IP)。
- 核心硬件:带双路 DALI 的 KNX 主机、超薄全金属定制面板、各类智选传感器及网关。
- 生态互联:深度融入 Apple HomeKit、Matter、小度、HomeAssistant 及纯血鸿蒙生态。
- 调试交付:独家支持 ETS 导出 XML 直接导入进行 APP 免编程调试,支持远程 WEB 运维。
我们的市场覆盖:
服务网点已覆盖全国核心城市(含长三角、珠三角、成渝等),并以高品质的方案深耕家居生活、酒店民宿、企业办公、疗愈康养、餐馆会所等多个细分领域。
(如果您在开发或落地中遇到技术问题,欢迎通过官网或后台私信与我交流探讨)