基于设计模式的测控系统采集控制模块软件设计

2015-02-21 06:48徐思捷刘浪赵世平
电子设计工程 2015年18期
关键词:设计模式采集卡适配器

徐思捷,刘浪,赵世平

(四川大学 制造科学与工程学院,四川 成都 610065)

基于设计模式的测控系统采集控制模块软件设计

徐思捷,刘浪,赵世平

(四川大学 制造科学与工程学院,四川 成都 610065)

针对某测控系统,开发了系统的采集控制模块。模块设计采用了设计模式中的适配器模式和单件模式,解决了系统上层软件对采集控制设备函数耦合度高等问题。在系统的开发使用过程中,模块能够根据系统需求的变化更换采集控制设备而不更改上层软件,并保证设备稳定运行,提高了系统的开发效率和可维护性。

测控系统;采集控制模块;设计模式;软件设计

设计模式是面向对象软件的设计经验的总结,每一个设计模式系统的命名、解释和评价了面向对象系统中一个重要的和重复出现的设计[1]。设计模式是人们可以更加简单方便地复用成功的设计和体系结构,帮助人们做出有利于系统复用的选择,从而使人们做出复用性好和灵活性好的设计[2]。

在测控系统的采集控制模块的开发过程中,有时用户的个别需求无法明确,这使得一些硬件方案和一些功能的细节往往需要随着项目的推进才能得以确定。然而,有时硬件方案的修改和细节功能的改变,往往造成大量的代码修改,为软件开发带来一定的困扰。在此,尝试使用设计模式和面向对象编程思想,对测控系统数据采集模块架构层面的设计,降低各个模块之间的耦合,增强系统软件的可扩展性、可维护性和可靠性。

1 采集控制模块

1.1 采集控制设备简介

在测控系统中,各个被测物理量(力、位移等)通过传感器采集;传感器的采集信号,传到采集设备中,采集设备再对信号进行处理(数模转换等);计算机再通过软件驱动采集设备,获取传感器的输出信号的数值,经过进一步处理后,再通过输出信号到执行机构,从而完成对系统的控制。因此采集控制设备是传感器和执行机构与工控机的桥梁,上层软件获取传感器数值和对系统执行机构进行控制,均要通过采集设备来完成。

随着工控机在工业控制中的应用越来越广泛,为满足工控机获取数据的需要,国内外许多厂商生产了各种各样的采集控制设备,主要是以数据采集卡(或I/O板卡)的形式居多。这类板卡多参照计算机总线技术,直接插入到主机相应的扩展槽中,就可以快速方便的构成一个数据采集控制系统。目前数据采集卡的种类越来越多,根据采集信号不同可以分为模拟量输入板卡、模拟量输出板卡、数字量输入板卡、数字量输出板卡、多功能采集卡等;也出现一些不同总线类型的板卡,如CAN总线采集卡、PCI总线采集卡、网络总线采集卡等等,这些采集板卡有多种工作模式、采样频率、量程精度选择,可以满足不同的采集控制需求。本文所开发的测控系统是随着产品的开发而开发,对采样频率的要求多次变化,经过测试多款设备后,选择研华公司的PCI-1716数据采集卡,该采集卡是具有模拟量输入输出、数字量输入输出的多功能采集卡,其中模拟量输入具有8路差分输入,16位的分辨率和250 ks/s的采样频率。

1.2 采集控制模块简介

通常每一套采集控制设备的厂商会提供一个软件驱动,并提供一套API(Application Programming Interface,应用程序编程接口)让用户操作设备。但是,如果在系统软件中直接对这些API函数进行调用,则程序会与底层的采集模块紧密耦合;如果因为需求的改变,如被采集信号频率发生变化等原因而需要更换采集设备,则程序有大量模块需要重新编写,不利于程序的可维护性和扩展性。因此,需要设计采集控制模块,其主要功能是设计接口对厂家提供的API函数进行封装,以方便软件其他模块进行调用,同时,也可以降低上层软件与厂家提供的API函数间的耦合。

2 设计模式在采集控制模块设计中的应用

2.1 设计模式简介

