VC++单片机虚拟仪器测试系统 第13页

VC++单片机虚拟仪器测试系统 第13页
     break;
  }
viPrintf(/*funcgen*/m_Session,"FUNC:USER %s\n",WaveForm.m_Arbitrary);
 }
 else
 {error=viPrintf(/*funcgen*/m_Session,"APPL:%s %f,%f,%f\n",m_nBaseShape,m_nFreq,m_nAmpl,m_nOffs);//这里的参数需要用户自己添加
     if(error!=VI_SUCCESS)
  {
      error_handler(/*funcgen*/m_Session,error);
      break;
  }
 }
    MessageBox("Successfully!");//给一个提示框--明示用户的操作
    break;
上面的程序中对方波进行了特别的处理,因为占空比只适合方波,所以对方波进行另行的处理。其中下面的语句给我带来了一定的问题:
nID_Select_Modul=GetCheckedRadioButton(IDC_RADIO_BW,IDC_RADIO_FM);
//问题的关键就出现在这里--该函数没有执行--2005、4、28                                                                     //问题解决了!!原来是单选按钮的ID的值的大小问题!!                                                                  //在该函数中,小的在前,大的在后!!!--2005/4/29
问题就向注释的文字所说的那样,单选按钮的ID在这个函数中是有大小区分的,当时却没有进行留意,结果把我给郁闷了!点击按钮却没有执行相应的功能。不过我利用设置断点进行分段调试,被我给发现了这个函数并没有执行。于是我就思索着是否是ID的原因,就像我前面所说的那样去查看resource.h文件中的ID的关系。最后,对自己的猜测进行试验,结果一切OK了!!“试验是检验真理的唯一标准”是一个不变的真理。
基本波形在测试成功之后,需要将其与调制方式结合起来。因为调制需要一个调制波和一个载波。我就利用基本波作为调制波,而通过另外一组单选按钮来进行载波的配置。这样就比较的清晰。而为了方便用户的操作,我调制方式的单选按钮中加入了一个无调制的按钮,并作为一个默认的设置,如下图:图3-14
这样的处理就可以把基波的产生和最为载波进行很好区别。不至于使用户分辨不清哪个是载波与调制波。而当用户单击调制方式中的一个的时候就会弹出另外一个对话框:图3-15
该面板上的信息足以提示用户最正确的选择。将各种调制方式分列在不同的组中并列有标题,清晰可见。而各种参数的数值的传递,我是通过两组变量进行的。一组为在主窗口中进行定义,而另外一组是在相应的面板中通过ClassWizard进行定义,这样方便数据的交换,也方便自己的数据的处理工作。
在我的函数信号发生器的主面板中还有复位按钮和测试硬件连接情况的按钮,一切从用户的方便操作来进行考虑。

4  示波器模块
4.1 Agilent 54622D 100MHz混合信号示波器介绍
Agilent 54622D混合信号示波器(MSO)具有100MHz 的带宽,200MS/S采样率, 2MB通道的MegaZoom深存储器以及2+16通道有2个模拟通道和16个数字通道,组合了示波器对信号的详尽分析和逻辑分析仪的多通道定时测量能力。
其中MegaZoom 技术把常规深存储器数字示波器的优点与传统模拟示波器的响应能力和更新率结合在一起常规深存储器数字式示波器,能够捕获长的时间间隔同时保持高取样率MegaZoom 技术保持了深存储器的优点而并没有在通常深存储器中常见的迟钝用户界面在对数据作平移和缩放时和很差的信号更新率;MegaZoom 技术在示波器探头与示波器显示间的信号数据通路中融入多处理器体系结构, 因此在查看采集数据时能迅速响应平移和缩放控制MegaZoom 技术把更新率即时控制响应和创新的深存储器融于一体使您能以高取样率捕获长时间周期并且不管是在运行中还是在停止后都能立即放大所关注的信号细节在一台示波器中组合了深存储器前面板响应能力和显示屏更新率因此就不需要选择特定的工作模式或存储器深度。以下是54620系列的数字示波器的参数对照表:
•  54620系列 54621A 54621D 54622A 54622D 54624A
示波器通道数 2 2 2 2 4
带宽 60MHZ 60MHZ 100MHZ 100MHZ 100MHZ
采样率 400MSa/s
最大输入(dc+峰值ac) 400V
分辨率 8bit
量程(每格) 1mV-5V
逻辑通道 N/A 16 N/A 16 N/A
采样率 8通道有效 400MSa/s 400MSa/s
 16通道有效 200MSa/s 200MSa/s
输入电平 500mVppmin 500mVppmin
 +40Vmax +40Vmax
存储器 示波器通道 2MB/ch 2MB/ch 2MB/ch 2MB/ch 2MB/ch
 逻辑通道 单接口夹 8MB/ch 8MB/ch
  双接口夹 4MB/ch 4MB/ch
时基(每格) 5ns-50s
触发 边沿,脉冲宽度,模式,序列,持续时间和新的I2C
峰检测 5ns
测量 峰直,平均直,有效值,频率,周期,脉冲宽度,上升/下降时间
波形运算 相减,相乘,FFT,积分,微分
存储 内装的软盘
连接性 标准配置的RS-232和并行接口,可选GPIB
内装帮助 9种语言的快速帮助
4.2 Agilent 54622D 100MHz混合信号示波器界面设计和编程
   在进行界面设计之前,我通过安捷伦网站下载了其相关的资料: 54620/40-series Oscilloscopes Programmer's Guide通过该资料我了解了该数字示波器的工作原理:
图4-2
上面的结构框图是对于每一个程序的基本构架。示波器初始化是很重要的,没有进行正确的初始化,你的程序也许在这台机子上能正确的运行,但换台机子就可能不行了。程序的初始化包括定义和初始化变量、分配内存或测试系统的配置;控制器的初始化确保连接示波器的接口(GPIB/RS-232)能正确的建立以及准备好数据的收发。示波器的初始化建立通道配置和标签,起始电压,触发配置以及时间轴与采集类型。
一旦初始化正确,就可以进行数据的采集工作了。注意:当示波器响应从控制器发过来的指令的时候,不能执行采集工作。还有,当你改变示波器的配置时,所有采集回来的数据将会被放弃。采集数据是通过执行:DIGITIZE指令来启动的。该指令清空波形缓冲区,启动采集直至采集内存已经存满数据,并停止。采集回来的数据要么通过示波器进行显示或测量,要么就是发送给计算机来进行进一步的分析。而当指令:DIGITIZE正在工作的时候,其他的指令将会被放入缓冲区直至该指令执行完毕。
你可以置示波器为运行模式,并在你的程序中使用一个等待循环来确保在你进行测量之前示波器至少完成了一个采集工作。安捷伦并不推荐这种方式,因为循环等待的时间是会变化的,促使你的程序的崩溃。另外,:DIGITIZE当完成采集时,会停止采集工作以至于所有测量是针对所显示的数据而不是针对改变了的数据。
数据采集回来之后,你可以通过示波器进行数据的测量或传送数据给编写的程序进行处理。测量包括频率、占空比、周期、正负脉宽。你可以使用指令:waveform来进行数据的读取并返回给计算机,并通过自己编写的程序进行数据的分析处理。
大体了解了示波器的工作过程之后,我开始自己的程序的架构(参看资料上的架构),下面是我的程序的结构(详细):
有了大体的框架之后,开始了界面的设计,因为是示波器,所以一定要有一个显示窗口来对采集回来的数据进行处理显示;除了波形的显示外,还需要对一些参数进行测量操作。固然需要一些执行按钮和一些显示用的控件。而用户有时需要对示波器的参数进行更改,所以需要提供给用户一个设置参数的对话框。而对于测量的结果的显示,我是通过一个弹出式信息对话框的形式来进行的,这样做比较的简明清楚。下面是我的大体界面:
图4-3
这里的界面和函数信号发生器的类似:有复位按钮、信息按钮等。测量时可以对测量源进行选择,测量参数进行选择等。而示波器的参数的设置窗口中对各种参数进行了默认的设置,方便用户的设置。
在示波器的编程过程中,有两个难题:数据的采集和数据的显示问题。波形数据包括引导数据和波形数据:引导数据通过指令:WAVE:PRE来对选择的波形进行引导数据的查询,该引导数据包含了关于当前响应的通道的水平测量和垂直测量的相关信息如下所示:FORMAT、TYPE、POINTS、COUNT、XINCREMENT、XORINGIN、XREFERENCE、YINCREMENT、YORIGIN、YREFERENCE
其中,详细信息如下:
FORMANT:从示波器传送给计算机的数据的格式化字符;0表示BYTE,1表示WORD格式,2表示ASCII格式,用一个整数表示(由指令:WAVEFORM:FORMAT进行设置)

 << 上一页  [11] [12] [13] [14] [15] [16] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有