基于多种并发机制的卫星电子设备地面测试软件设计方法
2012-04-17华更新衣学慧
龚 健,华更新,孙 越,衣学慧
(北京控制工程研究所,北京 100190)
测试是卫星电子设备研制过程中一个重要的环节,卫星电子设备测试系统是一个集数字电路、模拟电路、嵌入式软件、以及专用软件为一体的复杂系统,其实现一般由测试设备硬件和地面测试软件两大部分组成,测试设备的硬件一般包括采用单片机或处理器的硬件板卡、单纯模拟或数字电路的硬件板卡;地面测试软件是直接与用户交互的测试系统专用软件,一般具有图形化的用户界面,需要访问测试设备硬件以便完成测试,并通过数据库访问完成测试数据的存储和管理.目前有多种开发环境支持这种专用软件的开发和设计,例如Microsoft公司的Visual C++和 Visual Basic,National Instruments公司的 LabView 和 LabWindows[1-6].虽然经过十几年的发展,以LabView为代表的新开发工具层出不穷,但Microsoft公司的Visual C++依赖其对底层硬件访问十分便捷、良好的兼容性、广泛的用户基础和技术支持,目前依然是各种测试和监控系统最主要的软件开发环境之一[2-3].采用Visual C++开发星用地面测试软件的好处主要有:便于与硬件进行接口,尤其适合星用非标准硬件板卡的编程;适合通信协议解析等复杂逻辑的程序设计;具有广泛的技术支持获取渠道;能避免购买昂贵的专用测试板卡,降低开发成本.
在卫星电子设备测试系统中,地面测试软件的特点是频繁地访问测试设备硬件,与其进行数据交换,并通过数据库保存测试数据,此外还要响应用户的指令,这就要求软件能够协调好测试数据获取、测试数据保存以及用户指令响应3个方面的工作.在实际测试过程中,地面测试软件正确工作最为关键的是其能否可靠地访问测试设备的各种硬件,可靠地进行数据交换,而不使测试数据发生错误和丢失.在软件中采用单线程的停等数据接收处理方法或是结构欠佳的多线程数据接收处理方法都不能较好的解决问题,很容易造成用户输入长时间得不到响应、丢失测试数据或是数据处理不及时造成测试错误.
论文针对星用地面测试软件的上述特点以及程序设计时出现的问题,提出一种适用于卫星电子设备测试的基于多种并发技术的软件设计方法,并采用该方法设计了星用测试设备的地面测试软件.
1 基于多种并发机制的软件设计方法
作为一种卫星电子设备测试系统的专用软件,地面测试软件的功能主要包括:
1)提供用户接口和界面,及时响应用户的指令.卫星电子设备的测试一般采用人机交互方式,用户通过软件发出测试指令并查看测试结果,因此地面测试软件需要及时响应用户的输入.
2)对测试设备硬件进行访问,其软件的功能与硬件结构直接相关.在实际测试系统中,与地面测试软件进行数据交换的测试设备硬件多采用网络、串行总线以及各种专用接口,地面测试软件通过访问这些硬件发送测试指令,并接收测试的数据和结果,测试软件对测试设备硬件的访问是其最重要的功能.
3)提供数据库访问功能,实现大数据量存储.在测试过程中,一般需要保留测试过程数据和测试结果,且数据量较大,因此地面测试软件中需采用数据库对数据进行存储和管理.
基于上述功能需求,地面测试软件处理好对多种硬件的访问、基于数据库的数据存储、以及用户界面之间的协调同步是软件正确和可靠的保证.为此,本文提出一种采用多线程、消息机制、共享缓冲区和P-V操作4种并发机制相结合的地面测试软件设计方法.
1.1 测试系统的组成结构
卫星电子设备测试系统的典型组成结构如图1所示,由用户、测试系统和被测系统3个部分组成,测试系统又可分为测试系统硬件和地面测试软件.测试过程是用户通过地面测试软件输入测试指令,软件对指令进行分析后通过测试系统硬件再把测试指令发送到星上电子设备,星上电子设备把测试结果返回给测试系统的硬件,地面测试软件从测试系统硬件中读取测试结果输出到用户界面,并访问数据库保存测试的过程数据和结果数据.
星上的电子设备作为被测系统,通过线缆直接与测试系统的硬件相连接,这部分接口的信号一般既包括数字信号又包括模拟信号,测试系统硬件通过接收地面测试软件的指令控制数字和模拟信号的输出,对卫星电子设备施加激励信号,取得电子设备在指定激励下的响应,并把响应作为测试结果返回给测试系统.
在图1的测试系统组成结构中,影响地面测试软件可靠性和并发性的最核心部分是测试过程处理程序,该程序提供3类外部接口完成地面测试软件的并发处理:①与硬件板卡的接口;②与数据库的接口;③与用户的接口.软件运行过程中,外部接口对软件功能和实时性的需求不同,用户界面接口需要的响应时间一般是百毫秒级,硬件数据访问一般是纳秒级或者更快,而数据库访问主要涉及磁盘访问和检索指令,只有当大量数据写入或检索时才需要较长时间.卫星电子设备测试系统中涉及的硬件接口形式多样,常用的有以太网、RS422串口、CAN总线、1553B总线,以及各种专用接口,而且在一个实际的测试系统中往往存在多种硬件接口,如果对这些复杂多样的硬件接口处理不好,则会造成数据丢失、测试数据错误、用户输入不能响应甚至程序崩溃.因此,在星用地面测试软件设计的关键是协调好各种硬件接口、数据库访问,以及响应用户输入之间的关系,保证地面测试软件的可靠运行.
1.2 软件设计方法
针对卫星电子设备测试系统的需求,在地面测试软件中采用多种并发机制,即多线程、消息机制、共享缓冲区、P-V操作,并在程序设计中把他们结合起来使用.
(1)多线程的程序框架
线程是Windows操作系统中能被调度的最小单位,与进程相比较具有资源开销较小,且线程间通信处理简单的特点,采用多线程进行程序设计能有效提高系统的并发性.在卫星电子设备测试软件中采用多线程结构的主要目的是保证通过访问硬件接口实现可靠的数据发送、接收和处理.这种数据一般都具有某种协议和格式,在发送数据时,需要封装一些协议信息,最终交由硬件传输的数据则是包含了协议信息的数据;接收数据时过程正好相反.收发数据的层次结构如图2所示.
图2 硬件数据收发的层次结构Fig.2 Hardware hierarchical structure for data receive and transmission
在实际的测试系统中,地面测试软件需要负责多种硬件接口数据的收发和处理,因此程序中采用4类线程:①程序的主线程,用于处理用户界面,并负责创建和管理其他子线程;②每个硬件板卡对应一个数据接收线程,只负责从该板卡接收数据;③一个或多个数据处理线程,负责对从硬件接收的数据进行协议解析,以及向硬件发送带有协议的数据;④数据库访问线程,负责数据库读写.整个地面测试软件的结构如图4所示,主线程不断处理用户输入、显示输出信息,并协调各子线程的工作,其余每个线程都设置一个无限循环,不断处理各自负责的任务,在每次循环中都要自挂起一段时间,以便交出处理器时间让其他线程能够调度.
(2)基于共享缓冲区的数据交互
建立了多线程结构的软件中,各线程间需要进行数据交互,例如硬件数据接收线程需要把收到的数据传递给数据处理线程,以便对数据进行协议解析,而数据处理线程又需要把解析好的数据传递给主线程以便显示和存储.共享存储区是多任务间通信的主要方法,在多线程的程序中就表现为全局性的变量.地面测试软件采用共享缓冲区实现线程间的数据交换,共享缓冲区设置如图5所示,缓冲区采用顺序循环结构,并设置读写两个指针分别指示读写的位置,每个单元代表一个数据记录,数据缓冲区的大小根据实际应用情况决定,当采用合适的长度时能够可靠地实现数据接收.数据缓冲区的典型数据结构如图3所示.
图3 数据缓冲区的典型数据结构Fig.3 Tytical bata structure of data buffer
(3)基于P-V操作的共享缓冲区读写保护
当两个或两个以上的线程同时访问共享缓冲区时,可能发生数据访问冲突,这种情况下容易造成缓冲区中数据的不一致,因此需要引入临界资源互斥访问机制,P-V操作能较好地解决对共享缓冲区的互斥访问.以两个线程同时访问一个共享缓冲区为例,其通过P-V操作的访问过程如图6所示.
图6 两个线程采用P-V操作访问共享缓冲区的过程Fig.6 Two threads accessing shared buffer with P-V operation
线程通过P-V操作访问共享缓冲区的算法如下:
①Create Mutex Mbuf;
②P(Mbuf);
③Access to shared buffer;
(4)利用消息机制实现即时通知
多线程间采用共享缓冲区机制进行数据交互更多是一种查询的通信方式,需要数据接收线程不断查询数据缓冲区中是否有新的数据达到以便进行处理,而引入消息机制则提供了线程间的类似中断式的高效通信方式,这种方式能够及时的把诸如数据接收完成等信息传达给其他线程,以便能及时的处理、存储或显示信息.可见为了实现高效运行,地面测试软件的多个线程间除了采用共享缓冲区和P-V操作进行数据交换外,还需要利用消息机制进行协调.
地面测试软件的消息机制主要可以用于下层线程通知上层线程,即服务线程通知被服务线程.在卫星电子设备测试系统中,每次测试由用户通过地面测试软件输入测试指令主动发起,测试指令经过发送数据缓冲区并由数据处理线程发送给测试系统的硬件,测试结果的接收通过与硬件相对应的硬件数据接收线程i实现,硬件数据接收线程i完成数据接收后可通过消息通知数据处理线程,数据处理线程完成数据处理后把结果通过消息传递给用户界面,此时主线程即能够显示测试结果,并把数据保存到数据库中.利用Visual C++的消息机制,可以方便的实现消息通信,消息机制主要由消息映射表和消息处理函数组成,消息映射表用于把指定的消息与其处理函数联系起来,当接收到消息时自动调用消息处理函数;消息处理函数则包含了用户实现的对该消息的处理程序.地面测试软件的利用消息实现的通信过程和消息机制如图7所示.
2 一个测试系统的实例
采用上述软件设计方法,开发了某星用电子设备测试系统的地面测试软件.整个测试系统的组成结构可参见图1,测试系统与被测电子设备的连接接口有两种:以太网和RS422串口;数据库采用ACCESS数据库.地面测试软件的开发采用Visual C++6.0,软件的组成结构如图8所示,对网络的访问采用从CSocket继承的类实现,由于CSocket类的数据接收函数OnReceive()的消息映射也是一种并发机制,因此对网络接口不再使用线程进行实现;对于RS422串口数据接收采用单独的线程;创建一个数据处理线程负责对以太网接口和RS422串口的数据进行处理,完成接收数据解析以及带有帧格式数据的发送;对数据库访问采用单独线程.线程之间通过带有P-V操作的共享数据缓冲区交换数据,此外数据处理线程通过消息机制及时把数据处理情况通知主线程.
3 结论
论文针对卫星电子设备地面测试软件需要处理多种硬件接口的特点,提出一种采用多线程、消息机制、共享缓冲区和P-V操作多种并发机制相结合的程序设计方法.地面测试软件具体设计方法是,软件首先建立在层次化的多线程结构之上,底层线程向上层线程提供服务,在相邻两层线程之间通过共享缓冲区交换数据,同时把共享缓冲区作为临界资源进行保护,采用P-V操作进行访问,防止出现数据的不同步,此外底层服务线程采用消息机制通知用户界面数据处理的状态和结果.最后,论文给出了一个某型号卫星电子设备地面测试软件的实现,实际应用表明这种并发程序设计方法是成功和有效的.
[1] 雷訇,李强,左铁钏.新型大功率激光光束光斑质量测试仪的软件开发[J].北京工业大学学报,2001,27(2):197-201 Lei H,Li Q,Zuo T C.Software development of new type high-power laser beam quality analyzer[J].Journal of Beijing Polytechnic University,2001,27(2):197-201
[2] 王俊国,周建中.Visual C++6.0环境下的过程控制系统软件设计与实现[J].工业仪表与自动化装置,2005(6):45-47 Wang J G,Zhou J Z.The software design and implementation of a process control system based on the Visual C++6.0[J].Industrial Instrumentation & Automation ,2005,(6):45-47
[3] 黎建伟,干方建,王硕桂.基于运动控制器的数控软件研究与开发[J].工业控制计算机,2009,22(6):30-31 Li J W,Gan F J,Wang S G.Research and develop on CNC software based on motion controller[J].Industrial Control Computer,2009,22(6):30-31
[4] 陈敏,汤晓安.虚拟仪器软件LabVIEW与数据采集[J].小型微型计算机系统,2001,22(4):501-503 Chen M,Tang X A.Virtual instrument software-labview and data acqusition[J].Journal of Chinese Computer Systems ,2001,22(4):501-503
[5] 陈怀民,安玉娇,王亮.基于LabWindows/CVI虚拟测试系统软件设计与实现[J].测控技术,2009,28(11):59-62 Chen H M,An Y J,Wang L.Design and implementation of virtual test system based on LabWindows/CVI[J].Measurement& Control Technology,2009,28(11):59-62