




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文详细介绍了Visual C+5.0版中有关通讯控件的使用方法,并给出了一个利用该控件编写的简单通用的通信示例程序。 关键词:串行通信 通讯控件 随着Win 95的逐步普及,程序员们越来越愿意在Win95下编程,而Visual C+正成为主要的开发工具。然而用VC在Win95下开发串行通讯程序是程序员们经常会遇到确又令人头痛的一件事,不但要理解许多复杂的API函数,还要掌握多线程编程。令人高兴的是Visual C+中提供的通讯控件帮助我们解决了这一难题,通过对这一控件的正确使用,我们可以轻松地编写出所需的串行通信程序。 下面,我们将结合一个具体的例子来说明。本程序的编程环境是Win95和Visual C+5.0。这个编程示例的功能比较强,它可以由用户选定进行传输的通信端口,并设定这个端口的相关参数,包括波特率、数据位、停止位、奇偶校验和流量控制等。还具有发送数据和接收数据的双重功能。 一. 在程序中嵌入通讯控件 启动Visual C+5.0,利用MFC AppWizard(exe)新建一个项目文件,并命名为CommTest,在AppWizard第一步选择基于对话框的应用程序类型(Dialog based),在第二步将ActiveX Controls复选框选中,表示本程序支持ActiveX控件。其他均接收缺省设置,AppWizard将自动生成一个以对话框为主窗口的应用程序。下面我们将在该程序中加入通讯控件。在Resource View中打开对话框(IDD_COMMTEST_DIALOG),将其修改为如图一所示的对话框。注意将对话框的语言属性改为Chinese(P.R.C)。 单击Project菜单,从菜单中选择Add to Project,再单击Components and Controls,从弹出的对话框中单击Registered ActiveX Controls,然后在列表框中选择Microsoft Communications Control,version 5.0,单击OK。这时会询问你是否加入CMSComm类,单击OK,返回后就会看到控件工具条上添加了一个通讯控件(形状如电话机),将其拖放到对话框上,同时注意到Project中新增加了一个类。通过查看类MSComm的源文件mscomm.cpp,我们可以了解这个控件的属性和使用方法,其中的Get函数可以用来访问该属性的当前值,而Set函数则用来设置该属性的新值。 二. 设置通讯控件的属性值 激活通讯控件的属性对话框,一些重要的属性及其说明如表一所示: 属性 设定值 说明 CommPort 2 串口号,一般串口为鼠标所用,故用串口2 InBufferSize 1024 接收缓冲区大小 InputLen 0 从接收缓冲区读取的字节数,0表示全部读取 InputMode 1 接收数据的类型,0表示文本类型,1表示二进制类型 OutBufferSize 1024 发送缓冲区大小 RThreshold 1 设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件 SThreshold 0 设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件 Settings 9600,n,8,1 串口的参数设置,依次为波特率、奇偶校验(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数 表1 串口属性及说明 上面表中的属性设定值是本例程中所用的值,可根据需要灵活设定。至于其它的属性可采用缺省值,其说明可参考联机帮助文件。 通讯控件的工作原理类似与中断方式,当有通讯事件发生时(如发送数据、接收数据等),就会触发OnComm事件,在该事件的处理函数中调用GetCommEvent()函数,通过返回值即可确定是那类事件,再做出相应的处理。 三. 主程序的编制 首先我们为对话框中的控件添加对应的变量和响应函数。具体做法如表二所示: 控件名称 控件ID 对应变量或函数 发送数据编辑框 IDC_SENDDATA m_SendData 接收数据编辑框 IDC_RECEIVEDATA m_ ReceiveData 发送按钮 IDC_SEND OnSend() 清除按钮 IDC_CLEAR OnClear() 通讯控件 IDC_MSCOMM m_Comm 表2 添加控件表 再打开ClassWizard,选中IDC_MSCOMM,可看到该控件能响应的消息为OnComm,添加改函数并将其改名为OnComm(),在该函数中添加代码,就能实现对串口事件的处理。其中一个需要注意的问题是函数GetInput()返回的是VARIANT型变量,而在编辑框中显示的是CString型变量,因此必需进行转换。先将VARIANT型变量转换为COleSafeArray型变量,再将其转换为BYTE型数组,然后将数组转换为CString型变量。这个转换过程看起来比较复杂,但它可以满足用不同的变量类型来显示接收数据。该程序的主要代码添加在CommTestDlg.cpp中,如下所示: void CCommTestDlg:OnSend() if(!m_Comm.GetPortOpen() m_Comm.SetPortOpen(TRUE);/打开串口 UpdateData(TRUE); m_Comm.SetOutput(COleVariant(m_SendData);/发送数据 void CCommTestDlg:OnClear() m_ReceiveData.Empty();/清除接收对话框中的数据 m_SendData.Empty();/清除发送对话框中的数据 UpdateData(FALSE); void CCommTestDlg:OnComm() VARIANT m_Input1; COleSafeArray m_Input2; long length,i; BYTE data1024; CString str; if(m_Comm.GetCommEvent()=2)/接收缓冲区内有字符 m_Input1=m_Comm.GetInput();/读取缓冲区内的数据 m_Input2=m_Input1;/将VARIANT型变量转换为COleSafeArray型变量 length=m_Input2.GetOneDimSize();/确定数据长度 for(i=0;ilength;i+) m_Input2.GetElement(&i,data+i);/将数据转换为BYTE型数组 for(i=0;ilength;i+)/将数组转换为CString型变量 char a=*(char*)(data+i); str.Format(%c,a); m_ReceiveData+=str; UpdateData(FALSE);/更新编辑框内容 四. 试验程序 现在程序已经写完,可以编译运行。我们可以做一个小实验来验证程序的功能。首先检验你的串口2,看它是否工作正常,可用常见的DOS程序Comdebug检查。确认串口工作正常后,可用串口线将两台微机的串口2相连,同时在两台机子上运行该程序(也可只用一台微机,将其串口
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年火电电力职业技能鉴定考试-变电站考试历年参考题库含答案
- 2024年非煤矿山应知应会知识考试题库及答案
- 春季财经专业试题及答案
- 农业用地保护和使用管理责任书
- 综合专业能力试题及答案
- 产品质量控制及不良品追溯操作指南
- 2025年佛系大学期末试卷及答案
- 企业人力资源需求预测分析工具
- 2025年救援能力测试题目及答案
- 体育健身知识试题及答案
- 人教版初中、高中英语全部单词集合
- 《我爱海洋》 课件2024-2025学年广美版(2012)美术四年级上册
- T-CTSS 3-2024 茶艺职业技能竞赛技术规程
- 跟司马懿学管理
- 2024年下半年湖北省恩施巴东县乡镇事业单位考聘三支一扶人员5人易考易错模拟试题(共500题)试卷后附参考答案
- 《内科学,循环系统》课件
- 2024-2025大学英语考试六级汉译英中英对照
- 材料清单模板
- 2024-2025学年广东省深圳实验学校高中园高一(上)第一次段考数学试卷(含答案)
- 人教版(2019)高中生物必修1《分子与细胞》期末复习知识点考点提纲
- 2《企业会计准则第9号-职工薪酬(2014年修订)》
评论
0/150
提交评论