整理总结BACnet协议(全网缝合版)

一、引言

声明:本文是基于RTT移植协议过程中,搜集资料整理而来,大多在协议代码中得到验证,不保证完全正确,后续计划会编写一个RTT移植的文章来进一步分享如何应用小资源平台。

因参考文章太多,在此不一一列举了,如有侵权,联系删除,深表歉意!

楼宇自动控制网络数据通信协议BACnet(A Data Communication Protocol for Building Automation and Control Network)由美国供热、制冷与空调工程师协会组织的标准项目委员会135P于1995年6月正式通过制定。标准编号为ANSI/ASHRAE Standard l35-1995,同年12月正式成为美国国家标准,并得到欧盟标准委员会的承认,成为欧盟标准草案。2000年1月ISO组织TC205委员会的15个国家(中国、法国、日本、英国、美国等)的代表一致通过决议,将BACnet作为“委员会草案”进行广泛评议,适当修改后列为“国际标准化草案”,最后成为国际标准。

一般楼宇自控设备从功能上讲分为两部分:一部分专门处理设备的控制功能,如Lonworks总线;另一部分专门处理设备的数据通信功能。而BACnet就是要建立一种统一的数据通信标准,使得设备可以互操作。BACnet协议只是规定了设备之间通信的规则,并不涉及实现细节。

BACnet规定了一种通信方式标准用于楼宇间的设备控制与通信,但其使用场景并不局限于楼宇之中,Modbus和BACnet协议都是当今流行的工业控制和自动化协议之一,都极大地改善了工业控制系统的运作效率,提高了系统的可靠性。

Modbus与BACnet协议特性比较:

  1. Modbus协议使用简单的请求-响应模式,支持多种类型的设备,实现成本低,但不支持安全性和多点通信,数据传输速率也较慢。
  2. BACnet协议支持多种协议,支持安全性和多点通信,数据传输速率较快,但实现成本较高,且性能受网络延迟和丢包影响较大。

BACnet协议标准具有如下基本特点:

  1. 专用于楼宇自控网络,具有高效的特点。BACnet是专门为楼宇自控网络定制的标准,定义了许多楼宇自控系统所特有的特性和功能。与其他标准相比,BACnet具有高效的优点。
  2. 完全开放,技术先进。BACnet标准是由非盈利学会制定的标准,具有完全的开放性和广泛的参与性,从而使BACnet可以博采众长,不断注入新技术,始终代表楼宇自控领域的最高技术水平。
  3. 具有良好的互连特性和扩展性。BACnet虽然从体系结构上定义了不同的局域网络,但BACnet可以扩展到其他任意通信网络。例如,BACnet/IP标准可以实现与Internet的无缝互连。
  4. 具有良好的伸缩性。BACnet没有限制BACnet系统中设备节点的数量,BACnet集成系统可以由几个设备节点构成一个极小的自控系统,也可以形成一个规模极大的超级大系统。如美国GAS集成的GEMnet系统,该系统具有11个楼宇自控系统,集成总建筑面积达180万平方米,横跨3个州。
  5. 应用领域不断扩展。BACnet最初仅用于暖通空调设备系统。由于BACnet具有良好的互连性和互操作性及扩展性,在开放模式环境下,该标准的应用领域不断扩展。目前该标准已广泛应用于楼宇设备的各个领域,如给排水系统、照明系统、安保系统等。

BACnet协议在主流传输方式上有BACnet IP、BACnet MS/TP等划分,本文目前是以BACnet IP的移植与使用方法。

告读者:本文中部分内容参考整合目前国内各方零散的资料并结合笔者目前认知,尽量涵盖BACnet协议所要求的技术细节所作,其中内容未能全部得证,唯恐管中窥豹,误人子弟,望诸位犀利批判,若有疑问之处望不吝告知。

推荐参考学习资料:

BACnet网络讲义: 文件 密码:e2co

二、协议说明

1.协议层次

BACnet 标准定义了一种通过多种连线进行通信的标准方式,称为数据链路/物理层:以太网、EIA-485、EIA-232、ARCNET 和 LonTalk。 BACnet 标准还定义了使用 UDP、IP 和 HTTP(Web 服务)进行通信的标准方法。

BACnet IP则对应ISO 8802-3(以太网)部分。

(1)BACnet网络层

BACnet网络层的作用是检查网络拓扑结构,决定最佳路由,关于拓扑结构在后面的篇章中会有提到,可以参考:拓扑结构

  • 网络层提供将报文直接传送到一个远程BACnet设备、广播到一个远程BACnet网络、或者广播到所有的BACnet网络中的所有BACnet设备的能力。
  • 一个BACnet设备由一个网络号码和一个MAC地址唯一确定。

(2)BACnet应用层

BACnet应用层主要有两个功能:

  • 定义楼宇自控设备的信息模型——BACnet对象模型
  • 定义面向应用的通信服务

应用层进程结构模型如下图:

一个应用进程包括:应用程序应用实体,应用实体位于应用层内,属于通信协议的部分,应用程序不属于协议部分。应用程序和应用实体之间通过API进行通信。

2.协议功能支持

(1)功能细节

标准BACnet协议的应用中,规定了如下细节:

  1. BACnet是无连接的,使用四种服务原语类型进行协议的实现:请求、指示、响应、证实;
  2. 将每一个参与的设备称为“对象”,“对象”下通过许多的“属性”来描述其具体细节;
  3. 数值的传递依靠“对象”中的特定“属性”,这种属性是支持读或支持读写的;
  4. “对象”具有类别之分,如:AI、AO、AV、BI、BO、BV,对象必须遵循类别对“属性”的规定;
  5. BACnet协议标准遵循ISO分层,因此支持使用不同的网络访问方法和物理介质来进行相同报文的交换,对于底层通信方式的兼容性大大提升;
  6. BACnet网络是一种局域网,协议实现应考虑远距离通信的情况,并且BACnet设备功能定义稳定,不会经常改变,例如某一控制面板不会由控制灯光系统变成控制新风系统。

