BACnet基础入门

前言

由于公司一些产品需要过认证,于是涉及到了BACnet这种协议栈,网上查了下,国内涉及的资料甚少,经过一个多月的学习,也算是简简单单地入个门。在此也当作这一个月学习的经验总结。

最直白的个人理解,这个协议栈专门为安装在楼宇里的各种传感器与设备,建立一个使它们可以互相通讯与操作的统一通信标准,从而使人们方便管理。BACnet是开放协议,有开源代码,在github上。但注意的是,协议标准文档版权归ASHRAE所有,也就是说,详细标准文档需要购买,我看了下,还不便宜。-_-||



协议栈层级与拓扑结构

1.层级体系

BACnet确定为开放性计算机局域网协议,采用了精简后的OSI模型,分为了四层:物理层数据链路层网络层应用层。如下图:
简化后的体系结构层次图

2.拓扑结构

BACnet设备 + 物理介质 = 物理网段
多个物理网段 + 中继器 = 网段
多个网段 + 网桥 = 网络(每个BACnet网络形成唯一的MAC地址域)
多个不同LAN技术的网络 + BACnet路由器 = BACnet网络

如下图:
网际结构图


协议栈的相关内容

虽然协议栈看起来只有四个层级,但内容挺多挺细的,对于刚入门的来说,我个人建议关注点先集中在应用层,其比较直观,容易理解,易使用,较快可以实现自己业务。

1.应用层

先举个栗子:
在一栋楼里,有一个温度计,它符合有BACnet通讯接口,它通过RS485总线与一个BACnet控制器连接,走BACnet MS/TP进行通讯,然后该控制器通过以太网,走BACnet/IP,与其他在该局域网下的设备进行通讯。楼里的物业人员想知道该温度计的温度,就在处于同一局域网下的电脑中,打开走BACnet协议的工作站软件,从中找到对应的设备节点,获取该温度计的温度。

从BACnet协议栈的角度:
1.温度计一般扮演服务器角色,提供所需要的数据与对应服务。
2.工作站一般扮演客户机角色,向服务器发起各种服务请求。
3.控制器既可以是客户机也可以是服务器。
4.温度计与控制器的物理连接是RS485,链路层是MS/TP主从令牌传递协议。
5.控制器与操作员的电脑物理连接是以太网,链路层为LLC中类型1,无连接(UDP)。


接下来讲的a~j点的部分,都是BACnet协议对实际楼宇通讯与控制网络中的抽象描述。

a.设备

“BACnet设备”指的是支持BACnet协议进行数字通信的真实或虚拟的设备。一般情况下,
一个物理设备就是一个“BACnet”设备:如上面栗子中的温度计,控制器,专门的工作站。
一个虚拟设备模拟一个“BACnet设备”,例如之后将提到的BACnet调试工具下创建的虚拟BACnet设备。
或者也可以是一个物理设备具有多个“虚拟BACnet设备“的功能。一个BACnet网络上可理论上可存在222(超过四百万)个的设备。

“BBMD”:BACnet/IP 广播管理设备,其将由一个 BACnet/IP 设备在其子网内发送的 BACnet 广播报文直接传送给其它子网中的 BACnet/IP 设备,有些时候BBMD是集成在其他BACnet设备中。

“外部设备”:是一个在独立IP段上的设备,如果其加入当前BACnet/IP网络的IP子网,则要向BBMD请求外部设备注册,注册到BBMD的外部设备表(FDT)的一个表项中。
如下图:
BACnet网络结构拓扑图


b.对象

在BACnet中,对象就是一组数据结构,BACnet协议中存在许多标准的对象,参照协议文档,例如:“Analog Input”、“Accumulator”、“Binary Input”、“Multi-state Output”等等,目前1.0.0版本的源码提供64种的标准对象。每个BACnet设备中都具有一些(至少一个)对象,用于描述这个设备的各个功能行为,每个设备都仅允许有一个设备对象(device_object),每个对象在设备中都具有唯一的object_identifier,设备对象的object_identifier由一个网络号和一个MAC地址组成在系统中唯一确认。如下图:
在这里插入图片描述

