LabVIEW在数据采集与仪器控制中有着十分广泛的应用,本章将通过几个典型实例来介绍LabVIEW在数据采集与仪器控制领域的编程方法。
10.1 虚拟万用表
万用表是一种电子测量工具,它能对电压、电流、电阻等进行度量。它在现实中应用相当广泛,是电子测试不可缺少的工具。用LabVIEW中编写的万用表使用起来方便、灵活,改变了传统观念上万用表的外形,增强了其测量功能。这种方式现在越来越多地被人们应用。本节将以板卡作数据采集硬件进行编程,实现虚拟数字万用表。
10.1.1 实例内容说明
板卡在工业中应用相当广泛,尤其近年来在数据采集行业中被人们认可。它最大的好处是安装方便,操作简单,编程容易。本节中将利用PCI8335接口板卡作为数据采集卡,对信号进行采集并处理,开发一款虚拟DT9205万用表。
DT9205型数字万用表是一个功能强大的工具。本例中将以它为实物参考,用LabVIEW实现一款虚拟的万用表,基本功能与DT9205一样,同时还增加了数据分析、在计算机上存储数据等功能。
1.板卡说明
PCI8335接口板卡是一种基于32bit PCI总线的多功能数据采集卡,它可以应用于现场数据采集、控制、小型实验和教学等多种场合。它在硬件安装上也非常简单,使用时只需将接口卡插入机内任何一个PCI总线插槽,并用螺丝固定,将信号电缆从机箱外部直接接入。它的详细功能参数如下:
— 32 bit PCI 总线,即插即用
— 输入范围:0~10V,-5~+5V
— 分辨率:12 bit
— 32路单端/16路差分模拟量输入
— 12 bit A/D转换
— 4路12 bit D/A输出
— 2倍、10倍、100倍硬件增益选择
— 8路TTL开入(其中4路可中断)、8路TTL开出
— A/D单通道采样速率100 KHz,N个通道时,每一个通道的采样率为100/N KHz
— 3路8 bit 计数器输入,可级联为1路24 bit计数器
— A/D工作方式为:软件触发、定时启动、FIFO半满中断
— 8 KB FIFO
— 自动通道切换和单通道设置
— 通过率:单通道100 KHz
— 超压范围:-12~+12V
— 输入阻抗:10 MΩ
— A/D触发方式:定时
— 8通道输入输出
— 提供DLL作为用户程序的接口
PCI8335板卡的功能如图10-1所示。
图10-1 PCI8335板卡功能图
2.DT9205万用表说明
DT9205数字万用表具有多精度、多范围的优点。它可以直接把测量得到的数据显示出来,并按要求保存。它的具体参数如下:
— 直流电压:200mV~1000V
— 交流电压:200mV~750V
— 直流电流:2mA~10A
— 交流电流:2mA~20A
— 电阻:200Ω~200MΩ
— 电容:2nF~200μF
— 二极管测试
— 导通蜂鸣
— 数据保存
— 精度调节
— 工作指示灯
10.1.2 开发思路分析
在LabVIEW中开发虚拟仪器,必须先配置好硬件电路。这里先介绍PCI8335板卡的安装,这是整个工作的前期准备,再从PCI数据采集开始详细讲解说明,最后阐述信号在计算机中的分析、运算、显示等的编程。
10.1.3 板卡开发过程
板卡开发过程就是以相应板卡为硬件进行编程的过程。这里先用PCI8335板卡进行数据采集,然后对其调试,并在LabVIEW中编程,完成一个虚拟万用表。编程是本例的重点,也是本例的难点,尤其是整个程序的组合编程,涉及许多数据的融合和控件的配合。下面分步进行介绍。
1.板卡安装
板卡的安装是整个工作的第一步,PCI8335在硬件安装完成后还需要进行软件安装,软件安装是非常重要的一个环节,它关系到采集板能否正常使用。具体安装步骤如下:
(1)检查硬件安装是否正确,然后通电正常启动计算机,在系统启动完成后,会自动检测新安装的硬件,如图10-2所示。
图10-2 发现PCI硬件
(2)等到检测完毕后,弹出“找到新的硬件向导”对话框,如图10-3所示。
(3)单击“下一步”按钮,进入硬件连接向导界面,如图10-4所示。
图10-3 硬件安装向导 图10-4 PCI桥连接
(4)单击“下一步”按钮,进入硬件类型选择界面,如图10-5所示。
(5)单击“下一步”按钮,进入驱动选择界面,如图10-6所示。
图10-5 硬件类型选择 图10-6 选择驱动程序
(6)单击“从磁盘安装”按钮,将出现选择驱动程序地址的对话框,如图10-7所示。
图10-7 选择驱动程序地址
(7)单击“浏览”按钮,选择“PCI8335.inf”所在的目录(光盘:\ZTPCI8KA),单击“确定”按钮。系统将会按要求自动安装驱动。安装完成后重启计算机即可使用。你也可以继续安装第二块PCI卡。
安装第二块PCI8335卡时,系统会自动检测安装,不再经过上述步骤,只是卡的索引值不同。索引值是使用PCI板卡时非常重要的参数,相同的ISA卡是靠地址拨号区分的,而相同的PCI卡是靠索引值来区分的。一般情况下,第一块安装的PCI8335卡的索引值为0,以后安装的PCI8335卡索引值自动依次加1。调用动态链接库(ZTPCI8KA.dll)中的OpenDevice函数,将PCI卡的索引值赋给此函数,即可操作相应的PCI卡。
2.板卡测试
在板卡安装好后,必须进行测试,这样才能保证以后的正常使用。测试是利用PCI8335数据采集卡驱动光盘自带的测试程序进行的。它一般位于光盘:\ZTPCI8KA\8335\测试程序\8335test_vb\8335test.exe中。此程序给硬件测试带来方便,也给后面的工作提供保障。下面将对测试程序的使用方法进行讲解,测试程序的整体界面如图10-8所示。
图10-8 测试界面
运行“PCI8335数据采集卡测试程序”,从菜单栏中单击“选择板卡”命令,弹出“选择板卡”对话框,如图10-9所示。先输入所要操作的板卡的索引值,即可在程序的界面中对选中的PCI8335卡进行测试。若计算机中只安装了一块PCI8335卡,可略过这一步操作(本程序默认对索引值为0的板卡进行测试)。
设置完后,就可以进行各项测试操作。此测试程序根据PCI8335的各种功能,分为以下几个部分:
(1)开关量测试
该部分程序既可测试开关量输出,也可以测试开关量输入,界面如图10-10所示。在测试界面的左上角“开关量测试”功能块中,单击“输出测试”后面的灯,可进行开关量的输出测试。这8个灯,从左至右依次对应着通道1至通道8,8个开关量输出通道。单击某个灯,其状态就会在亮灭之间切换,同时输出到对应的开关量输出通道,进行相应的输出通断状态的切换。
“输入状态”后面的8个灯,从左至右依次为通道1至通道8,分别指示了开关量输入通道的通断状态。该功能是自动的,无须手动操作。
(2)模拟量输出测试
此部分程序用于测试模拟量输出,界面如图10-11所示。其中4个文本下拉框对应着4个通道模拟量输出。在某一文本框中输入的值会输出到对应的通道。这几个文本下拉框的值一般是固定的。可以通过旁边的下拉按钮选择,也可以输入任意值。
图10-9 选择板卡 图10-10 开关量测试 图10-11 模拟量输出测试
(3)模拟量输入测试
此部分程序用于模拟量输入测试,界面如图10-12所示,32个文本框对应着32个通道的模拟量输入。单击“模拟量输入”按钮,32个模拟输入电压值就会通过相应的文本框显示出来。
在“采集方式”单选框中,可选择模拟信号采集方式。
— 单路:用来对模拟量进行实时采集。
— 单路滤波:用来对采集到的模拟量进行滤波处理,这也是程序默认方式。
— 多路循环:用来对32路模拟信号通道同时采集。它的采集速度较前两者快,多用于快速变化量的测量过程测试中。
在“显示设置”单选框中,可进行输入模拟量的显示设置。
— 原码值(十六进制):文本框中显示模拟量的十六进制原码值(000~FFF)。
— 0-10000mV:显示0到10000mV的单极性输入信号的电压值。
— -5000~+5000mV:显示-5000mV到+5000mV的双极性输入信号的电压值。
以上设置都可在单击“模拟量输入”按钮后进行动态地进行。这样方便在系统测试过程中对参数进行设置。
(4)计数器测试
计数器测试主要是测试脉冲输入,对脉冲计数,如图10-13所示。它可进行PCI8335的三个计数器的测试,分为三组,分别对三个计数器进行测试。在每组中的第一个文本框显示计数器寄存器中的当前值,第二个文本框显示计数累加值。单击“累加清零”按钮,将清空第二列文本框中的值,重新进行累加计数。
测试程序运行后,软件就自动读取计数器寄存器中的当前值,并进行累加,无须手动操作。
图10-12 模拟量输入测试 图10-13 计数器测试
(5)中断测试
中断测试就是对采集卡的中断进行一定的测试。它能对PCI8335采集卡上的三种中断进行测试。单击“打开中断总允许”按钮,可打开PCI8335中断功能,其界面如图10-14所示。
— “FIFO半满中断”区域:可对FIFO半满产生的中断进行测试。单击“FIFO中断测试”按钮,打开FIFO中断允许,并启动A/D转换。当中断到来时,“中断次数”文本框显示由于FIFO半满产生的中断次数,“中断个数”文本框显示本次中断把FIFO中的数据读空,所读取的数据个数。
— “计数器中断”区域:对计数器产生的中断进行测试。单击“计数器中断测试”按钮,即打开计数器中断允许。“中断次数”文本框中显示计数中断的累计次数。
— “开关量中断”区域:可对开关量中断进行测试。单击“开关量中断测试”按钮,打开开关量中断允许。“中断次数”文本框中显示开关量中断的累计次数。
单击“关闭所有中断”按钮,将关闭所有中断,禁止中断进入。
图10-14 中断测试
3.参数设置
在PCI8335数据采集板卡中,为了简化操作。动态链接库(PCI8KA.dll)中几乎所有的函数的参数均通过一个结构体(ZT_PCIBOARD)来传递。该结构体及PCI8000的有关函数说明如下:
struct ZT_PCIBOARD
{
long lIndex; /* PCI卡索引值,该值在安装时被系统分配*/
HANDLE hHandle; /* PCI卡的操作句柄(只有涉及中断时才用)*/
short nCh; /* 通道号*/
long lData; /*输入输出数据变量*/
long* plData; /*输入输出数据指针*/
long lCode; /*设备控制字,具体含义见函数说明*/
};
下面对各函数功能进行说明。
(1)打开设备
函数 |
long APIENTRY OpenDeviceAmcc(ZT_PCIBOARD* bs) |
功能 |
打开某一块PCI8335卡 |
入口有效参数 |
lIndex:PCI卡索引值 |
出口返回参数 |
hHandle:PCI卡的操作句柄(只有涉及中断时,返回才有意义) |
返回值 |
0:打开设备成功 1:打开设备失败 |
(2)关闭设备
函数 |
long APIENTRY CloseDeviceAmcc(ZT_PCIBOARD* bs) |
功能 |
关闭某一块PCI8335卡 |
入口有效参数 |
lIndex:PCI卡索引值 |
出口返回参数 |
无 |
返回值 |
0:关闭设备成功 1:关闭设备失败 |
(3)开关量输入
函数 |
long APIENTRY ZT8335DI (ZT_PCIBOARD* bs) |
功能 |
采集PCI8335某一通道开关量输入信号的状态 |
入口有效参数 |
lIndex:PCI卡索引值 |
lCode:设备控制码。0表示单通道操作;1表示多通道操作 | |
nCh:通道号,1~8(单通道模式使用) | |
出口返回参数 |
lData:某一通道读取值。0或1(单通道操作) 该卡所有开关量输入状态值(多通道操作) |
返回值 |
0:采集成功 1:采集失败 |
(4)开关量输出
函数 |
long APIENTRY ZT8335DO (ZT_PCIBOARD* bs) |
功能 |
进行某一个通道的开关量数据输出操作 |
入口有效参数 |
lIndex:PCI卡索引值 lCode:设备控制码。0表示单通道操作;1表示多通道操作 nCh:通道号,1~8(单通道模式使用) lData:某一通道输出设定值。0或1(单通道操作);该卡所有开关量输入设定值(多通道操作) |
出口返回参数 |
无 |
返回值 |
0:开关量数据输出成功 1:开关量数据输出失败 |
(5)模拟量输出
函数 |
long APIENTRY ZT8335AO(ZT_PCIBOARD* bs) |
功能 |
进行某一个通道的模拟量数据输出操作 |
入口有效参数 |
lIndex:PCI卡索引值 nCh:通道号,1~4(单通道模式使用) lData:某一通道输出原码值(0 ~ 4095) |
出口返回参数 |
无 |
返回值 |
0:模拟量数据输出成功 1:模拟量数据输出失败 |
(6)初始化模拟量采集
函数 |
long APIENTRY ZT8335AIInt(ZT_PCIBOARD* bs) |
功能 |
初始化模拟量数据采集 |
入口有效参数 |
lIndex:PCI卡索引值 nCh:通道号 单路采集通道号:1~32 多路循环采集终止通道号:1~32 lCode:设备控制字。 停止:0 启动:1 多路循环:2(默认单路采集) 单端:4(默认差分方式) 单极性(0~10V):256(默认原码值) 双极性(-5~ +5V):512(默认原码值) |
出口返回参数 |
无 |
返回值 |
0:初始化成功 1:初始化失败 |
(7)单通道采集
函数 |
long APIENTRY ZT8335AI (ZT_PCIBOARD* bs) |
功能 |
采集某一通道模拟量数据 |
入口有效参数 |
lIndex:PCI卡索引值 nCh:通道号,1~32 |
出口返回参数 |
lData:某一通道模拟量的数值 |
返回值 |
0:采集成功 1:采集失败 |
注:该函数无须调用ZT8335AIInit初始化。
(8)单通道采集(滤波)
函数 |
long APIENTRY ZT8335AIA (ZT_PCIBOARD* bs) |
功能 |
采集一组某一通道模拟量数据数据,并进行滤波处理 |
入口有效参数 |
lIndex:PCI卡索引值 nCh:通道号,1~32 |
出口返回参数 |
lData:某一通道模拟量的数值 |
返回值 |
0:采集成功 1:采集失败 |
注:该函数无须调用ZT8335AIInit初始化。
(9)设置FIFO数据地址
函数 |
long APIENTRY GetAddress(short nIndex,long* lAdd) |
功能 |
获取用户存放FIFO数据的地址 |
参数 |
nIndex:PCI卡索引值 |
lAdd:存放FIFO数据的地址(建议用户开8192个32位的长整型数据缓冲区,接收FIFO中的数据) | |
返回值 |
0:设置成功 1:设置失败 |
(10)FIFO数据批量采集
函数 |
long APIENTRY ZT8335AIFifo (ZT_PCIBOARD* bs) |
功能 |
采集某一通道或多路循环通道的一批模拟量数据 |
入口有效参数 |
lIndex:PCI卡索引值 |
plData:存放FIFO数据的指针 | |
出口返回参数 |
lData:从FIFO中读取的数据个数 |
返回值 |
0:采集成功 1:采集失败 |
注:1.使用前,需调用ZT8335AIInit初始化。
2.初始化后,用户需调用GetAddress设置存放数据的数组地址(该函数是为不支持指针的计算机语言设置的,比如:Visual Basic)。
3.使用支持指针的计算机语言,可不用GetAddress函数,直接将存放FIFO数据的地址赋给plData即可。
(11)脉冲输入
函数 |
long APIENTRY ZT8335CT (ZT_PCIBOARD* bs) |
功能 |
读取某个计数器的寄存器值 |
入口有效参数 |
lIndex:PCI卡索引值 nCh:通道号(计数器编号),1~3 |
出口返回参数 |
lData:某一计数器的寄存器值 |
返回值 |
0:读取成功 1:读取失败 |
(12)打开中断
函数 |
long APIENTRY OpenIRQ(HANDLE* hList,ULONG hDeviceNum,void CALLBACK IrqCallBack (ZT_PCIBOARD* bs)) |
功能 |
开一组PCI卡的中断总允许,等待中断到来 |
入口有效参数 |
hList:开中断允许列表 hDeviceNum:开中断允许数量 IrqCallBack:这是一个回调函数的入口指针 |
出口返回参数 |
无 |
返回值 |
0:打开中断成功 1:打开中断失败 2:没有要打开的中断 |
回调函数 |
void CALLBACK IrqCallBack(ZT_PCIBOARD* bs) |
功能 |
当OpenIRQ调用后,PCI8335产生中断时,系统会唤醒此函数,用户自己编写函数IrqCallBack进行中断处理,系统会提供以下参数,供用户使用:nIndex(引起中断的索引值)。用户可调用板卡操作函数,对板卡进行相应的操作。 |
(13)关闭中断
函数 |
long APIENTRY CloseIRQ() |
功能 |
禁止本机上所有已开的PCI8335卡的中断总允许 |
返回值 |
0:禁止中断成功 1:禁止中断失败 |
(14)设置中断允许寄存器
函数 |
long APIENTRY SetIE(ZT_PCIBOARD* bs) |
功能 |
设置中断允许寄存器值 |
入口有效参数 |
lIndex:PCI卡索引值 lCode:设备控制字(中断类型:FIFO半满中断、计数器半满中断、开关量中断) |
返回值 |
0:设置成功 1:设置失败 |
(15)读中断状态寄存器
函数 |
long APIENTRY ReadIS (ZT_PCIBOARD* bs) |
功能 |
读取中断状态寄存器值 |
入口有效参数 |
lIndex:PCI卡索引值 |
出口返回参数 |
lCode:设备控制字(产生中断的类型:FIFO半满中断、计数器半满中断、开关量中断) |
返回值 |
0:读取成功 1:读取失败 |
(16)DLL编译
在LabVIEW中利用PCI8335数据采集卡编程时,直接利用DLL文件,对其进行数据采集处理,所以先要进行DLL程序的编译。在VC++中编写程序,并生成DLL文件即可。C源程序如下:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include "PCI8KA.h"
ZT_PCIBOARD* bs;
ZT_PCIBOARD ztbs;
void main()
{
long i;
ULONG sData[4096*16];
ULONG mOutput=0;
bs=&ztbs;
//打开一个PCI8335卡
ztbs.lIndex=0;
OpenDeviceAmcc(bs);
ztbs.lCode=7; //多路循环(4+2+1)
ztbs.nCh=4; //终止通道为4,即4个通道循环采集!
ZT8335AIInit(bs);
/*以下用两种方法实现FIFo的读取!*/
//********函数ReadFifo示例********
ReadFifo((short)bs->lIndex, sData, &mOutput);
for (i=0;i<25;i++)
{
printf("%x\n",sData[i]);
}
printf("%u\n",mOutput/4); // mOutput/4为FIFO被读空所返回的数据*
}
10.1.4 设计万用表界面
用LabVIEW编写虚拟万用表的界面是本例重点要讲解的内容,下面具体讲解此部分内容。
1.采集设置
(1)采集设置界面主要用来对采集卡参数进行调节。这里先要在前面板放置几个数值输入控件,并依次按要求为其命名,如图10-15所示。
图10-15 采集设置界面
(2)创建一个簇控件,并重命名为BS,并把图10-15中下面一排控件放入其中,如图10-16所示。
图10-16 “簇”的创建
簇控件可以通过“控件”|“新式”|“数组、矩阵、簇”|“簇”命令调用。设置簇时,只要把想设置为簇的元素全选中,拖动到簇框中就可以了。
(3)在后面板中放置一个“层叠式顺序结构”图标,可通过“函数”|“编程”|“结构”|“层叠式顺序结构”命令调用,如图10-17所示。
(4)在“层叠式顺序结构”的边框上右键单击,选择“在后面添加帧”就会在结构体上出现两个帧。在帧下拉列表上单击,可两个帧之间转换。在第0帧中,要把簇和索引号捆绑到一起,这样才便于后面的采集过程处理。捆绑函数可用“函数”|“编程”|“簇、变体、类”|“按名称捆绑”命令来调用。
图10-17 层叠式顺序结构
将捆绑后的数据通过调用库函数来处理。调用库函数可通过“函数”|“互连接口”|“库与可执行文件”命令来调用。处理完后要对捆绑的数据解除捆绑,以方便下次处理。解除捆绑函数通过“函数”|“编程”|“簇、变体、类”|“按名称解除捆绑”命令来调用。具体程序如图10-18所示。
图10-18 第0帧程序框图
(5)对第1帧进行编程时,只需要调用库函数操作即可。这里实现的操作是读数据采集卡的数据,并将其数据输出,输出端口的函数名为Noutput,把此端口连接到顺序结构的外面用于数据输出,如图10-19所示。
图10-19 第1帧程序框图
2.虚拟万用表旋钮
虚拟万用表的旋钮是按照现实中的DT9205模式进行设计的,下面将分步进行介绍。
(1)通过“控件”|“新式”|“数值”|“转盘”命令,在前面板放置一个转盘控件。对其选中后,在边角处拖动,放大控件,并在右键菜单中选择“文本标签”命令,再进行设置属性,其界面如图10-20所示。把数据类型设置为“无符号长整型”。在“文本标签”选项卡双击“文本标签”栏的选项,写入旋钮对应的名称,再单击“插入”按钮,重复多次,写入每一个项的名称。注意这些名称的先后顺序不能乱。
旋钮标签设置完以后前面板界面如图10-21所示。
图10-20 旋钮标签设置 图10-21 旋钮界面
(2)在前面板放一个字符串,用于显示测量结果。如果结果只是一个数值的话,可以用数值控件显示。这里为了在更加直观、完美地显示数值的同时,还显示测量种类和单位等一些信息,因此选择了字符串控件。前面板界面如图10-22所示。
图10-22 结果显示屏
(3)放置一个数值输入控件,用于控制测量精度。同时放置一个工作指示灯,用于指示仪器工作状态。这些操作比较简单,这里不再详细说明。
3.程序框图结构
在后面板中,先要放置一个条件结构,用于指示万用表对旋钮不同刻度执行不同动作。条件结构通过“函数”|“编程”|“结构”|“条件结构”命令调用。在条件结构上,右键单击下拉框,选择“在后面添加分支”命令,添加条件分支,如图10-23所示。
(1)在条件结构中添加到32个分支,这样每一个分支都对应一个条件结构,执行不同的动作,并把旋钮和条件结构的“分支选择器”连接起来。0~31分支与旋钮的文本标签值是对应的,如图10-24所示。
图10-23 添加分支 图10-24 条件结构设置
(2)对每一个分支进行设置。因为不同的分支执行不同动作,所以每一个分支的程序要根据情况来写。
分支0负责显示系统的开闭状态,默认为关机,指示灯灭,显示屏显示“关”。这里通过“函数”|“编程”|“字符串”|“字符串常量”命令写入一个字符串常量“关”,而程序中指示灯的状态是由一个布尔控件控制的。此时要灯灭,就通过“函数”|“编程”|“布尔”|“假常量”命令放置一个假常量布尔控件。
分支1负责检测二极管。当二极管红表笔接正极时,系统中电路接通,显示“此时红表笔为接二极管正极”。接反时会显示“此时红表笔接为二极管负极”。当表笔没有接到二极管上时,显示“没有检测到任何二极管”。程序框图如图10-25所示。
图10-25 二极管检测程序
分支2到6负责电容的检测,只是量程不同。测量中先对数据的大小进行检测,判断测量值是否超过量程。若没有超过量程,就读取测量精度,对测量值进行相应精度的转换。然后将测量值转换为字符串,通过一个字符串连接控件,并添加上单位,再送到文本框显示。若超过量程,则在文本框中显示“超出测量范围,请选择高档位”,提示用户换用高档位。程序框图如图10-26所示。
图10-26 电容测量程序
分支7到10负责交流电流测量,其中分支11到14负责测量直流电流。它们的测量原理相同,只是大小量程不同。还是先判断测量值的大小,再进行相应精度的字符串转换显示。整个程序框图如图10-27所示。
图10-27 交流电流测量程序
分支15到21负责电阻测量。这一个测量范围相当广泛,也是一个数值量的比较。在测量范围内万用表才会测量,如果超过范围,则显示“超出测量范围,请选择高档位”。程序框图如图10-28所示。
图10-28 电阻测量程序
分支22到31负责电压测量。测量原理和上面的相同,只是单位和大小不同。整个程序框图如图10-29所示。
4.设置时间和信息
下面讲解如何显示时间和万用表名称。先在前面板放置一个文本显示框,用来显示时间和信息,再到后面板中放置一个时间发生函数(通过“函数”|“编程”|“定时”|“已用时间”命令来调用),然后用一个字符串连接控件把要显示的信息和时间字符连接到一起显示,程序框图如图10-30所示。
图10-29 电压测量程序 图10-30 显示时间
5.整体程序
在程序编写完成后,还必须添加一个循环让万用表能连续工作。这里用While循环控制程序的运行。整个程序框图如图10-31所示。
图10-31 完整程序
6.前面板装饰
当程序写完后,就要对其进行界面布局,让之看上去更整齐美观。所谓的装饰前面板即给一些控件进行着色布局。这里先对旋钮进行着色,打开“查看”|“工具选板”面板,单击最下面的颜色设置控件,就可以对旋钮进行着色。为了区别各种测量对象刻度,将它们着色为不同的颜色,如图10-32所示。
接着对其整个界面进行布局安排,最后的前面板如图10-33所示。
图10-32 旋钮装饰 图10-33 完整前面板界面
10.1.5 实例总结
10.1节利用PCI板卡和LabVIEW设计了虚拟万用表,通过计算机和硬件的配合实现了对各种电路相关物理量的测量。PCI板卡是现在应用比较广泛的一种采集卡。学习完本节后,相信读者将对板卡的应用以及虚拟仪器编程有了一定的了解,并掌握了其具体的编程的方法和技巧。