基于VC的光强探测系统设计

来源 :科教导刊 | 被引量 : 0次 | 上传用户:lqw1100
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要为了便于观察干涉、衍射等光学实验现象,提高实验精度,验证实验原理,而设计光强探测系统。系统由光信号的接收与转换、电信号的传输与处理、数据的存储及输出三个部分组成。其中数据的存储及输出部分,基于VC设计实现,包括数据存储、探测绘图、曲线模拟。通过不断的修正和改进,以及新功能的添加,最终形成较满意的可行系统。
  关键词光强探测 Visual C++ 数据存储
  中图分类号:O43文献标识码:A
  
  1 引言
  设计实现光强探测系统,主要是用其观测光线在接收屏上的光强大小及分布,并将观测数据记录在计算机系统上,以光强曲线的方式快速直观地显示出来。可用于学生观察干涉、衍射等光学实验现象,并对所记录的数据进行分析,验证实验原理,提高实验精度。
  2 系统结构及设计
  光强探测系统分为光信号的接收与转换、电信号的传输与处理、数据的存储及输出三个部分,如图1所示。
  
  图1
  例如在单缝夫琅禾费衍射实验中,采用散射角极小的激光光束,通过一条很细的狭缝(0.1~0.3mm),就可在狭缝后大于1.5m的光屏上看到夫琅禾费衍射条纹。为了提高实验探测精度和速度,用光机电结合的方式,以图1的系统结构进行优化,组成所需的单缝夫琅禾费衍射实验系统。利用光电探测器和步进式电机记录各点的光强分布数据,以代替传统人工机械读取数据;利用计算机接口技术和软件技术,实现自动控制及数据存储输出,以代替人工计算检验数据。再配以专用实验平台,就可实现高精度的自动化实验系统。
  对于光强探测系统中光信号的接受与转换、电信号的传输与处理可由设计成熟的光电探测系统独立完成,相关应用很多,在这里因篇幅所限,不再讨论。对于数据的存储及输出,是本文重点讨论的内容。采用Visual C++语言来实现光强探测系统,实现的功能包括:数据存储、探测绘图、曲线模拟。因VC属于可视化与面向对象的程序设计技术,与人类习惯的思维方法比较一致,对象能直接获得已有的特性,稳定、易于修改、扩充和维护。并且VC的执行速度,加之对Windows操作系统的支持,使得VC的在整个计算机的硬件和软件方面的访问和控制更加游刃有余。可以在很短时间内为用户建立一个稳固而安全的骨架,快速增加新的类、变量和处理函数,方便而迅速地将某个消息映射到某个处理函数上,方便地操作本地或异地的数据库。
  3 基于VC的系统实现
  系统设计的主界面上有3个图标,分别单击各个图标会进入不同的属性页,每一个属性页上有不同的按钮,分别负责处理不同的功能,框架图如图2所示。
  
  图2系统设计框架
  3.1 数据存储
  3.1.1 仪器控制
  首先打开串口。使用CreateFile()打开串口,然后关闭串口,设置缓冲区长度。改变端口设置使用如下的两个方法:BOOL GetCommState(hComm,&dcb);BOOL SetCommState(hComm,&dcb);改变普通设置:BuildCommDCB(szSettings,&DCB);最后将其设置成同步I/O读写数据。
  3.1.2 数据保存
  为了便于光强数据的记录、读写、保存与修改,设计直接生成“光强数据.txt”的数据保存文档,里面分行分列保存了步进式电机上的光电接收器件接收到的数据,包括采样点序号、坐标以及光强。
  首先打开MFC ClassWizard,为对话框CPage3添加相关的消息,在Member Variables选项卡中为类CPage3的各个控件添加相应的成员变量。
  然后进入ClassWizard菜单下,找到该按纽对应的ID(即IDC_SAVE),选择它的ID为它的单击事件(BN_CLICKED)添加功能,然后点击ADD FUNCTION其功能名为ON_IDC_SAVE,最后点击EDIT CODE编辑其代码。其代码原型如下所示:
  void CPage3::OnSave()
  { CStdioFile sf;
  sf.Open("光强数据.txt",CFile::modeCreate | CFile::modeWrite) }
  文本文档创建好之后,就要将相应的数据写入这个文档。由于采用的是字符串输出的函数格式,所以要先将接收到的Float型的数值变量转换成CString型的变量,其语句为:
  strOut1.Format("%s%d",strOut1,i);
  这样就可以采用循环的方式,并在适当的位置加入换行输出符,将各个变量在文档的相应位置输出出来。
  3.2 探测绘图
  3.2.1 绘制曲线
  第一步,添加一个图片静态控件,修改其属性,在其选项框中复选Client edge和Modal frame两项,创建好绘图区域。
  第二步,为绘图按纽添加相应功能,只要点击该按纽软件就会在绘图区域里面绘制出相应的图形。通过ClassWizard选择IDC_BUTDRAW为对象,选择其单击事件添加命令,然后点击EDIT CODE编辑该命令。然后在MFC ClassWizard下,为对话框添加相关消息,如表1。
  表1控件属性
  
  第三步,就是在绘图区域里面绘制坐标轴,坐标轴的绘制实际上就是线段的绘制,使用绘制直线的函数:
  CPoint CDC::MoveTo(int x,int y);
  BOOL CDC::LineTo(int xEnd,int yEnd);
  上述函数实现的功能分别是:调整画笔的起始坐标(即从哪个点开始画线)和指定所画线段的终点坐标(即在哪个点结束),函数里面两个变量分别对应点的横坐标与纵坐标。
  然后利用TextOut函数在绘图区相应的位置输出坐标轴的名称以及原点的名称,分别为S,I(对应于坐标和光强)和O点。
  绘图功能形成流程图,如图3所示:
  
  图3绘图流程
  3.2.2 清除区域
  为了能够实现实验曲线的实时绘制,必须添加清除绘图区域的功能,以实现衍射曲线的重绘功能。添加OnButclear函数,在函数中输入如下代码:
  void CPage1::OnButclear()
  {
  InvalidateRect(CRect(0,0,330,330));
  }
  3.3 曲线模拟
  为了能够对比观察实验曲线和理想衍射曲线之间的异同,实现衍射曲线的自动模拟功能,采用GIF动画的自动播放功能,提供一个直观的画面。
  首先还是要在该界面上创建一个图片控件(Picture Control)。在项目中插入文件:把PictureEx.h,PictureEx.cpp文件拷贝到项目文件夹下,在Add to Project的Files选项中选上PictureEx.h,PictureEx.cpp,Insert。从对话框控件中把Picture Control(图片控件)拖入主对话框中,修改其属性:ID:IDC_GIF,TYPE:Rectangle,其余接受缺省选项。再在ClassWiard中为IDF_GIF加入CSatic控制变量m_GifPic, 观察GifDemoDlg.h中是否加上了#include "PictureEx.h"(由ClassWizard加入)。然后将CSatic m_GifPic更改成CPictureEx m_GifPic;
  加载动画文件:先将要加载的动画文件放到 res 资源文件夹下,再将其Import进项目中,由于MFC只支持256BMP文件的图片,因此要新建一个图片类型:“GIF”,将已经做好了的GIF文件放进去 ,并将其ID修改成:IDR_GIF1。
  import(导入)GIF动画的详细过程:在ResourceView窗口中,单击鼠标右键,在出现的环境菜单中选择“import”命令,会出现“import resource”选择文件对话框,文件类型选择“所有文件”,open as 选项为"auto",再选择动画文件所在目录,选上要载入的动画文件“模拟曲线.gif”,再单击 import,由于gif动画类型不是VC默认的文件类型,这时会出现"custom resource type"对话框,键入“GIF”,再单击ok,然后修改其ID。
  在CPage2::OnInitDialog()函数中加入如下代码:
  {…………………
  // TODO: Add extra initialization here
  if (m_GifPic.Load(MAKEINTRESOURCE(IDR_GIF1),_T("Gif")))
  m_GifPic.Draw();
  }
  此时就可以在这个属性页上顺利地添加GIF动画了,其效果图如图4(以单缝夫琅禾费衍射曲线为例)所示。
  
  图4模拟曲线
  
  参考文献
  [1]史大椿著.光学测量与应用光学实验.机械工业出版社,1992.
  [2]杨枝灵,王开著.Visual C++ 数字图像获取处理及实践应用.人民邮电出版社,2003.
  [3]刘静华,王永生著.最新VC++绘图程序设计技巧与实例教程.科学出版社,2001.
  [4]Bjarne Stroustrup著.The C++ Programming Language.裘宗燕,译.机械工业出版社,2002.
  [5]Chris H.Pappas William H.Maurray 著.Visual C++ 6参考大全.希望图书创作室,2004.
  [6]David J.Kruglinski著.Programming Visual C++ .潘爱民,王国印,译.清华大学出版社,2001.
