基于嵌入式Linux的BACnet控制器软件设计
状”,最低层包容不同的通信协议,最高层承接多
样的“实体”和应用。
在BACnet协议中,BACnet网络层是相对稳定的部分,也是BACnet协议的核心,应放入内核之中。其应用程序接口(API)应以系统调用(sys-call)的方式提供。这种构成方式不仅可以在内核内部高效实现对BACnet网络层的处理,而且对外挂模块还提供简洁和高效的调用方式,使外挂模块代码紧凑。对于BACnet的低层协议和应用层则应放在内核之外,以模块的方式外挂或为系统程序。在本开发过程中,将低层协议以原代码的形式编译在内核中。原因是,对于具体的应用,低层协议通常是固定的,即一旦某个设备接入一种网络系统,该设备的低层通信协议就不会改变,从而形成一个类别的楼宇设备自动化产品。
3.3BACnet对象和服务的实现
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.5BACnet控制器应用层实现
应用逻辑层是建立在嵌入式操作系统之上的具体应用。根据BACnet协议中定义了3个级别的BACnet控制器——楼宇控制器、高级应用控制器和应用控制器、实现不同类别BACnet设备规定的互操作域(InteroperationArea)。这样,就可以在应用逻辑层中实现协议规定的5个互操作域。这种方式不仅使协议的互操作域开发简单,而且使互操作域的开发具有可管理性。
这5个操作域是:数据共享、报警和事件管理、时序安排、趋势记录及设备和网络管理。
①数据共享功能包括数据的文档存储、数据的表示、监测对象、设备点和参数修改。BACnet控制器要将本地采集的数据传送到操作员工作站上进行存储,主要是那些需要查看历史记录的值,如模拟输入/模拟输出当前值属性等等。对于数据更新的时间间隔,快速采样时,用1~5s;对于慢速过程,如空间温度监测,采用30~60s间隔。当控制器收到了WritePr 《基于嵌入式Linux的BACnet控制器软件设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/144723.html
样的“实体”和应用。
在BACnet协议中,BACnet网络层是相对稳定的部分,也是BACnet协议的核心,应放入内核之中。其应用程序接口(API)应以系统调用(sys-call)的方式提供。这种构成方式不仅可以在内核内部高效实现对BACnet网络层的处理,而且对外挂模块还提供简洁和高效的调用方式,使外挂模块代码紧凑。对于BACnet的低层协议和应用层则应放在内核之外,以模块的方式外挂或为系统程序。在本开发过程中,将低层协议以原代码的形式编译在内核中。原因是,对于具体的应用,低层协议通常是固定的,即一旦某个设备接入一种网络系统,该设备的低层通信协议就不会改变,从而形成一个类别的楼宇设备自动化产品。
3.3BACnet对象和服务的实现
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.5BACnet控制器应用层实现
应用逻辑层是建立在嵌入式操作系统之上的具体应用。根据BACnet协议中定义了3个级别的BACnet控制器——楼宇控制器、高级应用控制器和应用控制器、实现不同类别BACnet设备规定的互操作域(InteroperationArea)。这样,就可以在应用逻辑层中实现协议规定的5个互操作域。这种方式不仅使协议的互操作域开发简单,而且使互操作域的开发具有可管理性。
这5个操作域是:数据共享、报警和事件管理、时序安排、趋势记录及设备和网络管理。
①数据共享功能包括数据的文档存储、数据的表示、监测对象、设备点和参数修改。BACnet控制器要将本地采集的数据传送到操作员工作站上进行存储,主要是那些需要查看历史记录的值,如模拟输入/模拟输出当前值属性等等。对于数据更新的时间间隔,快速采样时,用1~5s;对于慢速过程,如空间温度监测,采用30~60s间隔。当控制器收到了WritePr 《基于嵌入式Linux的BACnet控制器软件设计(第2页)》