1. 引言
无人潜航器(UUV)是一种以潜艇或水面舰船作为支援平台、能长时间在水下自主航行的智能化装置,由于隐蔽性强、智能化程度高、活动受限小、作战成本低,在未来海战中的作用正日趋凸显,被人们称为现代海军的“力量倍增器”,近年来,世界各国都在积极发展各种无人潜航器。电子系统是UUV的核心系统之一,而电路板是电子系统质量的直接影响因素,其检测会影响到生产运行和维护质量 [1]。随着电子技术及数字电路板制造技术的飞速发展,电路功能和结构日益复杂,电路板测试工作量与日俱增,对测试速度和测试精度的要求也不断提高。某型UUV的电子系统由十余种电路板组成,当进行生产或产品发生故障时就需要对电路板进行检测。目前,对电路板的测试主要基于万用表、示波器等测试平台,整个测试过程由人工手动控制。这种人工测试方式劳动强度大、工作效率低、对测试人员要求较高、无法自动生成测试结果以存档分析,不适于批量测试。因此传统的电路板人工测试方法已不能满足实际测试需求,采用自动测试系统已经成为一个通用选择。但是从国内的发展现状来看,自动测试系统在实际应用方面仍然存在不小的问题,进而阻碍了自动测试系统的进一步发展。首先,国内的自动测试系统特点是种类多、性能杂、专用性强,缺乏一定的通用性,为此,测试人员需要不断学习各种自动测试系统,才能进行完整、正确的测试工作,增加了测试人员的学习和工作量,不利于自动测试系统的发展。其次目前的自动测试系统应用主要集中在整机系统级测试上,且一台测试系统还是只针对一个单一的电子系统,无法满足各种电路板可在一台通用的测试系统上进行测试的需求。最后专用的自动测试设备因其针对性强、通用性和扩展性较差,导致测试成本比较高,随着电子设备复杂程度的提高,其测试成本已占设备总成本的30%以上 [2] [3] [4] [5] [6]。
为了解决上述问题,本文设计并实现了一种基于PCI总线和虚拟仪器的某型UUV电子系统的电路板级自动测试系统,可提供电路板测试的各类测试资源,实现对某型UUV十余种电路板测试的通用化和智能化,提高测试诊断效率,降低对维修保障人员的技术要求,减少调试和测试的人力、物力,缩短产品研制生产周期。
2. 系统硬件设计
某型UUV电子系统共有12种电路板,类型涵盖数字电路、模拟电路、数模混合电路,既有常规的电压电流检测,也有波形特性检测,因此在系统硬件设计上采用系统集成的方式,将各检测资源集成到一个平台上,形成一个通用检测接口,通过不同的适配器连接至通用接口上来满足不同电路板的检测需求。
通过对测试要求的分析,以及对当前构建基于虚拟仪器的测试系统几种方式的比较,本文采用PC-DAQ技术方案。该方案综合利用虚拟仪器技术和PCI总线技术,具有性价比高、通用性强、设计手段灵活等优点。系统由主控计算机、UPS电源、显控单元、PCI仪器组合、电源组合、总线接口单元、单板检测接口单元、自检适配单元以及软件单元等分系统构成,采用公共信号接口作为测试资源集中输出的环境,实现测试系统与被测电路板测试信号的交互适配,形成仪器资源与被测对象连接通路 [2]。系统总体结构框图如图1所示。