在上面栗子中,温度计是个BACnet设备,其有测量环境温度的功能,获取的温度是浮点型的模拟量,所有比较适合温度计这bacnet设备的对象应该是"Analog Input",加入温度计有不同点位测量温度,也就可以包含多个该类型的对象,如"Analog Input0","Analog Input1"等等。

c.属性

属性就是对象这个数据结构里的信息,设备可以从数据结构中读取数据信息,也可以向数据结构中写入信息,这就是对对象属性的操作,从而完成设备之间信息通信的目的。比较经典的一句概况:属性的作用是参数化对象的功能并显示结果。

属性分为必需可选两种,用三个字母表示:

类型释义
O表示此属性是可选
R表示此属性是必需的且是用 BACnet 服务可读的
W表示此属性是必需的且是用 BACnet 服务可读和可写的

每个对象中都必须包含object_identifierobject_nameobject_type这三个属性。如下图:
"设备对象"的数据
在上面的栗子中,温度计的温度值如果要通过BACnet协议发送到客户端那,则其测量的值要被赋值在对应"Analog Input"标准对象的"Present_Value"属性中。
温度计设备的对象和属性

e.服务

服务就是BACnet设备之间进行信息通信的手段。在面向对象技术中,与对象相关联的是属性和方法,属性用来说明对象,而方法是外界用来访问或作用于对象的手段。在 BACnet 中,把对象的方法称为服务(Service),实现服务的做法就是在网络中的设备之间传递请求和服务应答报文。
BACnet服务请求和应答

BACnet应用层提供两种类型的服务:证实服务(confirmed “C”),非证实服务(unconfirm “U”),定义了四种服务原语:请求、指示、响应、证实。如下图:
客户端与服务端关系图


证实服务:建立在C/S通信模型的形式上。如下图:
证实报文传递图

非证实服务:不存在C/S形式,只有发送方与接收方。如下图:
非证实报文传递图

BACnet中提供超过35种的标准服务,并划分了六个类别:

  • 报警与事件服务(Alarm and Event Services)
  • 文件访问服务(File Access Services)
  • 对象访问服务(Object Access Services)
  • 远程设备管理服务(Remote Device Management Services)
  • 虚拟终端服务(Virtual Terminal Services)
  • 网络安全性(Network Security)

入门的化,一般是对象访问服务报警与事件服务
对上面的栗子中,客户机访问温度计温度,一般利用对象访问服务类别中的读服务,有时候也会用到写服务(一般用于设备报警或事件测试)。



f.扩展

如果BACnet给出标准的常用信息不满足使用者的业务,使用者也可用自己扩展所需的非标准化信息。
BACnet标准可以给生产厂商对其设备的非标准信息交换提供如下四个方面的扩展:

  • 在BACnet定义的枚举值中增加自定义的新枚举值(如一些属性、状态、事件之类的);
  • 使用PrivateTransfer服务调用自定义的新服务;
  • 在BACnet标准对象中增加自定义的新属性;
  • 自定义新的对象类型。

拿上面那个栗子说,假如这个温度计还有湿度和噪声强度检测,或者这个温度计功能多样,有行人靠近检测,还集成摄像头可以拍照录像,那单单一个"Analog Input"对象和它包含的"Present_Value"属性满足不了这个温度计的功能了,那厂商可以,在在"Analog Input"对象中在已有的属性上扩展多些符合该温度计功能的专有属性,或者额外自创个新的非标准的专有对象,再在这个专有对象里创建合适的属性,从而满足自己的需求。

g.安全

安全这部分,我还没了解清楚,暂时放着先。
BACnet中,这网络安全部分是可选的,主要是提供:供对等实体鉴别,数据源鉴别和操作员身份验证,以及保证数据机密性和完整性的安全机制
在协议中,设备实现BACnet网络安全的最低条件如下:

  • 拥有一个应用层;
  • 支持WriteProperty服务的执行;
  • 支持跟踪时间;
  • 拥有可以存储运行时间和配置数据的稳定、可重复写的存储设备。
  • 不能是一个MS/TP从机。

