基于嵌入式LINUX的BACNET控制器软件设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要:描述bacnet协议的体系结构,分析bacnet控制器的功能,论证基于嵌入式linux开发bacnet控制器的可行性;给出bacnet控制器软件的体系结构及其软件设计。

关键词:bacnet 控制器楼宇控制设备嵌入式linux 体系结构bacnet协议是一种为楼宇自动控制网络所制定的数据通信协议。

该协议已成为美国国家标准(ansi/ashrae 135-1995)和欧盟标准草案,并在2000年成为草案级国际标准。

其中定义了23个对象和42个服务,以及5个数据链路的局域网底层网络结构。

1999年1月正式发布了附录135a,成为标准的附件j,确定bacnet/ip技术的第6个局域网互联的底层技术。

1 bacnet网络体系结构和控制器功能分析1.1 bacnet网络体系结构bacnet建立在包含四个层次的简化分层体系结构上。

这四层相当于osi模型中的物理层、数据链路层、网络层和应用层。

bacnet标准定义自已的应用层和简单的网络层,对于其数据链路层和物理层,提供了五种选择方案,在附件j-bacnet/ip 中加入了对ip的支持。

图1是bacnet/ip网络体系结构层次图。

bacnet没有对应于osi的第四、五、六层,也就是说,bacnet没有传输层、会话层和表示层。

bacnet网络层屏蔽了底层采用的网络技术的差异。

1.2 bacnet控制器的功能分析在一个bacnet控制网络中,一个bacnet控制器通常和多个控制设备直接相连,负责监控这些设备的运行。

概括起来说,bacnet 控制器应该具有三个方面的功能。

①通信功能。

bacnet控制器是一个网络控制器,所以它必须能够发送和接收bacnet报文,和其它bacnet设备进行通信。

②监视功能。

bacnet控制器要监视与它直接相连的控制设备的状态。

这样,它就要提供数据结构来描述这种状态。

在bacnet协议中,描述这些状态是用bacnet对象。

bacnet协议提供了42个标准对象。

③控制功能。

bacnet控制器要控制与它相边听设备的运行,不仅要使这些设备之间具有互动能力,而且要使这些设备和系统的远程设备能够互动,所以在bacnet控制器中应该有逻辑控制模块来实现这一功能。

值得注意的是,不同时间、不同地点,bacnet控制器中的控制逻辑可能是不同的,因而在bacnet控制器中要提供改变控制流程的工具。

这种工具最好是图形界面的,以方便用户使用。

图1 bacnet体系结构层次图
2 基于嵌入式linux开发软件的可行性①linux是一个和unix相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。

在开发过程中,可以根据实际需要,通过内核构筑工具对linux内核功能进行裁减,做成体积很小的嵌入式操作系统,可使其达到500kb或更小的规模。

②在实时性应用方面,通用的linux在强实时性应用方面存在欠缺。

linux调度程序原来主要是针对台式计算机操作系统。

重点考虑的是在应用程序的吞吐量上,即采用了一种“公平共享”的策略保证所有进程得到平均的cpu时间。

在楼宇控制设备这种弱实时性应用中,如果采用先进的内核机制、进程调度算法和较小粒度的系统时间(10ms),是可以满足弱实时应用要求的,因此,linux可用于楼宇自动化系统。

③linux是源代码开放的操作系统,可以很容易得到内核的接口和源码,我们可以把bacnet的协议实现集成到内核中去。

④linux 是自由软件。

在gnu gpl许可证协议下,可以自由使用、修改和发布,所以采用嵌入式linux 可以降低bacnet控制器的成本。

3 bacnet控制器软件的实现3.1 bacnet控制器软件的体系结构基于bacnet协议的体系结构和上面对bacnet控制器功能的分析,可以得出bacnet控制器软件包括以下几个模块:bacnet协议栈、bacnet对象和服务、底层驱动模块、应用控制逻辑模块和控制配置模块。

对linux内核中不必要的模块加以裁减,并把bacnet控制器的一些模块嵌入到linux内核,最终的开发体系结构如图2所示。

3.2 bacnet协议栈的实现bacnet 协议栈报文的封装流程如图3所示。

bacnet协议的分层体系结构支持多种底层通信协议。

bacnet的网络层功能则对不同物理层和链路层的抽象,其原理与tcp/ip的ip层相。

在bacnet 应用层,定义了标准的对象和服务,以实现不同厂家的bacnet产品的互连。

