
本书以LabVIEW7.1为基础,介绍LabVIEW程序设计的基本内容和虚拟仪器设计的若干问题。
全书20章,第1章到第11章介绍LabVIEW语言的基本内容和编程方法,内容包括虚拟仪器及LabVIEW基础、VI编辑与调试技术、程序结构、数组、簇和波形、图形显Express VI、字符串和文件I/O、数据彩集、信号分析、动态程序控制和仪器控制。第12章到第20章是一些虚拟仪器设计应用的实例,包括扫频仪、元件伏安特性的测量、交流参数测量、频率测量、录波仪、参数辨识、网络应用、仪器控制应用和声卡在数据采集中的应用等。书中给出了多个难易程序不同,可用于教学的虚拟仪器设计方案。
本书可作为大专院校虚拟仪器及相关课程的教材或教学参考书,也可以供从事相关工作的工程技术人员参考。
虚拟仪器技术是基于计算机的仪器及测量技术。与传统仪器技术不同,虚拟仪器技术指在包含数据采集设备的通用计算机平台上,根据需求可以高效率地构建起形形色色的测量系统。对大多数用户而言,主要的工作变成了软件设计。虚拟仪器技术突破了传统仪器的局限,可以将许多信号处理的方法方便地应用于测量中,并且为自动测量和网络化测量创造条件。早期的虚拟仪器技术主要用于军事、航空、航天等领域和科研院所,现在已经越来越多地出现在工厂及其他民用场合。
美国国家仪器公司(National InstrumentsIM NI)多年来在虚拟仪器技术的标准制定、软硬件研发方面坚持不懈地努力使它成为业界公认的权威。LabVIEW是NI公司提供的虚拟仪器开发平台。与大多数程序语言不同,LabVIEW是一个图形化的编程环境,编程的过程不是写代码,而是画"流程图"。LabVIEW的使用者是各个领域的工程技术人员,而非计算机专业人员。LabVIEW力求使用户从烦琐的程序设计中解放出来,而将注意力集中在测量等物理问题本身。经过近20年的不断改进,目前LabVIEW已拥有众多用户,成为数据采集和仪器控制的首选程序设计语言。
1995年我们开始接触NI公司的产品,2000年建成了一个用于教学的虚拟仪器实验室。在该实验室中,使用自己开发的虚拟仪器开设了几个实验,并融入电路实验课程,而后又转向为全校的本科生和研究生开设虚拟仪器设计课程。这些课程被定位为设计型的实验课程,其典型的课程安排是32学时,其中1/3学时用于介绍LabVIEW语言的基本内容;2/3学时是在教师的指导下,学生完成一个虚拟仪器设计的题目,题目可以在教师列出的清单内选择,也可以做教师认可的自带题目。课外时间,实验室向选课学生半开放。学生的选题必须是一个含数据采集的测量题目,一般不允许做仿真题目。本书大体上就是在这些教学实践的基础上完成的。
虚拟仪器技术为教学双方都提供了很好的舞台。其内容新,反映了当前测量技术的发展方向:涉及面广,包括数学、物理、电工电子技术、计算机软硬件、信号处理及相关专业的测试技术。它要求学生在理论与实际结合的基础上解决一两个测量问题,同时为学生的创造性学习提供充分的空间。该课程的难点在于,根据学生的实际情况、实验室的设备条件及课时的限制,确定恰当的设计选题。这些教学选题应当有别于实际工程题目,功能相对简单,包含一定的算法及信号处理内容。
考虑到学生在此之前已经学习过软件编程的有关课程,课上只花较少的时间介绍LabVIEW的入门知识,本书中大部分有关LabVIEW的内容要求学生在使用中自学。该课程的重点不是程序设计,学生不应当在编程上投入过多的时间,而应该更多地思考测量问题本身,考虑如何确立一个合理的设计方案,进而安排算法,配置参数,确定实验步骤,编程,调试并得到验证,最后提交程序和实验报告。我们力求给学生一个宽松的环境,希望他们经过努力,在各自的基础上前进一步。
虚拟仪器和LabVIEW为各个学科的测量问题提供了一个大致相同的软、硬件平台,这使得我们有可能面对众多专业的学生开设一门共同的课程,为他们各自的课题指出一个基本通用的解决问题的思路。众多专业的学生坐在一起讨论问题是很有意思的。许多学生在这门课程中第一次体会到数字信号处理的重要性。
本书的定位是教材或教学参考书,主要反映LabVIEW的基本内容和笔者的一些教学经验。考虑到读者自学的需要,书中第1~11章对LabVIEW的基本内容做了详细介绍,而第12~20章则反映我们在课程设计中涉及的内容。
本书由侯国屏主编。侯国屏编写了第9,13~16和19~20章;王坤编写了第1~5,10~11和18章;叶齐鑫编写了第6~8,12和17章;在三位作者互校的基础上吴静对全书内容进行了仔细的校对。赵伟教授审阅了第12~20章的书稿,并提出了许多中肯的修改意见。
感谢赵伟教授对本书编写工作的支持和帮助,作为学术带头人,多年来他和他的学生为虚拟仪器实验室的建设和相关教学及研究工作的开展做出了重要的贡献。
感谢本研究室的黄松岭老师的热情帮助。感谢本室在读的或已毕业的崔伟、张小牛、石晶、付先学、石秋兰、黄明俊、刘灿涛及祝中山等同学。
感谢中科泛华测控技术有限公司及总经理左毅、资深工程师赵槲,在与他们多年的合作中获益匪浅。
最后,特别感谢NI中国有限公司对本书编写工作的支持,高校市场部陈庆全经理热情地帮助我们解决了许多具体问题。
书中有关虚拟仪器设计部分的程序源代码的所有权归作者所有,仅供教学免费使用。除第18,19两章外,可到清华大学出版杜网站下载;网址是:www.thebook.com.cn。
由于编者水平有限,书中难免有不妥和错误之处,敬请读者批评指正。
读者如需与作者联系,可发电子邮件至;hougp@263.net。
作 者
2004年8月于清华园
第1章 虚拟仪器及LabVIEW基础
1.1 虚拟仪器概述
1.2 LabVIEW简介
1.3 启动LabVIEW
1.4 LabVIEW程序的基本构成
1.4.1 前面板和框图
1.4.2 前面板和框图工具条
1.4.3 图标和连接器窗格
1.5 LabVIEW的模板
1.5.1 512具模板
1.5.2 控件模板
1.5.3 函数模板
1.5.4 Controls和Functions模板操作
1.6 LabVIEW文档和帮助
1.7 创建一个VI
1.8 子VI
1.8.1 创建和编辑图标
1.8.2 定义连接器
1.8.3 创建子VI举例
1.9 数据流编程
1.10 简单数据类型和操作
1.10.1 数值数据类型
1.10.2 布尔数据类型
第2章 VI编辑和调试技术
2.1 VI编辑技术
2.1.1 创建前面板和框图对象
2.1.2 选择对象
2.1.3 拖放功能
2.1.4 移动对象
2.1.5 堆叠和重排序对象
2.1.6 对齐和分布对象
2.1.7 复制和删除对象
2.1.8 给对象加标签
2.1.9 改变文本字体
2.1.10 改变对象大小
2.1.11 改变对象颜色
2.1.12 建立和编辑连线
2.1.13 其他编辑技术
2.2 VI调试技术
第3章 程序结构
3.1 循环结构
3.1.1 While循环
3.1.2 For循环
3.1.3 循环结构内外的数据交换与自动索引
3.1.4 移位寄存器和反馈节点
3.2 分支结构
3.3 顺序结构
3.3.1 堆叠的顺序结构
3.3.2 平铺的顺序结构
3.4 公式节点
3.5 事件结构
3.6 局部变量和全局变量
3.6.1 局部变量
3.6.2 全局变量
3.6.3 慎用局部变量和全局变量
3.7 定时循环
3.8 菜单
3.8.1 使用菜单编辑器建立菜单
3.8.2 在框图中响应菜单操作
第4章 数组、簇和波形
4.1 数组
4.1.1 数组的创建
4.1.2 数组操作函数
4.2 簇
4.2.1 簇的创建
4.2.2 簇的操作函数
4.2.3 error in和error out簇
4.3 波形
4.3.1 波形的创建
4.3.2 波形操作函数
第5章 图形控件和图形数据显示
5.1 波形Graph
5.1.1 波形Graph的数据格式
5.1.2 设定波形Graph的属性
5.2 XY Graph
5.3 波形Chart
5.4 亮度Chart和Graph
5.5 三维图形控件
第6章 Express VI
6.1 认识Express VI
6.2 动态数据类型.
6.3 Express VI中的信号合并与分离
6.4 Express VI列表简介
第7章 字符串和文件I/O
7.1 字符串
7.1.1 字符串控件
7.1.2 字符串的显示方式
7.1.3 字符串函数
7.1.4 字符串程序实例
7.2 文件I/O
7.2.1 概述
7.2.2 文件I/O函数简介
7.2.3 文本文件的使用
7.2.4 二进制文件的使用
7.2.5 数据记录文件的使用
7.2.6 其他文件类型简介
第8章 数据采集
8.1 数据采集基础
8.1.1 数据采集系统的构成
8.1.2 信号调理
8.1.3 测量系统的连接方式
8.1.4 采样定理的应用
8.1.5 数据采集卡及其设置与测试
8.1.6 多通道的采样方式
8.2 模拟输入
8.2.1 模拟输入的相关参数
8.2.2 模入VI的组织与简介
8.2.3 DAQ单点模入
8.2.4 DAQ波形模入
8.2.5 DAQ连续模入
8.2.6 使用DAQmx和DAQ Assistant模入
8.3 模拟输出
8.3.1 模拟输出的相关参数
8.3.2 模出VI的组织与简介
8.3.3 DAQ单点模出
8.3.4 DAQ波形模出
8.3.5 DAQ连续模出
8.3.6 周期信号的连续模出
8.3.7 DAQmx模出的使用
8.4 触发采集
8.4.1 触发原理
8.4.2 数字边沿触发
8.4.3 模拟边沿触发
8.4.4 模拟窗口触发
8.4.5 软件触发
8.5 模入、模出的并行安排
第9章 信号分析与处理
9.1 概述
9.2 LabVIEW中的分析工具
9.3 应用举例
9.3.1 信号发生
9.3.2 频域分析
9.3.3 数字滤波
9.3.4 时域分析
9.3.5 曲线拟合
第10章 动态程序控制
10.1 控制器和指示器的属性
10.1.1 控件通用属性
10.1.2 其他控件属性举例
10.2 控制器和指示器的方法
10.3 VI Server和动态程序控制
10.3.1 获取对象的reference
10.3.2 属性节点和调用节点的一般用法
10.3.3 动态调用VI
第11章 仪器控制
11.1 GPIB总线标准
11.1.1 GPIB总线的诞生和发展历程
11.1.2 GPIB总线的结构和工作方式
11.1.3 GPIB数据传输的层次结构
11.2 VXI和PXI总线系统简介
11.3 仪器控制软件结构
11.3.1 可编程仪器标准命令
11.3.2 虚拟仪器软件架构
11.3.3 仪器驱动程序
11.4 使用LabVIEW编写仪器控制程序
11.4.1 配置仪器和接口资源
11.4.2 使用VISA函数编写仪器控制程序
11.4.3 仪器I/O助手
第12章 网络频率特性的测量
12.1 概述
12.2 扫频仪(多步法)
12.2.1 原理与算法
12.2.2 程序前面板
12.2.3 程序框图
12.2.4 替代方案
12.3 使用正弦波组合的单步法
12.3.1 原理与算法
12.3.2 程序说明
12.4 使用Chirp信号的单步法
12.4.1 Chirp信号简介
12.4.2 方案1
12.4.3 方案2
12.4.4 方案3
12.5 使用随机信号的单步法
15.2 时域方法
15.2.1 多周期的平均计数方法
15.2.2 线性插值法
15.2.3 三点法
15.3 频域方法
15.3.1 概述
15.3.2 能量矩平衡法
15.3.3 比例法
15.3.4 多项式逼近法
15.3.5 关于Extract Single Tone Information函数
15.4 使用计数器的频率测量
15.5 频率跟踪
15.6 小结
第16章 录波仪:波形的采集与存储
16.1 概述
16.2 连续采集方案
16.2.1 连续采集与存储
16.2.2 连续采集与索引存储
16.2.3 数据检索与回放
16.3 触发采集与存储:电路中的过渡过程
第17章 参数辨识与软测量
17.1 概述
17.2 从频率特性出发来辨识参数
17.2.1 原理与算法
17.2.2 基于频率特性进行参数辨识的两种思路
17.2.3 程序介绍
17.2.4 实验结果分析
17.2.5 小结与讨论
17.3 利用阶跃响应面积法辨识参数
17.3.1 原理与算法
17.3.2 求解元件参数的思路
17.3.3 程序前面板
17.3.4 程序框图
17.3.5 小结与讨论
17.4 利用递推最小二乘法辨识参数
17.4.1 原理与算法
17.4.2 程序设计总体思路
17.4.3 程序说明
17.4.4 实验结果
17.4.5 小结与讨论
17.5 小结
第18章 仪器控制应用实例
18.1 示波器控制程序主界面
18.2 控制程序组织结构
18.3 初始化代码
18.4 用户界面操作响应
18.4.1 用户操作响应程序结构
18.4.2 用户操作响应中用到的子VI
18.4.3 操作响应典型代码示例
18.5 控制程序退出代码
第19章 网络应用
19.1 LabVIEW中的网络通信功能
19.1.1 TCP通信
19.1.2 浏览器方式
19.1.3 RDA方式
19.1.4 DataSocket技术
19.2 用DataSocket实现采集卡共享程序的例子
19.2.1 背景
19.2.2 方案1
19.2.3 方案2
第20章 基于声卡的数据采集
20.1 从数据采集的角度认识声卡
20.1.1 声卡的作用
20.1.2 声卡的硬件结构
20.1.3 声卡的主要技术参数
20.1.4 声卡频率范围与频率响应
20.1.5 声卡用于数据采集时的一些设置
20.2 LabVIEW中有关声卡的函数简介
20.3 应用程序举例
20.3.1 示波器
20.3.2 信号发生器
附录A LabVIEW System Identification Toolkit简介
附录B 数据拟合的最小二乘法
参考文献