• 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

  • 相关阅读:
    java学习--工具类学习之Arrays(1)
    509. 斐波那契数
    572. 另一个树的子树
    cmd中的标准文件重定向
    ng正则使用(持续更新)
    MySQL基准测试
    mysql_connect 弃用之后使用mysqli替换需要注意事项
    数据迁移到rds时候犯下的低级错误
    MySQL 架构与历史
    mysql中涉及到钱的字段如何设计
  • 原文地址:https://www.cnblogs.com/lingcoln/p/2694085.html
Copyright © 2020-2023  润新知