MSComm控件实现串口通信的方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MSComm控件实现串口通信的方法

碧峰晨曦

摘要:详细介绍了MSComm控件,并在VC++6.0中利用MSComm控件开发了基于对话框的串口通信实例。

关键词:串口通信,MSComm,VC++

图书编号:TP311

0.引言

串口通信具有实现简单、价格低廉、通信稳定、数据传输可靠等优点,因而广泛应用于各种工业控制系统中。MSComm控件是微软公司开发的专门用于串口通信的控件。该控件为开发串口通信程序提供了更加快捷、容易的方法。在VC++中,对控件属性的操作都是通过特定的函数来实现的,这些函数都是CMSComm类的成员函数。当声明了一个CMSComm类对象后,就可以通过如下格式调用成员函数来访问控件属性了:

<对象名>.<成员函数名>(<参数表>)或<对象名>-><成员函数名>(<参数表>)

1.MSComm控件属性及事件

1.1 MSComm控件属性

MSComm控件有许多属性,最主要的几个属性如下:

1)CommPort:设置该属性值可以获取当前程序使用的串口编号。

2)Setting:设置或者获取串行通信的通信参数(包括波特率、奇偶校验类型、数据位数及停止位数等)。

3)PortOpen:设置该属性可以打开或关闭串口。

4)Input:从接收缓冲区中返回并删除数据。

5)Output:向串口通信输出缓冲区写入数据。

6)CommEvent:当MSComm控件在运行时发生错误或产生各种事件时,向程序返回错误或事件类型。

1.2 MSComm控件的事件

该控件只有一个事件,即OnComm事件。当CommEvent属性值发生变化时就会触发OnComm事件。根据CommEvent属性值来分别执行各种情况下的处理程序。

2 MSComm控件实例应用

2.1插入MSComm控件

在VC++6.0中新建一个基于对话框的工程,命名为Test。默认情况下,VC++6.0中不会包含MSComm控件,所以需要我们手动将MSComm控件加载到VC++6.0中。

(1)单击主菜单project的子菜单Add To project的Components and Controls选项;

(2)在弹出的“Components and Controls Gallery”对话框中选择Registered ActiveX Controls文件夹中的“Microsoft Communications Control,version6.0”选项,如图l:

图1.插入MSComm控件

单击其中的“Insert’’按钮,MSComm控件就被增加到工程中了。与此同时,类CMSComm的相关文件mscomm.h和mscomm.cpp也一并被加人Project的Header Files和Source Files中。

为了使用MSComm控件,将MSComm控件拖入对话框。在使用控件编程前还需创建该控件的实例,使用使用ClassWizard添加对话框类CTestDlg的WM_CREATE消息响应函数OnCreate(LPCREATESTRUCT lpCreateStruct) ,在该函数内创建控件实例:

int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

……

// TODO: Add your specialized creation code here

DWORD style=WS_VISIBLE|WS_CHILD;

if (!myComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1))

{

AfxMessageBox("创建MSComm控件失败!");

return -1;

}

return 0;

}

2.2串口初始化及打开

初始化主要完成串口的通信参数设置,设置好参数后就可以打开串口了。

在对话框的头文件Test.h中最顶行,加入引用控件类的代码:

#include "mscomm.h"

然后,在对话框类的定义代码中加入CMSComm类变量的声明:

CMSComm mycomm;

在CTestDlg::OnInitDialog()函数中添加串口初始化代码:

BOOL CTestDlg::OnInitDialog()

{

……

myComm.SetCommPort(2); //选择COM2

myComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位

myComm.SetInBufferSize(2048); //指定接收缓冲区大小

myComm.SetInBufferCount(0); //清空接收缓冲区

myComm.SetInputMode(1); //设置数据获取方式

myComm.SetInputLen(0); //设置每次读取长度

myComm.SetRThreshold(1); //设置接收OnComm事件门限值

myComm.SetOutBufferSize(1024); //设置发送缓冲区大小

myComm.SetOutBufferCount(0); //清空发送缓冲区

myComm.SetSThreshold(1); //设置发送OnComm事件门限

myComm.SetPortOpen(1); //打开串口

return TRUE; // return TRUE unless you set the focus to a control

}

2.3 OnComm事件处理

MSComm控件一般用OnComm事件来接收数据。使用ClassWizard加MSComm控件的OnComm消息响应函数OnOnCommMscomm(),该函数的作用为接收数据,其代码如下:

void CTestDlg::OnOnCommMscomm()

{

// TODO: Add your control notification handler code here

V ARIANT input1; //定义V ARIANT类型变量

BYTE rxdata[2048]; //定义存放二进制数据的数组

long len1,k;

相关文档
最新文档