一、问题的提出
笔者最近在Labwindows/CVI环境下开发HP75000 D20型数字功能测试系统时,就遇到了程序调试过程中硬件系统“死机”的情况。该系统是一个基于VXI总线的通用测试平台的一部分,为了和系统的整体开发保持一致,在进行程序开发的时候没有直接使用HP公司提供的开发软件,而是采用了Labwindows/CVI开发环境。这样,在编程语言的选择上,就选择了基于VISA的SCPI编程。在进行程序调试的过程中,在读D20系统对某一测试结果与预存数据的比较结果时,进程出错,系统给出提示如图1所示。

图1:系统给出的出错信息
继续执行,就发现D20的状态已经被锁,程序对仪器失控,为了可以通过断点调试来定位程序的错误所在,需要仪器复位后尽量恢复至故障前的状态。
二、选择解决方案
有几种方案可供选择。
一是在出现故障之后先硬件复位,然后修改程序代码,重新执行源程序。此方案首先是编程工作量大,难以实现对程序故障的定位,其次是对系统硬件设备的损耗比较大,所以没有什么实际意义。
二是预先在源程序中加入多处错误陷阱代码,在程序执行的过程中,逐一排除假设的程序故障点。但是,预防问题并不能代表解决了问题,遇到没有预料到的情况,错误陷阱也无能为力。
只有第三个方案简单而切实可行,即综合利用Visa Assistant和Labwindows/CVI两个操作平台,实现对系统的联合调试。
Visa Assistant是HP公司为VXI Plug&Play设备提供的仪器驱动辅助开发系统,随虚拟仪器产品一同发售,主要目的是为了帮助用户完成仪器硬件设备的安装和驱动。由于系统可以通过与仪器之间的底层通讯完成对仪器的实时操作,所以从这个角度上说,Visa Assistant对仪器的操作运行机理与我们选择的在Labwindows/CVI下基于Visa的SCPI编程是相同的,这就保证了两者可以实现对仪器的联合调试。而且由于引入了Visa Assiatant,即使在最恶劣的情况下也可以实现对系统的软复位,减少了对系统的硬件损耗。
三、解决方案的实现
采用Visa Assistant和Labwindows/CVI进行联合调试的具体操作方法如下。

图2: Visa Assistant运行界面
首先,启动Visa Assistant, 在完成了对硬件设备的检测之后,界面如图2所示。
在左边的列表中列出了虚拟仪器设备的地址,例如D20系统的地址为“GPIB0::9::17::INSTR”,选中该地址,并选择Formatted I/O标签页。在Instr.Lang.中选则IEEE 488.2,标签页状态如图3所示。

图3:Formatted I/O标签页
我们可以在标签页下方的文本框中输入SCPI命令,通过点击viPrintf、viScanf和viQueryf按钮来执行对仪器的操作。

图4:程序运行到断点处
另一方面,在CVI源程序中设置断点,执行Run\Run project。程序运行到断点处,如图4 所示,程序暂停。

继续执行,当程序运行出错仪器状态被锁时,切换到Visa Assistant,单击*RES按钮,对仪器进行软复位,而后,可在文本框中输入命令,恢复程序状态,程序运行情况将在标签页中显示出来,如图5所示。当然,此项操作也可以在程序正常运行到断点的时候进行,来改变当前进程下仪器的状态。
结束语
Visa Assistant和Labwindows/CVI原本是相互独立的两个系统,利用它们都可以实现基于Visa的SCPI编程,实现对虚拟仪器的控制,如果把两者有机地结合起来,就可以使我们的程序调试工作变的更加方便、灵活。开发研制虚拟仪器设备是仪器领域的发展趋势,综合利用目前已有的各种开发工具将有效地加快此类开发工作的进行。