原语:用来描述服务用户和服务提供者之间交互作用的、抽象的、与具体实现无关的表示方式:

  • 请求(Request)用户实体要求服务做某项工作 源(N+1)实体—>源(N)实体
  • 指示(Indication)用户实体被告知某事件发生 目的(N)实体—>目的(N+1)实体
  • 响应(Response)用户实体表示对某事件的响应 目的(N+1)实体—>目的(N)实体
  • 证实(Confirm)用户实体收到关于它的请求的答复 源(N)实体—>源(N+1)实体

(2)一致性类别与功能组

BACnet对于通信与控制的支持是非常广泛的,但是实际上并不是所有楼宇都会用到这么多的功能,因此通过对BACnet设备评测通信能力为BACnet协议定义了6个一致性类别和13个功能组。

为了帮助用户和工程人员确定不同BACnet设备之间的互操作性,协议要求厂商为每个设备提供标准格式文件以标识设备中己实现的BACnet标准的内容,即文件需包括设备符合BACnet等级的说明。这个文件就是PICS(Proto Implementation Conformance Statement),它包括:
(1)标识厂商和描述设备的基本信息;
(2)设备符合BACnet的级别;
(3)设备所支持的功能组;
(4)设备所支持的基于标准或专有的服务,设备启动或响应服务请求的能力;
(5)设备所支持的基于标准或专有的对象类型及其属性描述;
(6)设备支持的数据链路技术;
(7)设备支持的分段请求和响应。

一致性类别

一致性类别分为1-6级,最低级别的是一致性类别1,一致性类别要求设备应该实现的最小服务子集,且包含有比它低一级别的所有服务。以下为一致性类别由1-6分别支持的服务:

  1. 只需要具备设备对象(Device Object)并且能够及时回复读属性服务请求。
  2. 增加能够响应写属性服务请求。
  3. 增加启动I-Am和I-Have服务请求,响应读写多个属性、Who-Has和Who-Is服务请求。
  4. 增加启动添加列表元素、删除列表元素、读属性、读多个属性、写属性和写多个属性服务请求,响应添加列表元素和删除列表元素服务请求。
  5. 增加启动Who-Has和Who-Is服务请求,响应串讲对象、删除对象、和条件读属性服务请求。
  6. 要求设备能够执行全部32个服务类型中的21个,其中有20个必须是该设备能够启动的服务,有17个事设备能够响应的服务。

其上自一致性类别3可以发现要求实现的功能主要为响应对端的请求,自一致性类别3以上便是增加了主动请求的操作。而这与BACnet的主从设备功能相契合。

功能组

功能组规定了为实现特定的楼宇自动控制功能需要的对象与服务的组合,是BACnet协议与现有计算机技术结合而出的便于设备管理以及场景化定制的功能分类,在查阅相关资料时对功能组具体分类没有完全的统一,以下取自于BACnet网络讲义中对功能组的分类。

  1. 时钟功能组:用于处理与日期和时间相关的操作和数据传输。

时钟功能组常常负责以下任务:

  1. 时间同步:时钟功能组可以用于将设备的内部时钟与网络的标准时间同步,确保各个设备在同一时间基准上运行。
  2. 定时任务:时钟功能组可用于设定定时任务,例如定时触发控制操作、定时采集数据等。
  3. 时间戳记录:时钟功能组可以附加时间戳到传感器数据、报警事件等记录中,以提供准确的时间信息。
  4. 定时调度:时钟功能组可用于设定设备的定时调度,例如定时开关、定时调整参数等。
  1. 便携工作站功能组:提供方便的操作和监控功能,使用户能够随时随地使用便携工作站来访问和控制BACnet系统。

便携工作站功能组的一些常见功能:

  1. 远程监控和控制:便携工作站可以通过BACnet协议与BACnet网络中的设备进行通信,实时监控设备的状态,并对其进行控制。用户可以使用便携工作站远程打开或关闭设备,调整参数设置等。
  2. 数据采集和显示:便携工作站可以通过BACnet协议从BACnet设备中采集数据,并将其显示在用户界面上。用户可以查看设备的实时数据,如温度、湿度、压力等,并进行图表绘制和趋势分析。
  3. 报警管理:便携工作站可以接收来自BACnet系统中设备的报警信息,并在用户界面上显示。用户可以查看报警信息的详情,并采取相应的措施来处理和解决问题。
  4. 配置和调整设备参数:用户可以使用便携工作站来配置和调整BACnet设备的参数。例如,用户可以更改设备的设定温度、时间计划、运行模式等。
  5. 日志记录和分析:便携工作站可以记录BACnet系统中的事件和操作日志,并提供分析功能。用户可以查看日志记录,了解设备的历史状态和操作,以进行故障排除和优化系统性能。
  1. PC工作站功能组:PC工作站功能组的主要目标是提供强大的计算和图形处理能力,以及灵活的用户界面,使用户能够使用PC工作站来进行高级的监控、控制和管理任务。

