第0章 什么是LabVIEW 1
0.1 LabVIEW与文本编程语言的区别 1
0.2 G语言 2
0.3 LabVIEW的应用领域 3
0.4 LabVIEW的发展历史 4
第1章 LabVIEW入门 5
1.1 “Hello,World!”程序 5
1.1.1启动界面 5
1.1.2创建一个新VI 6
1.1.3让VI显示“您吃了吗?” 7
1.1.4 LabVIEW程序的运行逻辑 10
1.2如何学习 LabVIEW 12
1.2.1学习LabVIEW的3种方式 12
1.2.2自学LabVIEW 13
1.2.3 LabVIEW的帮助文档 15
1.2.4 LabVIEW的范例 17
1.2.5寻求他人帮助 19
1.3编写更复杂的程序 19
1.3.1美化VI 19
1.3.2让VI持续运行 21
1.3.3项目 23
1.3.4使用子VI 24
1.3.5创建子VI 26
1.3.6从程序框图创建子VI 28
1.4设置个性化编程环境 29
1.4.1 LabVIEW的设置选项 29
1.4.2函数和控件选板的设置 30
1.4.3工具选板 32
第2章 数据 34
2.1数值 34
2.1.1数值控件及显示格式 34
2.1.2常量 35
2.1.3表示法 36
2.1.4数值运算的常用函数 37
2.1.5表达式节点 38
2.1.6公式Express VI 38
2.1.7公式节点 39
2.1.8 MathScript脚本节点 42
2.1.9数值的单位 42
2.2其他数据类型 43
2.2.1枚举型 43
2.2.2布尔型 46
2.2.3数组型 46
2.2.4簇 51
2.2.5字符串 51
2.2.6路径 53
2.3数据类型之间的转换 54
2.3.1数值表示法之间的转换 54
2.3.2数值与字符串之间的转换 55
2.3.3数值与布尔类型之间的转换 55
2.3.4路径与其他数据类型之间的转换 55
2.3.5与时间相关的转换 56
2.3.6变体 57
2.3.7数据平化至字符串 59
2.3.8数据平化至XML 60
2.3.9强制转换 61
2.4控件和数据在程序中的使用 64
2.4.1控件与变量的关系 64
2.4.2控件的标签和标题 64
2.4.3控件的默认值 65
2.4.4局部变量 66
2.4.5属性节点 69
2.4.6调用节点 71
2.5应用实例 71
2.5.1字符串公式求值 71
2.5.2字符串转换为布尔数组 72
2.5.3程序运行中改变控件标题 73
2.5.4禁止枚举控件中的某些项 73
2.5.5在字符串中显示多种字体 74
第3章 基本程序结构 75
3.1顺序结构 75
3.1.1程序执行顺序 75
3.1.2创建顺序结构 76
3.1.3层叠式顺序结构 77
3.1.4平铺式顺序结构 79
3.1.5“无形胜有形”的最高境界 79
3.2条件结构 81
3.2.1布尔类型的条件选择结构 82
3.2.2其他数据类型的条件选择 83
3.2.3合理设置选择条件 83
3.2.4条件结构隧道 84
3.2.5选择函数 85
3.3程序框图禁用结构 86
3.4条件禁用结构 87
3.5 for循环结构 89
3.5.1 for循环 89
3.5.2循环结构隧道 90
3.5.3移位寄存器 92
3.5.4反馈节点 93
3.5.5结束条件 94
3.6 while循环结构 95
3.7事件结构 96
3.7.1事件结构 96
3.7.2按照产生源来区分事件的种类 96
3.7.3编辑事件 98
3.7.4按照发出时间区分事件的种类 99
3.7.5事件结构的使用 100
3.7.6动态事件 102
3.7.7用户自定义的事件 105
3.8定时结构 107
3.8.1定时函数和VI 107
3.8.2使用事件结构 107
3.8.3定时循环 108
第4章 常用程序结构模式 109
4.1错误处理机制 109
4.1.1不可预期的错误 109
4.1.2可预期的错误 112
4.1.3自定义错误 112
4.1.4显示错误信息 113
4.1.5调试时显示错误信息 114
4.1.6合并错误 115
4.2可重入VI 116
4.2.1同一VI的并行运行 117
4.2.2可重入VI的副本 118
4.3状态机 119
4.3.1循环条件结构 119
4.3.2单状态传递的状态机 120
4.3.3多状态传递的状态机 121
4.3.4状态机的使用 122
4.3.5状态图工具包 122
4.4全局变量 123
4.4.1全局变量VI 124
4.4.2共享变量 126
4.4.3功能全局变量 127
4.4.4基于功能全局变量的程序功能模块 130
4.5界面程序 131
4.5.1界面程序的程序框图设计 131
4.5.2用户自定义事件的设计 134
4.5.3对耗时代码的处理 135
4.5.4其他注意事项 136
4.6多态VI 137
4.6.1使用变体作为子VI的参数类型 137
4.6.2多态VI的概念 138
4.6.3编写多态VI 138
4.6.4多态VI的注意事项 140
4.6.5菜单设计的小技巧 141
4.7 Express VI 141
4.7.1什么是Express VI 141
4.7.2子VI在程序框图上的显示方式 142
4.8传引用 144
4.8.1 LabVIEW自带的传引用数据类型 144
4.8.2全局变量 145
4.8.3队列 146
4.8.4数据记录文件引用句柄 148
4.8.5借助C语言 149
第5章 调用外部程序 151
5.1动态链接库 151
5.1.1背景知识 151
5.1.2 CLN和CIN节点 152
5.1.3 DLL的加载方式 153
5.1.4函数的设置 154
5.1.5简单数据类型参数的设置 155
5.1.6结构型参数的设置 159
5.1.7返回值的设置 161
5.1.8对C语言中指针的处理 162
5.1.9 LabVIEW提供的C接口函数 163
5.1.10导入共享库工具 164
5.2 ActiveX 166
5.2.1 ActiveX控件 166
5.2.2使用ActiveX控件 166
5.2.3 ActiveX控件的事件 169
5.2.4 ActiveX文档 171
5.2.5 ActiveX自动化 172
5.3 .NET 173
5.4 .EXE 174
第6章 VI服务器 175
6.1概念 175
6.1.1什么是VI服务器 175
6.1.2 VI Scripting 175
6.2运行中改变界面 177
6.2.1属性节点 177
6.2.2 VI的属性 178
6.2.3得到对象的引用 179
6.2.4对象类的层次结构 180
6.2.5类浏览器 181
6.3装载和运行子VI 182
6.3.1静态与动态装载子VI 182
6.3.2动态调用VI 184
6.3.3插件结构 186
6.3.4递归调用 186
6.3.5后台任务 188
6.3.6启动画面 190
6.4动态创建和修改VI 191
6.4.1 VI Scripting授权 191
6.4.2创建VI 192
6.4.3创建新的控件 192
6.4.4创建程序框图 193
6.4.5批量修改VI 194
6.5网络服务 195
6.6 ActiveX接口 196
第7章 测试测量应用程序设计 197
7.1“采集、处理、显示”型程序的结构模型 197
7.1.1程序结构的划分 197
7.1.2普通循环模型 198
7.1.3管道流水线模型 199
7.1.4“生产者—消费者”模型 200
7.2 Express VI 201
7.2.1测试程序相关的Express VI 201
7.2.2应用 202
7.3数据采集 205
7.3.1使用驱动程序 205
7.3.2使用硬件设备的C语言驱动程序 206
7.3.3编写驱动程序 207
7.3.4可互换虚拟仪器驱动程序 207
7.3.5数据采样时钟的设置 209
7.4显示 210
7.4.1波形图表和波形图控件 210
7.4.2波形数据类型 210
7.4.3多曲线显示 212
7.4.4中断的曲线 213
7.4.5大量数据的显示 214
7.4.6高速数据的显示 216
7.4.7强度图 218
7.5存储 220
7.5.1文本文件和二进制数据文件 220
7.5.2文本文件 221
7.5.3二进制数据文件 221
7.5.4数据库 221
7.5.5生成报表 222
第8章 调试 223
8.1集成调试环境 223
8.1.1列出编译错误 223
8.1.2运行时的调试工具 224
8.1.3全局选项 226
8.1.4 VI的属性 226
8.2断点和探针 227
8.2.1断点 227
8.2.2探针 228
8.2.3选取其他控件作为探针 228
8.2.4条件探针 229
8.2.5用户自定义探针 229
8.3其他查找程序错误的工具和方法 231
8.3.1程序框图禁用结构 232
8.3.2使用消息对话框和文件 232
8.4 LabVIEW代码中的常见错误 233
8.4.1数值溢出 234
8.4.2 for循环的隧道 234
8.4.3循环次数 235
8.4.4移位寄存器的初始化 236
8.4.5簇中元素的顺序 236
8.4.6时序错误 237
8.4.7竞争状态 239
8.4.8等待循环中的延时 239
8.5提高程序运行效率 240
8.5.1找到影响程序运行速度的瓶颈 240
8.5.2查看一段代码的运行时间 241
8.6解决程序效率低下的瓶颈 242
8.6.1读/写外设、文件 242
8.6.2界面刷新 244
8.6.3循环内的运算 246
8.6.4调试信息 246
8.6.5多线程和内存的使用 246
8.6.6利用等待用户反馈的时间 247
8.7 DLL调试 247
8.7.1调试LabVIEW调用的DLL 247
8.7.2调试LabVIEW生成的DLL 248
第9章 管理LabVIEW项目 249
9.1项目浏览器 249
9.1.1项目浏览器的功能 249
9.1.2项目中的层次结构 249
9.1.3文件结构 251
9.1.4按照文件的物理结构来查看项目 251
9.1.5源代码管理 252
9.1.6比较和合并VI 254
9.1.7运行环境 255
9.2库 256
9.2.1创建库 257
9.2.2 VI的名字空间 257
9.2.3为库中VI设置权限 258
9.2.4 LLB文件 259
9.3发布产品 260
9.3.1应用程序 261
9.3.2共享库 265
9.3.3源代码 266
9.3.4网络应用 269
9.3.5安装程序 273
9.3.6压缩包 274
第10章 界面设计 275
10.1.界面设计原理 275
10.1.1一致性 276
10.1.2界面元素的关联 279
10.1.3帮助和反馈信息 281
10.1.4限制 284
10.1.5突出重点 285
10.2界面设计中常用的规范和实现方法 286
10.2.1控件尺寸 286
10.2.2应用程序的退出按钮 290
10.2.3菜单 292
10.2.4控件快捷菜单 293
10.2.5使用键盘操作界面 294
10.2.6用户自定义控件 296
10.3界面设计实例 299
10.3.1利用LabVIEW自带控件 299
10.3.2实现运行时改变界面的代码 301
10.3.3装饰和背景图片 304
10.3.4用户自定义控件 306
10.3.5改进界面的实现方法 307
10.3.6使用绘图控件 310
10.3.7界面的特殊效果 314
10.3.8动画 316
第11章 代码风格与优化 319
11.1 LabVIEW的运行机制 319
11.1.1 LabVIEW的编程思想 319
11.1.2 LabVIEW与文本语言的差异 320
11.1.3 LabVIEW是编译型语言还是解释型语言 323
11.1.4数据流驱动的编程语言 326
11.1.5传值和传引用 326
11.1.6 VI中的数据空间 328
11.2内存优化 329
11.2.1 VI在内存中的结构 329
11.2.2内存泄漏 330
11.2.3缓存重用 332
11.2.4子VI参数的缓存重用 336
11.2.5输入/输出参数的排布 338
11.2.6优化数据流结构 339
11.3多线程编程 341
11.3.1自动多线程编程语言 341
11.3.2 LabVIEW的执行系统 342
11.3.3执行系统与线程的关系 343
11.3.4用户界面执行系统 343
11.3.5其他几个执行系统 344
11.3.6 VI的优先级 345
11.3.7动态连接库函数的线程 346
11.3.8 LabVIEW对多核CPU的支持 347
11.4代码编写规范和技巧 350
11.4.1简洁的程序框图 350
11.4.2布局和连线 351
11.4.3注释 353
11.4.4使用自定义数据类型 354
11.4.5连线板 355
11.4.6图标 356
11.4.7 VI分析器 361
第12章 界面的模块划分和XControl 364
12.1复杂界面的模块划分 364
12.1.1界面的模块划分 364
12.1.2选项卡控件 365
12.1.3子面板 368
12.1.4使用XControl划分 371
12.2 XControl 372
12.2.1设计 372
12.2.2创建 373
12.2.3数据功能控件 375
12.2.4状态功能控件 375
12.2.5外观功能VI 376
12.2.6转换状态以保存功能VI 381
12.2.7初始化功能VI 382
12.2.8反初始化功能VI 383
12.2.9属性 383
12.2.10方法 384
12.2.11事件 385
12.2.12棋盘XControl的使用 386
12.2.13实现动画 387
12.2.14得到调用XControl实例的VI的信息 388
12.2.15错误处理 389
12.2.16调试 389
第13章 面向对象的编程 391
13.1基础知识 391
13.1.1程序的模块划分 391
13.1.2类和对象 392
13.1.3面向对象的程序设计 392
13.1.4封装 392
13.1.5继承 393
13.1.6多态 393
13.2 LabVIEW的类 394
13.2.1创建 394
13.2.2属性 394
13.2.3方法 395
13.2.4继承 396
13.2.5多态 398
13.2.6面向对象与数据流 399
13.2.7面向对象思想对LabVIEW程序设计的影响 400
13.3应用实例 401
13.3.1管理一个类的多个对象 401
13.3.2同一段代码处理多种数据类型 404
13.3.3递归 406
13.3.4框架插件程序架构 408
13.3.5简单的数据容器 409
后记 413
致谢 414
参考文献 415