U1816X远程控制软件集成解决方案

B站影视 2025-01-17 22:46 3

摘要:针对电子设备可靠性试验性能测试环节远程控制的需求,提出通过C++语言、C#语言与LabVIEW的远程控制方法,解决U1816X同轴开关控制软件难以集成到其它软件的问题,能够有效控制U1816X同轴开关,为多通道控制与测试提供便利。

编者按

针对电子设备可靠性试验性能测试环节远程控制的需求,提出通过C++语言、C#语言与LabVIEW的远程控制方法,解决U1816X同轴开关控制软件难以集成到其它软件的问题,能够有效控制U1816X同轴开关,为多通道控制与测试提供便利。

KeysightU1816X是由两个单刀六掷开关组成的开关矩阵。它能够在不改变物理连接的情况下,在多路信号间进行切换。用户能够使用相同的设置执行多次测试,无需频繁连接与断开线缆,因此经常使用在多通道测试系统中。U1816X能够实现整个测试流程的自动化,提高多路信号测试时的吞吐量,缩短多个相同模块测试时,切换模块所需时间。KeySight官方提供的Coaxial Switches Software可用于远程控制同轴开关切换通道,如图1所示。但在其它测试系统中使用时需要频繁调用该软件,操作过程复杂且部分语言或开发环境下调用存在一定困难。针对以上问题,本文提出了在C++语言、C#语言及G语言(LabVIEW)下同轴开关的远程控制方法。

图1 U1816X官方控制软件

1 C++语言下的控制方法

C++语言是C语言的改进与扩充,是一种面向对象的语言。C++语言能够适用于多种操作系统下软件的开发,开发工作重用性、继承性高,结合MFC类库与VS开发环境能够有效实现远程控制、测试过程自动化等功能,搭建多种测试系统。

U1816X同轴开关通过后面板的USB B-4Pin型接口进行远程控制。C++语言在Windows系统下需要调用Windows API与同轴开关进行通信。步骤如下:

(1)调用HidD_GetHidGuid函数获取当前所有可用设备的GUID,并保存至指向GUID类的指针中。这些设备的GUID中包含需要控制的U1816X同轴开关;

(2)获取设备描述信息,调用SetupDiGetClassDevs函数,对步骤(1)列举出的所有GUID执行。该函数的Flags参数应设置为DIGCF_PRESENT|DIGCF_INTERFACEDEVICE,函数的返回值即为设备描述信息。当返回值为INVALID_HANDLE_VALUE时,获取失败,检查U1816X连接是否正常;

(3)调用SetupDiEnumDeviceInterfaces函数,枚举出步骤(2)中设备信息集合包含的全部接口,并保存至指向DEVICE_INTERFACE_DATA的指针;

(4)获取上一步中接口的详细信息,调用SetupDiGetDeviceInterfaceDetail函数。第一次调用时返回值为错误值,调用GetLastError函数能够看到错误代码。这是正常现象,但这次调用能够获取设备缓存大小,用于向设备的缓冲区发送控制命令;

(5)再次调用SetupDiGetDeviceInterfaceDetail函数,获取接口全部信息。获取到的信息保存在函数调用时的第三个参数中;

(6)调用CreateFile函数,用上一步获取的接口信息中包含的设备路径创建通信连接,并得到同轴开关对应的控制句柄;

(7)调用WriteFile函数向同轴开关发送控制指令,控制U1816X切换通道;

(8) 断开同轴开关连接时调用CloseHandle函数,将参数设置为同轴开关的控制句柄。调用后需要判断返回值是否正常,确保同轴开关正常断开连接。在步骤(6)中获取到的设备控制句柄可以用同轴开关的VID和PID值判断是否正确。调用HidD_GetAttributes函数,将参数设置为同轴开关控制句柄,即可获取同轴开关的 VID和PID值。同轴开关的VID和PID正确值可以在设备管理器中查看。在设备管理器中找到同轴开关,右键“属性”,在“详细信息”选项卡的“属性”一栏中选中“硬件Id”即可查看同轴开关的VID与PID。获取方法如图2所示。