因此,从bacnet 体系结构的各层协议内容来看,bacnet的体系结构呈“哑铃状”,最低层包容不同的通信协议,最高层承接多样的“实体”和应用。

在bacnet协议中,bacnet网络层是相对稳定的部
分,也是bacnet协议的核心,应放入内核之中。

其应用程序接口(api)应以系统调用(sys-call)的方式提供。

这种构成方式不仅可以在内核内部高效实现对bacnet网络层的处理,而且对外挂模块还提供简洁和高效的调用方式,使外挂模块代码紧凑。

对于bacnet的低层协议和应用层则应放在内核之外,以模块的方式外挂或为系统程序。

在本开发过程中,将低层协议以原代码的形式编译在内核中。

原因是,对于具体的应用,低层协议通常是固定的,即一旦某个设备接入一种网络系统,该设备的低层通信协议就不会改变,从而形成一个类别的楼宇设备自动化产品。

3.3 bacnet对象和服务的实现bacnet对象是驻留在bacnet设备中的数据结构,提供到一个楼宇自控设备的“网络可见”部分的抽象描述。

每个对象都有一组属性,描述对象的特片和结构。

bacnet对象按其功能可分为两类。

一类是采集数据的对象,如模拟输入/输出对象。

这类对象需要访问设备硬件,对象实现会根据不同设备硬件而变化,因此如果硬件发生变化,就要重写驱动程序。

另一类对象是在采集的数据基础上完成复杂功能,如环对象以及其它实现报警事件功能的对象。

这类对象不需访问硬件。

每一种bacnet控制器需要对已实现的对象进行配置。

bacnet服务提供了用于访问和操作设备中bacnet对象的命令,并定义了这些命令的格式和内容(即服务原语)。

banet根据设备功能将不同服务分组得到7个部分:数据共享、报警和事件管理、时间表、趋势记录、设备管理、网络管理、虚拟终端。

bacnet所定义的通信设备一致遵守的编码规则是asn.1。

bacnet对象和服务原语都通过asn.1进行编码,因此对象和服务实现的核心是bacnet编/解码器和bacnet标准数据类型、对象和服务原语的抽象数据类型。

对于bacnet对象的处理必须放在内核之外。

原因是:不同bacnet 控制器具有不同的bacnet对象集合,且bacnet对象类型较多。

这就要求嵌入式系统具对bacnet对象进行灵活的配置方式。

实现这种灵活配置的方法仍需要采用linux常用的抽象方法,将不同的具体bacnet对象进行抽象,形成“虚拟bacnet对象”的概念。

此处是“虚拟对象”不同于面向对象程序设计语言中的“虚拟对象”。

这两个概念不同的。

前者是相对bacnet 协议中定义的具体对象而言,其作用是管理bacnet协议中定义的具体bacnet对象,是内核提供配置和操作具体bacnet对象的接口,相当于linux内核中的“虚拟文件系统”等。

3.4 驱动程序的实现bacnet支持多种底层通信协议。

在bacnet控制器中,必须为这些通信协议编写驱动程序,同时在bacnet控制器中还要为一些数据采集卡之类的设备写驱动程序。

linux操作系统下的驱动程序,是以模块的形式存在的,能够被动态地加载。

对于不同的底层结构,可以灵活地加载不同的驱动程序。

开发设备驱动程序必须对内核有严格要求,其主要内容是根据内核的file_operations数据结构开发相应的设备操作函数,并填写数据结构。

如果外围设备具有中断功能,则需要开发中断处理函数并安装中断函数。

file_operations的数据结构,内核版本不同时,其结构可能不同,可以相看linux/fs.h头文件以确定具体的结构。

在file_operations的众多函数指针成员中,通常只需实现reax、write、open和release即可;ioctl可以根据需要加以实现,以增强对外围设备的控制和管理功能。

3.5 bacnet控制器应用层实现应用逻辑层是建立在嵌入式操作系统之上的具体应用。

根据bacnet协议中定义了3个级别的bacnet控制器——楼宇控制器、高级应用控制器和应用控制器、实现不同类别bacnet设备规定的互操作域(interoperationarea)。

这样,就可以在应用逻辑层中实现协议规定的5个互操作域。

这种方式不仅使协议的互操作域开发简单,而且使互操作域的开发具有可管理性。

这5个操作域是:数据共享、报警和事件管理、时序安排、趋势记录及设备和网络管理。

相关文档
最新文档