Figure 1. Structure block diagram of automatic test system
图1. 自动测试系统结构框图
1) 主控计算机和显控单元。主控计算机是整个系统的控制核心,在主控计算机的基础上扩展外围接口模块构成整个检测系统。在软件的辅助之下,由主控计算机控制多功能数据采集模块、数字万用表模块和串口扩展模块的工作参数配置、信号采集、数据处理及显示,同时控制电源组合的输出。显控单元提供人机交互界面。
2) PCI仪器组合。用于提供测试所需的激励信号与响应信号资源,并通过总线接口单元中的多路开关和电源组合实现电源的输出控制,由三个模块组成:
a) 多功能数据采集模块:该模块是系统硬件最关键的一部分,实现三种功能:① 通过可编程I/O口输出控制信号,控制总线接口单元中的多路开关以及模拟检测过程中电路板所需要的口线控制信号;② 采集被测信号,进行模数转换,然后将其送入计算机系统;③ 根据检测需求输出各种波形的激励信号。多功能采集模块通过组态软件与通用计算机相结合,可以组成瞬态波形记录仪、数字存储示波器、动态频谱分析仪、多波形信号发生器等,多功能一体化,完成信号产生、数据采集、存储、分析及结果输出等功能,通过组态软件,使数据处理工作变得简捷、高效。
b) 数字万用表模块。在对电路板进行检测时,需要测量电路板的工作电流和某些通道的导通电阻,该模块融合了普通万用表的多测量类型测试特性,同时大大提升了其测量精度和测量范围,特别适合应用于工业标准的测量。
c) 串口扩展模块。串口扩展模块需要完成以下功能:① 为检测软件完成电路板串口通讯功能的检测提供硬件支持;② 通过串口指令控制程控电源输出;③ 检测软件通过该模块模拟电路板工作时所需要的串口信息,保证电路板能正常工作。
3) 电源组合。包括程控电源和线性电源。不同的被测电路板所需的供电路数、供电电压的大小各不相同,因此采用程控电源调节输出电压,配合多路开关满足不同电路板对测试电源的需求。但程控电源的缺点是纹波过大,会干扰某些电路板的测试。为减少干扰,在检测这些敏感电路板时,采用纹波较小的线性电源供电。
4) 总线接口单元。总线接口单元是系统硬件设计的重点,它包含了信号调理电路和多路开关电路。信号调理部分包括AI信号调理及转接、DA信号和I/O信号转接,串行口扩展转接,电源组合滤波和转接,多路开关输入/输出转接,对超出量程的输入信号进行整形和限幅,根据需要将板卡产生的激励信号进行适当的处理,对被测信号进行放大、滤波,提供电子负载等功能。
多路开关部分主要负责控制被测电路板上电或断电、串口通讯电路的选通控制以及信号选择电路的选通控制与反馈功能。通过控制多功能数据采集模块输出端口上的I/O状态达到控制多路开关电路上的继电器,完成开关的闭合或断开。
5) 单板检测接口单元。单板检测接口单元主要实现测试系统通用测试接口向被测单元特定接口的转换。测试资源不直接与被测对象连接,而是通过单板检测接口单元实现。
6) 自检适配单元。用于测试系统设备的功能自检和自校准。
7) UPS电源。改善电源质量,防止市电突然断电而影响正常工作,给设备造成损害。
3. 系统软件设计
3.1. 软件总体设计
软件系统是电路板自动测试系统的核心,测试系统的参数设定、仪器配置、测试激励的产生、响应数据的采集、测试结果的判断、故障定位和报表生成等,都是在系统软件的控制下完成的 [6]。本文基于Windows7操作系统和LabWindows/CVI软件开发环境,采用自顶向下和模块化的程序设计方法开发了电路板测试系统的软件平台,可完成电路板的功能测试以及电路板的故障诊断功能,具备人机界面友好、图形化的开发界面、开发速度快的优点。
LabWindows/CVI是NI公司推出的虚拟仪器软件开发环境,全面支持C语言,开发具有极其丰富的函数库;它提供了直观的图形显示界面,使开发的应用程序具有良好的人机界面,方便用户操作 [7];同时它也是面向测控领域的专业开发平台,提供强大的仪器连接控制功能 [8]。本系统软件组成如图2所示。
3.2. 检测流程设计
测试主流程如图3所示。测试人员将自检适配单元接入测试设备的通用接口后打开软件后进入测试主界面,首先进行系统的自检,判断测试硬件系统自身是否存在故障,这也是任何一个测试过程的第一步。在未进行自检,并且自检成功前,测试软件的其他测试功能是无法使用的。自检成功后,测试软件
使能测试功能并返回主界面。此时用户将将被测电路板插入到对应的适配器并将适配器接入通用接口,测试软件将自动识别出所连接电路板的类型,并自动进入相应的测试模块,按照测试流程对被测电路板进行检测。检测完成后,将检测结果在检测界面上显示并自动保存到数据库,以便查询与打印。最后返回主界面,通过更换电路板和适配器进行下一轮的测试。如此循环,直至所有测试工作完成。
由于篇幅所限,本文仅以某型UUV接收机电路板为例介绍电路板的检测流程,图4为接收机电路板检测流程。

Figure 4. Detection flow chart of receiver circuit board
图4. 接收机电路板检测流程图
4. 系统关键技术实现
4.1. 通用化检测接口的设计和实现
本系统需要测试的电路板一共有12种,每种电路板均有2个检查接口,各个检查接口的接口形式不统一,每种电路板检测所需的硬件资源也不尽相同,如果对每种电路板都设计特定的检测接口将造成人力和物力资源的浪费。因此信号连接设计是实现测试平台通用性、方便性和测试灵活性的关键 [9]。
为了实现同一台检测设备对12种电路板都能进行检测,解决检测接口通用化的问题,本文在总线接口单元和被测电路板之间设计了一个单板检测接口单元,其一端连接适配器,另一端连接总线接口单元。该单元主要实现测试系统硬件资源接口向被测单元特定接口的连接、转换和分配。测试资源不直接与被测对象连接,而是通过单板检测接口单元实现。在单板检测接口单元上集成了所有的硬件资源接口,针对不同的检测功能,硬件设备无须改动,只需更换适配器,进入不同的测试软件模块即可进行相应电路板的测试。
单板检测接口单元与适配器之间通过2个设计有防插错措施的快速接插件连接,以保证单板检测接口单元与适配器的信号正确连接。在这种单板检测接口单元—适配器结构中,单板检测接口单元的检测接口是标准的、通用的;适配器针对具体的被测电路板,是非标准的、专用的。通过这种设计,单板检测接口单元成为测试资源连接被测信号和向被测电路板输出激励的统一接口,实现了接口的通用性。通过设计新的适配器和软件模块,该自动测试系统可很快用于其他电路板的检测。通用化检测接口设计如图5所示。

Figure 5. Schematic diagram of universal detection interface
图5. 通用化检测接口示意图
4.2. 设备自诊断设计和实现
测试平台自身的可靠性、准确性对于被测设备的测试、诊断质量至关重要。除了对相关仪器进行定期计量校准外,日常正常使用过程中的设备自检也是保障测试平台可靠运行的重要手段 [9]。
设备自诊断功能是在测试功能使用前起作用,其主要目的是对检测设备自身状况进行检测,只有在检测设备完好的情况下才能对产品进行检测。通常的做法是对PCI总线的仪器模块进行初始化,通过板卡厂商提供的自检函数检测各模块的工作状况,这种方法只能对仪器模块进行自检,不能对设备的其他电路和连接通路进行自检。为了实现对设备自身的功能和关键技术指标进行自诊断测试。本文将自诊断功能的设计分为硬件设计和软件设计。在硬件上采用基于仪器比对的系统自检方式,设计了自检适配单元。将测试平台配置的激励仪器与测量仪器的相关信号通道通过多路开关进行匹配连接,串口通道也通过设计闭环回路通过多路开关两两相连,采用自身闭环检查或同类仪器交叉闭环检查的方法完成功能和性能检查。
在软件上,设计了独立的自检模块,整个自检过程封装在SelfTestFunction (void)函数中,每次需要自检时,调用该函数即可,返回值为1表示自检中出现错误,返回值为0表示自检正常。自检模块软件结构如图6所示,流程图如图7所示。

Figure 6. Software structure diagram of self inspection module
图6. 自检模块软件结构图

Figure 7. Main flow chart and sub module flow chart of self inspection module
图7. 自检模块主流程图和分模块流程图
4.3. 状态监控模块设计和实现
由于测试系统没有传统意义上的硬件操作面板,信号的状态无法利用硬件指示灯显示,为了使操作人员及时了解测试的过程和状态,排除测试过程中出现的意外情况,保护被测电路板,需要程序实时监控测试过程中的某些重要参数,如被测电路板的工作电压、静态工作电流、动态工作电流、重要芯片工作电压、发射电流、点火电流等,程序应创建一个独立的线程完成上述功能。状态监控模块采用多线程编程来实现,使用主线程创建显示并运行主测试程序,在次线程中运行状态监控操作和其他对时间要求很高的操作。
LabWindows/CVI提供了两种在次线程中运行代码的高级机制,分别是线程池(thread pool)和异步定时器(asynchronous timer)。线程池适用于需要不连续地执行或在循环中执行的任务,而异步定时器适用于在固定时间间隔内执行的任务 [10]。在状态监控模块的实现中,主要使用了线程池技术。
主函数中使用CmtNewThreadPool (10, &Poolhandle)函数创建一个10线程的线程池,并在整个程序结束后使用CmtDiscardThreadPool (Poolhandle)函数释放线程池。在测试软件中共使用了5个线程,分别为:状态监控线程、高频信号采样线程、I/O口信号采样线程、串口通讯线程和信号曲线绘制线程,通过设置信号量机制来防止线程间的死锁。
在主线程中使用如下代码创建状态监控线程。
if ((CmtScheduleThreadPoolFunction (Poolhandle, MonitorThreadFunction, & ThreadIndex, & ThreadFuncId)) < 0)//创建状态监控线程
{……; MessagePopup(错误, 监控线程初始化出错!); sFlg = 0; return 0;}
……//其他操作
if (ThreadFuncId!=0) CmtWaitForThreadPoolFunctionCompletion (Poolhandle,ThreadFuncId, OPT_TP_PROCESS_EVENTS_WHILE_WAITING);//等待状态监控线程结束
/*释放线程*/
CmtReleaseThreadPoolFunctionID (Poolhandle, ThreadFuncId);
状态监控线程实现代码如下:
int CVICALLBACK MonitorThreadFunction,(void *functionData)
{while(sFlg){
ReadADVoltage(sampleInstrG, chanName,chanNum, sampleRate, gainRange,gData,sampleNum);//采样数据
sum=0; Mean (gData,sampleNum,&sum); a24v=sum/A1XISHU*1000; //数据处理
if(a24v
a24vUp){
SetCtrlAttribute (panel, ledName, ATTR_ON_COLOR, VAL_RED);
SetCtrlVal (panel, ledName, ON);
StopTestFunction();
MessagePopup(警告工作电压超标,停止检测!);
return 0; }//当监控到电路板工作电压不满足要求时,点亮红灯,并停止检测
…… //其他监控操作类似}}}
4.4. 信号处理算法设计和实现
根据需求,测试软件需要对大量数据进行分析处理,这些数据包括各种模拟信号、多路数字信号等。模拟通道数据不可避免会受到干扰信号影响,使用数字滤波来提取低频成分可使频域分析的结果更接近理论值。
频域分析是数字信号处理的重要手段之一,为降低频谱泄露的影响,测试系统软件在采样序列上加权并加上各种窗函数来抑制旁瓣的增益。例如加汉宁窗之后再用FFT计算被测信号的幅频和相频特性。
HanWin (voltageAI,SAMPLENUM); //加汉宁窗
使用巴特沃兹滤波函数对采样信号进行处理 [7],过滤掉频带外的干扰信号后用FFT计算被测信号的频谱特性。
fft = malloc((int)SAMPLENUM *sizeof(double));
sData = malloc((int)SAMPLENUM *sizeof(double));
Bw_BPF (voltageAI, SAMPLENUM, Sampling_Frequency, Lower_Cutoff_Freq, Upper_Cutoff_Freq, 5, voltageAI);//巴特沃斯带通滤波
FFT(sData,fft,SAMPLENUM); //进行快速傅里叶变换
/*找到实部最大值,对应的点为频率*/
……
daF = maxN0*SAMPLERATE_DA*1.0/(SAMPLENUM *1.0)/1000.0;
5. 测试效率对比分析
通过分别采用传统手动测试方式和自动测试方式对某型UUV电路板进行测试,记录检测时间和所需测试人员数量,对测试结果进行对比,验证了自动测试系统的性能,如表1所示。

Table 1. Comparison between traditional manual test and automatic test
表1. 传统人工测试与自动化测试对比表
由表1可见,传统手工测试方式检测一块电路板至少需要2人以上,检测时间最少需要10分钟,最长则需要150分钟。而自动测试方式仅需1人即可完成一块电路板检测,检测时间最少仅只需10秒,最长也仅需5分钟左右,效率得到极大提高。此外,自动测试还减少了人员出错的概率,防止误操作对电路板造成损坏。由此可见,相较传统测试方法,自动测试系统能够节约大量的测试时间与人员,实现测试工作效果的最大化提高,并且还能防止人为因素对测试结果造成的不良影响。
6. 结论
本文针对传统电路板测试的局限性与单一性及日趋灵活的电路板测试需求,采用PCI总线和虚拟仪器技术,以LabWindows/CVI作为软件系统开发平台,设计了某型UUV电子系统的电路板自动测试系统。该自动测试系统测试资源丰富,仪器模块更换、扩展容易,可对该型UUV多种类型电路板进行自动测试。经过对多种电路板的测试诊断结果验证,可以实现对各种电路板组件的快速测试和故障诊断,具有效率高、研发周期短、通用性和经济性强等特点,可有效解决某型UUV电子系统电路板生产、维修难题。该系统可由用户根据不同的需求扩展为其他装备的电路板维修测试系统,具有较大的经济价值和应用价值。