实验9-脉冲波形参数的自动测试系统-实验报告-091228

电子科技大学自动化学院

(实验)课程名称测试系统集成技术   

电子科技大学教务处制表

        

学生姓名:胡武君   号: 201222260139  指导教师:马敏

实验地点:   主楼C211       实验时间:  周二下午

一、实验室名称:    现代测试技术实验室                           

二、实验项目名称: 脉冲波形参数的自动测试系统

三、实验学时:4

四、实验内容:

1.组建脉冲波形参数的自动测试系统

2.设计脉冲参数测量系统界面

2.用程控方式完成对脉冲波形参数的测量,显示脉冲波形及参数测量结果。

五、实验结果:

1.脉冲波形参数自动测试系统需求分析

函数/任意波形发生器33220A手动调节产生脉冲信号,信号输出到数字示波器DSO5012A,在LabWindows/CVI集成环境下编写脉冲参数测量控制程序,通过LXI总线控制数字示波器完成脉冲参数的测量,并在用户界面上显示脉冲波形及脉冲参数测量结果。

2.本次实验设计的脉冲参数测量系统应用程序界面如下:

修改后:

本次实验内容的主体为一个程序的编制,程序的框架如下:

LabWindow/CVI程序修改代码如下:

void Initialize(void)

{

       viPrintf(vi,"*RST\n");

       viPrintf(vi,"CHAN1:IMPedance FIFTy \n");

       viPrintf(vi,":AUTOSCALE\n");

}

报告评分:

                              指导教师签字:

 

第二篇:3-脉冲波形参数的自动测试系统

        

学生姓名及学号:马先文2011079150001  

                  2011079120020

指导教师:王子斌

实验地点: C2-110    实验时间:2014.6.10

一、实验室名称:  现代测试技术实验室                             

二、实验项目名称:脉冲波形参数的自动测试系统

三、实验学时: 4学时

四、实验内容:

1.组建脉冲波形参数的自动测试系统

2.设计脉冲参数测量系统界面

2.用程控方式完成对脉冲波形参数的测量,显示脉冲波形及参数测量结果。

五、实验结果:

1、脉冲波形参数自动测试系统需求分析:

答:函数/任意波形发生器33220A手动调节产生脉冲信号,信号输出到数字示波

   器DSO5012A,在LabWindows/CVI集成环境下编写脉冲参数测量控制程序, 

  

   通过LXI总线控制数字示波器完成脉冲参数的测量,并在用户界面上显示脉

  

   冲波形及脉冲参数测量结果。

2、本次实验设计的脉冲参数测量系统应用程序界面如下:

3、本次实验内容的主体为一个程序的编制,程序的框架如下:

4LabWindow/CVI程序代码如下:

#include <cvirte.h>     

#include <userint.h>

#include <visa.h>

#include "Pulse Parameter Test.h"

#define RESOURCE "TCPIP0::192.168.1.108::inst0::INSTR"

static int panelHandle;

ViSession defaultRM,vi; 

double preamble[10];

#define WAVE_DATA_SIZE 5000

unsigned char waveform_data[WAVE_DATA_SIZE];

void Initialize(void);

void Capture(void);

void Waveform(void);

int main (int argc, char *argv[])

{

    if (InitCVIRTE (0, argv, 0) == 0)

        return -1; /* out of memory */

    if ((panelHandle = LoadPanel (0, "Pulse Parameter Test.uir", PANEL)) < 0)

        return -1;

    DisplayPanel (panelHandle);

    RunUserInterface ();

    DiscardPanel (panelHandle);

    return 0;

}

int CVICALLBACK Quit (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            QuitUserInterface (0);

            break;

    }

    return 0;

}

int CVICALLBACK Acquire (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    char buf[256]={0};

    double temp;

    switch (event)

    {

        case EVENT_COMMIT:

           

            viOpenDefaultRM(&defaultRM);

            viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);

            viClear(vi);

           

            Initialize();

            Capture();

           

            viPrintf(vi,":MEASURE:SOURCE CHAN1\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;

    }

    return 0;

}