h.互操作基本模块(BIBBs)

BIBBs主要是一个或多个BACnet服务的集合,标准中分出好多类别,也称为互操作域

  • 数据共享BIBB:读/写服务,COV
  • 报警和事件管理BIBB:通知,确认,恢复状态
  • 日程安排BIBB:数据日程安排
  • 趋势BIBB:数据趋势
  • 设备管理BIBB:重复初始化,通信控制,时间同步,…
  • 网络管理BIBB:,连接控制(PTP),路由管理

一般设备常用的是数据共享BIBB报警和事件管理BIBB,简单地说,数据共享就是设备之间进行单向或者双向地数据传输。报警与事件管理就是设备的某些数据超过警戒值一段时间就会报警或者产生事件,然后通知到其他设备。

就上面栗子中的温度计和工作站来说,温度计需有数据共享BIBB,其中应包含执行读服务,如下图:
DS-RP-B

当如果温度超过设定的高限制值或低限制值时,则需要报警和事件管理BIBB,其包含发起警报与事件通知服务,如下图:
AE-N-I-B
对应的,工作站也需要数据共享BIBB,包含发起读服务,如下图:
DS-RP-A当温度计有警报时,需要报警和事件管理BIBB,包含执行警报与事件通知服务接收,如下图:
AE-N-A

i.一致性声明(PICS)

这个一致性声明,是由设备厂商提供的,描述该设备对BACnet有哪些支持
提供的PICS文件包含信息如下:

  • 1.生产厂商和设备的基本信息。
  • 2.设备支持的互操作基本模块(BIBB)。
  • 3.设备是否符合的“标准类型BACnet设备”。
  • 4.所以非标准应用服务是否支持设备发起该服务请求,及是否对该服务请求进行响应,或者两者都支持。
  • 5.设备支持的所有标准对象和专有对象的列表。
  • 6.对于每个支持的对象,得指明如下信息:支持可选属性、可使用BACnet服务进行写操作的属性、可使用BACnet服务动态创建或删除的对象、属性数据取值范围。
  • 7.支持的链路层选项,包括真实和虚拟链路层
  • 8.是否支持分段请求。
  • 9.是否支持分段响应。

j.其他

BACnet这个协议栈应用层除了上述说的,还有包含非常多的其他要点,我讲的也只是冰山一角,具体的其他内容,还得去参考协议文档。
比如数据是如何填装的,流向的,这涉及到PDU这个名词,每层处理不同的PDU,如应用层就涉及APDU这种数据包,还有整体的数据流向图:
在这里插入图片描述


功能上比如报警和事件通知的产生机制,一般涉及到"内部报告",和"算法变化报告"两种机制。还有发布/订阅COV的功能,等等。



2.网络层

暂时未深入了解,之后再完善。

3.数据链路与物理层

BACnet数据链路选择
从最上面的层次图可看出,底层可以有5种方式进行通讯,如要上手,首选是BACnet/IP。
设备只要处于同一个局域网下,就可以调试与测试设备的BACnet相关功能了。

其他的,我也了解不多,一般简单的传感器适合采用MS/TP(从设备)方式,物理层上就是熟悉的RS485了。



工具

免费的上位机工具,一般网上搜的到的:
Yabe: 链接

VTS:链接

Wireshark:链接

simulator:链接(这个是要收费的,但有30天试用,够学习用了)



源码

源码,github上有,不能科学上网的伙伴,就下我的,我的是1.0.0版本
bacnet-stack-1.0.0



参考

我们有个国标也详细描述了需要用到的BACnet通信协议,值得参考。
链接

入门讲义:
简单的BACnet讲义

各位大神,创作不易,如需使用,注明出处~

  • 15
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值