bacnet (收集)

嵌入式系统中BACnet-MS/TP协议栈的实现

一个BACnet设备由一个网络号码和一个MAC地址唯一确定
bacnet MS/TP 走的是485网络

https://www.eefocus.com/mcu-dsp/226727

1 引言

20世纪90年代,Internet经历了爆炸性发展,成为垄断全球的计算机网络。以Cisco和Sun为代表的一批公司借助这一浪潮发展成为世界上顶尖的大公司。而在智能建筑领域,也正在重现这一过程。上世纪80年代,直接数字控制器(DDC)的出现大大改善了建筑控制系统的精度和灵活性。但随着智能建筑涉及领域的不断延伸,如HVAC、照明、消防、安防等等领域,分立式控制设备已经不能满足设备间互操作和系统间通讯的需求;另一方面,随着建筑控制系统的集成度越来越高,不仅要求一栋楼宇或者一个小区的设备之间可以通讯,甚至地区、国家乃至全球的控制设备之间都可以进行通讯。因此,建立一个可以在异构系统、不同厂商设备之间的通讯机制,成为建筑智能化的迫切需求。BACnet协议就在这样一种情况下应运而生了。

2 BACnet协议介绍

BACnet是专门为建筑自动控制网络制定的一种数据通信协议,最初由美国制冷采暖空调工程师协会(简称ASHRAE)于1995年制定。其最根本的目的是要提供给建筑自动控制系统实现互操作的方法。所谓互操作是指一种能力,可以使得分布的控制系统设备通过相关信息的数字交换,能够协调地工作,从而完成一个共同的目标。BACnet解决了建筑自控系统中存在的多厂商系统和设备不兼容而难以集成的问题,提供了不同建筑自动控制系统实现互操作的方法,有望成为控制网络中的TCP/IP协议。2003年1月,BACnet成为正式的国际标准(ISO 16484标准)。

BACnet有以下特点:

·开放性:是美国现行的国家标准和ISO国际标准。

·面向对象:BACnet协议采用面向对象的技术,因此具有可扩展性和可复用性。

·互操作性:ASHRAE的BACnet委员会提出了一种新的描述自动控制系统功能性的方法,称为“互操作域(Interoperability Areas)”,其中规定了5个互操作域,分别是:数据共享、报警和事件管理、时序安排、趋势记录、设备与网络管理。

2.1 BACnet体系结构

BACnet以OSI模型为参考,结合建筑自动控制领域的实际需求,形成了一个简化模型。BACnet充分利用现有成熟的网络技术,在底层兼容5种网络结构,降低了开发成本,同时也利于系统集成。

2.2 应用层

应用层协议数据单元(APDU)传送包含在应用服务原语和相关参数中的信息。因为BACnet采用简化的OSI体系结构,不包含任何表示层的功能,必须预先定义好通信设备一致遵守的编码规则。BACnet的编码规则设计考虑到了楼宇自动控制体系对简单化、紧凑化的要求。因此,这个编码规则在一些方面与ISO 8825有所不同。但是仍然允许使用ASN.1对BACnet的APDU进行编码。

2.3 网络层

网络层提供网络路由功能,使得报文可以被直接传递到一个远程设备、一个远程网络上的所有设备、或者所有网络上的所有设备。一个BACnet设备由一个网络号码和一个MAC地址唯一确定。由于BACnet协议规定两个BACnet设备之间只能有一条有效路径,这个限制大大降低了网络层的复杂性,简化了路由算法。

2.4 数据链路层(MS/TP)

数据链路层负责将报文从一个设备传送到另一个单独设备,或者所有本地网设备。在本文中,只讨论MS/TP网络。MS/TP使用主/从令牌来控制对总线网络的访问。MS/TP协议向上为网络层提供与ISO 8802-2逻辑链路控制协议一样的服务;向下使用EIA-485物理层提供的服务。

3 程序实现

3.1 协议栈软件结构

在高端机器(如工作站)上,我们可以很好地利用C++语言的面向对象特性,完整实现整个BACnet协议栈。但在低端MCU上,程序空间和数据空间非常有限,因此需要尽可能简化协议栈软件的体系结构。同时根据不同型号的DDC,对协议栈软件进行剪裁配置。图2(略)表示了协议栈软件中各个模块之间的接口关系。在整个结构中最复杂的是应用层模块,包含BACnet对象模块,基本数据类型模块,APDU解析/分发模块和APDU组装模块。

3.2 应用层模块

BACnet协议为了简化其层次结构,使得BACnet应用层涵盖了开放系统互联参考模型(OSI)中会话层、表示层和应用层的功能。BACnet应用层模块是BACnet应用软件的基础,它实现BACnet协议应用层内容,负责提供工作站的各功能模块与物理设备直接的通信服务。根据应用层的功能分析,可以将应用层划分为如下几个模块:对象模块、服务模块、基本数据类型模块。

