基于组件技术嵌入式电力监控系统的设计与实现
2010-09-17方海吴健张蕴
方海,吴健,张蕴
0 引言
嵌入式系统体积小,功耗低,成本小以及适应恶劣环境的特点决定了嵌入式系统在工业控制中的应用越来越广。嵌入式系统与组态软件结合起来以快速、高效、方便地开发出适应各种场合的监控程序己成为工业控制领域发展的必然趋势。
随着嵌入式软件的规模和复杂性不断增大,对软件的可重用性、可配置性和扩展性要求越来越严格,复用是解决这些问题的有效方法。组件或构件技术是软件复用的主流方向,嵌入式系统软件开发需要基于组件的软件开发技术。
1 嵌入式组件
嵌入式系统的特征与需求,决定了嵌入式组件与通用组件在结构、接口、功能/性能等方面有很大差异。嵌入式组件除了符合通用软件组件封装性、可重用性要求外,还必须能够充分体现出嵌入式系统资源有限、并发特性、时间要求以及硬件相关等固有特性;还应该能够适应目标平台(如x86,ARM等),能运行在目标板的操作系统上(如WINCE,Linux,VxWorks等),且对底层硬件外围设备开销不能太大、满足软件的时间约束等[1]。此外,这些组件还需有类库支持。在基于组件的嵌入式开发技术中,首先将单个应用程序分割成多个嵌入式组件,单个组件内部是封装数据和实现功能的函数,外部是定义明确的接口( Interface)。各个定制的软组件可以在运行时间通过接口与其他组件进行通信连接,最后实现完整的嵌入式系统功能。在需要对应用程序进行修改或改进时,只需将构成此应用程序的某个组件用新的版本替换即可。
一个组件不仅给外界(客户)提供一个服务接口,而且还可能向其他组件提出接口要求,理想的组件模型[2]应该如图1所示:
图1 组件模型
当前主要有如下几种嵌入式组件模型:
1.1 比利时IWT协会赞助的SEESCOA项目的CCOM模型:组件模型中的元素包括接口(Port),接口连接器(connector)。接口有功能(role)和数量(multiplicity)两种属性:功能(role)表示接口在组件与组件之间通信时的作用;数量(multiplicity)表示组件有多少此种类型的接口。在CCOM模型中接口具有4层意义:①语法级(Syntactic level):描述接口中消息的名称和参数形式。②语义级(Semantic level):描述接口的前置和后置断言。③同步级(synchronization level):描述接口的消息序列、循环、和替换路径等。④质量级(Qos level):描述组件的非功能性约束需求。CCOM 的组件建模中采用契约(Contract)来描述非功能型约束,且较多的使用了实时建模的方法,描述时间约束,但是当前还没有引入其它非功能性约束的方法。[3]
1.2 飞利浦公司的用于消费电子的 Koala组件模型:Koala全称为Component Organiser And Linking Assistant。组件模型中的元素包括入和出两种接口(interface)、组件;组件之间通过接口连接。在Koala模型中接口被映射为函数的集合。由于Koala模型中没有考虑非功能性约束,这对于嵌入式系统应用来讲具有很大的局限性。[4]
1.3 ABB等公司用于现场总线技术的 Pecos组件模型:Pecos全称为Pe rvasive Co mponent Systems。组件模型中的元素包括接口(ports)、组件;接口有入(in)、出(out)、入出(in&out)3种类型;组件有 3种类型:活动组件(active component)、被动组件(passive component)、事件组件(event component)。由于现场总线设备资源非常受限,典型配置为16位微处理器、256KB ROM 、40KB RAM,在此模型中一个接口被映射为一个共享的变量。所以此种模型在嵌入式系统中不具有通用性。[5]
2 系统功能的描述
电力监控系统的设计目标是为电力部门提供便利、快捷、安全的从开发到现场应用的电力设备监控系统。系统提供可定制用户界面、采集并显示现场数据控制现场设备、对现场设备参数的调整、用电管理设备状态的显示、现场设备报警提示、数据的历史记录、设备数据的转存、电网质量分析、系统运行日志记录、选择性配合分析、设备特性曲线的动态显示、负荷分析、设备故障诊断和分析、自动控制、设备之间的关联约束和双机备份等功能。
图2描述了本系统的主要功能:
图2 系统的功能模块图
3 系统的设计和实现
3.1 系统结构及模块的划分
嵌入式电力监控系统是对已有基于桌面的电力监控组态系统(YSS2000)的一个扩充,原系统由设备开发子系统,工程开发子系统和实时监控子系统系统3部分组成[7]。设备开发子系统和工程开发子系统组成了监控系统的组态开发环境;而实时监控子系统则负责对现场设备的监测和控制。设备开发子系统用于开发设备库,设备库以抽象设备为基本单位存储不同型号的设备信息,设备信息包括设备的基本信息、窗口信息、变量信息和报文信息等;工程开发子系统用于开发具体的工程实例,工程实例是以监控现场为模型组建的物理环境的一种软件模拟,工程中将设备实例化为子站,作为工程组成的基本单位。工程实例可以直接投运于运行监控子系统对现场设备进行实时监控。工程实例信息以XML形式存储在硬盘上。
嵌入式电力监控系统读入工程实例对现场中的设备进行数据监控和报警。嵌入式监控系统分为初始化和运行两个阶段,初始化阶段中系统从文件和数据库中载入用户在工程开发系统中的建立的组态数据,并构建实时数据库结构;而在运行阶段,通过启动定时器和通信线程系统完成显示的更新和数据的实时更新。
系统和现场设备之间的数据交换是双向进行的。一方面系统需要及时的读取现场设备的数据,另一方面系统需要向现场设备发送数据进行功能控制和参数调整。图3中的箭头代表数据的流向。系统可根据数据流划分为表示层、业务逻辑层和通信层。
图3 系统数据流示意图
本系统基于软件组件技术,以功能的不同划分不同的组件,组件的功能大小决定了组件的粒度。组件化的设计的系统结构如图4所示:
图4 功能体系结构
各组件的功能及设计简要描述如下:
1)工程信息组件:读取组态的工程实例,把解析好的工程信息保存在内存中供其它组件使用。
2)子站状态查看组件:查看子站状态,完成子站登陆卸载挂牌摘牌功能。
3)数据字典组件:实现实时数据和历史数据查看功能。
4)通信组件:通信组件是整个系统的数据来源,它向下与各个子站通信,收发报文,完成四遥功能;向上为实时数据服务组件提供变量的实时值,以及接收从其他组件发送过来的遥控和遥调指令;
5)实时数据服务组件:系统数据处理、组织、管理的核心,是监控变量的索引表,检索并提供用户指定的实时数据。考虑到数据的实时性要求,系统采用内存作为数据库存储单元来存储工作数据。
6)持久数据服务组件:存储变量以及日志,并提供对数据的相关操作。
7)界面组件:主要提供监控界面、四遥操作,通过实时数据服务获取要监视的数据。
8)报警组件:用于处理各种报警,以组态好的方式输出报警;
9)数据发布组件:本组件通过使用各种协议适配器与外部系统进行数据交互。
10)系统事件查看组件:完成系统日志,历史报警等历史数据的查看。
11)双机备份组件:为增加系统的可用性和可靠性设计该组件,双机备份组件支持主从模式和互备模式。
3.2 组件的设计
各组件的接口需要继承下面的公共接口,用伪C++语言描述:
各组件必须实现该接口的这四个方法,Start方法用来开启该组件提供的服务,而Stop用来停止提供组件的服务,Initialize用来完成组件能够提供服务前的一些初始化工作,如内存的申请、工程信息的加载,在系统加载组件时调用,Destroy用来释放组件占有的资源,在组件退出系统时调用。
另外一个组件需要实现的接口是:
这是一个用于创建对象的接口,采用工厂模式,使类的实例化延迟到子类。组件除了要实现上述接口外还要实现自己能够对外提供的服务接口。为了保证组件的可重用性,组件的接口一旦确定不再改变。在各个组件内部采用单件模式,使各组件在整个系统的运行过程中只存在一个实例。单个组件的升级不影响整个系统的使用。在设计组件时大量采用了桥模式。如在报警组件中,报警类型有 PDR、条件报警等,而报警方式有窗口报警、声音报警等,桥模式的采用使报警类型和报警方式可以动态的组合,减少了组件的代码,增加了组件的可扩展性。
3.3 组件的组装
本系统基于WINCE操作系统,因此采用DLL机制对组件生命期进行管理。首先,将组件的实现放入DLL中,DLL是组件的一个实现服务器,它并不等于一个组件。接口的描述以C++头文件的形式给出,要同时获取DLL和头文件才能使用组件。当要使用某个组件时,首先将实现组件的DLL调入内存,然后得到组件中函数实现的地址,此时才将组件的指针与组件的实现联系起来,支持了组件的动态加载功能和在运行时对接口进行迟绑定, 从而完成了指针与实现松散的、耦合的要求。
下面以报警组件为例来说明各组件是如何结合在一起的。图5是报警组件的组件依赖图。
图5 报警组件的组件依赖图
主程序分别获取各组件接口的指针,通过各组件接口的指针调用各自Initialize方法和Start方法以开始组件的服务。在报警组件内部同样获取请求接口的指针,从而可以调用相应接口中的方法完成服务。
系统的运行不需要每个组件都初始化,用户可以根据所需功能的不同定制系统。例如,用户不需要现场监控,在硬件环境中不配备显示设备,则可以不选择将界面组件和数据字典组件装配到系统中,这样系统只是不具备界面监控的功能,其他功能如报警、数据发布等都能正常工作。这样可以根据硬件资源的不同配置不同的系统,最大限度的节约了成本。
4 结语
目前国内学术期刊上研究嵌入式电力监控组态系统的文章比较少,把组件技术应用到嵌入式电力监控系统是一种比较新颖的设计方法。在嵌入式平台的基础上,运用组件技术,设计并实现了电力监控系统。本系统以可重用的软件组件为组装模块,支持组装式软件重用,提高了软件生产效率和产品质量、缩短了产品交付时间。用户可以根据不同的需要动态的组装一个系统,增加了系统的可重用性、可配置性和可扩展性。新的系统使整个监控环境体积变小了,成本降低了,可靠性增加了。
[1]於志文,周兴社,李志刚,施笑安.基于嵌入软构件的开发技术研究[J].计算机应用研究,2003,4:12-14.
[2]王志坚等.软件构件技术及其应用[M].北京:科学出版社,2005.
[3]Viviane Jonckers, Yolande Berbers. Component Model and Component Composition[EB/OL], 2002,12[2008,7],http://www.cs.kuleuven.be/cwis/research/distrinet/projects/SEESCOA/projectinfo/SEESCOA_VSP_comp_modeling.pdf.
[4]Ommering R, Linden F, Kramer J, Magee J. The Koala Component Model for Consumer Electronics Software[J]IEEE Computer 2000,33(3); 78-85.
[5]MichaelWinter1.Components for Embedded Software —The PECOS Approach[EB/OL], 2002,6 [2008,7],http://www.iam.unibe.ch/~scg/Archive/pecos/public_docu ments/Wint02a.pdf.
[6]Ning Gui, Vincenzo De Florio, Hong Sun, Chris Blondia.A Hybrid real-time component model for reconfigurable embedded systems[C].Mar. 2008. Proceedings of the 2008 ACM symposium on Applied computing.
[7]刘钊,吴健,何巧丽.电力监控组态系统的一种设计[J].计算机应用,2003,6.