4.3.6 应用开发环境
上述五种步骤类型可以使用任意模块适配器类型,前面以C/C++DLL适配器类型为例,介绍了它们的用法、模块页面中参数的配置。针对LabVIEW和LabWindows/CVI这两种适配器类型,本节将在代码编辑、源文件声明、访问应用开发环境部分做进一步的介绍,使读者了解模块适配器的更多功能。其他适配器类型与此类似。
1.LabVIEW
LabVIEW是图形化的应用开发环境,LabVIEW中编写的代码保存文件格式为VI,VI类似于文本编程中的函数。以数值限度测试步骤为例,新建序列文件并将其保存为<Exercises>\Chapter 4\Code Modules\NumericLimitTest_LabVIEW.seq,选择模块适配器类型为“LabVIEW”,然后添加一个数值限度测试步骤,在步骤设置窗格模块页面中,单击浏览按钮,选择LabVIEW项目文件或LabVIEW VI,如图4-40所示。LabVIEW项目文件不是必需的,可以直接选择要加载的VI。
提示:在选择代码模块之前,先保存新建的序列文件,这样提示文件没有找到的对话框中才可能会有第三个选项——使用相对路径。
图4-40 浏览文件
笔者事先编写了Generate_Random_Number.vi,位于<Exercises>\Chapter 4\Code Modules\Source Files目录,选择该VI之后,在代码模块预览区域可以预览其原型,包括VI的接线端和描述信息,如图4-41所示。当传递给参数Random?的值为“True”时,Result返回0~10之间的随机数;如果传递给参数Random?的值为“False”,Result总是返回常量值5。在参数列表区,对于输入参数,“Default”栏中的复选框默认为选中状态,即TestStand会传递一个默认值给VI;如果要设置成其他值,应取消该复选框的选中状态。
图4-41 选择VI
值得注意的是error out参数,在LabVIEW中,它的数据类型是簇,包含三个元素,数据类型分别是布尔、数值、字符串类型。TestStand默认数据类型“Error”可以和它很好地匹配起来。一般将VI的错误输出传递给当前步骤的属性Step.Result.Error,这样一旦VI中产生错误,当前步骤的状态就变成“Error”,TestStand会启动错误处理机制,弹出错误对话框或者直接结束序列执行,避免错误的扩大。
如果需要修改VI,可以回到LabVIEW应用开发环境中去修改,但更直接的方法是单击步骤设置窗格模块页面中的“Edit”图标,序列编辑器会自动调用并进入LabVIEW。此时在LabVIEW应用开发环境中已打开当前VI,可以对VI进行修改,修改完毕后关闭VI窗口返回到序列编辑器。单击重装载VI原型“Reload VI Prototype”图标进行刷新,如果VI修改了接线端、图标、描述信息,则这些修改会在代码模块预览中体现。通过TestStand编辑VI有前提条件,那就是计算机上已安装LabVIEW,同时序列编辑器中LabVIEW模块适配器设定为开发模式。执行菜单命令“ConfigureAdapters”,会弹出适配器配置对话框,如图4-42所示。选择LabVIEW适配器并单击窗口下方的“Configure”按钮,弹出LabVIEW适配器配置对话框,如图4-43所示。注意,在“Select or Type which LabVIEW Server to Use”区域应选择“Development System”,如果选择的是“LabVIEW Run-Time Engine”,那就不可以在序列编辑器中编辑VI的。除了编辑VI,在第6章中还将看到,在序列编辑器中进行调试时,可以进入LabVIEW应用开发环境,并利用LabVIEW的调试工具进行调试,这给开发人员调试带来极大的便利,可见TestStand模块适配器的强大。
图4-42 适配器配置对话框
图4-43 LabVIEW适配器配置对话框
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Code Module\NumericLimitTest_LabVIEW_Solution.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。思考:如果在“Random?”的“Value”栏赋常量“False”,结果如何?
2.LabWindows/CVI
LabWindows/CVI(以下简称CVI)是一个标准ANSI C的集成开发环境,利用它可以开发标准的C应用程序。它内部集成了大量的界面控件,同时提供了丰富的函数库、仪器驱动,这些对于工程项目的开发大有裨益。同样以数值限度测试步骤为例,新建序列文件并保存为<Exercises>\Chapter 4\Code Modules\NumericLimitTest_CVI.seq,选择模块适配器类型为“CVI”,然后添加一个数值限度测试步骤,在步骤设置窗格模块页面中,单击浏览按钮,选择CVI生成的DLL文件。在TestStand 2013版本之前,CVI模块适配器支持dll、obj、c、lib文件,而对于2013及之后的版本,只能使用dll。笔者事先创建了Generate_Random_Number.dll,位于<Exercises>\Chapter 4\Code Modules\Source Files\CVI DLL目录,该DLL中包含一个输出函数“Generate_Random_Number”,函数功能很简单,即在Random>0时函数返回0~10之间的随机数,否则返回常量5。函数的定义如图4-44所示。
图4-44 Generate_Random_Number函数定义
选择DLL之后,在“Function”栏中会枚举出DLL中所有的输出函数。选择Generate_Random_Number函数,TestStand会自动尝试参数类型匹配。如果要将函数的错误传递给TestStand,一般是通过三个独立的参数。以Generate_Random_Number函数为例,它包含short∗errorOccurred、long∗errorCode和Char errorMsg三个参数。模块页面设置如图4-45所示。
图4-45 CVI DLL函数参数设置
DLL是经过编译的,如果要修改DLL,必须修改它的源文件并重新编译。最先想到的方法是打开CVI项目文件并修改源代码,然而有更直接的方法,即通过序列编辑器进入CVI应用开发环境,并在CVI中修改DLL的源文件,重新编译后,完成DLL修改工作。在模块页面参数配置区的右侧单击“Source Code File”图标,弹出“CVI Source Code Files”对话框,如图4-46所示。还是以Generate_Random_Number.dll为例,选择该DLL的项目文件和源文件,然后回到模块页面,单击“Edit Code”图标,TestStand会自动链接到CVI,并在CVI集成开发环境中打开项目文件和源文件,这时就可以在CVI中修改源代码了。在第6章中还将看到,在序列编辑器中进行调试时,可以进入CVI应用开发环境,并利用CVI的调试工具进行调试,这给开发人员调试带来了极大的便利。
图4-46 DLL源文件选择对话框
在范例资源的第4章练习中,附有例程<Exercises>\Chapter 4\Code Module\NumericLimitTest_CVI_Solution.seq,读者可以通过菜单命令“ExecuteSingle Pass”运行该范例并观察结果。