BACnet智能传感器的设计
2021-09-26广东工业大学游健波黄俊澄许锦标
广东工业大学 游健波 黄俊澄 许锦标
以STM32F103单片机芯片为硬件平台,研发设计一种实现BACnet/IP的智能传感器设备嵌入式模块,该模块能够在BACnet协议基础使得数字量和模拟量的智能传感器封装成BACnet标准设备,构成一个片上系统(SOC)。为完成这个目标,首先要对BACnet协议标准的对象和属性进行深入的研究,然后根据着手研究BACnet在应用层的数据信息及编码形式,然后根据相应的原理写出编码和解码函数,完成对BACnet报文解码以及响应。最后通过以太网在客户端软件与智能传感器和智能执行器设备实现BACnet通讯。
1 智能传感器综述
近年来,随着我国楼宇智能以及工业自动化的不断发展,也不断推进了我国制造业向前的步伐。而随着因特网的迅速发展,楼宇智能以及工业自动化与因特网的结合已经成为必然趋势,1999年1月,BACnet标准委员会制定了BACnet互联协议,由于该协议是基于IPv4的,所以被称为BACnet/IP协议。普通传感器作为众多工业场景的应用基础,其作用不言而喻。而普通传感器相对价格更高,功能单一,精度较低等特点,使之很难广泛应用于众多工业场合。同时,智能传感器以其成本低、易于维护、系统部署灵活等特点,令其成为自动控制领域的佼佼者,为此,智能传感器应运而生。BACnet协议作为一个全球通用的标准协议,在当今时代已经得到了广泛应用,如美国旧金山的州政府大楼,西雅图的美国英航大厦,都是BACnet技术带来的杰作。因此,设计一种基于BACnet智能传感器对于楼宇智能以及工业的发展是十分必要的。
2 智能传感器结构框图
根据BACnet智能传感器的功能,设计了智能传感器的标准模型,如图1所示。
图1 BACnet传感器设计结构框图
通信进程只接受读属性(ReadProperty)应用层服务,完成MS/TP通信协议的功能,然后发出相应响应报文,应用进程主要完成模拟量和数字量之间的转换,然后更新模拟输入(Analog Input)对象实例“Present_Value”的值;配置管理进程则主要对一些有关的参数进行设置,并在智能传感器安装时进行调试。
3 硬件设计
本文选用STM32F103ZET6芯片作为主控芯片,下载电路部分是给STM32F103ZET6芯片下载其自身运行的程序的接口,而协议栈则是通过串口下载到芯片中,芯片在通过运行自身的程序去对输入信号进行解释。以太网接口部分是通过以太网芯片和以太网RJ45接口共同组成的,W5500芯片通过这个接口实现对以太网输入端的IP数据包拆封,同时又对STM32传送来的BACnet报文进行封装,搭建的硬件电路图如图2所示。
图2 硬件系统示意图
4 BACnet报文解析
要完成对BACnet设备的设计,首先要理解并读懂报文协议的内容,然后解析报文,这时候我们可利用BACnet协议的可视化工具—VTS软件。根据BACnet智能传感器(B-SS)支持的BIBBs,向IP地址为192.168.113.255的BACnet设备发送一个ReadProperty请求,具体的报文如图3所示。
图3 BACnet报文分析
红框中的一串数字就是向BACnet设备发送的一段报文,提取出来后得到:“C0A871FFBAC0 810A0011 01040003A10C 0C038000 001955”,接下来我们则对报文逐个解析。
(1)“C0 A8 71 FF BA C0”这是报文的头部,转化为十进制则可得到Local Broadcast,即目的地址192.168.113.255,UDP端口号为47808;
(2)“81 0A 00 11”这是BACnet虚拟链路层信息,类型为BACnet/IP,其中把0A简单地转换为十进制后可知道,这是表示BVLL协议中的第十种功能Original-Unicast-To-Network,11转化为十进制的17,表示报文的长度为17字节,即“81 0A 00 11 01 04 00 03 A1 0C 0C 03 80 00 00 19 55”的长度。
(3)“01 04”这是网络层内容,表示BACnet协议执行的版本号为1,是一条BACnet协议的APDU;
(4)“00 03 A1 0C”,“00”表示这是一个没有后续分段的报文,“03”转化为二进制则为“0011”,表示最大的报文长度为480字节;“A1”则表示Invoke ID为161,代表发过来的报文标号为161,“0C”对应的十进制为12,查表可得这是一个ReadProperty请求,另外WriteProperty则是15;
(5)“0C 03 80 00 00 19 55”,这是一段请求数据,“0C”BACnet标准对象标识码的格式,后面的编码长度为4个字节,“03 80 00 00”转化为二进制为“00000011 10000000 00000000 00000000”根据BACnet协议标准规定,对象的“Object-Identifier”属性由4个字节组成,总共32位,前22位(000000 00000000 00000000)为对象实例,后10位(00000011 10)为对象类型,即该报文表示实例号(Instance)为0,对象号为14,即多态输出对象类型(Multistateoutput);“19”表示对象属性标识符的长度为1字节;“55”转换为十进制为85,表示Present属性。
本文就BACnet智能传感器的相关设计以及报文进行了研究,并对该类型传感器提出了一种设计方案。在基于STM32F103的基础上在增加了W5500以太网芯片,为BACnet智能传感器设备提供了了一种接入以太网的方法。另外,通过对复杂BACnet协议报文的具体分析,对以后BAcnet协议转其他协议以及BACnet设备的开发研究具有重要的指导意义。