对象模块定义了BACnet对象。BACnet对象按其功能可分为两类:一类是采集数据的对象,如模拟输入/输出对象,这类对象需要访问设备硬件;另一类对象是在采集的数据基础上完成复杂功能,如环对象以及其他实现报警事件功能的对象,这类对象不需访问硬件。另外,某些对象的属性(如趋势登录对象的缓存器大小属性)需要设备厂商根据DDC型号进行初始配置,协议栈提供对这些属性的配置函数接口。

服务模块用于处理报文的分发、解析和组装。对于从网络层上来的APDU,服务模块根据APDU的类型和服务选择参数,调用相应的服务解析模块。服务解析模块对APDU的信息进行解码,并根据需要与DDC中的BACnet对象进行交互。另一方面,DDC会发出响应报文(如读属性响应),或者主动发出某些报文(如事件与报警服务),因此服务模块还提供服务报文组装的函数接口。

基本数据类型模块是一个工具类库,包含对基本数据类型的定义及其编、解码函数。BACnet包含13种应用数据类型以及其他基本数据类型。BACnet应用数据类型可以直接进行编、解码。BACnet基本数据类型对应着ASN.1中的复合数据类型,它是由BACnet应用数据类型配合标记按照一定的结构组合而成。因此,基本数据类型的编/解码实际上是按一定的规则调用应用数据类型以及标记的编/解码方法来实现的。

3.3 网络层模块

对于DDC来说,网络层向应用层提供一个不确认的无连接数据单元传输服务。网络层与应用层交互的服务原语是网络层数据单元请求(N-UNITDATA.request)和网络层数据单元指示(N-UNITDATA.indication)。其原语参数如下:
N-UNITDATA.request(destination_address, data, network_priority,data_expecting_reply)

N-UNITDATA.indication(source_address, destination_address,data, network_priority,data_expecting_reply)

当DDC收到来自链路层数据,解析出相应的地址信息,并把地址信息和APDU绑定起来存放到一个结构中传送给应用层,这样当应用层需要回复报文时可以得到目标地址。

3.4 数据链路层(MS/TP)模块

MS/TP是一个主从/令牌传递的数据链路协议,物理层采用RS-485半双工通信标准。MS/TP层包含两个状态机,分别是主节点状态机和接收帧状态机;接收帧状态机负责帧的接收,如是数据帧则调用与网络层接口上传给网络层,主节点状态机负责帧(包括数据帧和控制帧)的发送。两个状态机分时实现,根据两者之间的关系,接收帧状态机可放在主节点状态机中统一调度。图3(略) BACnet数据链路层模块结构图,图3显示了BACnet数据链路层的子模块:其中,接收模块实现接收帧状态机;发送模块实现主节点状态机;串口控制模块实现串口驱动与收发控制,串口读写采用中断方式;

网络层接口模块定义接口及接口函数调用模块,使用服务原语DL_UNITDATA.request()和DL_UNITDATA.indication()来实现。

4 结束语

本文提出了BACnet-MS/TP协议在MCU中的软件实现方案,解决了BACnet控制器的通讯功能。如果进一步采用嵌入式操作系统实现多任务处理,配合数据采集、控制和组态模块,就可以开发出实用的BACnet控制器。

Bacnet MS/TP设备 举例

https://www.ccontrols.com/basautomation/iobacnet.php
https://www.ccontrols.com/pdf/io/BMT-DI4.pdf

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

BACNET协议.pdf

在这里插入图片描述
BACnet 设备(BACnetDevice)是指任何一种支持用BACnet 协议进行数字通信的真实的
或者虚拟的设备。由12.9 节中的定义可知,每一个BACnet 设备必须且只能包含一个设备
(Device)对象。每一个BACnet 设备,都由一个NSAP 唯一定位。在NASP 中,包含了一个
网络编号和一个MAC 地址。
在多数情况下,一个BACnet 设备就是一个物理设备。然而在某些情况下,一个单一的
物理设备也可以形成多个“虚拟的” BACnet 设备。(参见附件H)。
在这里插入图片描述
NSAP 网络层服务访问点

多网卡服务器如果发送广播包

在这里插入图片描述
默认的 软件程序 发送的udp广播 应该是通过第一条路由表转发出去的
在这里插入图片描述
在这里插入图片描述
如果发送给192网段的广播包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mstp 和mac 共同确定一个bacnet 设备。
一个bacnet设备上面还会有6个点或者叫做6个通道,
每个点连接一个实际的外部设备。
这些设备,有可能是如下的作用。
点1 — 风阀控制
点2 ---- 风机启停控制
点3 ---- 冷水阀控制
点4 ---- 回风阀控制
点5 — 排风阀控制
点6 — 空调机组风机启停控制

read 1021:26 analogInput 2 presentValue
1021:26 ------- 确定一个Bacnet 设备(mstp:mac)
analogInput 2 ------- 确定一个Bacnet 设备上面的一个点
presentValue

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值