1.1 LabWindows/CVI
1.1.1 LabWindows/CVI概述
LabWindows/CVI是美国NI(National Instruments)公司开发的面向计算机测控领域的虚拟仪器软件开发平台,可以在多种操作系统(WindowsXP/Vista/7、Mac OS和Unix)下运行。
LabWindows/CVI 是为C 语言程序员提供的集成开发环境(IDE),在此开发环境中可以利用C语言及其提供的库函数来实现程序的设计、编辑、编译、链接、调试。使用LabWindows/CVI 可以完成以下但不限于以下工作: ·交互式的程序开发;
·具有功能强大的函数库,用来创建数据采集和仪器控制的应用程序; ·充分利用完备的软件工具进行数据采集、分析和显示; ·利用向导开发IVI 仪器驱动程序和创建ActiveX 服务器; ·为其它程序开发C 目标模块、动态连接库(DLL)、C 语言库。
图 1-1 LabWindows/CVI界面
LabWindows/CVI 的功能强大在于它提供了丰富的函数库。利用这些库函数除可实现常规的程序设计外,还可实现更加复杂的数据采集和仪器控制系统的开发。
数据采集。IVI库、GPIB/GPIB 488.2库、NI-DAQmx库、传统的NI-DAQ库、RS-232库、VISA库、VXI库以及NI-CAN库。
数据分析。格式化IO库、分析库以及可选的高级分析库。
GUI库。使用LabWindows/CVI 的用户界面编辑器可以创建并编辑图形用户界面(GUI),而使用LabWindows/CVI 的用户界面库函数可以在程序中创建并控制GUI。此外,
LabWindows/CVI为GUI 面板的设计,准备了许多专业控件,如:曲线图控件、带状图控件、表头、旋钮和指示灯等,以适应测控系统软件开发的需求,利用这些控件可以设计出专业的测控程序界面。
网络和进程间通信库。动态数据交换(DDE)库、TCP库、ActiveX库、Internet库、DIAdem连接库、DataSocket库等。
除此之外,用户可以在CVI中使用ANSI C库中的全部标准函数。
正式因为有了强大的库支持,所以在CVI中,完成绘制图 1-2所示正弦函数波形的功能,只需要在main()函数中写三行代码:
图 1-2 CVI程序运行结果
一旦提及NI公司,大家可能最先联想到的是NI公司推出的LabVIEW软件。
LabWindows/CVI与LabVIEW相比,主要应用在各种测试、控制、故障分析及信息处理软件的开发中,其更适合中、大型复杂测试软件的开发,是工程技术人员开发建立监测系统、自动测量环境、数据采集系统、过程监测系统的首选工具。 1.1.2 LabWindows/CVI安装
要安装CVI,只需要根据CVI安装包里的“Release Notes.pdf”和“说明.txt”一步步完成安装即可。
安装完CVI后,我们有必要看一下,安装程序在我们计算机的磁盘中丢下了哪些东西。
表 1-1 LabWindows/CVI主要目录及其内容
目录名 \\bin \\extlib \\fonts \\include \\instr \\samples \\sdk \\toolslib \\tutorial \\vxd \\wizard 说明 LabWindows/CVI的库文件 外部编译器使用的CVI库文件(只在Windows95/NT中使用) 字体文件 头文件 仪器模块 CVI开发例程 SDK库文件(只在Windows95/NT中使用) 开发工具包和库文件 使用手册 VXD实例开发模板 CVI开发环境中的向导程序 其中,samples文件夹中的例程可以使初学者迅速掌握CVI编程开发基本步骤。bin文件夹下的cvi.chm(也可以通过CVI开发环境中按F1打开)是学习CVI之路必不可少的参考文档。 1.2 寻根问底:开发环境 对于一门学问的初学者来说,最希望搞懂的就是学的东西的本质是什么。在前一小节中我们提到了,LabWindows/CVI是NI推出的一个基于C语言的集成开发环境(IDE,Integrated Development Environment)。那么什么是开发环境呢,开发环境是怎么工作的呢? 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。如微软的Visual Studio系列,Borland的C++ Builder系列等。 但我们自从学习C语言开始就与集成开发环境建立了不解之缘。似乎在我们心中,C语言就是VC/VS、VC/VS就是C语言、VC/VS就是编译器、编译器就是VC/VS。虽然不可否认的是,IDE的出现大大的降低了软件开发的门槛,曾经帮助我们快速入门,但IDE过于友好的界面让人无需思考程序编译、运行的原理即可开始写自己的第一个HelloWorld程序。 所以,我们有必要了解IDE的工作模式,有必要了解IDE是怎么通过命令行去工作的。命令行,看似简陋,却能让人专心于自己的事物,并搞清楚一个程序的来龙去脉。 Keil下的命令行工作方式已经在创新中心的《SST单片机实践教程》的“汇编语言工具链”一节中有了详细的介绍,下面通过一个实例介绍最常用的VC6.0的命令行工作方式。 在此之前,我们假设你至少已经用VC写过C语言,编译过工程,并对Windows下的命令行至少略知一二。当然,如果你现在还不懂,赶紧利用Google等一切现代化的工具解除自己的疑惑。
例1 使用命令行完成用VC对下面简单的C语言程序的编译。
实验步骤
(1) 将这段代码保存为.c文件(此处保存为main.c),并讲这段代码放在VC安装路径下的“VC98\\Bin\\”文件夹下。
启动命令行窗口,并将地址修改为当前地址
(2) 敲入cl.exe main.c命令执行编译。
此时可能会弹出窗口,提示缺少文件“mspdb60.dll”,编译失败。毕竟当前的命令行窗口没有标准VC的环境变量,所以编译程序cl.exe无法从当前的环境变量中找到mspdb60.dll。 (3) 在VC安装路径的“Common\\MSDev98\\Bin”目录中找到此DLL并复制到“VC98\\Bin”文件夹下之后,按键盘方向键↑重新运行cl.exe main.c。此时会提示找不到stdio.h文件。在VC安装路径的“VC98\\Include”目录中找到stdio.h之后,复制到“VC98\\Bin”文件夹下。
图 1-3 命令行编译main.c-提示找不到stdio.h
(4) 同理,程序会依次提示找不到文件LIBC.lib、OLDNAMES.lib、kernel32.lib。这些库文件都可以在VC安装目录下的“VC98\\Lib”路径中找到。
(5) 再次运行,命令行提示编译成功。
图 1-4 命令行编译main.c-编译成功
(6) 在命令行中敲入main.exe。“Hello,world!”是否显示出来了呢?
图 1-5 运行main.exe
至此,聪明的你应该已经知道VC的IDE是如何依赖于安装包内的编译器CL.exe程序实现编译的功能了吧。
本小节旨在通过对大家熟悉的VC的IDE改用命令行进行编译的方式引导大家接触一个新的事物首先应该搞清楚其本质的思想,养成搞学问时喜欢刨根问底的好习惯。除了编译器的功能外,集成开发环境IDE应该还带有调试器的功能。限于篇幅,此处不再多过多探索,大家可以自行研究。若对IDE感兴趣,大家还可以调用现有的编译器程序、调试器程序编写自己的IDE!
1.3 C语言的魅力
是不是在大家的印象里,C语言只能做那种char后面跟几个*,故意把人绕晕之后运行的时候还会弹出一个黑乎乎的窗口的程序?
是不是在大家的印象里,C语言不能访问网络、不能播放声音、不能显示图片、不能跟硬件设备打交道、不能做GUI,即便做出来GUI也丑的很或者慢的很,更不能搞多线程之类的高端一点的玩意儿?
是不是在大家的印象里,为了使用一个串口库,我们就必须丢掉C语言然后让C++甚至MFC闪亮登场?
是不是在大家的印象里,C语言能做的事情,C++、Java、C#或者Python等等编程语言通通都能做到?而这些编程语言能做到的事情C语言就很难做到?
如果一定要这么认为,那就大错特错了。即便在编程语言更新换代如此之快的今天,我们也很难找出一个智能设备或者商业软件在开发的过程中未曾使用C语言过。
借助CVI以及CVI自带的丰富的函数库,C语言不仅能够做C++、C#、Java等可以做的事,有时还可以做的更快更好,甚至还可以做这些编程语言所不能做的事。