BACnet说明
A Data Communication Protocol for Building Automation and Control Network的简称,是一种为楼宇自控网络制定的数据通讯协议。
BACnet采用了面向对象的技术,它定义了一组具有属性的对象(Object)来表示任意的楼宇自控设备的功能,从而提供了一种标准的表示楼宇自控设备的方式。同时BACnet定义了四种服务原语来传递某些特定的服务参数。目前BACnet共定义了18个对象,123 个属性和35个服务。对象的方法称为服务,由于一个楼宇自控系统中并不是所有的设备都要有必要支持BACnet所有的功能,BACnet协议还定义了6个性能级别和13个功能组。
6个性能级别,每个级别规定了设备要是先的最小服务子集,且包含级别低的服务,最小级别1.
表1 BACnet对象
|
对 象 名 称 |
应 用 举 例 |
01 |
模拟输入Analog Input |
模拟传感器输入如机械开关On/Off输入 |
02 |
模拟输出Analog Output |
模拟控制量输出 |
03 |
模拟值Analog Value |
模拟控制设备参数如设备阀值 |
04 |
数字输入Binary Input |
数字传感器输入如电子开关On/Off输入 |
05 |
数字输出Binary Output |
继电器输出 |
06 |
数字值Binary Value |
数字控制系统参数 |
07 |
命令Command |
向多设备多对象写多值如日期设置 |
08 |
日历表Calender |
程序定义的事件执行日期列表 |
09 |
时间表Schedule |
周期操作时间表 |
10 |
事件登记Event Enrollment |
描述错误状态事件如输入值超界或报警事件。通知一个设备对象,也可通过“通知类”对象通知多设备对象 |
11 |
文件File |
允许访问(读/写)设备支持的数据文件 |
12 |
组Group |
提供单一操作下访问多对象多属性 |
13 |
环Loop |
提供访问一个“控制环”的标准化操作 |
14 |
多态输入Multi-state Output |
表述多状态处理程序的状况,如制冷设备开、关和除霜循环 |
15 |
多态输出Multi-state Output |
表述多状态处理程序的期望状态,如制冷设备开始冷却、除霜的时间 |
16 |
通知类Notification Class |
包含一个设备列表,配合“事件登记”对象将报警报文发送给多设备 |
17 |
程序Program |
允许设备应用程序开始和停止、装载和卸载,并报告程序当前状态 |
18 |
设备Device |
其属性表示设备支持的对象和服务以及设备商和固件版本等信息 |
BACnet应用层提供证实和非证实两种类型的服务。BACnet定义了四种服务原语:请求、指示、响应和证实,它们通过应用层协议数据单元(APDU)传递。由于BACnet建立在无连接的通信模式上,所以OSI模型提供端到端服务的传输层部分简
化功能也由应用层实现,分别为:可靠的端到端传输和差错校验;报文分段和流量控制;报重组和序列控制。
1)具有良好的互连特性和扩展性。BACnet标准虽然从体系结构上定义了不同的局域网络,但BACnet标准可以扩展到其他任意通信网络。例如,BACnet/IP标准可以实现与Internet的无缝互连。
2)具有良好的伸缩性。BACnet标准没有限制BACnet系统中设备节点的数量,BACnet集成系统可以由几个设备节点构成一个极小的自控系统,也可以形成一个规模极大的超级大系统。
(1)OSI/RM模型的实现需要很高的费用,实际上在绝大部分楼宇自控系统应用中也并不需要这么多的层次,事实上BACnet只包含OSI模型中被选择的层次,其它各层则去掉,这样减少了报文长度,降低了通信处理开销,同时也节约了楼宇自控工业的生产成本。
(2)BACnet应充分利用现有的广泛使用的局域网技术,如Ethernet、ARCNET和LonTalk,因此成本进一步降低,同时也有利于技术的推广和性能的提高。
在考虑了楼宇设备监控网络的特征和要求以及尽可能少的协议开销原则后,BACnet协议提出了一种简化的四层体系结构,相当于OSI/RM模型中的物理层、数据链路层、网络层和应用层。
支持五种组合类型的数据链路/物理层规范。其中主从/令牌传递(MS/TP)协议是专门针对楼宇自控设备设计的数据链路规范。BACnet在物理介质上,支持双绞线、同轴电缆和光缆,在拓扑结构上,支持星型和总线拓扑。
BACnet没有严格规定网络拓扑结构。其中:网段(Segment)是多个物理网段通过中继器(R)连接形成的段落区间;网络是多个网段通过网桥(B)连接而成的,每个网络都形成一个MAC地址域;BACnet/Internet网络是将使用不同局域网技术的多个网络用路由器(RT)互联起来形成的网际网。
目前,BACnet标准使用两种技术实现与Internet的互联。第一种技术附件H中称之为“隧道”技术,并将其设备称之为分组封装/拆装设备,简称PAD。其作用就像一个网关/路由器,这在图2中两个半路由器连接广域网形成一个完全的BACnet路由器有所体现。第二种技术附件J中称之为BACnet/IP,设备直接封装IP帧/包在BACnet网络和Internet上传输。PAD将BACnet报文数据封装在IP协议数据包内传输,在目的BACnet网络解封。因此每个连接Internet的BACnet网络都要配置PAD网关/路由器。它可以是一个单独的设备,也可以是某种楼宇控制设备功能的一部分。
在BACnet拓扑中设备之间只存在一条逻辑通路,无需广域网的最优路由算法;其次,BACnet具有单一的局部地址空间,所以BACnet参照OSI模型制定了简化的网络层协议,向应用层提供不确认无连接的数据单元传送服务。每个BACnet设备都被一个网络号码和一个MAC地址唯一确定。
网络层通过“路由器”实现两个或多个异类BACnet局域网(不同的数链层)的连接,并通过协议报文进行“路由器”的自动配置、路由表维护和拥塞控制。BACnet路由器与每个网络的连接处称为一个“端口”。路由表中包含端口的下列项目:(1)端口所连接网络的MAC地址和网络号;(2)端口可到达网络的网络号列表及与这些网络的连接状态。图2中,“1/2RT”是半路由器,由PTP连接形成一个完整的BACnet路由器,即BACnet网际网将广域网技术向应用层屏蔽。
BACnet应用层即BACnet应用实体,通过API(应用编程接口)为上层应用程序服务,并与对等应用层实体通信。应用实体由两部分组成:用户单元和应用服务单元(ASE)。ASE是一组特定内容的应用服务。而用户单元支持本地API、保存事务处理上下文信息、产生请求ID、记录ID对应的应用服务响应、维护超时重传机制所需的计数器以及将设备行为要求映射为对象。
BACnet应用层提供证实和非证实两种类型的服务。BACnet定义了四种服务原语:请求、指示、响应和证实,它们通过应用层协议数据单元(APDU)传递。由于BACnet建立在无连接的通信模式上,所以OSI模型提供端到端服务的传输层部分简化功能也由应用层实现,分别为:可靠的端到端传输和差错校验;报文分段和流量控制;报文重组和序列控制。
在网络上传输的物理帧格式如图2所示。
PCI:协议控制单元。
APDU = APCI+ DATA
NPDU = NPCI+ NSDU
LPDU = LPCI+ LSDU
MPDU = MPCI+ MSDU
PPDU = PPCI+ PSDU
图2 物理帧的格式
数据
+
APCI(应用层协议控制单元)
+
NPCI(网络层协议控制单元)
+
BVLLPCI(BACnet 虚拟链路层协议控制单元)
然后将所得的BVLL 报文整体交给网络层,这里采用UDP(用户数据报)协议,指定接收端的IP地址和端口‘0xBAC0’发送。
客户端发送ReadProperty-Request(读属性请求)报文,而服务器端在正确接收报文并解码成功后,如果存在该属性(Property),则返回Result(+)正响应ReadProperty-ACK(读属性响应)报文,如果不存在该属性,则返回Result(-)负响应报文,并返回相应的错误代码。解码过程只是编码过程的逆过程。
5.3.1 ASN(Abstract Syntax Notation One)
是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。
TLV编码是指先对Tag编码,再对Length编码,最后对Value编码。
编码方式
BACnet协议采用混合编码方式,其APDU编码分为两部分。第一部分是数据部分也就是APDU部分,采用ASN.1基本编码规则,即TLV编码,它把各种数据表示为三部分:标识符字节(T),长度字节(L),内容字节(V),来明确标识每个数据。这一部分是难点和重点,不仅需要完成对数据的编解码,而且需要编解码其相应的标记。
第二部分控制信息部分,由于PCI部分格式固定,具有固定的位置和长度所以可以不使用标记和长度字段直接编码,所以可以通过参数的赋值直接完成。BACnet采用混合编码的方法既不失灵活性又节省了开销。
首先是对数据部分的编码,也就是标记及各类数据的编解码
BACnet标记编码:BACnet的标记主要有一般标记、开始标记和结束标记。所有的标记均被封装成一个类,其第一字节为固定的TLV格式,BACnet里以TCL表示即Tag Number(4位),Class(1位,表示上下文标记或者应用标记)和Length/Value/Type(3位),如果出现Tag Number 和Length/Value/Type 有超过第一字节规定的数据的,就在其后加上扩展的字节。
标记的类定义如下,其中TCL以结构体field来定义完成位操作,并定义了扩展字节externnum作为后续的扩展标记字节,以及extra1,2,3作为扩展长度字节。同时定义了三种标记的编解码函数来通过参数传递完成相应的操作。
class tag
{
public:
struct
{
unsigned int l:3;
unsigned int c:1;
unsigned int n:4;
}field;
short externnum;
short extra1;
short extra2;
int extra3;
tag();
void TagEncode(char *p,int number,int class_t,int len);
void TagDiscode(char *p,int *pnum,int *pclass_t,int *plen);
int StartTagE(char *p,int number);
int EndTagE(char *p,int number);
int StartTagD(char *p,int *number);
int EndTagD(char *p,int *number);
private:
int temp;
};
具体赋值遵循如下原则:对于一般标记来说,标记编号域(T):当标记编号为0~14(包含0 和14)时,用该域直接进行编码。当标记编号为15~254(包含15 和254)时,则该域编码为‘B 1111’,并在该标记字段之后用一个字节对标记编号进行编码。但标记编码号根据目前应用需要不得大于254,因而标记编码扩展字节只有一个字节就可以满足实际应用。长度/值/类型域(L):该域所表示的内容较为复杂,一是用于区分简单(Primitive)类型编码和构造(Constructed)类型编码。二是用于表示简单编码中简单类型数据的长度和值。具体的表示方法参加BACnet协议。
对于开始标记,该标记标识构造编码开始。其标记字节的Class域为‘B 1’,Length/Value/Type 域为‘B 110’。相应的结束标记的标记字节的Class域为‘B 1’,Length/Value/Type 域为‘B 111’。所以这两个标记的编解码只需简单的传递number参数。开始标记和结束标记用于构造类型数据的编码。
读属性服务是构造类型数据。构造类型数据是简单类型经过复杂组合而形成的具有一定结构的复合数据,构造类型可以嵌套。该类型由两个必须包括的项:objectIdentifier 、propertyIdentifier 和一个可选的项: propertyArrayIndex 分别描述读请求所要读的对象,属性和是否存在数据类型组。
BACnet参照OSI模型制定了简化的网络层协议,向应用层提供不确认无连接的数据单元传送服务。每个BACnet设备都被一个网络号码和一个MAC地址唯一确定。
可信自控的控制器(DDC)在BACnet网络中遵循以下简单的地址设置方法,来保证在多种厂商设备联网的BACnet网络中地址的唯一性。这里,Device# 是BACnet地址码,RCC#是可信自控的地址码。
主网: Device# = 主网控制器RCC# *1000
子网SubA: Device# = 主网控制器RCC# *1000 + SubA控制器RCC#
子网SubB: Device# = 主网控制器RCC# *1000 + SubB控制器RCC# + 200
下面说明可信自控的地址码(RCC#)与BACnet地址码(BACnet#)在一个网络系统中共存和相互之间的关系。
在主网上,有控制器MACH1、MACH-Zone、ETHRT-Link和MACH-Global,其RCC#分别为1、2、3和4,其Device#分别为1000,2000,3000,4000。在MACH-Global(RCC#=4)
上有2个子网SubA和SubB。SubA上MACH2和MACH-Air控制器,其RCC#为4A1和4A2,其BACnet地址码Device#为4001和4002。SubB上有MACH-Air和MACH-Zone控制器,其RCC#为4B1和4B2,其BACnet地址码Device#为4201和4202。同理,ETHER-Link(Device#=3)下挂一个子网,有MACH-Air和MACH-Zone控制器,其RCC#为3A1和3A2,其BACnet地址码Device#为3001和3002。
1. 应用层模型:
应用程序,应用程序接口API,下面是BACnet的应用层,由BACnet 用户元素和BACnet ASE组成,ASEl“application service element”。对等的应用层之间采用抽象服务原语进行信息交互。
四服务原语的定义:请求,指示,响应和确认。原语通过PDUS协议数据单元进行表达,(protocol data units)
通过应用程序接口,用户实现远程访问。接口控制信息包括ICI(interface control information)服务原语和服务的具体参数,
ICI接口参数:DA,SA, NP, DER
DA: destination_address:欲接收设备的地址。
SA: source_address: 服务原语发出的设备地址. 格式(设备名称,网络地址)
NP: network_priotiry: 四层网络优先参数。
DER: data_expecting_reply: 服务发出后是否期待返回,TRUE OR FALSE.
BACnet定义了客户端和服务器通信模型的应用服务
APDU长度:
本地BUFFER, NPDU, 50字节,三者中的最小者。
2. 网络层
BACnet网络层提供由一个BAC到另一个的网络连接而,不管各自网络采用了怎样的数据链路层技术。一个BACnet设备地址由网络地址和MAC地址唯一确定。
NPDU长度最大值列表:
网络层交互提供的数据原语:
NPDU中的第一个字节是版本信息,第二个字节是控制信息,只是当前或存在的NPCI。
一个控制字节中的位信息表示如下:
Bit7: 1: NSDU是一个消息类型字段 0:NSDU是一个BACnet 的APDU。
Bit6: 保留信息 0 。
Bit5: 目的地址符
Bit4: 保留信息 0.
Bit3: 源地址符。
Bit2: 返回原语中data_expecting_reply参数的含义
Bit1: Bit0: 网络优先权。
NPDU格式:
DNET: 2: 目的网络地址号
DLEN: 1: 目的MAC层地址长
DADR: V: 目的MAC地址
DA: 本地网络MAC地址
SNET: 2 :源网络网络号
SLEN: 1 源MAC地址长
SADR: V: 源MAC地址
SA: 本地网络MAC地址
Hop Count: 跳跃次数,避免循环路径。
Message type: 消息类型,00- 0A, +80 ,P62
3. 数据链路层和物理层
DATALINK 、logical link control
Format of an MPDU on an ISP8802-3LAN
寻找创业合作伙伴, 加QQ 404536204