PC工作站功能组的一些常见功能:

  1. 高级监控和控制:PC工作站可以通过BACnet协议与BACnet网络中的设备进行通信,实时监控设备的状态,并对其进行控制。相比于其他设备,PC工作站具有更大的计算能力和显示能力,可以处理更复杂的监控和控制任务。
  2. 数据分析和呈现:PC工作站可以从BACnet设备中采集大量的数据,并提供高级的数据分析和呈现功能。用户可以使用PC工作站进行数据挖掘、趋势分析、报表生成等,以便更好地理解和优化系统的性能。
  3. 可视化界面设计:PC工作站提供灵活的用户界面设计工具,用户可以根据自己的需求自定义界面布局、图形元素、报警显示等。这使得用户可以根据自己的喜好和工作流程来定制最适合自己的操作界面。
  4. 多任务处理:PC工作站具有强大的处理能力,可以同时处理多个任务。用户可以在PC工作站上同时打开多个应用程序和监控窗口,以便同时监视和控制多个设备或系统。
  5. 高级配置和编程:PC工作站可以提供高级的配置和编程功能,使用户能够更加灵活和精确地配置和控制BACnet系统。用户可以使用PC工作站进行设备参数设置、时间计划编程、逻辑控制编程等。
  1. 事件启动功能组:提供自动化的事件触发机制,以便在特定情况下采取相应的操作。

事件启动功能组的一些常见功能:

  1. 事件条件定义:通过事件启动功能组,用户可以定义触发事件的条件。这些条件可以基于各种参数,如传感器数据、设备状态、时间等。用户可以设定多个条件,并确定它们之间的逻辑关系,如与、或、非等。
  2. 事件动作配置:用户可以配置事件被触发时要执行的动作。这些动作可以包括发送警报通知、控制设备操作、记录事件日志等。用户可以根据具体需求设置多个动作,并确定它们的顺序和优先级。
  3. 事件优先级设置:事件启动功能组允许用户为不同的事件设置优先级。当多个事件条件同时满足时,系统将根据事件的优先级来确定哪个事件应该被优先触发。这有助于在复杂的场景中实现灵活的事件触发控制。
  4. 事件延时和持续时间:用户可以设定事件触发的延时和持续时间。延时表示事件条件满足后,需要等待一定时间才会触发事件。持续时间表示事件触发后,事件的执行将持续一定时间。这些设定可以根据具体需求来实现更精确的事件控制。
  1. 事件响应功能组:允许用户定义和配置事件发生时系统应采取的响应措施,以及对事件进行处理和记录。

事件响应功能组的一些常见功能:

  1. 事件分类和优先级:事件响应功能组允许用户对事件进行分类和设置优先级。通过分类和优先级的设定,可以对事件进行分级处理,并确定哪些事件应该优先处理以及采取何种措施进行响应。
  2. 报警通知和警报处理:当事件发生时,系统可以自动发送警报通知给相关人员。用户可以配置警报通知的方式,如短信、电子邮件、弹窗等。同时,系统还可以提供警报处理功能,如自动记录警报日志、生成报表等。
  3. 设备操作和控制:事件响应功能组允许用户在事件发生时对相关设备进行操作和控制。例如,当温度超过设定值时,系统可以自动调整空调设备的设置以降低温度。用户可以根据具体需求配置设备的操作和控制逻辑。
  4. 事件日志记录和分析:事件响应功能组可以记录事件的发生和处理情况,并提供事件日志记录和分析功能。用户可以查看事件日志,了解事件的发展过程和处理结果,以进行故障排除和性能分析。
  5. 自动化任务和脚本编程:通过事件响应功能组,用户可以实现自动化任务和脚本编程。用户可以编写脚本,根据事件的发生条件和类型,自动执行相应的任务和操作。
  1. COV事件启动功能组:用于启动和处理COV(Change of Value)事件的一组功能。

COV事件启动功能组的一些常见功能:

  1. COV监测对象配置:用户可以选择要监测的数据对象,并设置COV监测参数。这些参数包括监测对象的标识、监测的属性、触发COV事件的变化阈值等。
  2. COV事件触发条件设置:用户可以定义COV事件的触发条件。这些条件基于监测数据值的变化,如大于、小于、等于等条件。用户可以设置多个触发条件,并确定它们之间的逻辑关系。
  3. COV事件动作配置:用户可以配置COV事件触发时要执行的动作。这些动作可以包括发送警报通知、执行设备操作、记录事件日志等。用户可以根据具体需求设置多个动作,并确定它们的顺序和优先级。
  4. COV事件优先级设置:COV事件启动功能组允许用户为不同的COV事件设置优先级。当多个COV事件同时触发时,系统将根据事件的优先级来确定哪个事件应该被优先处理。
  5. COV事件处理和记录:当COV事件触发时,系统会自动进行事件处理和记录。这包括采取相应的动作、生成警报通知、记录事件日志等。用户可以查看COV事件的处理结果和记录,以进行故障排除和性能分析。
  1. COV事件响应功能组:用于处理和响应COV(Change of Value)事件的一组功能。

COV事件响应功能组的一些常见功能:

  1. COV事件分类和优先级:COV事件响应功能组允许用户对COV事件进行分类和设置优先级。通过分类和优先级的设定,可以对不同类型的COV事件进行分级处理,并确定哪些事件应该优先处理以及采取何种措施进行响应。
  2. 报警通知和警报处理:当COV事件发生时,系统可以自动发送报警通知给相关人员。用户可以配置报警通知的方式,如短信、电子邮件、弹窗等。同时,系统还可以提供报警处理功能,如自动记录报警日志、生成报表等。
  3. 设备操作和控制:COV事件响应功能组允许用户在COV事件发生时对相关设备进行操作和控制。例如,当温度值超过设定阈值时,系统可以自动调整空调设备的设置以降低温度。用户可以根据具体需求配置设备的操作和控制逻辑。
  4. COV事件日志记录和分析:COV事件响应功能组可以记录COV事件的发生和处理情况,并提供COV事件日志记录和分析功能。用户可以查看COV事件日志,了解事件的发展过程和处理结果,以进行故障排除和性能分析。
  5. 自动化任务和脚本编程:通过COV事件响应功能组,用户可以实现自动化任务和脚本编程。用户可以编写脚本,根据COV事件的发生条件和类型,自动执行相应的任务和操作。
  1. 文件功能组:在计算机系统中用于管理和处理文件的一组功能。文件功能组允许用户对文件进行创建、读取、写入、删除和修改等操作,以及对文件进行组织、搜索、备份和恢复等管理操作。

