程序设计说明书.doc_第1页
程序设计说明书.doc_第2页
程序设计说明书.doc_第3页
程序设计说明书.doc_第4页
程序设计说明书.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于串口通信的高级语言的控制程序的设计课程设计说明书 课 程 名 称:高级语言在测控中的应用课程设计课 程 代 码: 8426580 题 目: 基于串口通信的 高级语言控制程序的设计 学 生 姓 名: 何江 学 号: 312008080307401 年级/专业/班: 2008级机电4班 学院(直属系) : 机械工程与自动化学院 指 导 教 师: 张恕远 12 基于串口通信的高级语言的控制程序的设计1 引 言11.1 问题的提出11.2任务与分析12 程序的主要功能12.1接收功能12.2发送功能22.3退出程序22.4清除功能22.5参数设置23 程序运行平台23.1建立工程23.2资源创建24 总体设计55 程序类的说明56 程序流程及代码实现66.1 发送函数66.2 接收函数76.3 退出函数76.4 清空函数76.5 其他函数87 系统测试98 结论11参考文献12摘 要随着对计算机串口和高级语言的深入学习与掌握,基于串口通信的高级语言的控制程序的设计在测控系统中也得到广泛的应用。该设计具有数据的接收于发送功能,这使得用计算机测控系统的控制变得更为方便、快捷和精准。关键词:计算机串口;高级语言;串口通讯;控制程序。 图1-1 智能仪器示意图1 引 言 目前仪器仪表的智能化程度越来越高,大量的智能仪器都配备了RS-232通信接口,并提供了相应的通信协议,能够将测试、采集的数据传输给计算机等设备,以便进行大量数据的储存、处理、查询和分析。图1-1所示为某型号智能仪器示意图。1.1 问题的提出 在现代化的测控系统中,串口通信有着十分重要的作用,然而,不同测控系统对串口通信的需求也不尽相同,因此会用高级语言设计串口通信的控制程序也变得很重要。与测控相关的专业就开设了高级语言在测控中的应用课程设计。基于串口通信的高级语言的控制程序的设计就是本次课程设计的题目。1.2任务与分析本课题是要求设计一个基于VC+平台下串口通信的控制程序,该程序必须有着良好的用户界面、能够设置端口的参数、能在同一台计算机上进行调试和可进行单个数据或成批数据的传送。主要的目的是通过该课程设计进一步掌握计算机串口通信和高级语言的相关知识,同时,深入学习MSComm控件知识,掌握MSComm控件编程技巧。2 程序的主要功能2.1接收功能按“开始接收”按钮,开始接收接收缓冲区的字符,且按键名变为“停止接收”,接收的字符在显示文本框显示。再按该按钮,停止接收字符,且按键名还原为“开始接收”。2.2发送功能按“开始发送”按钮,开始把发送文本框字符发送到发送缓冲区,且按键名变为“停止发送”。再按该按钮,停止发送未发送的字符,且按键名还原为“开始发送”。2.3退出程序按“退出程序”按钮,程序窗口关闭,结束程序运行。2.4清除功能按“清空重接”按钮,将只读文本内容清空。按“清空重发”按钮,将发送文本框内容清空。2.5参数设置按“设置参数”按钮,弹出“参数设置”对话框,在起相应的文本框不同的串口、波特率、验证位、数据位和停止位的相关参数,按“确定”按钮后,设置成功。3 程序运行平台3.1建立工程1. 启动Visual C+6.0,单击“文件”菜单中的“新建”命令,显示新建对话框,选择“MFC AppWizard(exe)”工程类型,输入需要创建工程的名称“lzhh”和目录。2. 按照弹出的应用向导对话框依次填写,第1步选择基于对话框,其他均采用默认。3. 单击“完成”按钮,将会弹出一个关于新工程信息的对话框。单击“确定”按钮,这样MFC向导便自动生成了一个名称为“lzhh”的工程。3.2资源创建1应用程序中添加了一个对话框资源IDD_lzhh_DIALOG,打开属性对话框,将对话框标题改为“基于串口通信的高级语言的控制程序的设计”。2为了实现计算机与计算机的串口通信,添加MScomm控件。选择“工程”菜单中的“添加工程”下的“Components and Controls”选项,在弹出的对话框中双击“Registered ActiveX Controls”项,选择“Microsoft Communications Control,version 6.0”项,单击“Insert”按钮,在弹出的对话框中单击“OK”按钮,再在弹出的对话框中单击“结束”按钮关闭对话框,所选择的控件就会出现在“控件面板”中,然后将其添加到对话框中相应位置。3删除对话框中原来的Static文本,用面板为对话框添加如表3-1所示的控件,并按照图3-1所示放置。图3-1 程序主界面图3-2 参数设置界面表3-1程序主界面内的控件类型、ID及相关属性控 件 类 型ID 号标 题属 性功 能组合框默认接收字符默认标签组合框默认待发字符默认标签编辑框IDC_REC(自动)垂直滚动()显示接收字符区多行() 只读()编辑框IDC_SEND(自动)垂直滚动()显示发送字符区多行() MSCommIDC_MSCOMM1在程序中设置默认串口参数设置按钮IDOK开始发送默认发送字符命令按钮IDCANCEL开始接收默认关闭程序命令按钮IDC_BUTTON1参数设置默认设置串口相关参数按钮IDC_BUTTON2清空重填默认清空发送区按钮IDC_BUTTON3清空重接默认清空接收区按钮IDC_BUTTON4退出程序默认关闭窗口4. 选中在当前窗口的“Dialg”单击鼠标右键选择“插入Dialg”,同步骤1将对话框标题改为“参数设置”,同步骤3删除对话框中原来的Static文本,用面板为对话框添加如表3-2所示的控件,并按照图3-2所示放置。5. 添加成员变量,在“查看”菜单中或在对话框上单击鼠标右键,修改类名为“CSettingDlg”,再打开“Class Wizard”对话框中的“Member Variables”标签,选中所需的控件ID号,双击鼠标左键或单击Add Variables按钮,依次为表3-3中所列控件增加成员变量。表3-2参数设置界面内的控件类型、ID及相关属性控 件 类 型ID 号标 题属 性功 能组合框默认端口默认标签组合框默认时间默认标签组合框默认串口参数默认标签编辑框IDC_EDIT1默认设置端口编辑框IDC_EDIT2默认设置时间编辑框IDC_EDIT3默认设置串口参数按钮IDOK确定默认更新参数按钮IDCANCEL取消默认参数还原表3-3成员变量控件ID号变 量 类 型变 量 名IDC_MSCOMM1CMSCommm_COMMIDC_RECCStringm_RecIDC_SENDCStringm_SendIDOKCButtonm_ctrlSendIDCANCELCButtonm_ctrlRecIDC_EDIT1intm_nPortIDC_EDIT2intm_nTimeIDC_EDIT3CStringm_strSetting6. 切换到Class Wizard的Message Maps标签页为相应控件添加ON_BN_CLICKED消息响应函数,对照表3-4。表3-4主界面控件函数控件ID号函数类型函数名IDC_MSCOMM1OnCommOnOnCommMscommIDC_BUTTON1ON_BN_CLICKEDOnSettingIDC_BUTTON2ON_BN_CLICKEDOnClsSIDC_BUTTON3ON_BN_CLICKEDOnClsRIDC_BUTTON4ON_BN_CLICKEDOnEndIDCANCELON_BN_CLICKEDOnRecIDOKON_BN_CLICKEDOnSend4 总体设计图4-1 系统总体框架图要满足这个设计所需要的界面是两个,通过主界面上的相关控件可以弹出另一界面。当然,另一界面也是单独的一个类,其只是有些控件有变量没有功能函数,所以,它就没有框架图。然而,MScomm控件的相关功能函数是系统默认的,这里也没必要给出。如此,就给出了系统总体框架图,如图4.1。5 程序类的说明本程序涉及到了四个类,其分别是ClzhhApp、CLzhhDlg、CMSComm和CsettingDlg。除CLzhhDlg需要添加一些程序外,其余的都以VC+自动生成的程序为准。CLzhhDlg添加的代码如下:class CLzhhDlg : public CDialog/ Constructionpublic:CLzhhDlg(CWnd* pParent = NULL);/ standard constructorBOOL bRec; /接收按键标志BOOL bSend; /发送按键标志CString m_strSetting;CString strSetting;int m_nTime;int m_nPort;void OpenPort(); /串口开起函数/ Dialog Data6 程序流程及代码实现图6-1 设计程序流程图根据第4小节的系统总体框架图和第5小节中的给类加的数据成员与函数成员设计了程序流程图,如图6-1。在lzhhDlg.cpp文件中,设置初始化函数OnInitDialog(),添加代码实现对话框各控件的初始化工作,如下:BOOL CLzhhDlg:OnInitDialog() /VC自动生成的代码/ TODO: Add extra initialization herebSend=FALSE;bRec=FALSE;m_nPort=1;m_nTime=1000;m_strSetting=_T(9600,n,8,1);OpenPort();return TRUE; / return TRUE unless you set the focus to a control6.1 发送函数 实现接收按钮相应的响应函数OnSend() 。代码如下:void CLzhhDlg:OnSend() / TODO: Add your control notification handler code herebSend=!bSend;if(bSend)UpdateData(TRUE); /读取编辑框内容m_COMM.SetOutput(COleVariant(m_Send); /发送数据m_ctrlSend.SetWindowText(_T(停止发送);else m_ctrlSend.SetWindowText(_T(开始发送);6.2 接收函数实现接发送钮相应的响应函数OnRec() 。代码如下:void CLzhhDlg:OnRec() / TODO: Add your control notification handler code herem_COMM.GetInput();bRec=!bRec;if(bRec)m_ctrlRec.SetWindowText(_T(停止接收);else m_ctrlRec.SetWindowText(_T(开始接收);6.3 退出函数实现退出按钮相应的响应函数OnEnd() 。代码如下:void CLzhhDlg:OnEnd() / TODO: Add your control notification handler code hereCDialog:OnOK();6.4 清空函数实现清空按钮相应的响应函数OnClsR()和OnClsS()。代码如下:void CLzhhDlg:OnClsR() / TODO: Add your control notification handler code herebRec=0;m_ctrlRec.SetWindowText(_T(开始接收);m_Rec=_T();SetDlgItemText(IDC_REC,m_Rec);void CLzhhDlg:OnClsS() / TODO: Add your control notification handler code herebSend=0;m_ctrlSend.SetWindowText(_T(开始发送);m_Send=_T();SetDlgItemText(IDC_SEND,m_Send);6.5 其他函数实现参数设置按钮和串口控件相应的响应函数OnSetting()和OnOnCommMscomm()以及在lzhhDlg.h文件里自定义串口打开函数OpenPort()。代码如下:void CLzhhDlg:OnSetting() / TODO: Add your control notification handler code here CSettingDlg setDlg; setDlg.m_nPort=m_nPort; setDlg.m_nTime=m_nTime; setDlg.m_strSetting=m_strSetting; if(setDlg.DoModal()=IDOK)m_nPort=setDlg.m_nPort;m_nTime=setDlg.m_nTime; m_strSetting=setDlg.m_strSetting; OpenPort(); void CLzhhDlg:OnOnCommMscomm() / TODO: Add your control notification handler code hereVARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata2048; /设置BYTE数组 An 8-bit integerthat is not signed.CString strtemp;CString strtemp_R;if(bRec)if(m_COMM.GetCommEvent()=2) /事件值为2表示接收缓冲区内有字符 variant_inp=m_COMM.GetInput(); /读缓冲区safearray_inp=variant_inp; /VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize(); /得到有效数据长for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组for(k=0;klen;k+) /将数组转换为Cstring型变量BYTE bt=*(char*)(rxdata+k); /字符型strtemp.Format(%c,bt); /将字符送入临时变量strtemp存放m_Rec+=strtemp; /加入接收编辑框对应字符串 else m_Rec=_T(没有字符);SetDlgItemText(IDC_REC,m_Rec); /更新接收编辑框对应字符串void CLzhhDlg:OpenPort()/打开串口 if(m_COMM.GetPortOpen() m_COMM.SetPortOpen(FALSE); m_COMM.SetCommPort(m_nPort); if(!m_COMM.GetPortOpen() m_COMM.SetPortOpen(TRUE); else AfxMessageBox(cannaot open serial port); m_COMM.SetSettings(m_strSetting); m_COMM.SetRThreshold(1); m_COMM.SetInputMode(1); m_COMM.SetInputLen(0); m_COMM.GetInput();7 系统测试程序的打开方法是:首先进入VC+6.0,打开工程lzhh.dsw,然后进入源程序,接着选择Build下的Execute lzhh.exe即可,也可以不打开工程,直接双击lzhh文件夹下的debug或release子文件夹下的lzhh.exe文件即可运行程序。图7-1 参数设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论