3脉冲波形参数的自动测试系统.docx
《3脉冲波形参数的自动测试系统.docx》由会员分享,可在线阅读,更多相关《3脉冲波形参数的自动测试系统.docx(16页珍藏版)》请在冰豆网上搜索。
3脉冲波形参数的自动测试系统
电子科技大学
实验报告
学生姓名及学号:
马先文*************
朱科2011079120020
*******
实验地点:
C2-110实验时间:
2014.6.10
一、实验室名称:
现代测试技术实验室
二、实验项目名称:
脉冲波形参数的自动测试系统
三、实验学时:
4学时
四、实验内容:
1.组建脉冲波形参数的自动测试系统
2.设计脉冲参数测量系统界面
2.用程控方式完成对脉冲波形参数的测量,显示脉冲波形及参数测量结果。
五、实验结果:
1、脉冲波形参数自动测试系统需求分析:
答:
函数/任意波形发生器33220A手动调节产生脉冲信号,信号输出到数字示波
器DSO5012A,在LabWindows/CVI集成环境下编写脉冲参数测量控制程序,
通过LXI总线控制数字示波器完成脉冲参数的测量,并在用户界面上显示脉
冲波形及脉冲参数测量结果。
2、本次实验设计的脉冲参数测量系统应用程序界面如下:
3、本次实验内容的主体为一个程序的编制,程序的框架如下:
4、LabWindow/CVI程序代码如下:
#include
#include
#include
#include"PulseParameterTest.h"
#defineRESOURCE"TCPIP0:
:
192.168.1.108:
:
inst0:
:
INSTR"
staticintpanelHandle;
ViSessiondefaultRM,vi;
doublepreamble[10];
#defineWAVE_DATA_SIZE5000
unsignedcharwaveform_data[WAVE_DATA_SIZE];
voidInitialize(void);
voidCapture(void);
voidWaveform(void);
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"PulseParameterTest.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
intCVICALLBACKQuit(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
intCVICALLBACKAcquire(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
charbuf[256]={0};
doubletemp;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viPrintf(vi,":
MEASURE:
SOURCECHAN1\n");
viQueryf(vi,":
MEASURE:
FREQUENCY?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Frequency,temp);
viQueryf(vi,":
MEASURE:
VBASE?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Low,temp);
viQueryf(vi,":
MEASURE:
VTOP?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_High,temp);
viQueryf(vi,"MEASURE:
PERIOD?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Period,temp);
viQueryf(vi,"MEASURE:
VAMPLITUDE?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,temp);
viQueryf(vi,"MEASURE:
VPP?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_PTPeak,temp);
viQueryf(vi,"MEASURE:
RISETIME?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_RTime,temp);
viQueryf(vi,"MEASURE:
FALLTIME?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_FTime,temp);
viQueryf(vi,"MEASURE:
PWIDTH?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_PWidth,temp);
viQueryf(vi,"MEASURE:
NWIDTH?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_NWidth,temp);
viQueryf(vi,"MEASURE:
DUTYCYCLE?
\n","%lf",&temp);
SetCtrlVal(panelHandle,PANEL_Edt_PDutycycle,temp);
Waveform();
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetPeriod(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublePeriod;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
PERIOD?
CHAN1\n","%lf",&Period);
SetCtrlVal(panelHandle,PANEL_Edt_Period,Period);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetTop(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doubletop;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
VTOP?
CHAN1\n","%lf",&top);
SetCtrlVal(panelHandle,PANEL_Edt_High,top);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetBase(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublebase;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
VBASE?
CHAN1\n","%lf",&base);
SetCtrlVal(panelHandle,PANEL_Edt_Low,base);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetAmplitude(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doubleamplitude;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
VAMPLITUDE?
CHAN1\n","%lf",&litude);
SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,amplitude);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetPTPeak(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublevpp;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
VPP?
CHAN1\n","%lf",&vpp);
SetCtrlVal(panelHandle,PANEL_Edt_PTPeak,vpp);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetWaveform(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
Waveform();
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetFrequency(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublefrequency;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
FREQUENCY?
CHAN1\n","%lf",&frequency);
SetCtrlVal(panelHandle,PANEL_Edt_Frequency,frequency);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetRTime(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublertime;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
RISETIME?
CHAN1\n","%lf",&rtime);
SetCtrlVal(panelHandle,PANEL_Edt_RTime,rtime);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetFTime(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doubleftime;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
FALLTIME?
CHAN1\n","%lf",&ftime);
SetCtrlVal(panelHandle,PANEL_Edt_FTime,ftime);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetPWidth(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublepwidth;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
PWIDTH?
CHAN1\n","%lf",&pwidth);
SetCtrlVal(panelHandle,PANEL_Edt_PWidth,pwidth);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetNWidth(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doublenwidth;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
NWIDTH?
CHAN1\n","%lf",&nwidth);
SetCtrlVal(panelHandle,PANEL_Edt_NWidth,nwidth);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
intCVICALLBACKGetPDutycycle(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
doubledutycycle;
switch(event)
{
caseEVENT_COMMIT:
viOpenDefaultRM(&defaultRM);
viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);
viClear(vi);
Initialize();
Capture();
viQueryf(vi,"MEASURE:
DUTYCYCLE?
CHAN1\n","%lf",&dutycycle);
SetCtrlVal(panelHandle,PANEL_Edt_PDutycycle,dutycycle);
viClose(vi);
viClose(defaultRM);
break;
}
return0;
}
voidInitialize(void)
{
viPrintf(vi,"*RST\n");
viPrintf(vi,":
AUTOSCALE\n");
}
voidCapture(void)
{
viPrintf(vi,":
ACQUIRE:
TYPENORMAL\n");
viPrintf(vi,":
ACQUIRE:
COMPLETE100\n");
viPrintf(vi,":
DIGITIZECHAN1\n");
}
voidWaveform(void)
{
intwaveform_size,i;
doubletime_array[WAVE_DATA_SIZE],amp_array[WAVE_DATA_SIZE];
doubleXmin,Xmax,Ymin,Ymax;
DeleteGraphPlot(panelHandle,PANEL_GRAPH_Pulse,-1,VAL_IMMEDIATE_DRAW);
viPrintf(vi,":
WAVEFORM:
FORMATBYTE\n");
viPrintf(vi,":
WAVEFORM:
POINTS1000\n");
viQueryf(vi,":
WAVEFORM:
PREAMBLE?
\n","%,10lf\n",preamble);
SetCtrlVal(panelHandle,PANEL_Edt_TimeBase,preamble[4]*100);
SetCtrlVal(panelHandle,PANEL_Edt_Vertical,preamble[7]*32);
Xmin=(0.0-preamble[6])*preamble[4]+preamble[5];
Xmax=(1000.0-preamble[6])*preamble[4]+preamble[5];
Ymin=(0.0-preamble[9])*preamble[7]+preamble[8];
Ymax=(256.0-preamble[