I
前 言
LabWindows/CVI 是 National Instruments 公司(美国国家仪器公司,简称 NI 公司)推出
的交互式 C 语言开发环境。LabWindows/CVI 将功能强大、使用灵活的 C 语言与用于数据
采集分析和显示的测控专业工具有机地结合起来,它的集成化开发环境、交互式编程方法、
函数面板和丰富的库函数大大增强了 C 语言的功能,为熟悉 C 语言的开发人员建立检测系
统、自动测试环境、数据采集系统、过程监控系统、虚拟仪器等提供了一个理想的软件开
发环境。鉴于 LabWindows/CVI 的上述特点,它已经成为测控领域最受欢迎的软件开发平
台之一,在我国已经得到了较为广泛的使用。
本书详细地介绍了 NI 公司 2001 年的最新版本 LabWindows/CVI 6.0 软件开发环境,以
及使用 LabWindows/CVI 6.0 设计和开发测试控制软件的基本方法和步骤。主要内容包括:
LabWindows/CVI 6.0 的集成开发环境,面板、控件和菜单的设计,交互式代码生成,程序
的调试工具,用户界面编程,基本函数库,高级函数库, LabWindows/CVI 下的 Windows
SDK 编程,使用和开发动态链接库,多线程技术,ActiveX 技术,网络编程,数据库编程,
符合 VPP 规范的仪器驱动程序及软面板开发等。
LabWindows/CVI 6.0 对先前的版本作了一些改进,并增添了一些功能,增添的主要功
能及所作的改进如下:(1)用户界面编辑器中创建 ActiveX 控件;(2)创建或者编辑
ActiveX 服务器向导;(3)用户界面库中新增的 3D 控件;(4)支持多字节字符的应用;
(5)新增的源代码浏览器;(6)新增的图形数组浏览窗口;(7)工作台;(8)可以定
制用户界面控件;(9)安装盘制作工具采用了微软的安装技术。
全书分为 9 章。第 1 章首先对 LabWindows/CVI 作以简介,如何安装运行
LabWindows/CVI、LabWindows/CVI 6.0 的新特性、LabWindows/CVI 的程序开发概述,以
及全书的结构。第 2 章介绍 LabWindows/CVI 的入门知识,介绍 LabWindows/CVI 的程序
开发环境,如何载入、运行和编辑源程序,常用的窗口、控件、菜单和对话框的使用等等。
如何生成交互式代码,如何执行和调试程序。第 3 章介绍 LabWindows/CVI 的应用程序设
计,并通过一个例程讲解 LabWindows/CVI 的编程方法。从使用 LabWindows/CVI 的界面
编辑器开始,介绍如何创建并编辑 GUI,如何使用函数面板和函数库,如何添加分析功能,
如何处理用户事件。第 4 章介绍 LabWindows/CVI 的基本函数库,着重通过程序的方式,
讲述如何利用用户界面函数来控制 GUI。同时,这一章还介绍了 LabWindows/CVI 的几个
特有的函数库,包括实用库、格式化库、I/O 库和 RS-232 库,并通过一些例程讲述如何使
用这些库函数。第 5 章是高级函数库的使用,本章介绍了 LabWindow/CVI 提供的高级分析
库、TCP 库,以及编程工具库。在程序设计中使用这些库函数可以大大简化编程的工作量。,
第 6 章介绍了数据库程序的应用,讲述了经常和数据库结合使用的表格控件,介绍了 NI
公司的 SQLToolkit 工具包,ODBC 的基本概念,并通过一个例程讲解数据库测控程序的开
发过程。第 7 章和第 8 章是 LabWindows/CVI 的高级编程部分,介绍了动态链接库的基本
概念,在 LabWindows/CVI 中如何使用和开发动态链接库。另外,还介绍了如何在
LabWindows/CVI 中使用 Win32 SDK 函数,如何开发多线程测控程序,ActiveX 控件使用
方法,以及利用向导创建 ActiveX 服务器的一般步骤。第 9 章结合一个实例介绍了使用
LabWindows/CVI 开发符合 VPP(VXI plug&play)规范的仪器驱动程序、软面板的方法,并
II
对 IVI 仪器驱动程序作以简单介绍。
本书内容丰富详实,实用性强。书中包含了各位编者多年来使用 LabWindows/CVI 进
行自动测试系统软件开发工作的经验。书中提供了大量典型的例程,建议读者对这些例程
上机练习,加深体会,以便通过这些例程尽快掌握 LabWindows/CVI 的编程技术。
本书由哈尔滨工业大学自动化测试与控制研究所的张毅刚担任主编,乔立岩担任副主
编。参加本书的编写工作的还有彭宇、孙宁、刘旺、黄灿杰、俞龙江、赵光权。硕士研究
生俞洋同学,也为本书的出版作了许多技术工作。哈尔滨工业大学自动化测试与控制研究
所孙圣和教授对本书的编写工作十分关心和支持,给予了热情的指导。此外,哈尔滨工业
大学自动化测试与控制研究所的许多同志也为本书的出版,提供了有利的支持,并提出了
许多宝贵的修改建议。在此,对他们一并表示衷心地感谢。
本书可作为工科院校仪器仪表、自动化测试与控制专业的本科生、研究生学习掌握
LabWindows/CVI 编程技术的教材,也可供广大从事仪器仪表、检测技术、自动化测试与
控制技术等领域的工程技术人员参考。
由于作者工作繁忙,编写任务紧迫,书中的疏漏之处在所难免,敬请读者批评指正(联
系地址:哈尔滨工业大学 339 信箱,邮编:150001,联系电话: 0451-6413531-14)
作 者
2002 年 3 月 于哈尔滨工业大学自动化测试与控制研究所
目 录
第 1 章 绪论 ............................................................. 1
1.1 LabWindows/CVI 简介...........................................................................................1
1.2 LabWindows/CVI 程序开发概述...........................................................................2
1.2.1 在 LabWindows/CVI 中使用 C 语言 ..........................................................2
1.2.2 LabWindows/CVI 的程序结构 ....................................................................2
1.3 LabWindows/CVI 6.0 的新特性 .............................................................................4
1.4 安装 LabWindows/CVI...........................................................................................5
第 2 章 LabWindows/CVI 的开发环境 ........................................7
2.1 载入、运行和编辑源程序 .......................................................................................7
2.1.1 LabWindows/CVI 的主要窗口 ....................................................................7
2.1.2 源代码编辑工具 ........................................................................................10
2.1.3 操作用户界面 ............................................................................................13
2.1.4 LabWindows/CVI 的 GUI 控件.................................................................13
2.2 生成交互式代码 .....................................................................................................23
2.2.1 访问用户界面库 ........................................................................................24
2.2.2 函数面板 ....................................................................................................25
2.3 执行和调试程序 .....................................................................................................30
2.3.1 单步执行 ....................................................................................................30
2.3.2 断点 ............................................................................................................31
2.3.3 显示和编辑数据 ........................................................................................32
第 3 章 LabWindows/CVI 应用程序设计 ..................................... 38
3.1 图形用户界面 .........................................................................................................38
3.1.1 用户界面编辑器 ........................................................................................38
3.1.2 源代码连接 ................................................................................................39
3.1.3 代码生成器 ................................................................................................39
3.1.4 建立用户界面文件 ....................................................................................40
3.2 使用函数面板和函数库 .........................................................................................45
3.2.1 源代码分析 ................................................................................................45
3.2.2 生成随机数组 ............................................................................................46
3.2.3 构建工程 ....................................................................................................49
3.2.4 运行完整的工程 ........................................................................................50
3.3
添加分析功能 .........................................................................................................50
3.3.1 修改用户界面 ............................................................................................50
3.3.2 编写回调函数 ............................................................................................52
3.3.3 运行程序 ....................................................................................................53
3.4 用户事件处理 .........................................................................................................54
3.4.1 用户事件 ....................................................................................................54
3.4.2 回调函数 ....................................................................................................58
第 4 章 基本函数库 ...................................................... 62
4.1 用户界面库(User Interface Library).................................................................62
4.1.1 面板(Panel)操作 ...................................................................................63
4.1.2 用户界面管理(User Interface Management)........................................67
4.1.3 菜单结构(Menu Structure)....................................................................67
4.1.4 控件/曲线图/带状图(Controls/Graphs/Strip Charts)操作....................71
4.1.5 弹出面板函数 ............................................................................................82
4.2 格式化输入/输出库(Format I/O Library).........................................................85
4.2.1 文件输入/输出(File I/O).......................................................................85
4.2.2 字符串处理(String Manipulation) ........................................................91
4.2.3 数据格式化(Data Formating) ...............................................................93
4.3 实用函数库(Utility Library).............................................................................95
4.3.1 定时/等待(Timer/Wait) .........................................................................96
4.3.2 日期/时间(Date/Time) ..........................................................................97
4.3.3 文件应用(File Utilities) ...................................................................... 101
4.3.4 路径应用(Directory Utilities) .............................................................104
4.3.5 IO 端口(Port IO) .................................................................................105
4.4 RS-232 函数库(RS-232 Library) .........................................................................106
4.4.1 RS-232C 接口介绍 ..................................................................................107
4.4.2 RS-232 函数库概述 .................................................................................108
4.4.3 RS-232 编程举例 .....................................................................................108
第 5 章 高级函数库 ..................................................... 116
5.1 高级分析库 ..........................................................................................................116
5.1.1 概述 ..........................................................................................................116
5.1.2 应用实例 .................................................................................................. 117
5.2 TCP 库.................................................................................................................129
5.2.1 网络化仪器 ..............................................................................................129
5.2.2 TCP 协议与 TCP 库.................................................................................130
5.2.3 TCP 服务器程序设计 ..............................................................................132
5.2.4 TCP 客户程序设计 ..................................................................................140
5.3 DataSocket 库......................................................................................................146
5.3.1 DataSocket 介绍.......................................................................................146
5.3.2 DataSocket 发送数据程序设计 ...............................................................147
5.3.3 DataSocket 接收数据程序设计 ...............................................................155
5.4 工具库(Tools Library)....................................................................................160
5.4.1 工具库简介 ..............................................................................................160
5.4.2 密码设计 ..................................................................................................161
5.4.3 工具条设计 ..............................................................................................164
5.4.4 分页界面设计 ..........................................................................................176
5.4.5 系统托盘设计 ..........................................................................................177
第 6 章 数据库应用程序开发—SQL Toolkit ................................. 183
6.1 概述 ......................................................................................................................183
6.1.1 SQL Toolkit 功能概述..............................................................................183
6.1.2 SQL Toolkit 2.0 的安装............................................................................183
6.2 入门 .....................................................................................................................185
6.2.1 数据库基本概念 ......................................................................................185
6.2.2 结构化查询语言(SQL) ............................................................................186
6.2.3 ODBC.......................................................................................................186
6.2.4 TABLE 控件.............................................................................................189
6.3 数据库基本操作 ...................................................................................................206
6.3.1 SQL Toolkit 数据库操作基本步骤..........................................................206
6.3.2 使用 SQL Toolkit 的函数库.....................................................................207
6.4 数据库高级操作 ...................................................................................................225
6.4.1 设置连接属性 ..........................................................................................225
6.4.2 设置语句属性 ..........................................................................................225
6.4.3 操作复合语句 ..........................................................................................226
第 7 章 高级程序设计 .................................................... 230
7.1 DLL 和 Windows SDK .......................................................................................230
7.1.1 DLL 的基础知识......................................................................................230
7.1.2 创建和调试 DLL......................................................................................232
7.1.3 使用 DLL..................................................................................................236
7.1.4 Windows SDK 概述 .................................................................................238
7.1.5 Windows SDK 编程实例 ........................................................................240
7.2 多线程 .................................................................................................................242
7.2.1 概述 ..........................................................................................................242
7.2.2 两种多线程机制 ......................................................................................244
7.2.3 多线程间的数据保护 ..............................................................................246
7.2.4 防止死锁 ..................................................................................................253
7.2.5 监视和控制次线程 ..................................................................................254
7.2.6 线程的优先级 ..........................................................................................256
7.2.7 线程局部变量 ..........................................................................................256
7.2.8 其它一些要注意的问题
..........................................................................259
第 8 章 ActiveX 技术 .................................................... 261
8.1 ActiveX 技术简介...............................................................................................261
8.2 使用 ActiveX 控件..............................................................................................262
8.2.1 设计带有 ActiveX 控件的应用程序 .......................................................262
8.2.2 需要注意的问题 ......................................................................................264