labwindows/cvi 2017是一款集成式的开发环境,集源代码编辑、32位ANSI C编译、联结、调试以及标准ANSI C库等为一体,为用户提供简单的拖放式用户界面编辑器以及自动代码生成器,是编程人员的好帮手。广泛应用于军工、电讯、工业、航空航天等领域。小编为大家提供的是最新版本的LabWindows CVI 2017,需要的朋友赶快下载吧!
软件特色
·改进的代码性能
·借助新的业界标准的优化编译器,提高60%的代码生成速率
·使用可移植且可扩展的OpenMP API,轻松复用现有代码
·通过无损网络流API,实现网络应用程序之间的高效数据传输
·使用新的高级TDMS功能来实现高性能数据流盘
·更高生产力
·编辑代码的同时编译源文件
·在多核系统中并行创建多个文件,提高整体构建速度
·正在调试的进程中可以连接或分离调试器
·通过函数下拉列表和改进的浏览功能,轻松导航源文件
·通过批量格式设置和自动缩进,创建更简洁美观的代码
LabWindows CVI使用教程
六步构建简单的GUI程序
在本节中,我们要做的例子很简单,是创建一个如下图所示的应用程序。
图 2‑1 程序运行效果
2.1.1 创建工程文件
运行LabWindows/CVI,单击菜单File-New-Project(*.prj)…,将会出现新建工程的选项对话框。在对话框中可以选择是否同时新建一个工作空间,是否保持跟上个工程同样的配置。
图 2‑2 创建新的工程
2.1.2 创建用户界面文件
单击菜单File-New-User Interface(*.uir)…,将会弹出用户界面编辑器。用户界面编辑器是一个利用交互式拖放控件的方法来设计图形用户界面的编辑器。对于一个新建的用户界面文件,编辑器将自动产生一个空面板,如下图所示。
图 2‑3 用户界面编辑器窗口
双击面板 ,弹出属性编辑框。在属性编辑框中可以修改程序的标题、窗口位置、窗口按钮/菜单、窗口风格等特性。
图 2‑4 属性编辑框
初始状态下,面板属性对话框的Callback Function(回调函数)留空。此处可以填写回调函数的名称(此示例填写“MainCallBack”),以方便后面添加窗口关闭、窗口激活或者失活的响应代码。
2.1.3 在用户界面文件中添加控件
在该窗口中Untitled Panel的灰色区域中单击鼠标右键,便会弹出一个如图 2‑5所示的控件选择的快捷菜单。LabWindows/CVI 的控件种类见表 2‑1。
图 2‑5 控件菜单
从该菜单中选择所需的控件,并摆放到面板的适当位置(也可通过Create 菜单项来实现上述操作)。每个控件通过一系列属性设置对话框来设定,可以通过设置控件的属性来改变其外观、设置、热键和标签等。
在此,我们选择添加两个Numeric菜单下的Numeric控件,添加一个Text菜单下的String控件,Command Button菜单下的Square Command Button控件。添加完毕后,双击控件(或者右击-Edit Control)修改控件的相关属性。
分别在属性编辑框中,将两个Numeric控件的Constant Name属性修改为“PARA_A”、“PARA_B”,Label Appearance的Label属性修改为“参数A”、“参数B”。将String控件的Constant Name属性修改为“RESULT”,Label Appearance的Label属性修改为“A+B”。将Command Button控件的Constant Name属性修改为“CALCULATE”,Callback Function属性修改为“Calculate”,以方便后面生成回调函数。
图 2‑6 修改控件的属性
当然,为了美观,可以在Quick Edit Window中修改按钮等控件的背景颜色,在Label Appearance中修改按钮中文字的颜色。上图中OK按钮即普通按钮修改颜色之后的效果。
2.1.4 生成框架源代码
在用户界面编辑窗口中,选择菜单Code-Generate-All Code,此时将会弹出一个提示存储.uir文件的对话框,在此我们存为1.uir(CVI将会生成同名的.h文件。不建议大家像示例一样起无意义的命名)。保存后CVI会弹出生成代码的对话框,一般情况下直接点击OK,框架源代码会自动保存在跟.uir同名的C文件中。
图 2‑7 生成所有代码
至此,我们点击菜单Run-Debug Project之后,程序UI已经可以运行了。运行结果如下图所示。当然了,因为尚未编写按钮的回调函数的响应代码,此时点击任何按钮都不会执行对应的操作。
图 2‑8 程序UI运行结果
2.1.5 添加回调函数
生成框架代码之后,我们应该可以在uir同名的C文件中看到CVI为我们生成了如下代码:

我们可以在CVI为我们生成的框架中添加或修改代码,以实现具体的功能。在添加或修改代码之前,我们先来逐一分析CVI生成的框架代码做了什么。
cvirte.h、userint.h分别是CVI运行时库(CVI Run-Time Engine)、CVI用户界面库(CVI User Interface)的头文件,分别包含了CVI框架运行、CVI用户界面运行所需要的基本函数的声明与定义。1.h是界面文件1.uir的头文件库,包含了界面中的控件的定义与声明。而panelHandle为面板的全局句柄,当对面板或者面板上的控件进行操作时经常用到。
main函数是用户程序运行时首先被执行的函数。main函数实现的功能分别是CVI运行引擎初始化(InitCVIRTE函数)、加载面板(LoadPanel函数)、显示面板(DisplayPanel函数)、开始消息队列循环(RunUserInterface函数)。其中RunUserInterface会不断的检查面板的消息或者操作系统发送的消息,永远不会返回,除非用户主动调用QuitUserInterface函数中止消息循环。所以,正常运行状态下,main函数中的DiscardPanel永远不会被执行,main函数永远不会退出,直到程序被关闭。
MainCallBack是我们在面板属性编辑框中填写的Callback Function的名字,负责执行主程序面板消息的响应代码。在switch语句中,我们可以看到,CVI已经事先为我们生成好了三个面板最常用的事件:EVENT_GOT_FOCUS、EVENT_LOST_FOCUS以及EVENT_CLOSE。分别在对应的case中添加代码,即可在窗口被激活、窗口失活、以及点击窗口右上角“关闭”按钮时执行的代码。
CVI初学者可能会被MainCallBack前面的从未见过的CVICALLBACK吓倒。其实我们只需要选中CVICALLBACK之后右击,选择Go To Defination即可看到:
CVICDECL仍然不是我们的C语言关键字。继续选中CVICDECL之后右击,选择Go To Defination查看CVICDECL的原型:
至此,CVICALLBACK真相大白。其实CVICALLBACK只是__cdecl的宏定义。什么?不懂__cdecl是什么意思?赶紧拿起手中的手机,访问Google搞清楚它们的神奇功效吧!
CVI初学者也可能被MainCallBack后面跟着的一堆参数吓倒,不知道他们是做何用,“不管他们行不行”。panel好理解,就是消息发生所在的面板的句柄。callbackData表示消息发出时所附带的数据。可是eventData1以及eventData2却容易让初学者云里雾里。其实我们只需要选中任意case语句中的事件(此处可以选择EVENT_GOT_FOCUS),右击选择Go To Defination之后即可发现,CVI User Interface的事件定义全在这里。对eventData1以及eventData2的说明,也在定义的注释中有所说明。
在此,为了让用户点击程序右上角的关闭按钮时,程序可以顺利关闭,在case EVENT_CLOSE语句后面添加QuitUserInterface函数:
Calculate函数是我们在面板中创建的按钮(Command Button)控件的消息响应函数,函数框架跟前面的主面板的消息响应函数类似。我们需要在此添加按钮按下之后需要执行的代码。Calculate函数添加响应之后的代码如下:
需要提醒大家的是,作为CVI的初学者,请在对照示例进行实际操作时,不要直接Copy+Paste上面的代码。自己对照着上面的代码一个字母一个字母的敲进去,会对扎实、牢固的学习掌握CVI具有很大的帮助的。
GetCtrlVal是获取控件的当前值的函数,其函数声明如下:
其中value为控件的当前值变量的指针。panelHandle参数为函数面板的句柄,之前已经提到。可是控件的句柄controlID如何获得呢?
最简单的方法就是,控件的句柄即[控件所在的面板的Constant Name]_[控件的Constant Name]。若控件所在面板的Constant Name为PANEL,控件的Constant Name为NAME,那么控件的句柄即为PANEL_NAME。其中,面板或者控件的Constant Name都可以通过双击面板或者双击控件来进行设置。
另外一种方法即打开.uir同名的.h文件,查找对应的控件的定义。我们在1.h文件中发现如下代码:
即可得知,“参数A”控件的句柄为PANEL_PARA_A。
SetCtrlVal是设置控件的当前值的函数,其函数声明如下:
同GetCtrlVal一样,调用SetCtrlVal并填入面板、控件句柄之后即可设置控件的值。
GetCtrlVal、SetCtrlVal、GetCtrlAttribute以及SetCtrlAttribute四个函数,是对几乎所有控件都适用的函数,在CVI的GUI程序中,使用极其频繁,是学习CVI的GUI编程必须掌握的四个函数。
2.1.6 运行、调试
点击菜单Run-Debug Project(或点击工具栏的绿色三角形按钮)即可直接编译并运行当前工程,同时也可以在工程所在目录下生成exe文件。
右击工程名并选择Build(或点击菜单Build-Create Debuggable Executable)即可编译并生成exe文件。
在CVI代码编辑窗口中单击代码前空白部分或者按F9按键,则可以在对应的C语言语句处设置断点。
在程序中断时,单击菜单Window即可控制开启或关闭Memory(内存)、Variables(变量)、Watch(监控)窗口,通过查看或者修改对应的参数的值来方便的调试程序。