其他文献
摘要本文主要介绍北广科技股份有限公司生产的800W全固态功放的原理,通过自创的简化电路图详细的介绍了功放盒中的检修难点控制板和监测板。  关键词全固态功放 控制保护板 监测保护板  中图分类号:TN94文献标识码:A    北广科技股份有限公司生产的3kw、5kw、10kw的全固态发射机,结构上都是使用800W的功率放大器合成。不同功率的发射机只是合成功放的数量不同而已。北广厂发射机的功率放大器控
在安装调试新新煤矿落地式多绳提升机电控设备的过程中发现,该提升机的 JKMK/J—A_2—11□Ⅰ型电控设备存在不受井口把钩工信号控制等五个不符合《煤矿安全规程》第358条规定
研究背景:   社区美沙酮维持治疗(Methadone Maintenance Treatment,MMT),是针对阿片类毒品成瘾者采取的一种替代治疗方法。由于美沙酮具有一定的成瘾性,属于国家管制的麻醉
在苏联黑色冶金企业中,防治粉尘的职业性危害仍然是继续改善矿工劳动条件最重要的任务之一。在开采工作中,粉尘产生与排放的主要来源是打眼与钻孔、爆破与装岩等生产工艺过
英语是人们交流的一种语言工具,通过说把意图表达出来,才能实现交流。通过游戏活动和情境的即兴演讲等活动“促说”,使学生产生说英语的意愿,获得锻炼说的机会,进而提升口语表达能力。  一、迎合心理需要,趣味导说  要想让学生按照教师的思路进行学习,锻炼英语口语,首先与学生拉近心理距离,从心理上把学生拉入统一立场中,迎合学生心理,引导学生完成口语训练。  例如,在 Unit 4 Drawing in th
期刊
摘要本文将模糊控制的理论应用于充电控制上,将电池的电压与电压变化率所估测的电量反馈作为控制器的输入值,加以模糊化,经由规则库模糊推论之后,产生输出值,解模糊化得到适当的充电电流,实现能自我修正充电电流的充电器,在不减少电池寿命的情况下实现快速充电。  关键词模糊控制 脉冲 光耦合  中图分类号:TP2文献标识码:A    电池大致上分为两种:一次电池及二次电池,一次电池使用过后寿命即终了,例如碱性
4.系统的概况 4.2.3 溜井矿石移动监视系统输出结果的确认目的:确认使用风压计的溜井矿石移动监视系统的输出结果是否正确地反映了溜井矿石移动(气压变化)情况,以及它是否与
摘要目前,采用传统的提高电压等级来传输电已经达到饱和趋势,要在未来提高输电效率,就必须采用高压直流输电。它在远距离大容量输电和电力系统联网方面具有明显的优点。 高压直流输电在全国联网工程中起到重要的作用。未来输电将主要采用这种技术。  关键词高压直流输电 输电效率 电力系统联网  中图分类号:TM7文献标识码:A    早期的输电采用的是直流输电,不需要经过换流。伴随着交流发电机、变压器的发展,使
一、设置故事悬念,引导学生猜测  小学英语故事教学中,教师要注重激趣。小学生的好奇心理比较重,在教学中,教师可以巧妙设置故事悬念,引导学生大胆猜测,利用猜测环节激趣,带动学生主动阅读。猜测过程中,学生需要运用英语进行表达,这对于培养学生的语用能力非常有效。一方面,教师要引导学生大胆说,也要注重引导学生发挥思维,猜测故事内容,将二者相结合,如此一来,学生才能饶有兴致地投入英语阅读。  例如:在教学U
期刊
4月10日,由黑龙江日报报业集团生活报十余位记者、东北农业失学的专家和生活报通讯员志愿者组成的踏查松花江全流域报道小组正式出发。松花江位居长江、黄河之后,是我国第三