文件功能组的一些常见功能:

  1. 文件创建和命名:用户可以使用文件功能组创建新的文件,并为文件分配一个唯一的名称。文件名称可以根据用户的需求进行命名,以便于识别和管理。
  2. 文件读取和写入:文件功能组允许用户从文件中读取数据或向文件中写入数据。用户可以通过读取文件来获取文件中的信息,或者通过写入文件来保存数据和更改文件内容。
  3. 文件删除和修改:用户可以使用文件功能组删除不再需要的文件,或者对现有文件进行修改和更新。删除文件将释放存储空间,并从系统中删除文件的记录。
  4. 文件组织和搜索:文件功能组允许用户对文件进行组织和分类,以便于管理和查找。用户可以创建文件夹和文件目录,将相关文件组织在一起。同时,系统也提供搜索功能,可以根据文件名称、类型、大小等属性进行文件搜索和定位。
  5. 文件备份和恢复:文件功能组支持文件的备份和恢复操作。用户可以定期备份文件,以防止数据丢失和系统故障。在需要时,用户可以使用备份文件来恢复丢失或损坏的数据。
  6. 文件权限和安全性:文件功能组提供文件权限和安全性管理功能。用户可以设置文件的访问权限,以控制谁可以读取、写入或删除文件。此外,系统还可以提供加密和访问控制等安全性特性,以保护文件的机密性和完整性。
  1. 重初始化功能组:通过重新启动设备或执行特定操作来清除设备或系统的配置、状态和数据,使其回到初始设置。

重初始化功能组的一些常见功能:

  1. 设备重启:重初始化功能组允许用户通过执行设备重启操作来将设备恢复到初始状态。设备重启将关闭设备并重新启动,以清除临时数据和状态,并加载默认设置。
  2. 工厂重置:重初始化功能组提供工厂重置功能,允许用户将设备恢复到出厂设置。工厂重置将清除设备的所有配置、数据和用户自定义设置,并将其恢复为出厂默认状态。
  3. 配置恢复:重初始化功能组可以支持配置文件的恢复操作。用户可以通过配置文件的备份或导入功能,将设备的配置恢复到先前保存的状态,以实现快速的配置恢复。
  4. 系统状态清除:重初始化功能组允许用户清除系统的状态和临时数据。这包括清除系统日志、临时文件、缓存和运行时状态等,以确保系统回到初始状态。
  5. 数据擦除:如果需要,重初始化功能组可以提供数据擦除功能,以确保设备或系统中的敏感数据彻底被清除。数据擦除可以通过覆盖和清除存储介质上的数据来实现,以防止数据泄露和恢复。
  1. 虚拟操作员接口功能组:提供一个用户友好的界面,使用户能够与虚拟操作员进行交互和控制,并完成特定的任务。

虚拟操作员接口功能组的一些常见功能:

  1. 用户输入和命令解析:虚拟操作员接口功能组允许用户通过键盘、鼠标或其他输入设备向虚拟操作员提供输入。它还提供命令解析功能,将用户输入的命令解析为可执行的操作。
  2. 语音和语音识别:虚拟操作员接口功能组可以支持语音交互。用户可以使用语音命令与虚拟操作员进行交互,而无需通过键盘或鼠标输入。语音识别功能将用户的语音命令转换为可识别的文本命令。
  3. 图形用户界面(GUI):虚拟操作员接口功能组提供图形用户界面,使用户能够通过可视化的方式与虚拟操作员进行交互。GUI提供了按钮、菜单、对话框等元素,使用户能够轻松地执行操作和访问功能。
  4. 命令执行和任务管理:虚拟操作员接口功能组负责执行用户输入的命令,并管理相关的任务和操作。它将用户的命令转化为对应的操作和任务,控制虚拟操作员执行相应的动作。
  5. 响应和反馈:虚拟操作员接口功能组提供实时的响应和反馈,以向用户提供操作的执行状态和结果。它可以显示消息、状态、进度条等,以便用户了解操作的进行和完成情况。
  6. 错误处理和异常情况:虚拟操作员接口功能组负责处理错误和异常情况。它可以捕捉并处理用户输入错误、无效命令等情况,并向用户提供相应的提示和修复建议。
  1. 虚拟终端功能组:提供类似于物理终端的交互式命令行界面,并允许用户执行操作和访问系统资源。

