《LabVIEW宝典》详尽讲解了LabVIEW常用的编程方法、编程技巧和工程应用技术。《LabVIEW宝典》共分为3篇,其中:入门篇归纳总结了LabVIEW编程人员必须掌握的基础知识,包括LabVIEW的基本概念、基本函数的用法和常用的运行结构,以及LabVIEW的基本数据结构和文件存储方式;高级篇细致地讲解了引用、属性、方法以及各类高级控件的运用,LabVIEW的文本方式编程以及DLL、C语言接口,基于Hatlab语法的Matlab编程技术,LabVIEW基于组件的高级编程方法和编程模式;工程应用篇介绍了串口、并口和网络通信的常用方法,数据采集的基本原理和方法,LabVIW实时系统的构建和编程,以及各种常用专业工具包的使用方法,包括数据库连接工具包、数据监控与记录工具包、报表生成工具包、状态图工具包等等。
目录
- 第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章 LabVIEW通信与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