BACnet基础入门

article/2025/11/1 9:47:44

BACnet入门:一、简单了解

  • 前言
  • 协议栈层级与拓扑结构
    • 1.层级体系
    • 2.拓扑结构
  • 协议栈的相关内容
    • 1.应用层
      • a.设备
      • b.对象
      • c.属性
      • e.服务
      • f.扩展
      • g.安全
      • h.互操作基本模块(BIBBs)
      • i.一致性声明(PICS)
      • j.其他
    • 2.网络层
    • 3.数据链路与物理层
  • 工具
  • 源码
  • 参考

前言

由于公司一些产品需要过认证,于是涉及到了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讲义

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


http://chatgpt.dhexx.cn/article/QK2beTxl.shtml

相关文章

BACnet协议介绍

BACnet为BuildingAutomation andControlnetworks的简称,台湾通常翻译为“建筑自动化控制网路通讯协定”,而中国大陆则译为“楼宇自动化与控制网络”。 前言 BACnet是用于智能建筑的通信协议,是国际标准化组织(ISO)、美…

认识BACnet协议

一、什么是BACnet? BACnet,Building Automation and Control networks的简称,即楼宇自动化与控制网络。是用于智能建筑的通信协议。 一般楼宇自控设备从功能上讲分为两部分:一部分专门处理设备的控制功能;另一部分专…

【块存储block源码分析】 linux内核模块ceph nbd源码分析

jewel 版本支持 rbd-nbd 的特性,需要 map 支持较多特性的 rbd image 时,可以使用该 nbd driver NBD(Network Block Device) 可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。NBD是一个内核模块,…

用户增长 - BG/NBD概率模型预测用户生命周期LTV(二)

文章目录 1 理论1.1 BG / NBD概率模型介绍1.2 Gamma-Gamma模型2 实践案例2.1 lifetimes实践案例一:在线零售业务的交易2.1.1 数据解读2.1.2 BG / NBD - 预期交易的frequency /recency 热力图2.1.3 顾客留存概率热力图2.1.4 评估模型效果方式一:模型验证重…

使用BG/NBD模型与Gamma-Gamma模型预测客户的生命周期价值CLV/LTV

1. 背景 客户生命周期价值CLV: CLV是Customer Lifetime Value的简称,用来衡量一个客户(用户)在一段时期内对企业有多大价值,也称为LTV。 假如一个客户两年内在某商店内消费2000元,这2000元就是CLV,具有预测性。 CLV…

nbd 相关概念及操作

周五(3月6号)笔者发现有台物理机上挂载了一个并非常用的nbd设备,估计是之前人做的测试留下来的,决定卸载它,顺带了解了下nbd的设备信息。 什么是nbd 全称是network block device,类似于nfs,远程设备可以挂载&#xff…

qemu-nbd挂载虚拟机镜像文件系统

qemu-nbd挂载虚拟机镜像文件系统 基本原理操作步骤1.加载NBD驱动2. 连接 qemu-nbd3.挂载4.解挂 虚机文件系统为LVM实例1.加载驱动2.连接qemu-nbd3.挂载lvm分区4.卸载盘符 虚机文件系统为非LVM虚机文件系统为NTFS 基本原理 nbd(网络块设备: Network Block Device&am…

linux qemu-nbd介绍

1. 介绍 NBD(Network Block Device),即网络块设备。可以将一个远程主机的磁盘空间,当作一个块设备来使用。就像一块硬盘一样使用它,你可以很方便的将另一台服务器的硬盘空间,增加到本地服务器上。NBD与NFS有所不同&am…

centos7 nbd 挂在qcow2或qcow,raw,虚机镜像,virsh,virt,使用qemu-nbd挂载qcow2镜像文件

基本原理 nbd(网络块设备: Network Block Device),利用qemu-nbd将qemu虚拟机镜像挂载到Linux上。   展开来讲,nbd可以将一个远程主机的磁盘空间,当作一个块设备来使用,就像一块硬盘一样。使用它,你可以很…

linux nbd模块,Centos7.3 安装编译nbd模块-Go语言中文社区

未安装nbd模块 [zhaojqlocalhost ~]$modprobe nbd modprobe: FATAL: Module nbd not found. 查看linux版本 [zhaojqlocalhost ~]$cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [zhaojqlocalhost ~]$uname -r 3.10.0-514.26.2.el7.x86_64 安装 [rootlocalhost…

linux nbd模块,Centos7.3 安装编译nbd模块

未安装nbd模块 [[email protected] ~]$ modprobe nbd modprobe: FATAL: Module nbd not found. [[email protected] ~]$ cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) [[email protected] ~]$ uname -r 3.10.0-514.26.2.el7.x86_64 安装 [[email protected] …

NBD(Network Block Device)简介及基本使用

NBD指的是Network Block Device,正如其名字的意思,NBD让用户可以通过网络访问到某个块设备,或者设备镜像。 你可能会想NFS(Network File System)不是已经可以实现通过网络挂载各种文件系统并进行访问了吗,…

微信开放平台开发者认证

1.邮箱注册,激活账号 2.企业认证 3.登陆微信开放平台,进行开发者认证 4.填写认证信息 5.发票选择,可以选择不开发票 6. 支付费用300 备注:如有疑问,请联系作者!

微信开放平台开发(3) 移动应用微信登录

在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现移动应用微信登录的功能。 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号&#x…

微信开放平台之第三方平台开发,模板小程序如何提交?

大家好,我是悟空码字 12月25日,天气晴朗,阳光普照,今天是圣诞节。因为疫情影响,小羊人的增多,街上放眼望去,人烟稀少。楼下除了几个十一二岁的小男孩在玩耍,也没有像往日老人悠闲打…

微信开放平台第三方开发,注册试用小程序,一整套流程

大家好,我是小悟 对服务商来说,试用小程序的好处不言而喻,主打一个先创建后认证的流程。只需要提供小程序名称和openid便可快速注册一个试用小程序,在认证之前,有效期14天,大致流程如下。 注册试用小程序 …

微信开放平台开发第三方授权登陆(五):微信小程序

微信开放平台开发系列文章: 微信开放平台开发第三方授权登陆(一):开发前期准备 微信开放平台开发第三方授权登陆(二):PC网页端 微信开放平台开发第三方授权登陆(三)&a…

微信开放平台开发-授权、全网发布(PHP)

这两天做了微信开发平台的开发,梳理下。。。 先看看授权的流程: 第一步:接收component_verify_ticket: 1、微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,拿到后需要在本地做好存储&…

微信开放平台开发——网页微信扫码登录(OAuth2.0)

转自 http://www.cnblogs.com/0201zcr/p/5133062.html 1、OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表)&am…

微信开放平台-第三方平台开发配置及常见的问题

目录 概述 参考文档 开源项目&工具 第三方平台设置 问题及解决方法 概述 本实例:第三方平台微信公众号(服务号) 微信开放平台-第三方平台,为广大公众号和小程序提供运营服务和行业解决方案。分两种类型,定制…