虚拟终端功能组的一些常见功能:

  1. 命令行解析和执行:虚拟终端功能组负责解析用户输入的命令,并将其转化为可执行的操作。它可以识别命令关键字、参数和选项,并执行相应的操作。
  2. 命令历史和自动补全:虚拟终端功能组可以记录用户输入的命令历史,并提供命令历史浏览和搜索功能。同时,它还可以根据用户输入的前缀自动补全命令和参数,减少用户的输入工作量。
  3. 输出显示和格式化:虚拟终端功能组负责将命令执行结果显示给用户。它可以格式化输出,使用户能够清晰地查看结果,并提供分页、滚动和搜索等功能来处理大量输出。
  4. 用户权限和访问控制:虚拟终端功能组可以实现用户权限和访问控制。它可以对用户进行身份验证和授权,限制用户对系统资源的访问和操作。同时,它还可以记录用户的操作日志和审计信息。
  5. 会话管理和远程访问:虚拟终端功能组可以管理多个用户会话,并支持远程访问。它可以创建新的会话、切换会话、断开和重新连接会话,以满足多用户和远程访问的需求。
  6. 脚本执行和批处理:虚拟终端功能组可以执行脚本和批处理命令。用户可以编写脚本文件,包含一系列命令和操作,然后通过虚拟终端执行脚本,以自动化任务和批量处理操作。
  1. 设备通信功能组:用于实现设备之间相互通信的一组功能。

包括以下几个方面:

  1. 设备发现和识别:BACnet设备通信功能组允许设备进行自动发现和识别。设备可以通过广播等方式宣告自己的存在,并提供相关信息,使其他设备能够识别和与之通信。
  2. 数据传输和读写:BACnet设备通信功能组支持设备之间的数据传输和读写操作。设备可以通过BACnet协议进行数据的读取和写入,以实现设备之间的数据交换和共享。
  3. 报文通信和协议解析:BACnet设备通信功能组负责处理BACnet协议的报文通信和解析。它可以将BACnet报文进行封装和解析,确保设备之间的通信按照BACnet协议进行。
  4. 网络(局域网/广域网)通信:BACnet设备通信功能组支持设备通过局域网或广域网进行通信。它可以基于不同的网络协议和接口实现设备之间的通信,如以太网、RS-485等。
  5. 数据点和属性访问:BACnet设备通信功能组允许设备访问其他设备的数据点和属性。设备可以通过BACnet协议读取和写入其他设备的数据点和属性,以实现设备之间的数据交互。
  6. 事件和告警通知:BACnet设备通信功能组支持设备之间的事件和告警通知。设备可以通过BACnet协议发送事件和告警信息给其他设备,以实现设备之间的实时通知和响应。
  1. 时间主机功能组:用于同步设备之间的时间的功能。它允许一个设备作为时间主机(Time Master),向其他设备提供准确的时间信息,以保持系统中各个设备的时间同步。

时间主机功能组可以通过以下方式实现:

  1. 时间同步:时间主机可以向其他设备发送时间同步命令,确保系统中的设备使用相同的时间基准。这样可以确保在系统中进行时间相关的操作和计划时,各个设备的时间是一致的。
  2. 时间广播:时间主机可以周期性地向网络中的设备广播当前的时间信息。其他设备可以通过接收广播消息来更新自己的本地时间。
  3. 时间更新:时间主机可以向其他设备发送时间更新命令,以确保所有设备的时间保持准确。这通常在系统启动时或者网络中发生时间偏差时使用。

(3)特色功能说明

1. 数据同步-COV

COV (Change-of-Value)是客户端针对服务器中的某个对象发起订阅请求,订阅成功后,服务器端会对目标对象中相关属性进行监视,如果满足了值变化的条件,就会向客户端发布通知,通报当前值。

COV只会与对象中的表示数值的属性进行订阅其余属性的变化无法通过COV进行监测。

2. BBMD(BACnet Broadcast Management Device)

BACnet/IP使用UDP/IP在现有的IP网络中进行通信,在多个IP子网中如果需要对BACnet的广播消息进行管理的时候就需要一种特殊的BBMD设备(Broadcast Management Device)。路由器将IP网络连接在一起,以便可以将来自一个网络的消息发送到另一个网络。大多数IP路由器不转发广播消息,这意味着发现无法发现另一个网络上的设备。为了解决此问题,BACnet提供了一种称为BBMD的技术-BACnet / IP广播管理设备。

BBMD提供了bacnet设备的数据跨子网传输的能力,这要求每个子网有且只有一个BBMD服务启动,其实现原理是BBMD设备记录广播分配表,并借助路由器向子网的BBMD发送报文,最终借由子网的BBMD发送广播报文。

BACnet BBMD(BACnet Broadcast Management Device)通常是一个单独的设备,它是专门用于管理BACnet广播的设备。BBMD负责在不同的IP子网之间传递BACnet广播消息,以便实现跨子网的设备间通信。

BBMD的主要功能是维护一个BACnet广播管理表,记录各个子网上的设备信息,并将广播消息转发到相应的子网中。BBMD设备还可以处理BACnet路由功能,使得跨越多个子网的设备能够进行互联通信。

尽管BBMD是一个单独的设备,但它可以与其他功能混用,例如与路由器、交换机或网关等设备集成在一起。这样的集成可以帮助实现更复杂的网络拓扑和功能,以满足特定的需求。

需要根据具体的网络架构和需求来确定BBMD是否需要单独的设备或与其他功能混用。

3. 写入优先级

BACNet优先级数组

一些BACnet对象(例如加热阀的输出对象)有一个优先级数组,它决定一些重要功能或是紧急操作,能够支持覆盖原始自动设置的数值,其适配的应用场景包括但不限于如下:

  1. 出于特殊情况需要考虑的紧急情况
  2. 出于安全问题需要考虑的保护机制
  3. 需要用户交互的手动操作模式
  4. 自动模式中的应急程序功能

优先级的写入&释放

BACnet具有优先级数组属性的对象具有16个等级的优先级,在应用操作时具有以下特性:

  1. 读取数值总是只有一个数值,展示的是写入的最高优先级
  2. 相同优先级的数值写入会覆盖,即同一优先级只有一个有效数据
  3. 在已有高优先级的情况下写入低优先级数据,虽当前对展示结果无影响,但在高优先级释放后便会作为有效数值
  4. 优先级可以释放,届时该优先级不参与数据展示

3.报文解析

如下图2-3,BACnet数据是根据ISO模型进行逐层封装解析的:

BACnet对于信息交换的操作,被抽象为了服务原语,在具体实现上是通过包含这些原语信息的PDU去实现的,在协议中原语数据部分的具体载体便是APDU,即应用层服务载体。

在经过以太网帧、IP帧、UDP帧后,就是BACNET的数据帧。

BACNET数据帧又分为BACNET Virtual Link Control(BACNET虚拟链接控制层)、Network Protocol Data Unit ( 网络协议数据单元 )、Application Protocol Data Unit(应用协议数据单元 )。

BVLC是说明BACNET协议的类型、指令、以及BVLC自身的长度。

NPDU是说明版本及一些相关的控制信息,如下图示:

APDU是说明用户的指令信息。

格式排列如下表所示:

BACnet/IP

BACnet网络层

BACnet 应用层

BVLC Type

BVLC Function

Length

NPDU

APDU

(1)虚拟链路控制层

虚拟链路层与底层通信方式息息相关,该层设计是为了兼容适配当前甚至未来出现的硬件通信方式,BACnet历久弥新的优势在于此,借于该设计使得协议随着时代发展支持了无线以及以太网通信方式。

1. BVLC

BVLC是适配BACnet/IP的虚拟链路控制层协议,总长度为4字节,该字段数据是专为BACnet/IP设计的。

报文如下:

BVLC Type:指示BACnet类型,BACnet/IP为0x81;

BVLC Function:指定报文的类型,何种作用;

Length:指定报文的长度,包括BVLC Type、BVLC Function以及本身在内。

2. 主从令牌(MS/TP)

针对于RS485的物理特性,其通过令牌传递来控制BACnet网络中设备的发言顺序,并从中识别有效的应用层数据进行上传。

同一环网中的485设备都有唯一的MAC地址,范围0-255,其环网状态流程如下:

  1. 单设备在环网中,按照MAC顺序不断发送Poll For Master报文,用来寻找新加入的设备。
  2. 多设备在环网中,由低位MAC先发起Poll For Master报文,当高位MAC收到时便会回复Reply报文,自此形成网络,且两设备都会在一段时间后重新发送Poll For Master报文,来检测是否有新设备加入网络。
  3. 当发现新设备后,记录对方MAC,向其发送令牌(Token),设备收到令牌后便可以选择发送应用层数据或者将令牌传递到下一个设备。

报文如下:

Type:指示BACnet物理层报文类型,占用两字节长度,固定为:0x55 0xFF

报文类型:令牌(0x00)、Poll For Master(0x01)、Reply Poll For Master(0x02)

目标MAC:发送的目的MAC地址,占用1字节长度

源MAC:发送方本机的MAC地址,占用1字节长度

Length:应用层数据长度,占用2字节长度

CRC:校验位,占用1字节长度

(2)NPDU(网络层协议报文)

NPDU是BACnet协议信息的有效载体,其响应数据格式可参考:

1. 协议版本号

顾名思义,NPDU的第一个字节指代当前BACnet协议的版本

2. 协议控制信息

控制字节表示未解析部分的数据特性,包含消息网络优先级、是否包含APDU等信息,具体意义如下图2-5

3. 特殊域

该段用于消息路由情况下,找到并且识别目的地址的方式,如果控制域的目标指示器与源指示器置位,则表示该段存在。

DNET:最终目标网络号

DLEN:最终目标的MAC层地址长度,0表示对目标网络的广播

DADR:最终目标的MAC层地址

SNET:初始源网络号

SLEN:初始源的MAC层地址的长度

SADR:初始源的MAC层地址

Hop Count:递减计数器值,防止报文不被循环路由,初始为0xff,当报文通过每一个路由器时则减一,直到为0,则丢弃报文

4. 网络层报文类型

如果控制域中的标志报文类型为1,则表示次报文是一个网络层报文,该段存在,其内容表示报文携带的网络层的控制信息。

5. 专有网络层报文

如果控制域中的表示报文类型为1,并且网络层报文类型数值在0x80到0xff之间,Vendor ID字段存在,用户可以在此自定义专有的网络层报文类型。

6. NPDU报文类型

在BACnet中有10种网络层协议报文,其作用是进行BACnet路由器自动配置,路由表的维护、网络层拥塞控制。

a. Who-Is-Router-To-Network报文

格式为:网络报文类型域是X‘00’,后面有2个字节的网络号。作用是:①节点用来确定通达某目标网络的下一个路由器;②帮助路由器更新路由表。当省略2字节的网络号时,接收此报文的路由器要返回其所有可通达的目标网络的列表。

b. I-Am-Router-To_Network报文

格式为:网络报文类型域是X‘01’,后面有2个字节的网络号。作用是列出通过发送此报文的路由器可以到达的网络号。

c. I-Could-Be-Router-To-Network报文

格式为:网络报文类型域是X‘02’,后面有2个字节的网络号和1个字节的性能指标。作用是响应包含有特定网络号的Who-Is-Router-To-Network报文,由能够建立到达特定目标网络的点到点连接的半路由器使用,其网络号就是所响应的报文中包含的特定网络的网络号。性能指标表明这种连接的质量。

d. Reject-Message-To-Network报文

