前面抓取了BACnet 的UDP和RS485数据进行分析,现在做一下总结。
BACnet不管是走UDP还是RS485,里面的NPDU和APDU数据结构是一样的,只是BACnet的头不一样,这里做一下总结。
1、UDP的BACnet 头
BACnet/IP 使用 UDP 协议进行数据传输,采用客户端-服务器通信方式,设备通常充当服务器,默认端口为 47808(0xBAC0)。BACnet/IP 数据包主要由不可变部分和可变部分组成。不可变部分由 BVLC 类型、BVLC 功能和长度组成,而可变部分则根据 BVLC 功能而变化。BACnet/IP 数据包的结构如下图所示:
基本报文类型包括Original-Unicast-NPDU(单播)、Original-Broadcast-NPDU(广播)、Forwarded-NPDU(转发),具体格式如下图所示:
Original-Unicast-NPDU(单播)
Original-Broadcast-NPDU(广播)
Forwarded-NPDU(转发)
2、RS485的BACnet 头
帧格式
例如数据(hex):55 FF 01 03 02 00 00 D7
0x55 | 0xff | 0x01 | 0x03 | 0x02 | 0x00 | 0x00 | 0xD7 | BACnet数据 | BACnet数据CRC |
帧头 | 帧类型 | 目的地址 | 源地址 | BACnet数据长度,大端 | CRC | ||||
帧类型目前定义为 0-7,8-127 为 ASHRAE 保留。帧类型 128-255 可供供应商用于非 BACnet 帧,数据的前两个字节表示供应商标识符。
当前定义的帧为
令牌 (0)、
主站轮询 (1)、
主站轮询回复 (2)、
测试请求 (3)、
测试响应 (4)、
BACnet 数据等待回复 (5)、
BACnet 数据不等待回复 (6)
回复推迟 (7)。
目标站地址可以是 0-127(用于发送到主节点)、0-254(用于发送到从属节点)和 255(用于向所有节点广播)
3、NDPU
npdu数据结构如下:
Control 字节解释
Bit | Description | If 1 | If 0 |
---|---|---|---|
7 | APDU | NPDU 传递网络层消息 | NPDU 包含 BACnet APDU |
6 | Reserved | Reserved | Reserved |
5 | Destination Specifier | 包含DNET DLEN DADR | 不包含DNET DLEN DADR |
4 | Reserved | Reserved | Reserved |
3 | Source Specifier | 包含SNET SLEN SADR | 不包含SNET SLEN SADR |
2 | Expecting reply | 等待回复 | 不用回复 |
1,0 | Priority | 11=生命安全,10=关键设备,01=紧急 00=正常 |