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)的一个表项中。
如下图:

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应用层提供两种类型的服务:证实服务(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,其中应包含执行读服务,如下图:

当如果温度超过设定的高限制值或低限制值时,则需要报警和事件管理BIBB,其包含发起警报与事件通知服务,如下图:

对应的,工作站也需要数据共享BIBB,包含发起读服务,如下图:
当温度计有警报时,需要报警和事件管理BIBB,包含执行警报与事件通知服务接收,如下图:

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.数据链路与物理层


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

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

工具

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

VTS:链接

Wireshark:链接

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

源码

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

参考

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

入门讲义:
简单的BACnet讲义

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

BACnet基础入门相关推荐

  1. 用python循环语句求素数_Python基础入门_3条件语句和迭代循环

    Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...

  2. MAYA 2022基础入门学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...

  3. Blender 3.0基础入门学习教程 Introduction to Blender 3.0

    成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...

  4. 三维地形制作软件 World Machine 基础入门学习教程

    <World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...

  5. SketchUp Pro 2021基础入门学习视频教程

    SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语+中文字幕( ...

  6. Maya基础入门学习教程

    Maya基础入门学习教程 视频:.MKV, 1280x720, 共57节课 时长 4小时25分钟,3GB 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 指导老师:Shane Whitt ...

  7. Maya2022基础入门学习教程

    Maya2022基础入门学习教程 Maya 2022 Essential Training Maya2022基础入门学习教程 Maya 2022 Essential Training MP4 |视频: ...

  8. Blender基础入门学习教程 Learning Blender from Scratch

    Blender基础入门学习教程 Learning Blender from Scratch 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+ ...

  9. json vue 对象转数组_vue 基础入门(一)修改

    vue基础入门(一) 1. 什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标 ...

最新文章

  1. 大数据、智慧城市成生态贵州新名片
  2. 钢铁平面焊接缺陷检测,有方案、有代码
  3. Zabbix2.4安装和问题总结(一)
  4. 领扣(LeetCode)最长公共前缀 个人题解
  5. Java反射基础:获取Class对象的三种方式
  6. mysql 根据地图 坐标 查询 周边景区、酒店
  7. 华为ipop使用教程_华为ipop下载|
  8. 使用RIP协议处理不连续的子网和VLSM(一)
  9. mysql dba系统学习(8)查询日志文件功能
  10. python 在线培训费用-python培训班费用
  11. 模拟京东登陆 java_java-爬虫部分:关于京东模拟登陆的两种实现 | 学步园
  12. 算法中的最优化方法_学习目录
  13. moodle基本配置
  14. SQLServer实现快速进行简繁体的翻译功能
  15. 中国少数民族语言和文字
  16. android启动页广告图,一张图搞定APP启动页广告
  17. 查看电脑ip地址是否被占用
  18. oracle中的dual详解
  19. 1688商品详情接口
  20. jacob 字体设置

热门文章

  1. 一见倾心,6个高质量Windows软件,免费、无广告
  2. 弘辽科技:淘宝启动中小型商家普惠计划
  3. 怎样搜索计算机中docx格式的文件,教您电脑docx文件怎样打开呢?教你正确打开docx文件...
  4. CIS【CMOS Image Sensor】是什么?
  5. win8,win10简捷快速重装系统
  6. 电话手表声学性能测试
  7. Vicor PI3741 DC-DC电源转换模块让旅行电动自行车行更远
  8. 基于SSH开发物业管理信息系统
  9. proe 5.0的秘密
  10. 危机边缘-迷离档案第一季~第五季