VC6.0MFC串口通信编写全过程(DOC)

合集下载

串口调试助手VC++6.0程序

串口调试助手VC++6.0程序

串口调试助手源程序

及编程详细过程

作者:龚建伟 2001.6.20

可以任意转载,但必须注明作者和说明来自,不得作为商用

目次:

1.建立项目

2.在项目中插入MSComm控件

3.利用ClassWizard定义CMSComm类控制变量

4.在对话框中添加控件

5.添加串口事件消息处理函数OnComm()

6.打开和设置串口参数

7.发送数据

在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。(也许本文过于详细,高手就不用看)

开始吧:

1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);

2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX 控件出现在列表框中。选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version

VC++编写简单串口上位机程序

VC++编写简单串口上位机程序

VC++编写简单串口上位机程序

ﻫ2010年4月13日10:23:40

ﻫ串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还

没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享一

下,体验一下单片机和PC通信的乐趣。

编译环境:VC++6.0ﻫ操作系统:VMWare虚拟出来的Windows XP

ﻫ程序实现功能:ﻫ1、 PC初始化COM1口,使用n81方式,波特率57600与单片机通信。P

C的COM口编号可以通过如下方式修改:ﻫ

当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。COM1口可用的话,会提示串口初始化完毕。否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。ﻫ

ﻫ2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC

转换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在

窗口里显示。(见文章末尾图)

3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,点击后按钮变

为打开串口,点击可重新打开COM1。

程序的编写:ﻫ1、打开VC++6.0建立基于对话框的MFC应用程序Test,ﻫ

ﻫ2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Cont rol, version 6.0->Insert,按默认值添加,你会发现多了个电话图标,这是增加后

VC6.0MFC串口通信编写全过程

VC6.0MFC串口通信编写全过程

其于MFC的串口调试助手编辑过程

一、新建

打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图:

二、往生成的基本框架中添加控件

1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再

将控件添加到基本框内使用,步骤如下:

菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。

2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内

点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件

基本框架

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控

件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如

下图所示:

选择其中任

意一个作为

输入编辑框

及输出编辑

这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,

用MFC实现串口编程

用MFC实现串口编程

用MFC实现串口编程

(作者:付杰2000年08月04日11:28)

本文详细介绍了串行通信的基本原理,以及在Windows NT、Win98环境下用MFC实现串口(COM)通信的方法:使用ActiveX控件或Win API.并给出用Visual C++6.0编写的相应MFC32位应用程序。关键词:串行通信、VC++6.0、ActiveX控件、Win API、MFC32位应用程序、事件驱动、非阻塞通信、多线程.

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。

实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

一.串行通信的基本原理

串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。

在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。

应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

用MFC实现串口编程

用MFC实现串口编程

用MFC实现串口编程

龚建伟评论:本文既写了在Windows中怎样用VC控件MSComm,又说明了API技术编程方法,在写用MSComm控件时,数据类型的转换说得不是太明白,初次涉猎串口编程的朋友恐怕看了还是编不出来;直接从底层编写的部分值得一读,说得较为详细,但你得先从VC教本上看一看什么是线程。

一.串行通信的基本原理

二.串口信号线的接法

三.16位串口应用程序的简单回顾

四.在MFC下的32位串口应用程序

㈠使用ActiveX控件

㈡使用32位的API 通信函数

本文详细介绍了串行通信的基本原理,以及在Windows NT、Win98环境下用MFC 实现串口(COM)通信的方法:使用ActiveX控件或Win API.并给出用Visual C++6.0编写的相应MFC32位应用程序。关键词:串行通信、VC++6.0、ActiveX 控件、Win API、MFC32位应用程序、事件驱动、非阻塞通信、多线程.

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。

实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

一.串行通信的基本原理

在VS(VC)2010中使用MSComm控件实现串口通信的详细步骤

在VS(VC)2010中使用MSComm控件实现串口通信的详细步骤
void CCommTestDlg::OnCommMscomm1() { // TODO: 在¨²此ä?处ä|添¬¨ª加¨®消?息¡é处ä|理¤¨ª程¨¬序¨°代䨲码? } 数据接收将在此函数中进行。 9. 打开串口及串口设置。 void CCommTestDlg::OnBnClickedButtonOpen() { // TODO: 在此添加控件通知处理程序代码 if(m_mscomm.get_PortOpen()) //如果串口是打开的,则行关闭串口 { m_mscomm.put_PortOpen(FALSE); } m_mscomm.put_CommPort(1); //选择COM1 m_mscomm.put_InBufferSize(1024); //接收缓冲区 m_mscomm.put_OutBufferSize(1024);//发送缓冲区 m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取 m_mscomm.put_InputMode(1);//以二进制方式读写数据 m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm
1. 安装好 VS2010,网上很多人说使用 VC6.0 的 mscomm32.ocx 控件,下载并注册,注册过 程看上去还很复杂。我是使用 VS2010 自带的控件,因此没有这些过程,只需要安装好 VS2010 就行了。 2. 建立 “基于对话框” 的 MFC 工程, 命名为 CommTest, 应用程序类型选择 “基于对话框”

VC串口通讯控件MSComm编程详解

VC串口通讯控件MSComm编程详解

if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
{
m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(1); //选择 COM1
m_MSComm.SetInBufferSize(1024); //接收缓冲区
m_MSComm.SetOutBufferSize(1024);//发送缓冲区
有预料到的错误
通信事件包含了下面的设置:
常量

描述
ComEvSend
1 发送缓冲区中的字符数比 Sthreshold 值低
ComEvReceive 2 接收到了 Rthreshold 个字符。持续产生该事件,直到使
用了 Input 属性删除了接收缓冲区中的数据
ComEvCTS
3 CTS(Clear To Send)线改变
误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。
一、用 MSComm 控件通信
1.串口通信基础知识
一般悦来,计算机都有一个或多个串行端口,它们依次为 com1、Com2、…,
这些串口还提供了外部设备与 pC 进行数据传输和皿信的通道。这些串口在 CPU
和外设之间充当解释器的角色。当字符数据从 CPU 发送给外设时,这些字符数据
MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功 能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的 API函数,而且在VC、VB、Delphi等语言中均可使用。 Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编 程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具 体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven) 方法,一是查询法。

VC60串口通信编程基础及缓冲器电源程序解析(精华)

VC60串口通信编程基础及缓冲器电源程序解析(精华)

VC++6.0串口通信编程基础及缓冲器电源程序解析

目录

一、概述 (3)

二、开发平台 (3)

2.1硬件平台 (3)

2.2软件平台 (3)

2.3源码 (3)

三、用MFC创建一个空对话框程序 (4)

四、关联变量介绍及实例 (9)

五、串口通信编程的简单实现 (13)

5.1界面及相关控件创建 (13)

5.2数据接收和发送编程 (19)

5.3程序测试 (21)

六、缓冲器电源上位机程序简析 (23)

6.1界面初始化编程 (24)

6.2串口编程(采用C SERIAL P ORT类编写) (25)

6.3上下位机通讯帧格式 (28)

6.4控制按钮编程 (29)

一、概述

本文介绍了一种在VC++6.0中实现简单串口通信编程的方案,并在此基础上对实验室的旧版缓冲器电源上位机程序进行分析。

阅读本文之前最好已经了解C++及MFC的一些基础知识:类与对象的关系及各自定义、构造函数与析构函数、MFC常用类的分类、MFC消息定义、消息映射机制等。

C++编程已经有很多年了,而且不是纯粹的面向对象编程,有很多不完美的地方。推荐使用C#编程,在这方面实验室已经有很好的基础。本文简单介绍面向对向编程的一些初级知识。

二、开发平台

2.1 硬件平台

2.2 软件平台

2.3 源码

三、用MFC创建一个空对话框程序

步骤一. 打开VC++6.0软件,在菜单栏选择【文件】—【新建】

步骤二. 在弹出的【新建】对话框中单击【工程】选项卡,在该列表框列出的应

用程序类型中选择【MFC AppWizard(exe)】选项

接着输入工程名称并选择保存路径。

vc编程实现与usb设备通信.doc

vc编程实现与usb设备通信.doc

第1章绪论

1.1USB简介

USB是由世界著名计算机和通信公司等共同推出的新一代接口标准,全称为Universal Serial Bus(通用串行总线)[1],是一种快速、灵活的总线接口。它是为了解决日益增加的PC外设与有限的主板插槽和端口之间的矛盾而制定的一种串行通信标准。USB应用十分广泛,并具有下述优点:

1、适用于多种外设,使它不需要为不同的外设准备不同的接口和协议;

2、Windows能自动检测到USB设备的热插拔,并自动配置;

3、PC机上的接口线非常紧缺,而USB设备并不需要用户设置端口故无论从用户使用方便性,或从对资源的占用方面看,USB都很优秀;

4、当接入一个USB设备时,全速USB接口可达12Mbit/s。考虑到状态、控制和出错信息,最大理论速度仍可达到9.6Mbit/s,这是其他串行接口协议所不能比拟的,且USB也支持1.5Mbit/s的低速传输。

5、USB接口芯片价格低廉,这也大大促进USB设备的开发与应用。

在USB出现之前,计算机典型接口有并行口、串行口、鼠标口、键盘口、显示器口,及各种卡式接口等,与这些接口对应的有各种不同的电缆,在传输速度方面,这些接口都存在速度偏低的问题。在技术方面,这种设计容易产生I/O冲突,中断不够用,以及对于每一种新的外设都必须设计新的接口卡等缺点。当今的计算机外部设备,都在追求高速度和高通用性。USB接口适应了这种要求,并以其速度快、使用方便、成本低等优点,迅速得到了众多PC厂商和半导体厂商的大力支持,外设向USB过度成为必然趋势。

1.2USB驱动程序的意义

基于serialport类串口通信的具体步骤(vc++)

基于serialport类串口通信的具体步骤(vc++)
{
ChuankouDX.StartMonitoring();
m_bSerialPortOpened=TRUE;
}
else
{
AfxMessageBox("没有发现此串口或被占用");
m_bSerialPortOpened=FALSE;
}}
void CExp2Dlg::OnButtonClose()
{
// TODO: Add your control notification handler code here
BEGIN_MESSAGE_MAP(CExp2Dlg, CDialog)
//{{AFX_MSG_MAP(CExp2Dlg)
…………
ON_MESSAGE(WM_COMM_RXCHAR, OnComm)//只需添加这一行
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2.3
并在其中完成对接收到的字符的处理,将接收到的字符显示在接收编辑框Leabharlann Baidu:
if(!m_bSerialPortOpened)
return; //检查串口是否打开
char buf[100];
memset(&buf, 0, sizeof(buf));
GetDlgItemText(IDC_send, buf, sizeof(buf));

基于C++串口通信设计与实现-可编辑

基于C++串口通信设计与实现-可编辑

课程论文首页

基于VC++串口通信的设计与实现

中文摘要:通过常用的串口通信进行分析,着重讨论了VC + + 6. 0环境下利用MSComm控件实现串口通信的方法,研究了利用MSComm控件实现串口通信的关键技术问题,给出了MSComm控件在VC + + 6. 0串口通信中的应用。

关键词:VC++ 串口通信对话框

1.设计背景

随着当今信息技术的快速发展,通信已成为信息技术中的关键问题。尤其在控制领域,以何种方式实现计算机与外围设备间既简单又可靠的通信,就显得特别重要。由于串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一,所以针对计算机与外部设备通信的上位机关于串口通信的开发,在项目开发过程中具有重要地位。

2.设计原理

2.1串口通信的基本概念

终端与其他设备(例如,其他终端、计算机和外部设备)通过数据传输进行通信。数据传输可以通过两种方式进行,即并行通信和串行通信。

●并行通信

在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。如果一组数据的各数据位在多条线上同时被传送,这种传输方式称为并行通信

●串行通信

串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制的0、1为最小单位逐位进行传输

●二者比较:

串行通信的速度慢,但使用的传输设备成本低,可利用现有的通信手段和通信设备,适合于计算机的远程通信;并行通信的速度快,但使用的传输设备成本高,适合于近距离的数据传送。

用MFC的MSComm控件编写串口通信助手1.0beta

用MFC的MSComm控件编写串口通信助手1.0beta
//单击发送按钮的操作 UpdateData(true); //读取编辑框内容 m_cComm.SetOutput(COleVariant(m_strSendData));//发送数据 m_strSendData.Empty(); //发送后清空输入框 UpdateData(false); //更新编辑框内容 //对发送的数据进行强制类型转换,由 CString 字符串数据转换为 VARIANT 类型。 //--------------------------------------------------------------------------//--------------------------------------------------------------------------}
safearray_inp.GetElement(&k,rxdata+k); for(k=0;k<len;k++) //将数组转换为CString型变量 {
char bt=*(char*)(rxdata+k); //字符型 strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放 m_strRecvData+=strtemp; //加入接收编辑框对应字符串 } } CString temp=("\r\n"); //显示完成后要自动换行 m_strRecvData+=temp; UpdateData(FALSE); //更新编辑框内容 //--------------------------------------------------------------------------//--------------------------------------------------------------------------}

图解VC++6.0中使用mscomm串口控件

图解VC++6.0中使用mscomm串口控件

免费的

图析VC++6.0中使用mscomm串口控件

东南大学计算机学院杨全胜

按下列图所示建立一个基于对话框的MFC程序

这样就得到了下图所示的界面:

右键点击sport的对话框界面,在弹出的菜单中选择属性,打开下面的属性对话框:

建立下图所示的对话框控件:

各控件属性如下:

下面再做第二个对话框——配置对话框

右键点击下图左边的Dialog,在弹出的菜单中选择Insert Dialog

这样就得到下图

鼠标右键点击上图右边的对话框,在弹出的菜单中选择属性,并建立下列属性:

建立下图的各种控件:

其中“串口号“、”波特率“、“数据位”、“停止位”、“奇偶位”字样都是static Text控件,如“串口号:”文字的控件属性为:

这些文字的下拉框都是Combo Box控件,他们的属性为:

下面右键点击工具栏的空白处,在打开的菜单中选择“定制窗口…”,在下面的定制对话框中查看分类里将下面的两个按钮移动到某个菜难栏中,其中左上的那个按钮是”类生成“按钮。

设置好后,左键点击刚才的“串口配置”对话框,然后再点击“类生成”按钮。出现下面的对话框

点击OK后出现下面对话框,按下面图填好

点击Change按钮,按下图来设置Change Files对话框

按OK后得到下面的对话框

这样得到新的类如下图:

双击下图IDC_COMN控件,按下图设置其成员变量:

得到下图的结果

使用上述方法建立下列控件的成员函数

下面我们来将mscomm控件加进项目:

在sportDlg.h中加入MSComm控件:

#include "mscomm.h"

protected:

VC++6.0实现串口

VC++6.0实现串口
if (hThread==INVALID_HANDLE_VALUE)
{
MessageBox("线程创建失败.","提示",64);
return;
}
IsFun = True;
}
(6)为了实现API函数自定义消息处理,用于接收消息,在pc_pc_apiDlg.cpp中增加成员函数,具体代码如下:
//自定义消息处理函数,用于接收消息
if(WriteFile(hCom,m_strSend,m_strSend.GetLength(),&factdata,&wOverLaped))//开始发送数据
{
IsStop = True;
}
else
{
res = WaitForSingleObject(wOverLaped.hEvent,5000); //延时5秒,等待数据发送
表6-3成员变量
控件ID号
变量类型
变量名
IDC_receive
CString
m_strReceive
IDC_send
CString
m_strSend
(4)切换到Class Wizard的Message Maps标签页或在对话框中双击每一个按钮,为“发送”、“退出”按钮分别添加ON_BN_CLICKED消息响应函数OnOK(),OnCancel()。

基于VC++ 6.0的串口通信实验报告

基于VC++ 6.0的串口通信实验报告

网络与通信实验报告

题目:串口通行实验班级:0309103

学号:*********

姓名:***

指导老师:付大丰

日期:2012-10-21

一、实验要求

把两台计算机的串口通过串口线连在一起,通过串口实现两台计算机通讯。可以利用高级语言、C语言编程实现,要求程序界面友好,有发送和接收功能,其接收和发送内容可在屏幕上显示。

二、实验原理

串口通讯把数据的字节分解成单个的二进制比特流依次传输,其结构简单,

连接线少,应用非常广泛。实现串口通信的方法很多。如:利用标准通信函数实现串口通信、利用API实现串口通信和利用ActiveX控件实现。

本文主要采用ActiveX控件Microsoft CommunicationsControl(MSComm)编程,Windows平台先进的ActiveX技术使得对串口编程不再需要处理烦琐的细节。利用已有的AxtiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务。

以下对ActiveX控件属性进行简单介绍,在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_comm),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:

