zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Mysql 数据库学习笔记03 存储过程
    Mysql 数据库学习笔记02 编程
    Mysql 数据库学习笔记01查询
    Struts2学习笔记04 之 拦截器
    Struts2学习笔记03 之 Result组件
    Group by与having理解
    Spring Assert断言工具类
    字符集、编码
    hibernate中Query的list和iterator区别(续)
    hibernate中Query的list和iterator区别
  • 原文地址:https://www.cnblogs.com/lingcoln/p/2694085.html
Copyright © 2011-2022 走看看