前 言
第1 章 绪论
1.1 LabWindows/CVI 简介
1.2 LabWindows/CVI 程序开发概述
1.2.1 在LabWindows/CVI 中使用C 语言
1.2.2 LabWindows/CVI 的程序结构
1.3 LabWindows/CVI 6.0 的新特性
1.4 安装LabWindows/CVI 6.0
第2 章 LabWindows/CVI 的开发环境
2.1 载入、运行和编辑源程序
2.1.1 LabWindows/CVI 的主要窗口
2.1.2 源代码编辑工具
2.1.3 操作用户界面
2.1.4 LabWindows/CVI 的GUI 控件
2.2 生成交互式代码
2.2.1 访问用户界面库
2.2.2 函数面板
一、 函数面板控件
二、 函数面板帮助
三、 绘制曲线
四、 从函数面板插入代码
五、 分析数据
六、 在函数面板上输出数值
七、 再调出函数面板
八、 完成程序
2.3 执行和调试程序
2.3.1 单步执行
2.3.2 断点
2.3.3 显示和编辑数据
一、变量显示窗口
二、 编辑变量
三、数组显示窗口
四、编辑数组
五、字符串显示窗口
六、监视窗口
七、图形数组显示窗口
第3 章 LabWindows/CVI 应用程序设计
3.1 图形用户界面
3.1.1 用户界面编辑器
3.1.2 源代码连接
3.1.3 代码生成器
3.1.4 建立用户界面文件
3.2 使用函数面板和函数库
3.2.1 源代码分析
3.2.2 生成随机数组
3.2.3 构建工程
3.2.4 运行完整的工程
3.3 添加分析功能
3.3.1 修改用户界面
3.3.2 编写回调函数
3.3.3 运行程序
3.4 用户事件处理
3.4.1 用户事件
一、什么是用户事件
二、用户界面控件模式
三、用户事件及其意义
3.4.2 回调函数
一、回调函数的模式
二、回调函数的顺序
三、使用回调函数响应用户界面事件
四、事件处理
第4 章 基本函数库
4.1 用户界面库(User Interface Library)
4.1.1 面板(Panel)操作
LoadPanel:将面板装载到内存中
DisplayPanel:显示面板
DiscardPanel:删除面板
HidePanel:隐藏面板
GetPanelAttribute:获得面板属性
SetPanelAttribute:设置面板属性
4.1.2 用户界面管理(User Interface Management)
RunUserInterface:运行用户界面
QuitUserInterface:退出用户界面
4.1.3 菜单结构
一、菜单的设计
LoadMenuBar:装载菜单条到内存中
SetPanelMenuBar:放置菜单到指定的面板中
4.1.4 控件/曲线图/带状图(Controls/Graphs/Strip Charts)操作
一、通用函数
GetCtrlAttribute:获取控件属性值
SetCtrlAttribute:设置控件属性值
GetCtrlVal:获得控件当前值
SetCtrlVal:设置控件的值
二、 列表控件函数
InsertListItem:向列表控件中增加内容
DeleteListItem:删除列表控件中的内容
ReplaceListItem:替换列表控件中的内容
三、文本框函数
InsertTextBoxLine:向文本框中插入字符串
DeleteTextBoxLines:删除文本框中多行文本
GetNumTextBoxLines:获取文本框中文本行的个数
GetTextBoxLine :从文本框获得文本内容
ReplaceTextBoxLine:替换文本框中的某一行文本
DeleteTextBoxLine:删除文本框中某一行文本
四、曲线图控件函数
PlotXY:将一组数据x 值相对于一组数据y 值绘成图线
DeleteGraphPlot:删除图表(Graph)控件中一条或多条曲线
PlotX:沿y 方向将一组数据x 值相对于其索引值绘成曲线
PlotY:沿x 方向将一组数据y 值相对于其索引值绘成曲线
4.1.5 弹出面板函数
一、 信息弹出面板
ConfirmPopup:显示一个弹出对话框,等待用户选择“YES”或“NO”按钮
MessagePopup:显示一个消息对话框,等待用户选择“OK”按钮
二、 文件/路径弹出面板
FileSelectPopup:显示一个文件选择对话框,等待用户选择一个文件或退出。
DirSelectPopup:显示一个路径选择对话框,等待用户选择一个路径或退出
4.2 格式化和输入/输出库(Formatting and I/O Library)
4.2.1 文件输入/输出(File I/O)
ArrayToFile:将数组内容保存到文件中
FileToArray:从文件中读取数据存储到数组中
GetFileInfo:获取文件的大小(字节数)
OpenFile:打开一个文件用以读或者写,函数返回文件句柄
CloseFile:关闭指定的文件
ReadFile:从文件中读取指定字节数的内容到字符串缓冲区
WriteFile:将字符串缓冲区中指定字节数的内容写到文件中
4.2.2 字符串处理(String Manipulation)
StringLength:返回字符串NUL 前面字符占用的字节数
StringLowerCase:返回字符串NUL 前面字符占用的字节数
StringUpperCase:将字符串中所有小写字母转换成大写字母
CompareStrings:比较两个字符串中指定位置的字符
CompareBytes:比较两个字符串中指定位置的字符所占用的字节数
CopyString:将字符串中指定位置的字符拷贝到另一字符串中
CopyBytes:将字符串中指定字节的内容拷贝到另一字符串中
4.2.3 数据格式化(Data Formating)
Fmt:将一个或多个源数据(item)格式化到一个目标数据变量中
Scan:将一个源数据(item)格式化到一个或多个目标数据数据中
4.3 实用函数库(Utility Library)
4.3.1 定时/等待(Timer/Wait)
Delay:等待规定的时间(以秒为单位)。
Timer:返回从第一次调用Timer、Delay 函数或第一次操作定时控件后所经历的时间
4.3.2 日期/时间(Date/Time)
DateStr:返回以MM-DD-YYYY 形式由十个字符组成的字符串(其中MM 代表月,
TimeStr:返回以HH:MM:SS 形式由8 个字符组成的字符串(其中HH 代表时、MM 代
GetSysemDate:以数字形式获得系统日期
SetSysemDate:设定系统日期。
GetSysemTime:以数字形式获得系统时间。
SetSysemTime:设定系统时间。
4.3.3 文件应用(File Utilities)
DeleteFile:删除已经存在一个或一组文件。
RenameFile:更改已经存在一个或多个文件的文件名
CopyFile:将存在的一个(或一组)文件的内容拷贝到其它的一个(或一组)文件中。
GetFileSize:获得文件占用的字节数。
GetFileDate:获取文件的日期
SetFileDate:设置文件的日期
GetFileTime:获取文件的时间。
SetFileTime:设置文件的时间。
GetFileAttrs:获得文件的属性。
SetFileAttrs:设置文件的属性
4.3.4 路径应用(Directory Utilities)
GetDir:在默认驱动器上获得当前工作目录。
GetProjectDir:获得当工程文件所在目录的目录名。
4.3.5 IO 端口(Port IO)
inp:从端口读一个字节数据
inpw:从端口读一个字数据。
inpd:从端口读双字数据
outp:向端口写一个字节数据。
outpw:向端口写一个字数据。
outpd:向端口写双字数据。
4.4 RS-232 函数库(RS-232 Library)
4.4.1 RS-232C 接口介绍
4.4.2 RS-232 函数库概述
4.4.3 RS-232 编程举例
第5 章 高级函数库
5.1 高级分析库
5.1.1 概述
5.1.2 应用举例
步骤1:分析信号的生成
函数Clear1D
函数Add1D
函数SinePattern
函数WhiteNoise
函数GaussNoise
步骤2:加窗和滤波
函数Copy1D
函数Bw_LPF和高通滤波器函数Bw_HPF
三角窗函数原型
海明窗函数原型
海宁窗函数原型
布拉克曼窗函数原型
凯塞窗函数原型
函数Spectrum
5.2 TCP 库
5.2.1 网络化仪器
5.2.2 TCP 协议与TCP 库
5.2.3 TCP 服务器程序设计
步骤1:设计程序界面,生成程序框架
步骤2:设计主程序
函数RegisterTCPServer
函数UnregisterTCPServer
函数GetTCPHostAddr
函数GetTCPHostName
步骤3:设计TCP 服务器回调函数
函数GetTCPPeerAddr
函数GetTCPPeerName
函数SetTCPDisconnectMode
函数ServerTCPRead
函数DisconnectTCPClient
函数GetHostTCPSocketHandle
步骤4:设计向客户发送数据的程序。
函数ServerTCPWrite
步骤5:程序结束断开与客户程序连接。
5.2.4 TCP 客户程序设计
步骤1:设计程序界面,生成程序框架。
步骤2:设计主程序
函数ConnectToTCPServer
函数DisconnectFromTCPServer
步骤3:设计TCP 客户回调函数。
函数ClientTCPRead
步骤4:设计向服务器发送数据的程序。
函数ClientTCPWrite
步骤5:程序结束断开与服务器程序连接
函数GetTCPErrorString
5.3 DataSocket 库
5.3.1 DataSocket 介绍
5.3.2 DataSocket 发送数据程序设计
步骤1:设计程序界面,生成程序框架。
步骤2:设计主程序
函数DS_ControlLocalServer
步骤3:创建DataSocket 对象并连接到数据源。
函数DS_Open
函数DS_DiscardObjHandle
步骤4:设计写DataSocket 对象数据程序
函数DS_SetDataValue
函数DS_Update
步骤5:断开连接释放DataSocket 对象。
步骤6:程序结束停止DataSocket 服务器程序。
5.3.3 DataSocket 接收数据程序设计
步骤1:设计程序界面,生成程序框架。
步骤2:设计主程序,创建DataSocket 对象并连接到数据源。
步骤3:设计写DataSocket 回调函数读取DataSocket 对象数据。
函数DS_GetDataType
函数DS_GetDataValue
步骤4:断开连接释放DataSocket 对象。
5.4 工具库(Tools Library)
5.4.1 工具库简介
5.4.2 密码设计
步骤1:设计程序界面,生成程序框架
步骤2:设计主程序,加载密码输入面板
函数PasswordCtrl_ConvertFromString
函数PasswordCtrl_SetAttribute
步骤3:设计密码输入面板中控件的回调函数。
函数PasswordCtrl_GetAttribute
5.4.3 工具条设计
步骤1:设计程序界面,生成程序框架。
步骤2:在主程序加入设计工具条的函数
函数Toolbar_GetAttribute
函数Toolbar_Discard
函数Toolbar_New
函数Toolbar_InsertItem
函数Toolbar_GetIndexFromDescription
函数Toolbar_GetCtrlFromDescription
函数Toolbar_DimItem
函数Toolbar_GetItemAttribute
函数Toolbar_SetItemAttribute
函数Toolbar_Display
步骤3:设计控制工具条属性的回调函数
函数Toolbar_SetAttribute
步骤4:程序结束停止,删除工具条
5.4.4 分页界面设计
步骤1:在原来的基础上设计程序界面。
函数EasyTab_ConvertFromCanvas
函数EasyTab_LoadPanels
5.4.5 系统托盘设计
步骤1:在原来的基础上设计程序界面
步骤2:在主程序加入系统托盘代码。
函数InstallSysTrayIcon
函数RemoveSysTrayIcon
函数AttachTrayIconMenu
函数DetachTrayIconMenu
函数InsertTrayIconMenuItem
函数SetTrayIconMenuAttr
函数SetTrayIconMenuItemAttr
步骤3:设计系统托盘事件的回调函数。
步骤4:程序结束停止,清除系统托盘弹出式菜单和系统托盘。
第6 章 数据库应用程序开发—SQL Toolkit
6.1 概述
6.1.1 SQL Toolkit 功能概述
6.1.2 SQL Toolkit 2.0 的安装
6.2 入门
6.2.1 数据库基本概念
6.2.2 结构化查询语言(SQL)
6.2.3 ODBC
一、ODBC标准
二、ODBC管理器
三、第三方ODBC数据库驱动器
6.2.4 TABLE 控件
一、表格控件概述
二、表格控件操作
三、表格控件基本编程
1.创建和删除单元格
2.选定单元格
3.单元格的赋值
4.单元格、行和列的属性
5.搜索和分类
6.用户自定义弹出式菜单
四、表格控件编程实例
1. 源代码连接设置
2. 控制设置
3. 控件外观
4. 行(Row)和列设置(Column)
5. 标签属性
6.3 数据库基本操作
6.3.1 SQL Toolkit 数据库操作基本步骤
步骤1. 连接数据库
步骤2. 激活SQL连接
步骤3. 处理SQL语句
步骤4. 断开SQL连接
步骤5. 断开数据库
6.3.2 使用SQL Toolkit 的函数库
一、函数概述
二、连接数据库
三、使用自动SQL(映射)
四、使用显式SQL语句
五、取记录
六、插入记录
七、更新记录
八、删除记录
九、删除表
十、信息函数
1. 数据源信息
2. SELECT语句信息
十一、事务处理
十二、错误检查
6.4 数据库高级操作
6.4.1 设置连接属性
6.4.2 设置语句属性
6.4.3 操作复合语句
一、参数化语句
二、替代的数据访问方法
三、多线程支持
第7 章 高级程序设计
7.1 DLL 和Windows SDK
7.1.1 DLL 的基础知识
一、动态链接和静态链接
二、DLL 的优点
三、DLL 和EXE
7.1.2 创建和调试DLL
一、在LabWindows/CVI 中创建DLL
1.DllMain 函数
2.导出DLL 函数和变量
(1) 头文件法
(2) 导出关键字法
3.创建DLL 的一些建议
二、调试DLL 的方法
1.在LabWindows/CVI 中运行一个程序
2.运行一个外部进程
7.1.3 使用DLL
一、用LoadExternalModule 调用工程中的文件
二、用LoadExternalModule 调用非工程文件中的库或对象
7.1.4 Windows SDK 概述
1.LabWindows/CVI 自动载入SDK 导入库
2.Windows SDK 的头文件
3.用Windows SDK 函数实现用户界面
7.1.5 Windows SDK 编程实例
7.2 多线程
7.2.1 概述
一、 进程和线程
二、 多线程程序
三、 多线程的优点
1.避免阻塞
2.减少运行过程和用户界面的相互影响
3.最大程度利用多处理器的性能
7.2.2 两种多线程机制
一、线程池
二、异步定时器
7.2.3 多线程间的数据保护
一、为什么要保护数据
二、需要保护的数据种类
三、如何保护数据
1. 线程锁
2. 线程安全变量
(1)使用线程安全变量宏定义
(2)把数组作为线程安全变量使用
(3)把多个变量合并为一个线程安全变量
(4)监测GetPointerToVarName 的不匹配调用
3. 线程安全队列
7.2.4 防止死锁
7.2.5 监视和控制次线程
7.2.6 线程的优先级
7.2.7 线程局部变量
7.2.8 其它一些要注意的问题
一、消息处理
二、在独立的线程中执行回调函数
三、为一个线程设定首选的处理器
第8 章 ActiveX 技术
8.1 ActiveX 技术简介
8.2 使用ActiveX 控件
8.2.1 设计带有ActiveX 控件的应用程序
1.选择ActiveX 控件
2.设置ActiveX 控件
3.生成ActiveX 控件驱动程序
8.2.2 需要注意的问题
1.使用用户界面库
2.ActiveX 文档对象
3.线程
8.3 创建ActiveX 服务器
8.3.1 COM 应用程序、对象和接口
8.3.2 创建ActiveX 服务器工具
一、创建ActiveX 服务器向导
二、编辑ActiveX 服务器对话框工具
1.编辑接口
2.编辑方法和特性
3.编辑对象
8.3.3 生成的代码
1.头文件(MyServer_axs.h)
2.源文件(MyServer_axs.c)
3.IDL 文件(MyServer_axs.idl)
8.3.4 ActiveX 库——服务器函数
1.初始化函数
2.全局数据函数
3.对象函数
4.高级函数
8.3.5 联编并发布ActiveX 服务器
8.3.6 ActiveX 注册
8.3.7 COM 线程模式
8.3.8 调试ActiveX 服务器
8.3.9 一些建议、提示和技巧
第9 章 虚拟仪器软件设计
9.1 虚拟仪器概述
9.2 VPP 规范
9.2.1 VPP 规范概述
9.2.2 虚拟仪器软件结构(VISA)
一、VISA 概述
二、VISA 的结构
三、VISA 的资源
9.3 仪器驱动程序开发
9.3.1 VPP 仪器驱动程序模型
一、外部接口模型
二、内部设计模型
9.3.2 VISA 函数的应用
一、用VISA 函数操作仪器的步骤
二、 VISA 的数据类型
三、 VISA 函数
9.3.3 函数面板的设计
9.3.4 动态链接库的生成
9.4 仪器软面板的设计
9.4.1 VPP 仪器软面板
9.4.2 软面板的设计
一、软面板的规划
二、软面板图形界面的建立
三、软面板程序代码设计
9.4.3 可执行文件的生成
9.4.4 帮助文件的制作
一、生成帮助文件的步骤
二、生成帮助文件的方法
9.5 安装盘的制作
9.5.1 VPP 规范的安装要求
9.5.2 制作安装盘
9.6 IVI 驱动程序
9.6.1 仪器可互换性
9.6.2 IVI 驱动程序的结构
9.6.3 IVI 驱动程序的其他功能
9.6.4 IVI 驱动程序开发向导
9.6.5 IVI 驱动程序与VPP 驱动程序