设计模式是有经验的设计者总结出的一些解决特定设计问题的解决方案。当找到一个好的设计方案,如果能够一遍一遍的复用,就可以将新的设计建立在以往的工作基础上,可以提高工作效率[3]。应用设计模式,可以使面你选哪个对象的设计更加灵活、优雅,最终复用性和可维护性更好。总而言之,设计模式的目的是为了使人们更易于编写和修改程序,提高代码的可复用性和可维护性。一般来说,一种模式具备4个基本要素:模式名称(pattern name)、问题(problem)、解决方案(solution)、效果(consequence)。

2.2 基于适配器模式的设计

适配器模式的意图是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,从而使得程序间的耦合更松[4]。适配器模式分为类适配器和对象适配器。适配器模式包含Target类,Adaptee类和Adapter类,Target类是定义用户使用的接口,Adaptee类是已经存在的接口,这个接口需要适配, Adapter类是将Adaptee类与Adapter类进行适配。

如前所说,采集控制模块主要是设计设计接口对设备提供的API函数进行封装。设计接口需要根据系统软件的需要和设备的特点进行设计。然而,不同的设备所配备的API函数各不相同,为使得系统能够正常调用设备的API函数,故需要设计一个适配器类。

图1 基于适配器模式的采集控制模块类图Fig.1 The class diagram of measurement and control module class on the basis of adapter pattern

按照适配器模式设计的采集控制模块类图如图1所示, AutomationBaq类是PCI-1716厂家提供的操作设备的库函数,属于被适配类。AbsDevice类为目标接口,上层软件通过操作该类来操作设备,该类不能直接用来直接声明,只能用其指针指向其派生对象。AbsDevice类中,抽象出open、close、read、write、isReady五种方法。其中,open方法主要用于设备采集控制前的准备工作,如启动设备、初始化设备,对于分布式的采集设备可能还包括与远端模块的连接等。其参数(AbsDeviceCfg absCfg)主要是用于传递设备启动所需参数,通常包括设备号、采样频率、工作模式等等,原则上每一种设备会有一个类继承于AbsDeviceCfg类来保存其参数;close方法主要用于在程序退出时关闭设备;read方法主要用于获取设备数据,该方法主要有3个参数,paraObject主要是用于选择设备的读取方式,如一些多功能采集设备包含模拟量和数字量采集,或者一些采集设备包括多种模拟量采集方式,如连续采样和有限采样等等,data主要是用来储存获取的数据, length用来表示需要获取数据的长度;write方法主要用于输出需要的控制量,从而对执行机构进行控制,其参数意义与read方法的参数意义类似;isready方法主要用于判断设备是否在可以开始工作;类中的storedCfg和defaultCfg主要用于对参数的存储,type则是用于判断传递的参数的类型是否与设备一致。Dev1716类为适配器类,继承于目标类AbsDevice类,通过调用厂家给的函数库类来重写目标类的5种方法,值得注意的是某些设备当操作顺序出现错误的时候会使程序出现异常,甚至导致程序崩溃,在重写适配器类的时候应避免这类问题,在上层软件调用顺序错误时(如先调用了read方法,再调用open方法)应通过返回值反馈给上层软件,以提高系统的稳定性。

按照上述的接口,对库函数进行封装后,上层软件对采集设备的调用均通过目标类,做到了上层软件与底层设备的隔离。如果遇到因为需求改变等原因而不得不更换设备,也几乎不需要改变上层软件的代码,仅需重写适配器类即可。不仅如此,使用适配器模式还可以使得上层软件的开发与下层适配器类的编写同步进行,上层软件开发的时候可以使用虚拟的设备类进行测试,大大提高了软件的开发效率。因此在这里采用适配器模式可以减小程序对设备的库函数的依赖,增强软件的可维护性和可复用性。

2.3 基于单件模式的设计

单件模式的意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点[5]。实现这一意图主要是通过将创建这个实例的操作隐藏在一个类操作 (即一个静态成员函数或者一个类方法)后面,由它保证只有一个实例被创建[6-7]。这个操作可以访问保存唯一实例的变量,而且它可以保证这个变量在返回值之前用这个唯一实例初始化。

一个设备的正确使用往往有需要按照一定的操作步骤,如先初始化设备、设置参数再读取信号等。在测控系统的持续运行中,一个采集设备往往在程序不同部分被操作。如果在程序中,一个采集设备被实例化多次而产生多个对象,由于对象之间是相互独立的,则有可能导致对设备的错误操作,并且影响到程序的正常执行。