格式为:网络报文类型域是X‘03’,后面有1个字节的原因说明和2个字节的网络号。作用是一个拒绝报文,直接发给生成被拒绝的报文的节点,网络号就是被拒绝报文中的网络号。在拒绝原因字节中是一个无符号的整数,其值所表示的意义如下:

(0):其它差错。

(1):本路由器不能直接连接到所指示的目标网络以及不能发现任何一个能够连接到所指示的目标网络。

(2):本路由器忙,目前不能接收关于所指示目标网络的报文。

(3):这是一个不可识别的网络层报文类型。

(4):报文太长,不能路由到所指示的目标网络。

e. Router-Busy-To-Network报文

格式为:网络报文类型域是X‘04’,后面是可选择的2个字节的网络号。作用是被路由器用来通知停止接收通过本路由器向某特定目标网络或者所有网络发送的报文。此报文通常用广播MAC地址发向相应的网络。如果没有可选择的2个字节的网络号,则表示到所有网络的报文都不接收。

f. Router-Available-To-Network报文

格式为:网络报文类型域是X‘05’,后面是可选择的2个字节的网络号。作用是被路由器用来通知开始或者重新开始接收通过本路由器向某特定目标网络或者所有网络发送的报文。此报文通常用广播MAC地址发向相应的网络。如果没有可选择的2个字节的网络号,则表示到所有网络的报文都可接收。

g. Initialize-Router-Table报文

格式为:网络报文类型域是X‘06’。作用是初始化一个路由器的路由表或者查询当前路由表的内容。此报文有一个数据段,包含有初始化路由表的信息。

h. Initialize-Router-Table-Ack报文

格式为:网络报文类型域是X‘07’。作用是对初始化路由表报文的应答,表示路由器的路由表已经改变,或者已被查询。此报文的数据段具有与它应答的初始化路由表报文相同的格式。

i. Establish-Connection-To-Network报文

格式为:网络报文类型域是X‘08’, 后面有2个字节的网络号和1个字节的“中止时间值”。作用是命令一个半路由器创建一个通达指定网络的点到点连接。2个字节的网络号指出要半路由器连接的目标网络。1个字节的“中止时间值”规定了在没有NPDU到达的情况下,连接保留的时间。当此值为0时,表示连接永久保留。

j. Disconnect-Connection-To-Network报文

格式为:网络报文类型域是X‘09’, 后面有2个字节的网络号。作用是命令一个路由器释放所建立的点到点连接。

(3)APDU(应用层协议报文)

APDU由协议控制信息和用户数据两部分组成:

协议控制信息包括:APDU的类型,匹配服务请求和服务响应的信息,执行分段报文重组的信息。这些信息包含在报文的头部,是APDU的固定部分。

用户数据中包含每种服务请求和服务响应的具体信息,是APDU的可变部分。

BACnet协议定义了八种不同的PDU,用以传递原语信息。

BACnet-Confirmed-Request-PDU

BACnet-Unconfirmed-Request-PDU

BACnet-SimpleACK-PDU

BACnet-ComPlexACK-PDU

BACnet-SegmenACK-PDU

BACnet-Error-PDU

BACnet-Reject-PDU

BACnet-Abort-PDU

(4)示例

以下为网上对报文解析的示例:

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
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

三、协议应用解析

本节旨在对已预研功能进行具体化表述,所涉及内容范围相对较上一章节少,主要介绍协议最为常见且基础的功能支持,对了解BACnet数据展现形式有一个初步认知。

1.BACnet协议设备

(1)BACnet设备

bacnet设备是整个BACnet应用系统中最基础的,BACnet设备作为单一的BACnet协议类型(IP/MSTP/...)服务器,对外提供数据点数据。

目前主要的BACnet设备应用是协议转换网关,其向下通过特定协议采集数据点数值,向上以BACnet协议提供服务。最终实现BACnet组网最小节点。

目前市面产品的应用图示如下:

(2)BACnet路由器

BACnet路由器用于组成BACnet互联网,相较于BACnet设备,BACnet路由器同时支持的BACnet通信类型多,实现不同类型之间的数据透传。

BACnet路由器的通信使用网络层协议报文来维护路由表,也可选集成应用层协议功能。

目前市面产品应用图示如下:

路由表

BACnet路由器起到连接BACnet网络的作用,将每一个连接接入处称为“端口”,“端口”中记录如下信息:

  1. 端口连接网络的MAC地址
  2. 所连接网络的网络号,占用2个字节
  3. 通过此端口可到达网络的网络号列表以及相应状态
报文应用

路由器在启动时,向每个端口广播一个 I-Am-Router-To-Network 报文,其中包含有每个可通达网络的网络号。这使其它路由器可以根据报文内容建立或者更新其路由表中的条目。

在路由器接收报文时,如果流量大于它的处理速度,其缓存器可能会溢出,这将造成数据的丢失。路由器要有一种功能,当它的缓存器将要溢出时,它能够通知源设备暂停发送数据或者放慢发送的速度。在 BACnet 网络中,路由器使用 Router-Busy-To-Network 报 文和 Router-Available-To-Network 报文来实现流量控制的功能。

运行流程图

(3)BACnet点到点半路由器

连接两个BACnet网络可以通过BACnet路由器,也可以使用BACnet点到点半路由器,该种连接方式需要通过两个点到点半路由器之间构建连接才能完整的将两个BACnet网络连接。

与使用一个BACnet路由器连接相比,点到点半路由器需要在需要连接的两个网络上各有一个半路由器,最后通过半路由器的连接实现两个BACnet网络的互通。其实现的优势在于可以自由规定哪几个BACnet网络、何时开始连接、何时断开连接,可以保证网络的可调整。