CommPort:设置并回通讯端口号,缺省为COMl。

Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。

Input:从接收缓冲区返回和删除字符。

Output:向发送缓冲区写一个字符串。

基于VC++6.0 Socket编程操作实例

基于VC++6.0 Socket编程操作实例

VC++6.0网络编程Socket编程

作为一个初学者,深感Socket编程入门的困难,但当把一些问题弄懂之后,回过头来看以前遇到的一些问题,才发现Socket编程其实并没有那么复杂。接下来我就把我遇到的一些困难讲述下,并补上解决的办法。

首先我们要想实现一个简单的点对点网络通信,就应该有一个客户和一个服务器

我们先来做客户端。先按照如下图所示建立好客户对话框模块:

首先创建一个基于MFC AppWizard[EXE] 工程,工程名为Socket__002 (这里是以我的工程名为准,你们也可以自己命名工程。)点击确定只收选择基本对话框,如图:

点击下一步,在Windows Sockets[W]处钩上之后就点击【完成】。

建立如图所示的客户端对话框:

控件属性:

说明:IDC_EDIT1 端口号编辑框,IDC_EDIT3 发送文本框,IDC_IPADDRESS1 IPd 地址框,IDC_LIST1 列表框。

现在模块已经建好了,接下来就是写代码了,不过写代码之前我们要先理清思路。

