在VC++6.0中利用串行通信控件.doc_第1页
在VC++6.0中利用串行通信控件.doc_第2页
在VC++6.0中利用串行通信控件.doc_第3页
在VC++6.0中利用串行通信控件.doc_第4页
全文预览已结束

下载本文档

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

文档简介

在VC6.0中利用串行通信控件崔杰 梁计春 王国军 目前,在用计算机进行数据传输时,常用的是串行通信方式。在Visual C的编程中,既可以用Windows API函数进行串行通信编程,也可以利用环境自带的控件进行编程。利用 API函数编写实际应用程序时,往往要考虑多线程的问题,这样编出来的程序不但十分庞大,而且结构比较复杂,继承性差,维护困难。但是使用串行通信控件就相对简单一些,而且功能强大,性能安全可靠。 本文以Microsoft Communications Control(version 6.0)为例,介绍串行通信控件在VC中的使用方法。 嵌入通信控件 使用串行通信控件前,首先要进行系统注册。 1、在建立新工程时,将ActiveX Controls复选框选中,表示本程序支持ActiveX 控件。 2、单击Project菜单,从中选择Add to Project,在弹出的对话框中单击Components and Controls选项,然后在弹出的对话框中再单击Registered ActiveX Controls选项。 3、在列表中选择Microsoft Communications Control (version6.0),形状为带有红色底座的黄色电话机。单击Insert按钮,确认后,会出现一个Confirm Classes对话框,其中列出了该控件的类名(CMSComm)、头文件名(MSComm.h)、执行文件名(MSComm.cpp)。关闭此对话框,在程序主界面的控件列表中,可以看到该通信控件已被加入,拖动该控件就可以将其放入程序中。 编写通信程序 通信控件的工作原理类似于中断方式,当有通信事件发生时,如发送、接收数据,就会触发OnComm事件。在OnComm事件的处理函数中调用 GetCommEvent()函数,由该函数的返回值即可确定是什么类型的事件,并由此做出相应的处理。 下面以接收处理串口的GPS信号为例,说明该控件在编程中的具体应用。 利用MFC生成一个基于对话框的应用程序,对话框中的控件及其相应的消息与响应函数如下表所示。 控件名称控件 ID对应变量通信控件IDC_MSCOMMm_Comm接收按钮IDC_BUTTON_RECEIVEGPSDATAOnbuttonStartreceivegps()GPS信号显示IDC_EDIT_COMDATAm_comdata停止接收按钮IDC_BUTTON_ENDRECEIVEGPSDATAOnbuttonEndreceivegps()设置控件各部分属性: CommPort:1; DTREnable:1; InBufferSize:4096;EOFEnable:TRUE; Handshaking:nohandshaking;InputMode:1Binary;NullDiscard:False; Rthreshold:250; RTSEnable:False;Settings:9600,n,8,1; Sthreshold:0。部分程序如下: /开始接收GPS信号void CGpsDlg:OnButtonStartreceivegps() /判断串口的状态,如果是关闭状态,则打开if(!m_Comm.GetPortOpen() ) /打开串口m_Comm.SetPortOpen(TRUE); UpdateData(TRUE);/停止接收GPS的信号void CGpsDlg:OnButtonEndreceivegps(); /判断串口的状态,如果是打开状态,则关闭if( m_Comm.GetPortOpen() ) m_Comm.SetPortOpen(FALSE); UpdateData(FALSE);/相应的OnComm事件处理void CGpsDlg:OnComm() m_comdata.Empty();VARIANT m_input1;COleSafeArray m_input2;LONG length,i;BYTE data1024;CString str;/接收缓冲区内字符if(m_Comm.GetCommEvent()= 2) m_comdata.Empty();/读取缓冲区内的数据m_input1=m_Comm.GetInput(); /将VARIANT型变量转换为ColeSafeArray型变量m_input2=m_input1; /确定数据长度length=m_input2.GetOneDimSize(); /将数据转换为BYTE型数组for(i=0;i length;i)m_input2.GetElement(i,datai); /将数组转换为CString型变量for(i=0;i length;i) char a= (char )(datai);str.Format(“c,a);m_comdata = str; /在上面的程序中,先将VARIANT型变量转换为ColeSafeArray型变量,再将其转换为BYTE型数组,然后将数组转换为CString型变量,以满足不同的变量类型显示数据的需要。/提取GPS信号CString m_zjz; m_zjz=m_comdata; /寻找GPS信号的头标志int s; s=m_zjz.Find(“GPRMC,); CString m_gps; /NUM为所提取GPS信号的长度m_gps=m_zjz.Mid(s,NUM); int x; x=m_gps.GetLength();/信号长度不符合要求,则拒绝接收if (x != NUM) m_gps.Empty();/寻找所需要的GPS信号的头标志int y; y=m_gps.Find(“GPRMC,); if (y != 0)m_gps.Empty();/mgpsdata是已声明的类成员变量m_gpsdata=m_g

温馨提示

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

评论

0/150

提交评论