点到点半路由器的连接示意如下图:

2.展现形式

(1)初识

BACnet 协议源码库提供BACnet应用层、网络层和媒体访问层通信服务。在数据管理上以设备、点(对象)、属性作为表现方式。

如3-1所示的上位机展示图,BACnet设备(Device)是工业设备在BACnet协议中区分的一套功能合集,其下可以对应多个数据点类型,也称对象,对象类型有很多,往往只需要根据实际功能需要进行配置。

每个对象具备诸多的属性,这些属性中有些是可选的,因此我们没有必要关注所有的属性,其中present-value代表对象的值,是最常用的属性。

BACnet设备对外交互的逻辑可以参考图3-2所示:

(2)对象与属性

BACnet协议中标准声明了如下18中对象类型,除此之外还可以支持由开发者自定义对象进行开发。下图是标准对象类型与说明:

在本次预研以及参考竞品功能中,最为主要且常用的对象类型有:

  1. 模拟输入(AI)
  2. 模拟输出(AO)
  3. 模拟值(AV)
  4. 数字输入(BI)
  5. 数字输出(BO)
  6. 数字值(BV)
  7. 多态输入(MSI)
  8. 多态输出(MSO)
  9. 多态值(MSV)

模拟对象类型应用模拟量的传输,在协议栈处理中中通过float类型进行识别;

数字对象类型应用于bool开关数据的传输,在协议栈处理中通过bool类型进行识别;

其中多态是一种特殊的对象类型,其可以将不同类型的数据设备统筹到一个对象类型中,多态的存在意义便是使其适配更多样的应用场景。

多态应用场景

  1. 多个设备具体有相似的属性和行为,但是其类型不同
  2. 针对于临时添加的设备,可以轻松删除
  3. 兼容复杂设备,在某些复杂设备下有多个不同类型的对象,便可以使用多态表示,简化操作

对象类型与其属性的对应关系可以参考下表:

📎BACnet对象说明.pdf

(3)客户端与服务端

BACnet存在客户端与服务端的角色之别,主要用于区分证实服务时的通信主次。

其中使用的服务原语如下,除CONF_SERV之外都是非证实服务:

表明使用证实PDU

CONF_SERV. response 响应

CONF_SERV. Confirm 请求

CONF_SERV. Request 证实

CONF_SERV. indication 指示

表明使用非证实PDU

UNCONF_SERV. request 响应

UNCONF_SERV. indication 指示

表明使用分段回应PDU

SEGMENT_ACK. request 响应

SEGMENT_ACK. indication 指示

表明使用出错PDU

ERROR. request 响应

ERROR. indication 指示

表明使用拒绝PDU

REJECT. request 响应

REJECT. indication 指示

表明使用放弃PDU

ABORT. request 响应

ABORT. indication 指示

证实服务

客户端通过某服务请求实例,向服务器请求服务,而服务器则通过响应请求来为客户端提供服务,其客户端与服务端通信关系如下图:

在证实服务中,由请求方 BACnet 用户发出的一个 CONF_SERV. request 原语,形成请求 PDU 发送给响应方 BACnet 用户。当该请求 PDU 到达响应方 BACnet 用户时,响应方 BACnet 用户则收到一个CONF_SERV. indication原语。同样,由响应方 BACnet 用户发出的一个 CONF_SERV. response 原语,形成响应 PDU 回传给请求方 BACnet 用户。 当响应 PDU 到达请求方 BACnet 用户时,请求方 BACnet 用户则收到一个CONF_SERV. CONF_SERV. confirm 原语。因此,整个过程中请求方 BACnet 用户和响应方 BACnet 用户 都要接收和发送 PDU。

将其变为数据传递顺序来表示如下:

非证实服务

在非证实服务中,不存在上述客户/服务器模型、“请求方BACnet 用户”和“响应方 BACnet 用户”等概念,只有“发送方 BACnet 用户”和“接收方 BACnet 用户”。前者指 的是发送 PDU 的 BACnet 用户,后者指的是当一个 PDU 到达时,接收到一个指示(indication)或证实(confirm)的 BACnet 用户。

3.拓扑结构

为了应用的灵活性,BACnet 并没有严格规定网络的拓扑结构。BACnet 设备可以通过专线或拨号异步串行线,与四种局域网之一进行物理相连。而这些网络可以通过 BACnet 路由器或一对半路由器进一步互联。

在 BACnet 网络中,定义了如下这样一些拓扑结构:

1. 物理网段(Physical Segment):直接连接一些 BACnet 设备的一段物理介质。

2. 网段(Segment):多个物理网段通过“中继器”在物理层连接,所形成的网络段。

3. 网络(Network):多个 BACnet 网段通过“网桥”互连而成,每个BACnet网络都形成一个单一的MAC地址域。这些在物理层和数据链路层上连接各个网段的设备,可以利用MAC地址实现报文的过滤。

4. 网际网(Internetwork):将使用不同 LAN 技术的多个网络,用 BACnet“路由器”互联起来,便形成了一个BACnet“网际网”。在一个 BACnet 网际网中,任意两个节点之间恰好存在着一条报文通路。

四、总结

BACnet协议主要是对楼宇自动控制提出一套标准的通信协议,通过抽象的功能表示数据的传输,并不涉及具体的实现。

需要注意的是,BACnet是随着时代技术不断发展的,物理层协议的实现以及应用是不固定的,但不管物理层如何变动对于BACnet协议的应用层数据解析是通用的,只需要其组网方式需要与其物理层特性吻合即可,例如BVLC、BBMD便是针对BACnet/IP而适配的物理层以及协助组网方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值