客户端与服务器是怎样来实现通信的呢,其实就是由数据的发送者客户端将要发送的信息写入一个套接字,在通过中间环节传输到接收端服务器的套接字中,就可以由接收端的应用程序将套接字从中取出。因此,两个应用程序间的数据传输要通过套接字来完成,至于两个套接字间是怎么传输的我们就不要管了,我们只要把信息装入套接字中就可以了。

作为一个客户端,应该具备以下功能:

1,、向指定地址的服务器发送连接请求;

2、向已经连接成功的服务器发送信息;

3、主动断开与服务器的连接;

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

其于MFC 的串口调试助手编辑过程

一、新建

打开

VC6.0 文件 新建 工程 MFC AppWiard(exe)

位置(选择保存工程位置) 工程名称(输入工程名XXXX )

确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图:

二、往生成的基本框架中添加控件

1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:

菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩

形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:

这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。

4、对以上四个控件编程步骤如下:

a 、右击串口通信控件 建立类向导

Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定

b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。

C、为以上两个编辑框添加变量,与串口通信控件一样添加,为IDC_EDIT_RXDATA添加CString型变量m_strRXData ;为IDC_EDIT_TXDATA添加CString型变量m_strTXData。说明:m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。

D、添加串口事件消息处理函数OnComm() 打开ClassWizard->Message Maps,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。

