APP下载

基于VC串口通信的实现

2007-07-05王立萍

智能计算机与应用 2007年3期
关键词:串口控件对话框

王立萍

摘要:介绍在VC++6.0开发平台上。运用MSComm控件实现串口通信.通过实例进行具体详细说明。

关键词:串口通信MSComm

中图分类号TP368.1文献标识码B文章编号:1002-2422(2007)03-0046-02

1建立应用工程

打开Visual C++,建立一个基于对话框的MFC应用程序,在对话框中添加控件,用ClassWizard为相应控件设置属性及添加变量如表l所示,其中MSComm的添加见第二步。

2在当前工程中添加MSComm控件

单击菜单Add To Project->Components and Controls,在打开的对话框中选择“Begistered AetiveX Controls”,再双击此项出现控件选择对话框“Component and Controls Gallerf”,在该框中选择“Microsoft Communications Control,version 6.O”控件,再单击“Insert”按钮,提示“Insert this com-ponent?”,确认后,可以看到加入CMSComm类的Confirm Class对话框,提示加入到当前工程中的CMSComm类头文件为MSComm.h,实现文件为MSComm.epp。单击“OK”按钮关闭Confirm Class对话框,再单击“Close”关闭Component and Controls Gallery对话框,则在VC集成环境中,当前工程的Class View中就出现了CMSComm类,同时在对话框资源控件中出现了一个电话机形状的控件,就是MSComm控件。

利用这种添加控件的方法,对之后的串口消息事件处理会提供很大的方便,ClassWizard会自动在当前程序工程中进行消息类的映射。

3初始化串口

通过以上操作,ClassWizard自动在SCommTestDlg.h中加入了#include“mscomm.h”语句。

//{AFX_INCLUDES()

#include“mscomm.h”

//}lAFX_INCLUDES

下面,在CSCommTestDlg::OnlnitDialog()函数中写入对串口的初始化语句,串口初始化语句由IDC_MSCOMMI的CMSComm控制变量m_etrlComm来设置串口控件属性。代码如下:

m_ctdlComm.SetCommPort(1)

m_ctdlComm.SetInputMode(1)

m_ctdlComm.SetlnBufferSize(1024)

m_ctdlComm.SetOutBufferSize(512)

m_ctrlComm.SetSettings(“9000,n,8,1”)

if(lm_ctrlComm.GetPortOpen())

m_culComm.SetPortOpen(TRUE)

m_ctdlComm.SetRThreshold(1)

m_ctrlComm.SetInputLen(0)

m_ctrlComm.Getlnput()

4从串口接收数据

MSComm控件一般用事件驱动方式从串口接收数据,也就是消息处理,当串口有事件发生时,程序调用消息函数来处理数据。打开ClassWizard→Message Maps,在ClassName中选择类CcomDlg,再在Object IDs中选择IDC_MSCOMMl,然后在Message中双击消息OnComm(或单击“Add Function”),在弹出的对话框中将函数名改为OnComm,单击“OK”。就加入了串口事件的消息处理函数。在coreDlg.cpp文件中编写OnComm()中的代码,主要任务是从串口接收数据并显示在接收编辑框中。

void CComDlg:OnComm()

{VARIANT varlant_inp;

ColeSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048]:

CStrlng strtemp;

if(m_ctrlComm.GetCommEvent()==2)

{

varlant_inp=m ctrlComm.GetInput():

safearray_in=variant_inp;

len=safeary_inp.GetOneDimSize():

for(k=0;k<len;k++)

safearray_inp.GetElement(&k,rxdata+k):

for(k=O;k<len;k++)

{

BYTE bl=*(char*)(rxdata+k):

strtemp.Format(“%c”,bt);

m_strEditR.XData+=strtemp;

}

}

UpdateData(FALSE);

}

5

发送数据

先为发送按钮添加一个单击消息,即BN_CLICKED处理函数,打开ClassWizard→Message Maps,选择类CComDlg,选中IDC_BUTrON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend函数,在函数中添加如下代码:

void CComDlg::OnButtonManualsend()

{ updateData(TRUE);

m_ctrlComm.SetOutput(COleVariant(m_strEditTXData));

}

6程序测试及结果

需要两个串口来测试程序,这两个串口可以在一台计算机上,也可以分别在两台计算机上,可自制一个三线串口线(发送、接收、地)将其连接。可通过串口调试助手。

7结束语

通过实例介绍了基于VC控件MSComm的串口通信方法,MSComm控件比较简单,一般只是用于较简单的系统,串口通信还可以使用Windows API函数和CSerial类,可以根据实际情况选择合适的方法。

猜你喜欢

串口控件对话框
使用“填表单”微信小程序 统计信息很方便
基于.net的用户定义验证控件的应用分析
51单片机与PC机串口通信的仿真与实现
Bootlace Worms’Secret etc.
What Is Beauty?
MCS—51单片机中的多串口通讯技术的应用
浅谈VB的通用对话框《CommonDialog》控件的使用
全国计算机等级考试机房准备工作探讨
微机串口的测试诊断
你都不理我等6则