在测控系统中,为避免设备被多次被实例化,同时也便于对设备的状态进行监控,设计一个DeviceManger类对设备进行管理。DeviceManger类的类图如图2所示。

图2 基于单件模式的DeviceManger类图Fig.2 The class diagram of device manger class on the basis of singleton pattern

用户可以通过调用GetInstance方法获取该类的唯一实例,该方法在第一次调用的时候创建类的唯一实例,以后的调用则返回该实例。该类包含了一个私有的容器类(arrayList),主要有设备对象的添加、查找、移除、停止等方法,在程序初始化的时候调用创建添加设备对象,在程序运行过程中,根据需要查找到相应设备对象进行操作。该类的设计采用单件模式,只在程序开始时创建设备对象并添加,可以保证设备对象从始至终只被创建一次,并且程序各部分可以方便的获取设备对象进行操作,其代码如下所示:

3 结束语

设计模式使得人们可以轻松地借鉴前人设计的经典解决方案。通过软件的开发和实际使用效果证明,在测控系统的采集控制模块的设计与开发的过程中使用设计模式的思想,有效的解决了开发过程中遇到的问题,提高了系统的稳定性、可维护性和复用性,大大提高了软件的开发效率。对于设计模式的使用,关键在于正确理解每个模式的意图和使用条件,还有能正确地对程序中相似内容的抽象,这都需要在软件开发的实践过程中进行摸索和总结。

[1]周毅.设计模式在IT资源管理系统中的应用[J].微计算机信息,2008(3):245-246,272.ZHOU Yi.The application of design patterns in IT resource management system [J].Microcomputer Information,2008(3): 245-246,272.

[2]洪槲.设计模式在电子交易系统的研究与应用[D].广州:中山大学,2006.

[3]魏新颖.设计模式在构建基于.Net的多层Web应用程序的应用研究[D].北京:华北电力大学,2006.

[4]陈天超.接口在设计模式中的应用[J].自动化与仪器仪表,2013(5):112-113.CHEN Tian-chao.Application of interface in design pattern[J].Automation and Instruments,2013(5):112-113.

[5]何泓伟.设计模式混合的构造方法研究及应用[J].计算机工程与设计,2007(5):999-1001,1042.HE Hong-wei.Design pattern mix structure method research and application[J].Computer Engineering and Design,2007(5): 999-1001,1042.

[6]贺冯政.网络游戏服务器通信架构及关键技术研究[D].成都:电子科技大学,2008.

[7]阳建华,郑莹娜,旷雪梅,等.基于PCI-1220U的电动助力转向器性能测试系统研究 [J].工业仪表与自动化装置, 2013(2):22-26.YANG Jian-hua,ZHENG Ying-na,KUANG Xue-mei,et al.Research on performance test of electric power steering system based on PCI-1220U [J].Industrial Instrumentation &Automation,2013(2):22-26.

The software design of the data acquisition module of measurement and control system on the basis of design pattern

XU Si-jie,LIU Lang,ZHAO Shi-ping
(School of Manufactory Science and Engineering,Sichuan University,Chengdu 610065,China)

Design a acquisition and control module for a measurement and control system software.Using Adapter Pattern and Singleton Pattern,the module solve the problem of serious coupling between the upper software and functions of acquisition and control devices.In the development and use of the system,the module makes it possible for replacing the device without changing upper software,and guarantees devices work well,and improve the efficiency and maintainability of the system.

measurement and control system;acquisition and control Module;design pattern;software design

TN99

:A

:1674-6236(2015)18-0038-03

2014-11-24稿件编号:201411203

徐思捷(1989—),男,四川成都人,硕士。研究方向:仪器仪表工程。

猜你喜欢
设计模式采集卡适配器
“1+1”作业设计模式的实践探索
高精度AD采集卡性能测试及评价方法研究
三维协同设计模式下的航天项目管理实践与展望
交通机电工程设计模式创新探讨
面向数控机床的多通道传感数据采集卡设计
基于3D打印的轻型导弹适配器
并行高速采样在地震物理模拟采集中的应用
电源适配器怎么选
PCI-e高速数据采集卡的驱动与上位机软件设计
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信