基于ACE架构的前置采集软件的设计和实现
2018-03-21张振华
张振华
摘 要 由于操作系统及通信平台的多样性, 通信软件开发者往往要面对诸多问题, 而利用软件设计模式能够帮助开发者成功完成任务并开发出高性能的通信软件。本文首先阐述了传统通信软件的实现方式和存在的一些问题,接着介绍了ACE 框架以及使用ACE架构构建通信系统软件的优势,然后详细介绍了基于ACE架构的前置采集软件的设计,重点描述了软件架构中六个服务的功能。最后针对软件中服务间通讯方式、守护进程和采集服务的实现方式做了详细的介绍。
【关键词】ACE架构 前置采集
随着国家节能减排工作的推进,轨道交通行业的节能减排工作得到了高度重视。轨道交通能源管理系统是针对轨道交通行业而开发的一套能源管理软件平台,其目的使轨道交通运营部门能够科学的强化能源管理、降低能源消耗、提高能源利用效率。在轨道交通能源管理系统中,前置采集软件起着最关键和最基本的作用,主要是进行全线车站及车辆段的能耗数据的采集和简单处理,包括前置服务的监控、终端数据的采集、解析、统计、补招等功能,因此前置采集软件的设计和实现对在轨道交通能源管理系统中起到至关重要的作用。
传统的前置采集软件大多采用基于TCP/IP协议的Socket方式实现与终端设备的通信,虽然Socket具有很高的效率,但网络编程人员通常从底层进行开发,非常繁琐且参数复杂,调用易出错,异常处理容易遗漏,这些大大增加了软件开发的难度和周期。另外前置采集软件开发中通常采用模块化设计,当执行任务时,需要通过其中不同的模块进行协作完成,在这种情况下各模块间的数据通信会变得异常繁琐和复杂。为了提高系统的可靠性和实时性,使编程人员减少数据通讯编程的复杂度,重点关注于业务逻辑功能,本文提出了一种基于ACE架构的前置采集软件设计方案。
1 ACE架构简介
ACE(Adaptive Communication Environment)是一种面向对象的开放源码的应用框架,它封装了底层API,屏蔽了系统间的差异,提供了一组丰富的可重用C++包装外观和框架组件,可跨多种平台完成通用的通信软件任务。
ACE体系机构包括3个层次结构:
1.1 操作系统适配层
对操作系统并发机制和进程间通信机制进行封装。采用模板技术对不同操作系统间的通信API进行封装,对外提供统一的接口。消除了操作系统间的差异;
1.2 OO Wrappers层
应用C++的面向对象特性和模板实现内存管理。多线程及多进程管理,消息队列机制,动态服务配置,定时器队列等。在具体应用中可通过组合和聚合,选择和包装这些类完成具体的实现。
1.3 框架组件层
前摄器、反应器、任务、连接接收器等框架组件。
ACE框架组件设计思想和设计模式是根据领域的特性来定制,其中具有针对通信系统特有的部分,将这种框架和设计模式应用前置采集系统的设计中,消除系统底层通信编程的复杂性,使得网络编程人员把大部分的精力集中于如何完成应用系统软件功能的实现上,将会大大缩短系统的开发周期。
2 前置采集软件的设计
2.1 软件设计原则
前置采集软件的功能是采集整条地铁线路的能源数据并进行统计分析,根据能源管理系统的特点,前置采集软件具有较高的要求:
2.1.1 可靠性
软件能够长期可靠、稳定的运行是软件设计原则的首位。软件应具备主备切换功能,运行故障时能够自动切换,保证系统能够长期稳定可靠的运行。
2.1.2 实时性
软件能够及时高效的采集各种能耗数据,保证系统能够实时监测各种能耗设备运行状态和信息。
2.1.3 可维护性
软件应具有很好的易维护性,满足多种通信方式、多种规约终端统一接入需求,并且能非常方便地扩充、维护通信规约和通信方式。
2.2 软件架构
前置采集软件的主要功能进行能源数据的采集和数据的统计。前置采集的各个服务首先在启动的时候,读取对应的配置文档,加载并初始化各个服务。然后建立与现场各种采集终端通信,采用标准规约进行数据交互活动。前置采集软件将采集后的数据经过相关处理后存储到相应sqlite格式的文件中。
图1为前置采集软件的架构图,从图中可以看出该软件划分为6部分,分别为监控服务,采集服务、解析服务、统计服务、补招服务和用户服务。
监控服务:该服务主要有两个作用,一个是控制前置采集软件运行模式,前置采集软件具有四种运行模式:单机模式、主备模式、负载均衡和负载分流。通过Web设置界面进行运行模式的设置;另一个是对软件中其它的服务进行监控,如其它服务运行中出现意外而崩溃,监控模块则重新开启该服务,以保证前置采集软件的长期稳定运行。
采集服务:负责与终端的通信连接管理和数据收发和转发。采集模块首先获取通道信息,然后根据通道类型创建通道对象(串口、TCP服务器、TCP客户端和串口服务器等等),最后将所新建的通道对象依次打开并根据通道的类型依次对所关联的终端进行连接。之后与终端进行报文通信,将从终端收到的报文转发到解析服务,将从解析服务接收到的报文根据所关联终端的对应通道发送到该终端。
解析服务:主要包括解析模块,任务模块和对时模块。其中解析模块负责对从采集服务传送来的报文数据和任务模块传送来的采集任务进行规约解析;任务模块从数据库中定时加载采集任务和模板,组织成采集任务后发送给解析模块;对时模块则通过自定义对时状态机对终端时间进行控制。解析后的数据保存为sqlite格式的文件,以供其它服务使用。
统计服务:主要是对从采集服务上传来的数据进行统计分析。包括实時数据统计和曲线数据统计。其中统计实时数据分为流量统计、终端状态和表计状态统计。曲线数据统计分为终端历史状态统计,采集完整率统计和缺点统计。
补招服务:负责对采集的数据项进行统计,如数据项在指定的时间点没有采集到数据或采集到数据异常,则会生成补招任务下发给解析服务进行数据的补招。
用户服务:处理与用户的任务交互。能源管理系统主要是由前台和后台两部分组成,而用户服务是前台和后台之间通讯的桥梁。用户服务的功能主要是新建与前台的路由,新建与解析服务的路由,对路由收到的数据进行相应的处理等等。
3 前置采集软件的实现
3.1 服务间的通讯方式
该软件所包含的六个服务间通讯方式采用共享内存方式,比如:解析服务和采集服务之间的通讯、补招服务和采集服务之间的通讯等。共享内存就是允许多个不相关的进程访问同一逻辑内存来进行数据交换。当网络应用拥有需要由多个进程来查看或操纵的数据时,共享内存是非常有效的一种通信机制。
ACE提供两个共享内存机制:System V共享内存和内存映射文件,本软件采用内存映射文件机制。内存映射文件机制是某个文件的部分或者全部都可以被映射到虚拟内存的某一块上,这部分虚拟内存跨多进程共享,映射到内存文件的内容可被刷新到永久存储器中,这种做法提供了一种便捷地保存和恢复跨程序执行的信息的途径。在这种机制中,操作系统都能够让多个进程把共享内存区域映射到它们的地址空间中,如图2,所有映射了共享内存区域的进程都能够直接对共享内存进行读写操作。
本系统采用内存映射文件机制的基础是ACE_Mem_Map类,该类用来映射磁盘文件到内存。而ACE_MMAP_Memory_Pool类则是为内存映射文件分配内存的内存池。
3.2 守护进程的实现
在设计进程守护中使用ACE架构中的ACE_Reactor模式来实现主动对象模式。在ACE_Reactor模式中,ACE_Event_Handler是所有事件处理器的基类。通过向ACE_Reactor注册事件,并同时传递用以处理此事件的事件处理器的指针。ACE_Reactor自动在内部维护一些表,将事件与事件处理器对象关联起来,当用户注册的事件发生时, ACE_Reactor发出对处理器中相应方法的回调。
每个需要守护的进程定义一个服务对象,服务对象注册一个定时器事件,定时来检测需要守护的进程是否存在,如不存在则启动该进程,如果存在则继续守护。在实现服务类时,采取以下步骤:
(1)创建ACE_Event_Handler的子类。
(2)实现服务类的打开和关闭函数:open函数用于对服务进行初始化;而close()函数则是释放、关闭各种资源。
(3)创建定时时钟,通过调用ACE_Reactor::instance()->schedule_timer()来定义时钟。
(4)重写时钟超时的处理方法:handle_timeout(),当时钟超时后将自动调用该处理方法来处理。
3.3 采集服务的实现
采集服务是负责与终端的通信连接管理和数据收发和转发的功能。该模块采用异步I/O操作ACE_Proactor设计模式。首先采集服务注册异步事件及相应的回调函数注册到完成分派器,然后发出异步I/O操作,完成分派器将在I/O操作完成时激活异步事件,并调用相应的回调函数进行事件处理。前摄器设计模式允许单线程化应用并发的执行多个I/O操作,并且不会带来与传统的多线程化机制相关联的开销或设计复杂性。这样做大大减少了 I/ O 处理时间。
采集服务的实现步骤如下:
(1)创建服务处理器。服务器处理均派生自ACE_Service_Handler类,并定义相应的事件处理函数;当发生I/O操作完成事件时,会触发相应的事件完成回调函数。
(2)实现服务处理器I/O操作。ACE_Proactor框架中所有的I/O操作都由相应的异步操作类来完成,如ACE_Asynch_Read_Stream用于在已连接的TCP/IP中进行异步的读取操作,而ACE_Asynch_Write_Stream用于在已連接的 TCP/IP中进行异步写操作。采集服务先将读、写操作注册到服务处理器中,然后发出异步I/O操作请求,当异步I/O操作完成后,系统自动调用服务处理器中的相关函数进行后续的处理工作。
(3)创建TCP/IP连接的接收器。本服务采用ACE_Asynch_Acceptor工厂类来创建TCP/IP连接的接收器,当终端的连接到达时,接收器创建相应的服务处理器对象来处理该连接。
(4)运行事件循环,当I/O事件发生时,调用事件处理器中的事件处理函数。
4 结论
ACE作为一种免费开源的架构,富含网络与系统编程的实用设计模式,具有跨平台等优越特性,适合通信软件的开发。
本文设计一种前置采集软件架构,并应用ACE框架组件完成软件的开发工作。该软件是轨道能源管理系统的重要组成部分,实现了能耗数据的采集和统计。对于轨道交通行业信息集中监控管理未来发展的需求,本文可以为其提供通讯系统提供架构设计和实现方式等方面的参考。
参考文献
[1]Douglas C.Schmidt Stephen D.Huston. c++ Network Programming,Volumn2- Systematic Reuse with ACE and Frameworks[M].北京:电子工业出版社,2004.
[2]陶道,万旺根.ACE框架在网络游戏服务器中的设计与应用[J].现代电子科技,2008.
[3]Schmidt DC.ACE自适配通信环境技术论文集[C].北京:电子工业出版社,2001.
[4]王继刚,顾国昌,芦东昕,黄烨明.构架与模式在通信系统软件中的应用研究[J].计算机应用,2003(11):43-45.
[5]陈雅芳,王晓东,陈德铭,陈建化.基于ACE框架的通信设备监控系统的设计与应用研究[J].福建电脑,2007(02):112-113,106.
[6]何青. ACE在开发健壮可靠的C++系统中的应用研究[J].西安:微机发展,2005(05):43-45.
[7]马学鹏,夏国臣.城市轨道交通能源管理系统研究[J]. 城市轨道交通研究,2014.
[8]刘勇,闫鲁杰.基于物联网、云计算和大数据的工业能源管理系统[J].供用电,2014(12):28-32.
作者单位
天津凯发电气股份有限公司 天津市 300000