int CVICALLBACK GetPeriod (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double Period;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetTop (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double top;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetBase (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double base;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetAmplitude (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double amplitude;

    switch (event)

    {

        case EVENT_COMMIT:

            viOpenDefaultRM(&defaultRM);

            viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);

            viClear(vi);

           

            Initialize();

            Capture();

           

            viQueryf(vi,"MEASURE:VAMPLITUDE? CHAN1\n","%lf",&amplitude);

            SetCtrlVal(panelHandle,PANEL_Edt_Amplitude,amplitude);

           

            viClose(vi);

            viClose(defaultRM);

            break;

    }

    return 0;

}

int CVICALLBACK GetPTPeak (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double vpp;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetWaveform (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

           

            viOpenDefaultRM(&defaultRM);

            viOpen(defaultRM,RESOURCE,VI_NULL,VI_NULL,&vi);

            viClear(vi);

            Initialize();

            Capture();

            Waveform();

            viClose(vi);

            viClose(defaultRM);

            break;

    }

    return 0;

}

int CVICALLBACK GetFrequency (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double frequency;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetRTime (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double rtime;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetFTime (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double ftime;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetPWidth (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double pwidth;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetNWidth (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double nwidth;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

int CVICALLBACK GetPDutycycle (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    double dutycycle;

    switch (event)

    {

        case EVENT_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;

    }

    return 0;

}

void Initialize(void)

{

    viPrintf(vi,"*RST\n");

    viPrintf(vi,":AUTOSCALE\n");

}

void Capture(void)

{

    viPrintf(vi,":ACQUIRE:TYPE NORMAL\n");

    viPrintf(vi,":ACQUIRE:COMPLETE 100\n");

    viPrintf(vi,":DIGITIZE CHAN1\n");

}

void Waveform(void)

{

    int waveform_size,i;

    double time_array[WAVE_DATA_SIZE],amp_array[WAVE_DATA_SIZE];

    double Xmin,Xmax,Ymin,Ymax;

   

    DeleteGraphPlot (panelHandle, PANEL_GRAPH_Pulse, -1, VAL_IMMEDIATE_DRAW);

    viPrintf(vi,":WAVEFORM:FORMAT BYTE\n");

    viPrintf(vi,":WAVEFORM:POINTS 1000\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[9])*preamble[7] + preamble[8];

   

   SetAxisScalingMode (panelHandle, PANEL_GRAPH_Pulse, VAL_BOTTOM_XAXIS, VAL_MANUAL, Xmin, Xmax);

    SetAxisScalingMode (panelHandle, PANEL_GRAPH_Pulse, VAL_LEFT_YAXIS, VAL_MANUAL, Ymin, Ymax);

    viPrintf(vi,":WAVEFORM:DATA?\n");

    waveform_size = WAVE_DATA_SIZE;

    viScanf(vi,"%#b\n",&waveform_size,waveform_data);

    for (i=0;i<1000;i++)

    {

        amp_array[i] = ((float)waveform_data[i]-preamble[9])*preamble[7] + preamble[8];

        time_array[i] = ((float)i-preamble[6])*preamble[4]+preamble[5];

    }

    PlotXY (panelHandle, PANEL_GRAPH_Pulse, time_array, amp_array, 1000, VAL_DOUBLE, VAL_DOUBLE, VAL_THIN_LINE, VAL_SIMPLE_DOT, VAL_SOLID, 1,

            VAL_YELLOW);

}

六、思考题:

1、在本次实验的示波器程控测量过程中,是否每次测量都需要重新做示波器初始化的工作?

答:每次测量都需要重新做示波器初始化的工作。

    重新做示波器的初始化工作后仪器才能进入正常的运行,保证不

    受其它程序的影响,才能保证应用程序运行时不会出错(这是系

    统总线的要求),从而实时显示波形。

2、如果没有指定脉冲波形的幅度及频率,能否利用该测试程序获取未知脉冲波形的相关参数?

答:能利用该测试程序获取未知脉冲波形的相关参数。

波形的测试是仪器设备完成的,程序只是通过控制器的接口功能 

去程控另一个仪器,并不直接参与参数的测量。           

                                            报告评分:

                                           指教师签字: