电子设备可靠性试验性能测试远程控制方法探析
2021-01-13杨威杜爱华司毅刘玉石
杨威,杜爱华,司毅,刘玉石
(1.中国船舶重工集团公司第七二三研究所,扬州 225001;2.中国船舶工业电工电子设备环境与可靠性试验检测中心,扬州 225001))
引言
可靠性试验是分析、验证与评价产品可靠性的一种手段。通过可靠性试验,并对试验结果进行统计处理,可以获得受试产品在各种环境条件下工作时真实的可靠性指标,如失效概率、可靠度、平均寿命等,为使用、生产、设计提供可靠性数据。同时,对试验产品的失效分析,揭示产品的薄弱环节及其原因,制订相应的措施,达到提高产品可靠性的目的。
通常情况下,可靠性试验剖面会设置典型环境条件下的测试点,随着目前可靠性试验时间的增加,性能测试愈发受到各方重视。测试时间长、测试手段单一都会影响可靠性试验的进度与试验质量。某些测试环节需要打开试验箱门,严重影响可靠性试验的条件保证,因此电子设备可靠性试验性能测试远程控制十分重要,即在不开箱门的状态下,通过试验箱出线口在箱外完成全部性能的测试工作。
Keysight U1816X是由两个单刀六掷开关组成的开关矩阵。它能够在不改变物理连接的情况下,在多路信号间进行切换[1]。这使用户能够使用相同的设置执行多次测试,无需频繁连接与断开线缆,因此经常使用在多通道测试系统中。U1816X能够实现整个测试流程的自动化,提高多路信号测试时的吞吐量,缩短多个相同模块测试时,切换模块所需时间。KeySight官方提供的Coaxial Switches Software可用于远程控制同轴开关切换通道,如图1所示。但在其它测试系统中使用时需要频繁调用该软件,操作过程复杂且部分语言或开发环境下调用存在一定困难。针对以上问题,本文提出了在C++语言、C#语言及G语言(LabVIEW)下同轴开关的远程控制方法。
1 C++语言下的控制方法
C++语言是C语言的改进与扩充,是一种面向对象的语言。C++语言能够适用于多种操作系统下软件的开发,开发工作重用性、继承性高,结合MFC类库与VS开发环境能够有效实现远程控制、测试过程自动化等功能,搭建多种测试系统。
U1816X同轴开关通过后面板的USB B-4Pin型接口进行远程控制。C++语言在Windows系统下需要调用Windows API与同轴开关进行通信[2]。步骤如下:
①调用HidD_GetHidGuid函数获取当前所有可用设备的GUID,并保存至指向GUID类的指针中。这些设备的GUID中包含需要控制的U1816X同轴开关。
②获取设备描述信息,调用SetupDiGet-ClassDevs函数,对步骤①列举出的所有GUID执行。该函数的Flags参数应设置为DIGCF_PRESENT|DIGCF_INTERFACEDEVICE, 函数的返回值即为设备描述信息。当返回值为INVALID_HANDLE_VALUE时,获取失败,检查U1816X连接是否正常。
③调用SetupDiEnumDeviceInterfaces函数,枚举出步骤②中设备信息集合包含的全部接口,并保存至指向DEVICE_INTERFACE_DATA的指针。
④获取上一步中接口的详细信息,调用SetupDiGetDeviceInterfaceDetail函数。第一次调用时返回值为错误值,调用GetLastError函数能够看到错误代码。这是正常现象,但这次调用能够获取设备缓存大小,用于向设备的缓冲区发送控制命令。
⑤再次调用SetupDiGetDeviceInterfaceDetail函数,获取接口全部信息。获取到的信息保存在函数调用时的第三个参数中。
⑥调用CreateFile函数,用上一步获取的接口信息中包含的设备路径创建通信连接,并得到同轴开关对应的控制句柄。
⑦调用WriteFile函数向同轴开关发送控制指令,控制U1816X切换通道。
⑧断开同轴开关连接时调用CloseHandle函数,将参数设置为同轴开关的控制句柄。调用后需要判断返回值是否正常,确保同轴开关正常断开连接。在步骤⑥中获取到的设备控制句柄可以用同轴开关的VID和PID值判断是否正确。调用HidD_GetAttributes函数,将参数设置为同轴开关控制句柄,即可获取同轴开关的 VID和PID值。同轴开关的VID和PID正确值可以在设备管理器中查看。在设备管理器中找到同轴开关,右键“属性”,在“详细信息”选项卡的“属性”一栏中选中“硬件Id”即可查看同轴开关的VID与PID。获取方法如图2所示。
2 C#语言下的控制方法
C#语言是由C语言和C++语言衍生出的面向对象的编程语言,它在C和C++原有功能的基础上进一步扩展,并去除了部分复杂的处理过程,使编程效率进一步提高。C#语言结合.Net Framework运行库能够以简单的代码实现复杂的过程,因此迅速普及,成为当代主要编程语言之一。
图1 U1816X官方控制软件
C#在控制U1816X同轴开关时需要调用Windows API创建设备的控制句柄,但可以调用.Net的自带函数获取创建句柄需要的参数[3];获取控制句柄后,向同轴开关发送控制命令的方法也和C++不同。步骤如下:
①创建ManagementObjectCollection类的对象并调用构造函数获取即插即用设备集合,同轴开关使用USB控制,属于即插即用设备,因此集合的元素中包含同轴开关。
②在集合中遍历每个元素,通过元素的“Dependent”属性查询VID与PID值,与同轴开关的VID、PID比较,找到同轴开关对应元素后,记录下元素在集合中的位置。
③创建PnpEntityInfo类的对象,将④中查找到的元素属性值赋予该对象。该对象记录设备的Name、GUID、VID、PID等属性。
④查询PnpEntityInfo对象的Name属性,获取同轴开关的设备路径与GUID,并将VID、PID值插入,生成DeviceName。需要注意的是,DeviceName中的VID等属性需要按照顺序排列,否则DeviceName无效。
⑤调用Windows API的CreateFile函数,通过上一步生成的DeviceName创建同轴开关的通信连接,并得到对应的控制句柄。
⑥将同轴开关的控制句柄作为参数创建文件流,调用文件流的WriteFile函数即可向同轴开关发送控制指令,发送指令时需要采用中断方式。
图2 获取U1816X的VID、PID
⑦断开同轴开关连接时调用Windows API的CloseHandle函数,将参数设置为同轴开关的控制句柄,并判断返回值确保同轴开关正确断开连接。因为C#的代码大部分属于托管代码,而Windows API的函数为非托管代码,因此函数调用前需要预先声明。声明Windows API函数方法如图3所示。
3 LabVIEW下的控制方法
LabVIEW是由美国国家仪器公司开发的编程软件,采用图形化的编程方式,使开发过程更加直观、简单。LabVIEW自带多种标准库函数,如TCP/IP、ActiveX等,并支持GPIB、VXI、RS232等多种通信协议,可以方便地创建虚拟仪器,大大提高算法实现、仪器系统设计的效率。
图3 C#调用Windows API函数
LabVIEW不能直接控制U1816X同轴开关,需要先用NI-VISA创建同轴开关的驱动[4]。在驱动向导的硬件总线类型中选择“USB”后点击“Next”;在USB设备选择的“Device Id”中选择与同轴开关VID、PID对应的项,在其它显示区中确认同轴开关设备信息是否正确。确认无误后点击“下一步”;在“创建驱动文件”中输入驱动名和驱动文件保存路径,点击“下一步”后进入“安装选项设置”,选择第一项后点击Finish即可创建驱动文件,驱动向导会将驱动自动安装到系统中。同轴开关驱动安装后如图4所示。
LabVIEW需要调用VISA与同轴开关建立通信连接。VISA输入控件类型应设置为USB Raw,VISA输入控件会自动查找电脑中已安装的设备,并形成列表,在前面板中根据同轴开关的VID和PID选择对应项即可;向同轴开关写入控制命令可通过调用“VISA写入”实现。需要选择中断方式控制同轴开关[5];程序框图如图5所示。
4 结束语
本文提出了性能测试远程控制的方法。通过在C++、C#及LabVIEW下不同控制方法的实现,解决了同轴开关在多开发环境下的使用与集成问题,为实现电子设备可靠性试验性能测试远程控制提供参考。
图4 通过NI-VISA安装的U1816X驱动
图5 U1816X通信程序框图