网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
在VC++6.0中利用串行通信控件
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

北京装甲兵工程学院

崔 杰 梁计春 王国军

  目前,在用计算机进行数据传输时,常用的是串行通信方式。在 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_MSCOMM m_Comm
接收按钮 IDC_BUTTON_RECEIVEGPSDATA OnbuttonStartreceivegps()
GPS信号显示 IDC_EDIT_COMDATA m_comdata
停止接收按钮 IDC_BUTTON_ENDRECEIVEGPSDATA OnbuttonEndreceivegps()

设置控件各部分属性:

CommPort: 1;

DTREnable: 1;

InBufferSize: 4096;

EOFEnable: TRUE;

Handshaking: nohandshaking;

InputMode: 1- Binary;

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 data[1024];

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,data+ i);

//将数组转换为 CString型变量

for(i=0;i< length;i++ ) {

char a=* (char* )(data+ i);

str.Format("% c",a);

m_comdata+ = str;

}

/*在上面的程序中,先将

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号