labwindows cvi 2015破解版
分享到:
labwindows cvi 2015破解版是目前最好的交互式C语言开发平台,通过众多特性和功能来增强其C语言的功能,为熟悉C语言的开发设计人员编写检测系统、自动测试环境、数据采集系统等等提供了一个理想的软件开发环境。
C语言是一种功能强大、灵活多变的语言,而该软件是专门为C语言程序员提供的软件开发系统,其交互式开发环境中编写的程序符合标准C规范,并且使用这款开发环境用户能够完成许多工作,比如交互式程序开发具有的函数库,用来创建数据采集和仪器控制的应用程序;充分里用完备的软件工具进行数据采集、分析和显示等等。
labwindows cvi 2015可以利用提供的库函数来实现程序设计、编辑、编译、链接和标准C语言程序调试,在该开发环境中可以用软件自带的丰富行书库来编写程序,并且每个函数都有一个叫做函数面板的交互式操作界面,让我们的用户能够在函数面板中可以执行该函数并可以生成调用该函数的代码,也可以通过右击面板或空间获得有关函数、参数=函数类和函数的帮助。可以说这款labwindows cvi 2015破解版是非常强大的交互式C语言开发工具,如果你想要轻松畅快的进行C语言开发,那么这款软件必不可少哦。
2、解压完成自动运行,然后选择第一项安装我们的软件。
3、进入安装向导以后会要求用户输入序列号,这时候可以运行破解文件“NI_Lic_Act_1.2.exe”,然后生成序列号。
4、将序列号复制到安装向导中。
5、选择安装路径。
6、然后选择需要的组件,用户根据自身选择组件和工具,小编就直接默认好了。
7、将勾选取消掉,开始安装。
8、接受协议,然后一直点击next直到安装完毕。
9、完成后,记得不要用官方自带的激活程序哦。
2、软件已经选择了用户的License文件夹爱,直接确定即可显示全部许可文件。
3、然后对着想要激活的功能右键,点击Activate进行激活,激活完毕即可使用软件。
1、创建工程文件
运行LabWindows/CVI,单击菜单File-New-Project(*.prj)…,将会出现新建工程的选项对话框。在对话框中可以选择是否同时新建一个工作空间,是否保持跟上个工程同样的配置。
2、常见用户界面文件
单击菜单File-New-User Interface(*.uir)…,将会弹出用户界面编辑器。用户界面编辑器是一个利用交互式拖放控件的方法来设计图形用户界面的编辑器。对于一个新建的用户界面文件,编辑器将自动产生一个空面板,如下图所示。
双击面板 ,弹出属性编辑框。在属性编辑框中可以修改程序的标题、窗口位置、窗口按钮/菜单、窗口风格等特性。
初始状态下,面板属性对话框的Callback Function(回调函数)留空。此处可以填写回调函数的名称(此示例填写“MainCallBack”),以方便后面添加窗口关闭、窗口激活或者失活的响应代码。
3、在用户界面中添加控件
在该窗口中Untitled Panel的灰色区域中单击鼠标右键,便会弹出一个如图所示的控件选择的快捷菜单。
从该菜单中选择所需的控件,并摆放到面板的适当位置(也可通过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”,以方便后面生成回调函数。
当然,为了美观,可以在Quick Edit Window中修改按钮等控件的背景颜色,在Label Appearance中修改按钮中文字的颜色。上图中OK按钮即普通按钮修改颜色之后的效果。
4、在用户界面编辑窗口中,选择菜单Code-Generate-All Code,此时将会弹出一个提示存储.uir文件的对话框,在此我们存为1.uir(CVI将会生成同名的.h文件。不建议大家像示例一样起无意义的命名)。保存后CVI会弹出生成代码的对话框,一般情况下直接点击OK,框架源代码会自动保存在跟.uir同名的C文件中。
至此,我们点击菜单Run-Debug Project之后,程序UI已经可以运行了。运行结果如下图所示。当然了,因为尚未编写按钮的回调函数的响应代码,此时点击任何按钮都不会执行对应的操作。
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编程必须掌握的四个函数。
6、运行、调试
点击菜单Run-Debug Project(或点击工具栏的绿色三角形按钮)即可直接编译并运行当前工程,同时也可以在工程所在目录下生成exe文件。
右击工程名并选择Build(或点击菜单Build-Create Debuggable Executable)即可编译并生成exe文件。
在CVI代码编辑窗口中单击代码前空白部分或者按F9按键,则可以在对应的C语言语句处设置断点。
在程序中断时,单击菜单Window即可控制开启或关闭Memory(内存)、Variables(变量)、Watch(监控)窗口,通过查看或者修改对应的参数的值来方便的调试程序。
在本节中,我们已经通过编写并运行一个GUI的实例,了解了在CVI下用C语言开发GUI程序的基本过程。至此,大家已经算是对CVI入门了,大家已经可以尝试着自行开发一些有用、好玩的程序了。
1、执行优化编译器
在LabWindows/CVI 2015中,编译器使用了具有Clang C前端的LLVM编译器基础架构。 这个编译器可生成经优化的代码,这意味着您不再需要使用外部优化编译器来优化代码。
Clang被选作为LabWindows/CVI编译器的基础是因为它可以提供非常快速的编译、极其有用的错误和警告消息以及比早期LabWindows/CVI编译器高60%的执行速度。 执行复杂计算、数学或分析的开发人员将可看到最高的性能提升,因为编译器后端特别适合用于优化数学计算所需的资源。
LLVM和Clang最开始是伊利诺伊大学的一个研究项目,目的是提供一个基于SSA的现代化编译策略,能够同时支持任意编程语言的静态和动态编译。 从那时起,LLVM逐渐发展,衍生了大量子项目,其中有许多被苹果、英特尔、AutoESL、NVIDIA及NI等各种商业软件供应商应用于生产之中。
开发人员还可以根据自定义的警告级别类型列表显示或隐藏警告级别,从而更轻松地找到感兴趣的警告、专注于错误和更高效地进行调试。 如果要访问“编译器警告”对话框,则右击“构建输出”窗口,然后选择配置警告。
2、基于OpenMP的灵活多线程执行
可移植且可扩展的OpenMP API可帮助开发人员无需大量编辑即可轻松并行执行现有代码。 OpenMP(开放式多处理)是一套编译器指令及相关子句、应用程序编程接口(API)和环境变量的集合,可帮助您轻松地创建多个线程上执行的应用程序。 OpenMP模型可允许您完成以下任务:
定义代码的并行区域和创建执行并行区域的线程组。
规定同一组中不同线程之间的任务共享方式(循环迭代)。
规定线程间可共享的数据以及每个线程专用的数据。
同步线程、防止并发访问共享数据,并定义由单个线程专门执行区域。
OpenMP的特殊用途
OpenMP适用于由密集循环组成的程序,其中循环迭代之间是彼此独立的,这样迭代的子集可以在多个处理内核上并行运行。 同时它也适用于多个区域之间可以相互独立地运行但必须在某个时刻同步的程序。 因此OpenMP也是实现fork/join并行设计模式的一种有效方法。
虽然我们可以使用LabWindows/CVI工具库来创建多线程应用程序,但是OpenMP模型也提供了许多好处。 如下图所示,通过插入单行编译指示,我们有可能以最小的改动逐步实现OpenMP模型。 这也使开发人员能够保留原始源代码中的序列顺序,而且在添加OpenMP指令之后只需少量的重新测试,这是因为程序、数据结构和算法都没有发生变化。 我们也可以通过禁用“构建选项”对话框中的OpenMP支持来轻松编译和测试程序的序列版本。
OpenMP的结构化方法有助于最大限度地减少多线程编程常见的可能编程错误,因为它不要求使用底层多线程结构和对象。 所有底层实现均是由OpenMP进行处理,这样开发人员便能够专注于应用程序逻辑和I/O。
此外,这也简化了将代码移植到其它编译器和操作系统,因为不支持OpenMP结构的编译器将会忽略OpenMP编译指令。 我们甚至可以在不修改源代码的情况下使用用于调整循环调度的环境变量来调整运行时的性能。 注意: LabWindows/CVI 2015符合OpenMP 2.5规范。
3、无损的网络数据流
网络流API为分布式LabWindows/CVI或LabVIEW应用提供了无损的单向点对点通信通道。 利用网络流,您可以轻松地在网络上或在同一台计算机上共享数据。
网络流是一种易于配置、紧密集成的动态通信方法,适用于应用程序之间的数据传输,具有可与TCP相媲美的吞吐量和延迟特性。 网络流也增强了连接管理,如果由于网络故障或其他系统故障导致连接中断,网络流可自动恢复网络连接。 网络流利用缓存无损通信策略来确保写入网络流的数据即使在网络连接不顺畅的环境下也不会丢失。
网络流的具体应用
网络流经设计和优化可实现无损、高吞吐量的数据通信。 网络流采用单向点至点的缓存通信模型来实现应用程序之间的数据传送。 这意味着其中一个终端是数据的创建者,另一个终端是读者。 您可以使用两个网络流来实现双向通信,其中每一台计算机的创建者和读者与对应计算机的创建者和读者相匹配。
由于网络流具有与原始TCP相匹配的吞吐量性能,因此对于高吞吐量应用,如果编程人员希望避免TCP的高复杂性,那么网络流就是理想的选择。 网络流也可以用于无损的低吞吐量通信,例如发送和接收命令。 但是,将网络流应用于低吞吐量通信时,如果需要获得最低的延迟,可能需要更明确地管理数据通过网络流发送的时间。
4、高性能数据流盘
NI技术数据管理流(TDMS)文件格式是将测量数据保存到磁盘上的最快速、最灵活方式。 开发人员长期以来一直使用LabWindows/CVI TDMS API,在数据流盘时将定时信息和自定义属性关联到测量数据上。 将数据存储为TDMS文件省去了设计和维护自定义数据文件格式的需要,同时获得了记录详细、易于查询且可移植到任意平台的数据集。
二、提高效率
1、强大的构建系统
LabWindows/CVI构建功能可减少花在等待构建完成的时间,使开发人员能够继续进行代码编辑,同时在后台构建项目。 构建系统专门针对提高构建速度和需要并行构建多个独立源文件的项目进行优化,以便用户充分利用多核处理器的优势。
2、强大的源代码浏览
LabWindows/CVI中提供了丰富的编程体验,为用户提供了直观控件、导航和源文件信息。 程序员可以使用源代码窗口中工具栏的下拉列表来查看和定位到源文件的函数。
此外,开发人员可以在编辑文件的同时生成源代码浏览信息,这样开发人员可以在编程的同时实时浏览代码,而不需要先编译。 该选项是LabWindows/CVI环境的一个全局功能,源代码浏览信息包含于发布和调试配置中。
3、批量格式和自动代码缩进
为了帮助开发人员创建更简洁、易读的代码,LabWindows/CVI提供了定制批量格式和自动缩进工具。 选择选项编辑器首选项,然后单击格式选项按钮来指定括号风格和缩进选项。 为了保持一致性,开发人员可以选择普通缩进和括号风格,并使用预览窗口来预览自定义选择的格式样例。 如果指定自动缩进的代码行,可选择源窗口中的文本行,然后选择编辑格式选择。 如果是自动缩进整个文件,则选择编辑格式文件。
4、发布的软件依赖关系支持
在创建发布时,开发人员可以选中或忽略任何包含软件依赖关系的NI安装程序组件的软件依赖关系。 产品的软件依赖关系是指产品可能需要或不需要的组件,根据应用程序的特定需求而异。通过“编辑安装程序”对话框的驱动和组件选项卡可选择软件依赖关系。
EVENT_LEFT_CLICK:
EVENT_LEFT_DOUBLE_CLICK:
EVENT_RIGHT_CLICK:
EVENT_RIGHT_DOUBLE_CLICK:
EVENT_KEYPRESS:
EVENT_GOT_FOCUS:
EVENT_LOST_FOCUS:
EVENT_DISCARD:
EVENT_CLOSE:
EVENT_PANEL_SIZE:
EVENT_PANEL_MOVE:
控件事件:
EVENT_COMMIT:
EVENT_LEFT_CLICK:
EVENT_LEFT_DOUBLE_CLICK:
EVENT_RIGHT_CLICK:
EVENT_RIGHT_DOUBLE_CLICK:
EVENT_KEYPRESS:
EVENT_GOT_FOCUS:
EVENT_LOST_FOCUS:
EVENT_DISCARD:
鼠标事件:
EVENT_RIGHT_CLICK
EVENT_RIGHT_DOUBLE_CLICK,
EVENT_LEFT_CLICK,
EVENT_LEFT_DOUBLE_CLICK
除此之外,还可以在程序里添加扩展的鼠标事件。
可以通过EnableExtendMouseEvents函数来响应
EVENT_MOUSE_MOVE,
EVENT_LEFT_MOUSE_UP,
EVENT_RIGHT_MOUSE_UP等事件。
然后使用DisableExtendedMouseEvents函数关闭该功能
控件回调函数:QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
面板回调函数:Test(int panel, int event, void *callbackData,
int eventData1, int eventData2)
菜单回调函数:MenuCallback(int menubar,int menuitem,void *callbackData,int panel)
(2) 字符串(Text )控件用来输入或显示一个字符串;
(3) 文本型控件包括文本框控件(Text Box Control)和信息框控件(Text Message Control),用于显示大量的文本信息;
(4) 命令按钮(Command Button)控件用于出发一个事件,用于仪器的控制。命令按钮一般必须定义回调函数功能的名称;
(5) 双态按钮(Toggle Button)控件包括双态按钮、文本/图形双态按钮和单选/复选按钮,它们都有两种状态,分别为“0”和“1”。
(6) 二值开关(Binary Switch)控件可以在两种状态(On/Off)下工作,并为两种状态设置控件值和标题,与触发按钮类似;
(7) 列表(Ring)控件用于在一组值中进行选择,既可以用鼠标单击控件框或单击控件的上下箭头选择,也可以用键盘的Up和Down键来选择;
(8) 时钟(Timer)控件用来设置特定的时间段内触发事件,它可以在无限长的时间里等间隔地重复执行给定的操作;
(9) 图形(Graph)控件分为曲线图Graph控件和带状图Strip Charts控件。带状图用来实时显示图形数据。
(10)标签页(Tab)控件用来给程序添加多个可以切换的标签页。
(11)经典样式控件(Classic-Style…)罗列了早期版本中CVI的控件。
C语言是一种功能强大、灵活多变的语言,而该软件是专门为C语言程序员提供的软件开发系统,其交互式开发环境中编写的程序符合标准C规范,并且使用这款开发环境用户能够完成许多工作,比如交互式程序开发具有的函数库,用来创建数据采集和仪器控制的应用程序;充分里用完备的软件工具进行数据采集、分析和显示等等。
labwindows cvi 2015可以利用提供的库函数来实现程序设计、编辑、编译、链接和标准C语言程序调试,在该开发环境中可以用软件自带的丰富行书库来编写程序,并且每个函数都有一个叫做函数面板的交互式操作界面,让我们的用户能够在函数面板中可以执行该函数并可以生成调用该函数的代码,也可以通过右击面板或空间获得有关函数、参数=函数类和函数的帮助。可以说这款labwindows cvi 2015破解版是非常强大的交互式C语言开发工具,如果你想要轻松畅快的进行C语言开发,那么这款软件必不可少哦。
软件安装教程
1、下载完毕解压缩,然后运行“NILWCVI2015.exe”,选择好路径将安装文件解压出来。2、解压完成自动运行,然后选择第一项安装我们的软件。
3、进入安装向导以后会要求用户输入序列号,这时候可以运行破解文件“NI_Lic_Act_1.2.exe”,然后生成序列号。
4、将序列号复制到安装向导中。
5、选择安装路径。
6、然后选择需要的组件,用户根据自身选择组件和工具,小编就直接默认好了。
7、将勾选取消掉,开始安装。
8、接受协议,然后一直点击next直到安装完毕。
9、完成后,记得不要用官方自带的激活程序哦。
破解教程
1、如果刚才没有关闭破解工具的,直接右键,Open License Folder。2、软件已经选择了用户的License文件夹爱,直接确定即可显示全部许可文件。
3、然后对着想要激活的功能右键,点击Activate进行激活,激活完毕即可使用软件。
GUI开发介绍
小编带来了labwindows cvi 2015的一个GUI开发的例子,用户可以尝试着学习一下。1、创建工程文件
运行LabWindows/CVI,单击菜单File-New-Project(*.prj)…,将会出现新建工程的选项对话框。在对话框中可以选择是否同时新建一个工作空间,是否保持跟上个工程同样的配置。
2、常见用户界面文件
单击菜单File-New-User Interface(*.uir)…,将会弹出用户界面编辑器。用户界面编辑器是一个利用交互式拖放控件的方法来设计图形用户界面的编辑器。对于一个新建的用户界面文件,编辑器将自动产生一个空面板,如下图所示。
双击面板 ,弹出属性编辑框。在属性编辑框中可以修改程序的标题、窗口位置、窗口按钮/菜单、窗口风格等特性。
初始状态下,面板属性对话框的Callback Function(回调函数)留空。此处可以填写回调函数的名称(此示例填写“MainCallBack”),以方便后面添加窗口关闭、窗口激活或者失活的响应代码。
3、在用户界面中添加控件
在该窗口中Untitled Panel的灰色区域中单击鼠标右键,便会弹出一个如图所示的控件选择的快捷菜单。
从该菜单中选择所需的控件,并摆放到面板的适当位置(也可通过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”,以方便后面生成回调函数。
当然,为了美观,可以在Quick Edit Window中修改按钮等控件的背景颜色,在Label Appearance中修改按钮中文字的颜色。上图中OK按钮即普通按钮修改颜色之后的效果。
4、在用户界面编辑窗口中,选择菜单Code-Generate-All Code,此时将会弹出一个提示存储.uir文件的对话框,在此我们存为1.uir(CVI将会生成同名的.h文件。不建议大家像示例一样起无意义的命名)。保存后CVI会弹出生成代码的对话框,一般情况下直接点击OK,框架源代码会自动保存在跟.uir同名的C文件中。
至此,我们点击菜单Run-Debug Project之后,程序UI已经可以运行了。运行结果如下图所示。当然了,因为尚未编写按钮的回调函数的响应代码,此时点击任何按钮都不会执行对应的操作。
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编程必须掌握的四个函数。
6、运行、调试
点击菜单Run-Debug Project(或点击工具栏的绿色三角形按钮)即可直接编译并运行当前工程,同时也可以在工程所在目录下生成exe文件。
右击工程名并选择Build(或点击菜单Build-Create Debuggable Executable)即可编译并生成exe文件。
在CVI代码编辑窗口中单击代码前空白部分或者按F9按键,则可以在对应的C语言语句处设置断点。
在程序中断时,单击菜单Window即可控制开启或关闭Memory(内存)、Variables(变量)、Watch(监控)窗口,通过查看或者修改对应的参数的值来方便的调试程序。
在本节中,我们已经通过编写并运行一个GUI的实例,了解了在CVI下用C语言开发GUI程序的基本过程。至此,大家已经算是对CVI入门了,大家已经可以尝试着自行开发一些有用、好玩的程序了。
新功能介绍
一、提高代码性能1、执行优化编译器
在LabWindows/CVI 2015中,编译器使用了具有Clang C前端的LLVM编译器基础架构。 这个编译器可生成经优化的代码,这意味着您不再需要使用外部优化编译器来优化代码。
Clang被选作为LabWindows/CVI编译器的基础是因为它可以提供非常快速的编译、极其有用的错误和警告消息以及比早期LabWindows/CVI编译器高60%的执行速度。 执行复杂计算、数学或分析的开发人员将可看到最高的性能提升,因为编译器后端特别适合用于优化数学计算所需的资源。
LLVM和Clang最开始是伊利诺伊大学的一个研究项目,目的是提供一个基于SSA的现代化编译策略,能够同时支持任意编程语言的静态和动态编译。 从那时起,LLVM逐渐发展,衍生了大量子项目,其中有许多被苹果、英特尔、AutoESL、NVIDIA及NI等各种商业软件供应商应用于生产之中。
开发人员还可以根据自定义的警告级别类型列表显示或隐藏警告级别,从而更轻松地找到感兴趣的警告、专注于错误和更高效地进行调试。 如果要访问“编译器警告”对话框,则右击“构建输出”窗口,然后选择配置警告。
2、基于OpenMP的灵活多线程执行
可移植且可扩展的OpenMP API可帮助开发人员无需大量编辑即可轻松并行执行现有代码。 OpenMP(开放式多处理)是一套编译器指令及相关子句、应用程序编程接口(API)和环境变量的集合,可帮助您轻松地创建多个线程上执行的应用程序。 OpenMP模型可允许您完成以下任务:
定义代码的并行区域和创建执行并行区域的线程组。
规定同一组中不同线程之间的任务共享方式(循环迭代)。
规定线程间可共享的数据以及每个线程专用的数据。
同步线程、防止并发访问共享数据,并定义由单个线程专门执行区域。
OpenMP的特殊用途
OpenMP适用于由密集循环组成的程序,其中循环迭代之间是彼此独立的,这样迭代的子集可以在多个处理内核上并行运行。 同时它也适用于多个区域之间可以相互独立地运行但必须在某个时刻同步的程序。 因此OpenMP也是实现fork/join并行设计模式的一种有效方法。
虽然我们可以使用LabWindows/CVI工具库来创建多线程应用程序,但是OpenMP模型也提供了许多好处。 如下图所示,通过插入单行编译指示,我们有可能以最小的改动逐步实现OpenMP模型。 这也使开发人员能够保留原始源代码中的序列顺序,而且在添加OpenMP指令之后只需少量的重新测试,这是因为程序、数据结构和算法都没有发生变化。 我们也可以通过禁用“构建选项”对话框中的OpenMP支持来轻松编译和测试程序的序列版本。
OpenMP的结构化方法有助于最大限度地减少多线程编程常见的可能编程错误,因为它不要求使用底层多线程结构和对象。 所有底层实现均是由OpenMP进行处理,这样开发人员便能够专注于应用程序逻辑和I/O。
此外,这也简化了将代码移植到其它编译器和操作系统,因为不支持OpenMP结构的编译器将会忽略OpenMP编译指令。 我们甚至可以在不修改源代码的情况下使用用于调整循环调度的环境变量来调整运行时的性能。 注意: LabWindows/CVI 2015符合OpenMP 2.5规范。
3、无损的网络数据流
网络流API为分布式LabWindows/CVI或LabVIEW应用提供了无损的单向点对点通信通道。 利用网络流,您可以轻松地在网络上或在同一台计算机上共享数据。
网络流是一种易于配置、紧密集成的动态通信方法,适用于应用程序之间的数据传输,具有可与TCP相媲美的吞吐量和延迟特性。 网络流也增强了连接管理,如果由于网络故障或其他系统故障导致连接中断,网络流可自动恢复网络连接。 网络流利用缓存无损通信策略来确保写入网络流的数据即使在网络连接不顺畅的环境下也不会丢失。
网络流的具体应用
网络流经设计和优化可实现无损、高吞吐量的数据通信。 网络流采用单向点至点的缓存通信模型来实现应用程序之间的数据传送。 这意味着其中一个终端是数据的创建者,另一个终端是读者。 您可以使用两个网络流来实现双向通信,其中每一台计算机的创建者和读者与对应计算机的创建者和读者相匹配。
由于网络流具有与原始TCP相匹配的吞吐量性能,因此对于高吞吐量应用,如果编程人员希望避免TCP的高复杂性,那么网络流就是理想的选择。 网络流也可以用于无损的低吞吐量通信,例如发送和接收命令。 但是,将网络流应用于低吞吐量通信时,如果需要获得最低的延迟,可能需要更明确地管理数据通过网络流发送的时间。
4、高性能数据流盘
NI技术数据管理流(TDMS)文件格式是将测量数据保存到磁盘上的最快速、最灵活方式。 开发人员长期以来一直使用LabWindows/CVI TDMS API,在数据流盘时将定时信息和自定义属性关联到测量数据上。 将数据存储为TDMS文件省去了设计和维护自定义数据文件格式的需要,同时获得了记录详细、易于查询且可移植到任意平台的数据集。
二、提高效率
1、强大的构建系统
LabWindows/CVI构建功能可减少花在等待构建完成的时间,使开发人员能够继续进行代码编辑,同时在后台构建项目。 构建系统专门针对提高构建速度和需要并行构建多个独立源文件的项目进行优化,以便用户充分利用多核处理器的优势。
2、强大的源代码浏览
LabWindows/CVI中提供了丰富的编程体验,为用户提供了直观控件、导航和源文件信息。 程序员可以使用源代码窗口中工具栏的下拉列表来查看和定位到源文件的函数。
此外,开发人员可以在编辑文件的同时生成源代码浏览信息,这样开发人员可以在编程的同时实时浏览代码,而不需要先编译。 该选项是LabWindows/CVI环境的一个全局功能,源代码浏览信息包含于发布和调试配置中。
3、批量格式和自动代码缩进
为了帮助开发人员创建更简洁、易读的代码,LabWindows/CVI提供了定制批量格式和自动缩进工具。 选择选项编辑器首选项,然后单击格式选项按钮来指定括号风格和缩进选项。 为了保持一致性,开发人员可以选择普通缩进和括号风格,并使用预览窗口来预览自定义选择的格式样例。 如果指定自动缩进的代码行,可选择源窗口中的文本行,然后选择编辑格式选择。 如果是自动缩进整个文件,则选择编辑格式文件。
4、发布的软件依赖关系支持
在创建发布时,开发人员可以选中或忽略任何包含软件依赖关系的NI安装程序组件的软件依赖关系。 产品的软件依赖关系是指产品可能需要或不需要的组件,根据应用程序的特定需求而异。通过“编辑安装程序”对话框的驱动和组件选项卡可选择软件依赖关系。
事件一览
CVI中主要包括了面板事件,控件事件,鼠标事件。其中面板事件主要有:EVENT_LEFT_CLICK:
EVENT_LEFT_DOUBLE_CLICK:
EVENT_RIGHT_CLICK:
EVENT_RIGHT_DOUBLE_CLICK:
EVENT_KEYPRESS:
EVENT_GOT_FOCUS:
EVENT_LOST_FOCUS:
EVENT_DISCARD:
EVENT_CLOSE:
EVENT_PANEL_SIZE:
EVENT_PANEL_MOVE:
控件事件:
EVENT_COMMIT:
EVENT_LEFT_CLICK:
EVENT_LEFT_DOUBLE_CLICK:
EVENT_RIGHT_CLICK:
EVENT_RIGHT_DOUBLE_CLICK:
EVENT_KEYPRESS:
EVENT_GOT_FOCUS:
EVENT_LOST_FOCUS:
EVENT_DISCARD:
鼠标事件:
EVENT_RIGHT_CLICK
EVENT_RIGHT_DOUBLE_CLICK,
EVENT_LEFT_CLICK,
EVENT_LEFT_DOUBLE_CLICK
除此之外,还可以在程序里添加扩展的鼠标事件。
可以通过EnableExtendMouseEvents函数来响应
EVENT_MOUSE_MOVE,
EVENT_LEFT_MOUSE_UP,
EVENT_RIGHT_MOUSE_UP等事件。
然后使用DisableExtendedMouseEvents函数关闭该功能
回调函数类型介绍
在CVI中完成软件交互的主要有控件,面板,菜单。对于不同的交互方式,CVI里对应了不同的回调函数。主要表现在回调函数的参数不一样。控件回调函数:QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
面板回调函数:Test(int panel, int event, void *callbackData,
int eventData1, int eventData2)
菜单回调函数:MenuCallback(int menubar,int menuitem,void *callbackData,int panel)
软件常用控件类型
(1) 数值型(Numeric)控件可作为用户参数输入窗或程序参数回显窗;(2) 字符串(Text )控件用来输入或显示一个字符串;
(3) 文本型控件包括文本框控件(Text Box Control)和信息框控件(Text Message Control),用于显示大量的文本信息;
(4) 命令按钮(Command Button)控件用于出发一个事件,用于仪器的控制。命令按钮一般必须定义回调函数功能的名称;
(5) 双态按钮(Toggle Button)控件包括双态按钮、文本/图形双态按钮和单选/复选按钮,它们都有两种状态,分别为“0”和“1”。
(6) 二值开关(Binary Switch)控件可以在两种状态(On/Off)下工作,并为两种状态设置控件值和标题,与触发按钮类似;
(7) 列表(Ring)控件用于在一组值中进行选择,既可以用鼠标单击控件框或单击控件的上下箭头选择,也可以用键盘的Up和Down键来选择;
(8) 时钟(Timer)控件用来设置特定的时间段内触发事件,它可以在无限长的时间里等间隔地重复执行给定的操作;
(9) 图形(Graph)控件分为曲线图Graph控件和带状图Strip Charts控件。带状图用来实时显示图形数据。
(10)标签页(Tab)控件用来给程序添加多个可以切换的标签页。
(11)经典样式控件(Classic-Style…)罗列了早期版本中CVI的控件。
展开更多
labwindows cvi 2015破解版下载地址
- 需先下载高速下载器:
- 专用下载:
- 其它下载: