第1部分 入门篇 1
第1章 打开LabVIEW编程之门 2
1.1从VI开始 2
1.1.1创建VI 3
1.1.2控件属性设置与快捷菜单 5
1.1.3创建控件、常量、局部变量、引用、属性节点和方法节点 8
1.1.4创建自定义控件 10
1.2编辑前面板和程序框图 11
1.2.1选择、移动和删除对象 12
1.2.2使用布局工具 13
1.3 VI及其属性对话框 17
1.3.1 VI的层次结构 17
1.3.2调用子VI 19
1.3.3 VI的属性设置 19
1.4基本控件及其使用方法 23
1.4.1基本数值控件 23
1.4.2基本布尔控件 29
1.4.3控件的通用编辑方法 32
1.4.4字符串和路径控件 34
1.4.5下拉列表与枚举控件 38
1.4.6数组控件及其属性设置 38
1.4.7簇控件 39
1.4.8时间标识控件与波形数据控件 41
1.5小结 43
第2章 LabVIEW基本函数 44
2.1必须了解的一些基本算术运算函数 44
2.1.1基本运算函数 44
2.1.2标量之间的基本运算 45
2.1.3标量与数组的运算 45
2.1.4数组与数组的运算 45
2.1.5数组的函数 46
2.1.6标量与簇的基本运算 55
2.1.7簇与簇的运算 56
2.1.8簇的函数 56
2.2必须了解的位运算函数和逻辑运算函数 59
2.2.1常用逻辑运算函数 59
2.2.2位运算 59
2.2.3深入理解复合运算函数 60
2.3必须了解的关系运算函数和比较函数 61
2.3.1比较模式 61
2.3.2通用关系运算函数 62
2.3.3“比较0”关系运算函数 63
2.3.4复杂关系运算函数 63
2.3.5字符关系运算函数 66
2.3.6表达式节点与公式快速VI 67
2.4小结 68
第3章 LabVIEW的程序运行结构 69
3.1两种不同的循环结构 69
3.1.1 For循环的组成和特点 69
3.1.2 For循环与数组 71
3.1.3 For循环与移位寄存器 73
3.1.4 For循环中的continue和break 74
3.1.5 While循环,不仅仅是循环 74
3.1.6 While循环与定时 76
3.1.7反馈节点 81
3.2定时结构 81
3.2.1定时循环的基本组成要素和配置对话框 82
3.2.2定时顺序结构 85
3.3独特的条件结构 85
3.3.1条件结构的基本结构 85
3.3.2布尔型输入 86
3.3.3错误簇输入 86
3.3.4数值型输入 87
3.3.5枚举型输入 88
3.3.6下拉列表输入 88
3.3.7字符串和组合框输入 88
3.3.8输入、输出隧道 89
3.3.9多重If-Else的处理方法 89
3.4不和谐的顺序结构 90
3.4.1多线程运行次序 90
3.4.2两种不同的顺序结构 91
3.4.3隧道与顺序局部变量 92
3.4.4顺序结构的替代 93
3.4.5顺序结构的典型应用 93
3.5程序框图禁用结构 94
3.6局部变量、内置全局变量和功能(LV2型)全局变量 94
3.6.1局部变量 94
3.6.2内置全局变量 96
3.6.3功能(LV2型)全局变量 98
3.7事件结构 99
3.7.1事件结构的基本构成和创建方法 100
3.7.2事件的分类及其特点 101
3.7.3事件结构之间的数据传送与共享 103
3.7.4事件发生的次序、过滤和转发 104
3.7.5正确地使用事件结构 105
3.8小结 106
第4章 LabVIEW的数据结构及内存优化 107
4.1常用数据类型转换函数 107
4.1.1“强制类型转换”函数 107
4.1.2“平化至字符串”与“字符串还原”函数 108
4.1.3变体数据 109
4.2整数的类型转换及内存映射 109
4.2.1布尔型数据与字符串和数值的相互转换 109
4.2.2 U8类型数据与字符串之间的相互转换 110
4.2.3整数与整数类型的相互转换 110
4.3其他标量数据类型的类型转换及内存映射 111
4.3.1定点数和浮点数的类型转换与内存映射 111
4.3.2复数的类型转换及内存映射 114
4.3.3时间标识的类型转换与内存映射 114
4.4复合数据类型 115
4.4.1标量数组的内存映射 115
4.4.2字符串、路径和字符串数组的内存映射 116
4.4.3 LabVIEW使用的编码 117
4.5簇的内存映射 118
4.5.1标量组成的簇 118
4.5.2包含数组和字符串的簇 118
4.6类型描述符 119
4.6.1类型描述符的基本构成要素 119
4.6.2常用类型描述符列表 120
4.6.3常见数据类型的类型描述符结构 120
4.7 OpenG中有关类型描述符的函数 121
4.7.1类型描述符函数 122
4.7.2利用类型描述符处理枚举型数据 123
4.7.3利用类型描述符处理簇 123
4.8几种常用的内存分析工具和方法 124
4.8.1内存的重要性 124
4.8.2内存和性能查看工具 125
4.8.3 VI使用的内存 126
4.8.4优化内存的一般注意事项 127
4.8.5数组与内存优化 129
4.8.6在循环中避免不必要的计算、读/写控件或者变量 131
4.9影响VI运行速度的因素 132
4.9.1硬件输入/输出 133
4.9.2屏幕显示 133
4.10小结 133
第5章 字符串与文件存储 134
5.1字符串 134
5.1.1几种常用的字符串常量 134
5.1.2几种常用的字符串函数 135
5.1.3“匹配模式”和“匹配正则表达式”函数 136
5.1.4字符串与数值的相互转换 139
5.1.5功能强大的“格式化字符串”和“扫描字符串”函数 140
5.1.6数组与电子表格字符串 143
5.1.7附加字符串函数 143
5.2文件存储 144
5.2.1文本文件与二进制文件的区别 144
5.2.2文件常量和通用目录、文件函数 145
5.2.3构造路径的方法 146
5.2.4文本文件的读写 148
5.2.5数据记录文件的读写 153
5.2.6读/写二进制文件 154
5.2.7 INI文件的读写 156
5.2.8注册表的读写 158
5.2.9 TDM文件 159
5.2.10 TDMS文件 162
5.3小结 165
第2部分 高级篇 167
第6章 LabVIEW对象的解析 168
6.1 LabVIEW控件对象的层次继承结构 168
6.1.1布尔控件的层次继承结构 168
6.1.2通用类的属性 169
6.1.3图形对象类 171
6.2图形对象类的子类 172
6.2.1前面板类 172
6.2.2窗格类和分隔栏类 173
6.2.3 LabVIEW的坐标映射 175
6.2.4修饰类 177
6.3控件类 178
6.3.1控件类的常用属性 179
6.3.2控件类的常用方法 181
6.3.3数值控件类 181
6.4常用控件的专用属性 183
6.4.1布尔控件的专用属性 183
6.4.2枚举和下拉列表控件的专用属性 184
6.4.3字符串、路径和组合框控件的专用属性 184
6.4.4数组的属性和方法 186
6.4.5簇的属性及方法 187
6.5引用句柄 188
6.6 VI的属性 190
6.6.1获取VI的引用 190
6.6.2常用VI属性 190
6.6.3 VI前面板属性 191
6.7常用VI方法 194
6.7.1获取前面板、程序框图和VI图标的图像 194
6.7.2前面板的运行位置控制方法 194
6.7.3打印控制 194
6.7.4默认值方法 194
6.8动态调用VI 195
6.8.1静态调用和动态调用的比较 195
6.8.2通过“引用节点调用”函数动态调用VI 196
6.8.3一般类型VI的动态调用 198
6.8.4创建闪屏 200
6.8.5创建后台运行程序 200
6.8.6创建向导程序 201
6.8.7动态调用VI之间的数据交换 201
6.9应用程序的属性和方法 203
6.9.1获取应用程序引用句柄 203
6.9.2常用应用程序的属性 204
6.10小结 205
第7章 高级控件的运用 206
7.1列表框 206
7.1.1列表框的创建及显示风格 206
7.1.2列表框的常用属性、方法与事件 206
7.1.3列表框的应用举例 207
7.2多列列表框 210
7.2.1显示多列项目并排序 210
7.2.2多列列表框的特效制作 212
7.3表格 212
7.3.1表格的常用属性和方法 213
7.3.2表格的应用举例 214
7.4树形控件 217
7.4.1树形控件的创建与静态编辑 217
7.4.2树形控件的常用属性、方法和事件 218
7.4.3树形控件高级应用举例 219
7.5波形图表 220
7.5.1波形图表的组成要件 221
7.5.2波形图表的输入类型 223
7.5.3波形图表专用属性 223
7.5.4波形图表应用举例 225
7.6波形图 226
7.6.1波形图控件的创建和组成要件 226
7.6.2波形图控件的输入类型 227
7.6.3波形图控件的专用属性 228
7.6.4波形图控件的高级应用举例 230
7.7 XY图 232
7.7.1 XY图的输入数据类型 233
7.7.2 XY图的高级应用 234
7.8强度图表和强度图 235
7.9数字数据、数字波形数据与数字波形图 236
7.9.1数字数据 236
7.9.2数字波形数据和数字波形图 236
7.10图片控件 237
7.10.1利用图片控件显示图片 237
7.10.2常用绘图操作函数 239
7.10.3图片控件的高级应用 240
7.11小结 242
第8章 文本式编程与外部程序接口 243
8.1公式节点 243
8.1.1公式节点的数据类型、语法与控制结构 243
8.1.2公式节点的应用举例 245
8.2调用库函数 246
8.2.1 DLL与API函数 246
8.2.2如何调用DLL函数 248
8.2.3常用API函数的调用 254
8.2.4 LabVIEW调用DLL的局限性 256
8.3 CIN 259
8.3.1 CIN创建的一般过程 260
8.3.2 CIN的数据类型和常用函数 262
8.3.3 CIN与内存管理器 266
8.3.4 CIN的运行过程和数据共享 269
8.4系统命令 272
8.5剪切板 274
8.6 DDE库 275
8.6.1 DDE概述 275
8.6.2 LabVIEW中DDE的常用方法 276
8.7 ActiveX控件与ActiveX文档 277
8.7.1 ActiveX的基本概念 277
8.7.2 ActiveX控件的调用过程 278
8.7.3 ActiveX应用实例 279
8.7.4 ActiveX自动化服务器 281
8.8 .NET技术 282
8.8.1 .NET控件 282
8.8.2 .NET服务 283
8.8.3利用.NET创建托盘程序 285
8.9小结 287
第9章 MathScript 288
9.1如何使用MathScript 288
9.1.1使用MathScript节点 288
9.1.2使用MathScript交互窗口 289
9.2 MathScript常用命令 290
9.3 MathScript基础知识 291
9.3.1创建向量和矩阵的基本方法 291
9.3.2矩阵的基本运算 292
9.3.3标准矩阵 293
9.3.4矩阵元素的插入、替换、删除和提取 294
9.3.5矩阵元素的排序和搜索特征值 295
9.3.6常用的矩阵变换函数 296
9.3.7矩阵中元素的数据类型及其转换 297
9.3.8关系运算、逻辑运算和位操作 299
9.3.9集合函数 299
9.3.10时间、日期和计时函数 300
9.4程序控制结构与函数 301
9.4.1 For循环和While循环 301
9.4.2 If条件结构和Switch分支条件结构 303
9.4.3函数和脚本文件 304
9.5数据统计和数据插值拟合 306
9.5.1常用数据统计函数 306
9.5.2数据插值 309
9.6多项式、积分和微分 310
9.6.1多项式 311
9.6.2极值与零点 311
9.6.3积分和微分 312
9.7数据的图形显示 313
9.7.1窗口类属性与常用窗口操作函数 313
9.7.2绘图区域属性 316
9.7.3线对象和文本对象的属性及常用函数 318
9.7.4基本绘图函数 319
9.8小结 322
第10章 面向对象编程与运行控制技术 323
10.1数据的封装与隔离 323
10.1.1合理地使用数据流 323
10.1.2 LV2型全局变量 324
10.1.3值变化与上升下降沿 326
10.1.4定时触发与计数器 328
10.2动作机(Action Engine) 329
10.2.1准备建立动作机 329
10.2.2建立动作机的步骤 330
10.3用户事件与动态注册事件 331
10.3.1用户事件 331
10.3.2动态注册事件 334
10.4堆栈与数据缓冲区 335
10.4.1堆栈的实现 335
10.4.2数据缓冲区 336
10.5同步控制技术 337
10.5.1队列 337
10.5.2通知器 341
10.5.3信号量与集合点 343
10.6项目管理器 344
10.6.1项目管理器的结构 344
10.6.2虚拟文件夹与项目库 345
10.7面向对象编程 346
10.7.1面向对象编程的基本概念 346
10.7.2类的封装特性 347
10.7.3类的继承特性 349
10.7.4类的多态特性 351
10.7.5类变量 352
10.7.6动态加载类与引用转换 353
10.8小结 355
第11章 人机交互与编程风格 356
11.1对话框 356
11.1.1内置对话框 356
11.1.2用户输入和显示对话框 357
11.1.3定制对话框 357
11.2菜单 358
11.2.1创建静态菜单 358
11.2.2菜单相关函数 359
11.2.3动态创建菜单 360
11.2.4调用多个静态菜单 361
11.2.5存储动态建立的菜单 361
11.2.6自动触发预定义菜单项 361
11.3光标工具 362
11.3.1“设置为忙碌状态”VI与“取消设置为忙碌状态”VI 362
11.3.2使用光标文件 362
11.4选项卡、子面板与分隔栏 362
11.4.1选项卡控件 363
11.4.2分隔栏控件 364
11.4.3子面板控件 365
11.5 XControl 367
11.5.1 Hover按钮 367
11.5.2新建XControl 368
11.5.3修改数据控件和状态控件 368
11.5.4修改“外观”VI 368
11.5.5创建属性和方法 371
11.5.6调试XControl 372
11.5.7自定义属性对话框与快捷菜单 373
11.6错误处理 374
11.6.1错误簇 374
11.6.2常用错误处理函数 374
11.7 LabVIEW的编程风格 376
11.7.1编程风格的内涵 376
11.7.2前面板设计应该遵循的原则 377
11.7.3程序框图设计应该遵循的原则 378
11.7.4连接板设计应该遵循的原则 379
11.7.5图标设计应该遵循的原则 380
11.7.6数据结构应该遵循的原则 380
11.7.7错误处理应该遵循的原则 381
11.8小结 382
第3部分 工程应用篇 383
第12章 LabVIEW设计模式与状态图工具 384
12.1程序的基本单元VI 384
12.1.1 VI的可重入属性 384
12.1.2 VI模板与代码重用 385
12.1.3 VI的调试 386
12.1.4 VI的重构 388
12.2 LabVIEW标准设计模式 391
12.2.1使用事件的顶层应用程序 392
12.2.2使用事件的对话框 392
12.2.3标准状态机设计模式 392
12.2.4队列消息处理器设计模式 393
12.2.5用户界面事件处理器设计模式 394
12.2.6生产者/消费者设计模式(事件) 394
12.2.7生产者/消费者设计模式(数据) 394
12.2.8主从设计模式(Master/Slave) 395
12.3简单设计模式 396
12.3.1顺序结构简单设计模式 396
12.3.2事件结构与定时结构简单设计模式 396
12.4古典型状态机 398
12.4.1早期界面处理状态机 398
12.4.2顺序结构的缺陷 398
12.4.3顺序状态机 399
12.4.4处理公共状态 399
12.4.5事件状态机 400
12.5状态机工具包(State diagram) 400
12.5.1调用状态机工具 401
12.5.2使用状态图编辑器 401
12.5.3添加转换条件和状态代码 401
12.5.4选择独立运行或者子VI方式 402
12.6消息队列状态机 402
12.6.1消息队列状态机的基本结构 402
12.6.2消息数据队列状态机 404
12.6.3进入、运行和离开状态的处理 405
12.6.4事件驱动方式消息队列状态机 405
12.7状态图工具包(Statechart) 406
12.7.1状态图工具包简介 406
12.7.2同步和异步方式 406
12.7.3创建状态图 407
12.7.4同步型状态图 408
12.7.5状态图的调用和调试 410
12.7.6异步型状态图 411
12.7.7区域、超级状态和子状态 413
12.7.8多区域并发、连接、分叉与子图 414
12.7.9高级应用函数 416
12.8小结 419
第13章 LabVI EW通信与DSC 420
13.1串口通信 420
13.1.1串口通信的基本概念 420
13.1.2串口通信的准备工作 422
13.1.3串口通信函数 423
13.1.4串口通信典型应用举例 424
13.2并口通信 426
13.2.1设置并口通信模式 426
13.2.2传送字节型数据 426
13.2.3传送EPP模式数据 427
13.3共享变量 428
13.3.1共享变量与共享变量引擎 428
13.3.2创建与监视共享变量 429
13.3.3共享变量的内部缓冲机制 431
13.3.4共享变量的批量创建、部署与引用 431
13.4 DataSocket 433
13.4.1 DataSocket支持的协议与URL 433
13.4.2 DataSocket服务器与服务管理器 435
13.4.3 DataSocket API 435
13.4.4 DataSocket API应用举例 436
13.4.5 DataSocket控件绑定 437
13.5 TCP与UDP网络通信 438
13.5.1 TCP通信 438
13.5.2 TCP STM库 439
13.5.3 UDP通信 440
13.6 DSC工具包 441
13.6.1 OPC与DSC的基本概念 441
13.6.2 DSC强大的图形化能力 442
13.6.3 OPC配置与I/O变量 443
13.6.4 Modbus 445
13.6.5共享变量的属性 446
13.6.6共享变量引擎SVE函数 448
13.6.7预警与事件 449
13.6.8数据记录 453
13.6.9安全与权限管理 457
13.7小结 459
第14章 数据库与报表工具包 460
14.1准备使用数据库工具包 460
14.1.1创建数据库 460
14.1.2建立数据源 461
14.1.3数据库工具包支持的数据类型 462
14.1.4 ADO模型 463
14.2数据库基本操作 463
14.2.1建立连接 463
14.2.2表操作 465
14.2.3插入数据 466
14.2.4读取数据 467
14.2.5记录集与数据浏览 469
14.2.6事务与提交 472
14.2.7使用命令对象和SQL语句 473
14.3报表与报表工具包 474
14.3.1 LabVIEW中的报表VI 475
14.3.2 VI说明信息与HTML报表 476
14.3.3报表布局与高级报表VI 477
14.3.4利用Word和Excel模板创建报表 478
14.4利用报表工具包操作Excel 479
14.4.1常用的简单Excel VI 479
14.4.2单元格格式 481
14.4.3图表与图片VI 482
14.4.4 Excel通用VI和高级VI 483
14.5利用报表工具操作 Word 486
14.5.1 Word简单VI 486
14.5.2 Word通用VI 486
14.5.3 Word表格与图表VI 487
14.6 小结 488
第15章 LabVIEW与实时操作系统 489
15.1实时操作系统 489
15.1.1实时操作系统的特点与实现 489
15.1.2操作系统的有关名词解释 490
15.1.3 LabVIEW中的实时开发软件 491
15.1.4 LabVIEW支持的实时操作系统 492
15.1.5 LabVIEW实时平台概述 493
15.2实时控制器软件安装及其配置 494
15.2.1配置实时系统BIOS(PXI) 495
15.2.2 MAX下安装PXI实时软件 495
15.2.3识别远程设备 495
15.2.4建立实时项目 496
15.3实时应用软件高级编程及技巧 498
15.3.1实时操作系统下LabVIEW不支持的特性 498
15.3.2实时操作系统下的多线程 498
15.3.3实时系统中时间确定性的实现 501
15.3.4实时系统中的线程间通信 505
15.3.5实时控制系统的网络通信 508
15.3.6 实时控制系统的软件架构 516
15.4小结 519
第16章 LabVIEW实现数据采集 520
16.1数据采集的基本概念 520
16.1.1信号 520
16.1.2传感器 521
16.1.3信号处理 522
16.2数据采集卡 524
16.2.1数据采集卡的定义及分类 524
16.2.2多功能数据采集卡原理图 525
16.2.3数据采集的关键参数和概念 525
16.2.4数据采集卡与信号接地 530
16.3采样定理 532
16.4降低系统噪声和提高精度 534
16.5如何选购采集卡 536
16.6 数据采集软件基础 537
16.6.1采集系统的安装 537
16.6.2 NI采集卡的常用函数 540
16.6.3研华常用采集函数 544
16.7基于NI-DAQmx的高级编程 545
16.7.1触发信号(Trigger) 545
16.7.2采集系统时钟 547
16.7.3多板卡之间的同步采集 550
16.7.4数据传输机制 552
16.7.5完整波形输出 556
16.7.6并行结构进行采集 557
16.7.7通过硬件信号触发定时循环运行 557
16.7.8用NI-DAQmx的事件编写面向事件驱动的程序 559
16.7.9选择合适的读取策略 560
16.7.10使用NI-DAQmx控制任务安全中止采集 562
16.7.11计数器/定时器及其应用 563
16.8小结 567
第17章 FPGA开发 568
17.1 FPGA的基本概念与CRIO的组成 568
17.1.1 FPGA的基本概念 568
17.1.2 CRIO的构成 569
17.1.3构建FPGA项目 570
17.2 FPGA编程 571
17.2.1 FPGA基本I/O之模拟量输入/输出 571
17.2.2 FPGA基本I/O之数字量输入/输出 572
17.2.3 FPAG定时、时钟与分频 574
17.2.4 FPGA计数器应用 576
17.2.5触发与外部时钟循环 579
17.2.6 FPGA常用函数 580
17.2.7 FPGA多线程与线程之间的数据交换 582
17.2.8 FPGA IP Core 585
17.3 FPGA与RT程序之间的数据交换 585
17.3.1读写控件方式 585
17.3.2中断 587
17.3.3 FIFO 588
17.3.4扫描方式 591
17.3.5专用C模块 594
17.3.6 FPGA程序的优化 596
17.4 Spartan-3E开发板 599
17.4.1 Spartan-3E简介 599
17.4.2建立Spartan-3E FPGA项目 600
17.4.3编译FPGA程序 601
17.5小结 603