图2 获取U1816X的VID、PID

2 C#语言下的控制方法

C#语言是由C语言和C++语言衍生出的面向对象的编程语言,它在C和C++原有功能的基础上进一步扩展,并去除了部分复杂的处理过程,使编程效率进一步提高。C#语言结合.Net Framework运行库能够以简单的代码实现复杂的过程,因此迅速普及,成为当代主要编程语言之一。

C#在控制U1816X同轴开关时需要调用Windows API创建设备的控制句柄,但可以调用.Net的自带函数获取创建句柄需要的参数;获取控制句柄后,向同轴开关发送控制命令的方法也和C++不同。步骤如下:

(1)创建ManagementObjectCollection类的对象并调用构造函数获取即插即用设备集合,同轴开关使用USB控制,属于即插即用设备,因此集合的元素中包含同轴开关;

(2)在集合中遍历每个元素,通过元素的“Dependent”属性查询VID与PID值,与同轴开关的VID、PID比较,找到同轴开关对应元素后,记录下元素在集合中的位置;

(3)创建PnpEntityInfo类的对象,将(2)中查找到的元素属性值赋予该对象。该对象记录设备的Name、GUID、VID、PID等属性;

(4)查询PnpEntityInfo对象的Name属性,获取同轴开关的设备路径与GUID,并将VID、PID值插入,生成DeviceName。需要注意的是,DeviceName中的VID等属性需要按照顺序排列,否则DeviceName无效;
(5)调用Windows API的CreateFile函数,通过上一步生成的DeviceName创建同轴开关的通信连接,并得到对应的控制句柄;

(6)将同轴开关的控制句柄作为参数创建文件流,调用文件流的WriteFile函数即可向同轴开关发送控制指令,发送指令时需要采用中断方式;

(7)断开同轴开关连接时调用WindowsAPI的CloseHandle函数,将参数设置为同轴开关的控制句柄,并判断返回值确保同轴开关正确断开连接。因为C#的代码大部分属于托管代码,而Windows API的函数为非托管代码,因此函数调用前需要预先声明。声明Windows API函数方法如图3所示。

图3 C#调用Windows API函数

3 LabVIEW下的控制方法

LabVIEW是由美国国家仪器公司开发的编程软件,采用图形化的编程方式,使开发过程更加直观、简单。LabVIEW自带多种标准库函数,如TCP/IP、ActiveX等,并支持GPIB、VXI、RS232等多种通信协议,可以方便地创建虚拟仪器,大大提高算法实现、仪器系统设计的效率。

LabVIEW不能直接控制U1816X同轴开关,需要先用NI-VISA创建同轴开关的驱动。在驱动向导的硬件总线类型中选择“USB”后点击“Next”;在USB设备选择的“Device Id”中选择与同轴开关VID、PID对应的项,在其它显示区中确认同轴开关设备信息是否正确。确认无误后点击“下一步”;在“创建驱动文件”中输入驱动名和驱动文件保存路径,点击“下一步”后进入“安装选项设置”,选择第一项后点击Finish即可创建驱动文件,驱动向导会将驱动自动安装到系统中。同轴开关驱动安装后如图4所示。

图4 通过NI-VISA安装的U1816X驱动

LabVIEW需要调用VISA与同轴开关建立通信连接。VISA输入控件类型应设置为USB Raw,VISA输入控件会自动查找电脑中已安装的设备,并形成列表,在前面板中根据同轴开关的VID和PID选择对应项即可;向同轴开关写入控制命令可通过调用“VISA写入”实现。需要选择中断方式控制同轴开关;程序框图如图5所示。

图5 U1816X通信程序框图

引用本文:杨威,杜爱华,司毅,刘玉石. 电子设备可靠性试验性能测试远程控制方法探析[J].环境技术,2020,228(6):56-59.

专家简介:杨威,中国船舶重工集团公司第七二三研究所,男,硕士,主要研究方向:自动测试。

来源:互联科技焦点

相关推荐