这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。在函数中加入如下代码:

代码段1:

void CScommTestDlg::OnComm()

{

// TODO: Add your control notification handler code here

V ARIANT variant_inp;//定义一个V ARIANT类对象

COleSafeArray safearray_inp;//定义一个COleSafeArray对象

LONG len,k;

BYTE rxdata[2048];//设置BYTE数组AN 8—intterthat is not signed.

CString strtemp;

if (m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有数据

{

////以下你可以根据自己的通信协议加入处理代码

variant_inp=m_ctrlComm.GetInput();//读缓冲区

safearray_inp=variant_inp;//V ARIANT型变量转换为ColeSafeArray型变量

len=safearray_inp.GetOneDimSize();

for(k=0;k

{

safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

}

将数组转换为Cstring型变量

BYTE bt=*(char*)(rxdata+k);

如果是HEX显示则转为16进制strtemp.Format("%02x ",bt); //将16进制数送入临时变量strtemp存放else

strtemp.Format("%c",bt);//将字符送入临时变量strtemp 存放 m_strRXData+=strtemp;//加入接收编辑框对应字符串 } }

UpdateData(FALSE);//更新编辑框内容(主要是接收编辑框中的) }

到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。没错吧?那么做下一步:

E 、打开串口和设置串口参数 你可以在你需要的时候打开串口,例如在程序中做一个开始按钮,在该按钮的处理函数中打开串口。现在我们在主对话框的CSCommTestDlg::OnInitDialog()打开串口,加入如下代码:

代码段2:

BOOL CSCommTestDlg::OnInitDialog() {

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING , IDM_ABOUTBOX, strAboutMenu); } }

// Set the icon for this dialog.

//

SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE);

// m_ComboBox.SetCurSel(0);//打开软件时串口选择框默认显示COM1

m_BaudRate_M.SetCurSel(0);//打开软件时波特率选择框默认显示9600 m_Date_Select_M.SetCurSel(0);//打开软件时数据位选择框默认显示8 // m_StopBit_M.SetCurSel(0);//打开软件时停止位选择框默认显示1

// m_ParityCheck_M.SetCurSel(0);//打开软件时奇偶校验选择框默认显示无校验N

相关文档
最新文档