BACNET协议详细分析(三)——WHO IS & I AM指令

下文开始具体分析BACNET协议中几种基本的指令结构,本篇是分析最基本的WHO IS指令。WHO IS指令是BACNET主机向BACNET设备询问基本信息的指令。

由于BACNET/IP协议是封装在UDP协议当中,因此整个数据包的从低层到高层的结构如下图所示:

在经过以太网帧、IP帧、UDP帧后,就是BACNET的数据帧。

BACNET数据帧又分为BACNET Virtual Link Control(BACNET虚拟链接控制层)、Network Protocol Data Unit ( 网络协议数据单元 )、Application Protocol Data Unit(应用协议数据单元 )。

BVLC是说明BACNET协议的类型、指令、以及BVLC自身的长度,总长度为4字节。

NPDU是说明版本及一些相关的控制信息,如下图示:

APDU是说明用户的指令信息。

以下解析一下who is 指令的数据包结构,一些关于各个控制字节的详细说明需要大家参考BACNET的官方说明书,因此一个控制字节往往是8个位都有意义,在博文中解析起来相当难,大家原谅哈。

who is数据包(只含BACNET协议,UDP协议已去除)

-----BVLC-------

81  代表BACNET/IP

0B  广播

00  包长度

0C

----NPDU------

01  协议版本号

20  控制信息

FF  目的网络地址

FF

00  目的MAC层地址长度

FF  包长度

-----APDU-----

10  APDU类型:不确认应答(unconfirmed REQ)

08  who is指令

与who is对应的i am指令数据包:

-----BVLC-------

81  代表BACNET/IP

0A  单播

00  包长度

0C

----NPDU------

01  协议版本号

00  控制信息

-----APDU-----

10  APDU类型:不确认应答(unconfirmed REQ)

00  i am指令

C4  APPLICATION TAG(这个标识会留在以后的章节讲,连BACNET协议的起草人都在博客中说APPLICATION TAG和CONTEXT TAG是整个协议最难以明白的部分) 

02  以下4字节为对象类型以及其ID号,在这里的对象类型为“设备(DEVICE)",ID号(INSTANCE NUMBER)是各设备独有的ID号

00

01

C8

22  APPLICATION TAG

04  最大可接收的数据长度

00

91  APPLICATION TAG

00  是否支持数据分段

21  APPLICATION TAG

7B  生产商ID

原文地址:https://www.cnblogs.com/lingcoln/p/2694085.html