虚拟仪器实验labviEW.docx
《虚拟仪器实验labviEW.docx》由会员分享,可在线阅读,更多相关《虚拟仪器实验labviEW.docx(20页珍藏版)》请在冰点文库上搜索。
虚拟仪器实验labviEW
实验一储液罐状态监控系统设计
一、实验目的
通过该系统设计,初步了解LabVIEW虚拟仪器设计软件的前面板、程序框图及各个选项板的功能。
二、实验内容
设计储液罐状态监控仿真系统,要求如下
1、监测一个储液罐的实际液位、温度、进口压力、出口压力
2、用曲线图显示被测量液位随时间的变化情况
3、液位超标时用指示器报警
4、手动和自动两种方式调节储液罐的液位高度
5、用调节步长按钮决定自动调节的快慢程度
6、设计储液罐状态监控系统前面板
三、实验步骤
1、前面板设计
整个贮液罐监控系统前面板需要的控件有:
停止键、手自动切换、液位超标指示灯、步长调节旋钮、高度设定、实际高度显示、进出口压力显示、温度显示和实际液位高度波形图。
停止键、手自动切换、液位超标在新式布尔量控件中进行选择,步长调节旋钮在数值控件中选择旋钮、压力表在数值中选择量表控件,设定高度、实际高度、温度在数值控件中分别选择垂直指针滑动杆垂直填充滑动杆和温度计,液位高度波形图选择波形图表。
2、程序框图设计
程序采用While循环结构,结束用停止布尔按钮结束,除设定高度和调节步长是手动设置外,其他输入如压力和温度的设定均采用编程—数值—随机数的方式给定,手自动切换布尔量连接比较选项中的选择节点,用于切换手自动,液位超标将实际高度和超标高度比较,输出一布尔量。
四、实验结果
五、思考题
1、将整个VI设计成一个子VI。
在另一个VI中调用。
在前面板右上角,编辑连线板,对VI的输入和输出对应控件进行编辑,然后保存,即可生成VI,可在其他VI中调用,在其他VI中的调用图如下:
实验二分组数据的练习
一、实验目的
通过该实验,熟悉LabVIEW中常用的分组数据:
数组、簇及波形的使用。
二、实验内容
习题4-3到4-11。
三、实验步骤
4-3.4.5前面板只有三个数组的显示控件,分别为原数组显示、原数组大小显示和转置后的数组显示,程序框图中建立一二维数组常量,将要显示的数组填入,并添加一二维显示控件,在数组中分别选择数组大小和二维数组转置节点,其后分别连接显示控件。
4-6前面板中选择簇输入控件,并在簇中加入字符型输入控件,数值型输入控件,布尔型输入控件,然后添加一布尔型显示控件,用于提取簇元素注册的显示。
程序框图中从簇与变体函数子选板中选择按名称解除捆绑函数,输入端连接簇输入控件的输出,然后选择“注册”后输出端连接布尔控件的输入端。
4-7前面板中在“字符串与路径”控件中选择组合框控件,然后在它的属性编辑项中编辑5个人的姓氏拼音首字母,它们的值分别为各自的中文姓名,编辑好后建立一字符串显示控件,程序框图中将组合框的输出端与字符串显示控件连接即可。
4-8前面中中建立一字符串显示控件,程序框图中在定时函数子选板中选择“获取日期时间/字符串”函数,然后放置两个字符串常量分别为班级和姓名,将日期、时间、班级、姓名四个字符串接入字符串选板中的“连接字符串”函数节点,该节点的输出端接入字符串显示控件的输入端。
4-9前面板中建立一字符串显示控件,程序框图中建立五个随机数,然后均与常数10相乘得到0-10的随机数,选择字符串选板中的“连接字符串”函数节点,将相乘后的随机数接入输入端,在“连接字符串”的格式字符串端建立字符串常量定义格式为两位小数点,数之间用逗号隔开。
4-10前面板中建立一个一维数组输入控件,建立一个一维数组输出控件,程序框图中建立一个For循环,用数组选板中的“一维数组移位”和“替换数组子集”,每次替换数组最后一个元素并进行移位,替换的新元素值为0-10的随机数,For循环建立移位寄存器,使移位后的数组能进入下次循环中。
4-11已知标定数据,前面板中建立电压的数值输入控件和压力的数值输出控件,程序框图中用数组选板中的“以阈值插值一维数组”进行电压对压力的插值找到索引值,然后进行显示。
四、实验结果
4-3.4.5
4-6
4-7
4-8
4-9
4-10
4-11
实验三结构的练习
一、实验目的
通过该实验,熟悉LabVIEW中常用的结构。
二、实验内容
1、习题5-1、5-3、5-5(用波形图显示结果)。
2、学号01-10的学生5-6、5-9;学号11-20的学生5-7、5-11;其余同学为5-8、5-12。
三、实验步骤
5-1前面板为三个数组显示控件,程序框图中用For循环和条件结构产生要求所需的数组,生成的数组连接数组显示控件,并连接“索引数组”函数进行索引出两个一维数组,两个一维数组分别连接“拆分一维数组”函数进行拆分后输出连接数组显示控件。
5-3前面板中建立一个字符串输入控件,用于输入口令,然后建立一个滑动杆显示控件,程序框图中用While循环结构,结构中加入两层条件结构,第一层用于判断是否输入,第二层用于判断口令是否正确。
5-5前面板中建立两个数值输入控件,分别用于公式中m和b的输入,建立两个一维数组显示控件,程序框图中用Ror循环在循环中建立公式节点,分别把m、b和i输入公式节点,然后按公式输出y1和y2,将循环的输出接到两个数组显示控件。
5-8前面板为水仙花数的数组输出显示控件,程序框图采用For循环结构循环判断,用乘法和取余函数将个十百位分离并立方后进行判断添加事件节点将判断为真,即是水仙花数的数存入数组中,最后将循环的结果连接显示控件。
5-12前面板中建立量表的显示控件,然后右键创建属性节点中的滑块颜色前景色,程序框图中用一随机数乘以255产生0-255的随机数,然后接入显示控件和属性节点。
四、实验结果
5-1
5-3
5-5
5-8
5-12
实验四数据的图形显示
一、实验目的
通过该实验,熟悉LabVIEW中常用的数据图形显示工具。
二、实验内容
习题6-2、6-4、6-5
三、实验步骤
6-2前面板中建立一个波形图显示控件,程序框图中用一个For循环产生了128个点然后分别接入正余弦函数产生正余弦信号,对余弦波扩大10倍后进行数组移位后产生初始x0,两个数组合成一个二维数组接入波形图显示控件。
6-4前面板中加入两个建立两个ExpressXY图,分别显示y1和y2,程序框图中将5-5的输出以i为两个XY图的x端,y1和y2分别接入XY图的y输入端。
6-5前面板中建立一个ExpressXY图,程序框图中用6-2产生的正余弦波分别作为ExpressXY的X端和Y端。
四、实验结果
6-2和6-5
6-4
实验五文件的存储及回放
一、实验目的
通过该实验,熟悉LabVIEW中常用的数据图形显示工具。
二、实验内容
习题7-1、7-2、7-3、7-4
三、实验步骤
7-1前面板为空,程序框图中用正弦信号函数产生正弦信号,三种存储方法路径获得方法相同,均是获取当前VI路径的根目录后,再与要建立的文件名字组合创建新的路劲,文本文件的存储要将信号数组拆分准换成字符串用For循环一个一个的存储,二进制文件和电子表格文件的存储直接用相应的函数输入端接对应的路径和波形即可。
7-2二进制文件的读取程序框图中用二进制文件读取函数,输入端接入正确的路径和数据类型,然后建立显示控件。
7-3前面板为数据的显示控件,用簇显示控件来显示,程序框图中数据记录文件函数在文件I/O的高级文件函数选板中选取写入记录文件,存储路径的获得方式与7-1相同,数据用For循环产生一个随机数组,与时间的字符串捆绑后形成簇接入数据记录文件的数据端。
读取时选取读取记录文件函数进行读取。
7-4前面板为空,程序框图中选取脉冲信号,路径获得同7-1,在波形函数选板下选取波形文件I/O中的写入波形文件函数,将脉冲信号的路径接入即可。
四、实验结果
7-2
二进制读取程序框图
7-3
数据存储:
数据读取显示:
7-4
实验六利用CVI设计一个虚拟示波器
一、实验目的
通过该实验,熟悉Labwindows/CVI的基本程序设计过程。
二、实验内容
利用CVI设计一个简易的虚拟示波器,要求输入信号至少包括正弦波、方波、及三角波。
要求波形参数可调。
如正弦波可以频率、相位、幅值。
方波可调占空比等。
三、实验步骤
用户面板选择三个数值量表和一个枚举量表,分别用于波形的幅值、相位、频率和方波占空比的设置,四个都建立回调函数,选择一个枚举控件用于选择三种波形,建立一个波形图标,用于波形的显示。
四、实验结果
程序如下:
#include
#include
#include
#include"shiboqi.h"
staticintpanelHandle;
staticdoubleBo_phase=0;
staticdoubleBo_fuzhi=1.0;
staticdoubleBo_freq=0.0001;
staticdoubleBo_zhan=50;
doublepoint[10000];inti;intState_sample;
voiddisplay(void);
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"shiboqi.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
intCVICALLBACKfuzhicallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_NUMERICKNOB_fuzhi,&Bo_fuzhi);
display();
break;
}
return0;
}
intCVICALLBACKFrecallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_RINGKNOB_FRE,&Bo_freq);
display();
break;
}
return0;
}
intCVICALLBACKphasecallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_NUMERICKNOB_phase,&Bo_phase);
display();
break;
}
return0;
}
intCVICALLBACKzhankongcallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_NUMERICKNOB,&Bo_zhan);
display();
break;
}
return0;
}
intCVICALLBACKChoicecallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
GetCtrlVal(panelHandle,PANEL_RING,&State_sample);
display();
break;
}
return0;
}
voiddisplay(void)
{
if(State_sample==1)
{
ClearStripChart(panelHandle,PANEL_STRIPCHART);
SineWave(10000,Bo_fuzhi,Bo_freq,&Bo_phase,point);
for(i=0;i<=9999;i++)
{
PlotStripChartPoint(panelHandle,PANEL_STRIPCHART,point[i]);
}
}
elseif(State_sample==2)
{
ClearStripChart(panelHandle,PANEL_STRIPCHART);
SquareWave(10000,Bo_fuzhi,Bo_freq,&Bo_phase,Bo_zhan,point);
for(i=0;i<=9999;i++)
{
PlotStripChartPoint(panelHandle,PANEL_STRIPCHART,point[i]);
}
}
elseif(State_sample==3)
{
ClearStripChart(panelHandle,PANEL_STRIPCHART);
TriangleWave(10000,Bo_fuzhi,Bo_freq,&Bo_phase,point);
for(i=0;i<=9999;i++)
{
PlotStripChartPoint(panelHandle,PANEL_STRIPCHART,point[i]);
}
}
}