此文章以visual C++数据採集与串口通信測控应用实战为參考教程

此文章适合VC++串口通信入门

一、页面布局及加入控件

1, 安装好vs2010如图

2, 新建一个基于VC++的MFC项目comm

注意:点击ok,然后next,这时候要将application type改成dialog base。接着next到最后一个对话框是将generated dasses改成CcommDlg,然后finish

4, 将新生成的项目的对话框默认dialog edit删去,如图

5,在对话框中加入两个static text,两个edit text,两个button。

成品图例如以下

6,加入comm控件

1)在解决方式窗体右击新建的解决方式,点击add->class

2)选择MFC class from activex control如图

点击add,available activex controls选择microsoft communication controls versions 6.0,然后点确定即可

这时候对话框会出现一个电话图标,可能有一半白边去不了。这时候右击电话图标点击edit control就能够去掉了。

7,同一时候定义各个控件的类型、ID及相关属性

注:此项目仅仅加入了发送和退出程序button

这时候得到了完整的串口通信对话框:

8, 加入成员变量。右击对话框,点击class wizard,点击member variables标签。选中须要加入的id,双击就可以加入

依次为下表中的ID加入变量

期间,IDC_MSCOMM1控件在标签中没有,则在生成的对话框中右击comm控件点击add variables就可以

9, 为mscomm,两个button加入响应事件,切换到class wizard的virtual function双击控件ID,加入响应事件,默认就可以,也可改为自己想要的标题

为comm控件加入响应事件可能双击不了(我就是遇到这样的问题)。这时候仅仅要右击comm控件图标。点击add event handler就可以。如图

这时候基本界面已经布置好了。開始加入代码了。

二、代码加入

1、找到解决方式(solution explorer)的sources files点开,双击当中的mscommDlg.cpp我们的全部代码将加入到这个源文件里

2、进行串口初始化及其它串口设置

将下面代码加入到oninitialdialog函数

m_ctrlcomm.put_CommPort(3);//选择com3口

m_ctrlcomm.put_InputMode(1);//输入方式为二进制方式

m_ctrlcomm.put_InBufferSize(1024);//输入缓冲区大小为1024byte

m_ctrlcomm.put_OutBufferSize(512);//输出缓冲区大小为512byte

m_ctrlcomm.put_Settings(_T("9600,n,8,1"));//设置串口參数:9600波特率。无奇偶校验。8个数据位,1个停止位

if(!m_ctrlcomm.get_PortOpen())

    m_ctrlcomm.put_PortOpen(1);//打开串口

m_ctrlcomm.put_RThreshold(1);//每当串口接收缓冲区有多余或等于1个字符时将引发一个接收数据的oncomm事件

m_ctrlcomm.put_InputLen(0);//设置当前接收区数据长度为0

m_ctrlcomm.get_Input();//预读缓冲区以清空残留数据



m_ctrlcomm.put_CommPort(3);//选择com3口

m_ctrlcomm.put_InputMode(1);//输入方式为二进制方式

m_ctrlcomm.put_InBufferSize(1024);//输入缓冲区大小为1024byte

m_ctrlcomm.put_OutBufferSize(512);//输出缓冲区大小为512byte

m_ctrlcomm.put_Settings(_T("9600,n,8,1"));//设置串口參数:9600波特率,无奇偶校验,8个数据位,1个停止位

if(!m_ctrlcomm.get_PortOpen())

    m_ctrlcomm.put_PortOpen(1);//打开串口

m_ctrlcomm.put_RThreshold(1);//每当串口接收缓冲区有多余或等于1个字符时将引发一个接收数据的oncomm事件

m_ctrlcomm.put_InputLen(0);//设置当前接收区数据长度为0

m_ctrlcomm.get_Input();//预读缓冲区以清空残留数据

2、实现发送button,退出button对应的响应函数

void CmscommDlg::OnBnClickedOk()

{

// TODO: Add your control notification handler code here

CDialogEx::OnOK();

UpdateData(1);//读取编辑框内容

m_ctrlcomm.put_Output(COleVariant(m_strsend));//发送数据

}









void CmscommDlg::OnBnClickedExit()

{

// TODO: Add your control notification handler code here

m_ctrlcomm.put_PortOpen(0);//关闭串口

CDialog::OnCancel();//退出程序

}

3、实现MSComm控件对应的响应函数OnOnCommMsComm1()

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048];//设置byte数组

CString strtemp;

if(m_ctrlcomm.get_CommEvent()==2)//事件2表示接受缓冲区有字符

{

variant_inp=m_ctrlcomm.get_Input();//读缓冲区

safearray_inp=variant_inp;//variant数据转换成colesafearray型变量

len=safearray_inp.GetOneDimSize();//得到有效数据长度

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

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

for(k=0;k<len;k++){//将数组转换成CString型变量

BYTE bt=*(char *)(rxdata+k);//字符型

strtemp.Format((char) bt);//将字符送入暂时变量strtemp存放

m_strreceive+=strtemp;//增加接收编辑框对应字符串

}

}

UpdateData(0);//更新编辑框内容

4、编译执行程序

在调试执行时。必须两台机子同一时候执行此程序。而且都要开启同一个串口号

(转载)用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信的更多相关文章

  1. 基于VC的MFC界面开发

    教你熟悉VC6.0创建一个可视化软件的过程 UpdateData(TRUE);//将输入数据赋给文本框变量. UpdateData(FALSE);//将内容显示在文本框中 AfxMessageBox( ...

  2. angular开发控制器之间的通信

    一.指令与控制器之间通信,无非是以下几种方法: 基于scope继承的方式 基于event传播的方式 service的方式(单例模式) 二.基于scope继承的方式: 最简单的让控制器之间进行通信的方法 ...

  3. 如何在VS2010的VC++ 基于对话框的MFC程序中添加菜单

    方法1:亲测 成功  转载自https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/48338f6b-e5d9-4c0c-8b17-05ca3ef ...

  4. NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

    NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...

  5. 基于VC++ Win32+CUDA+OpenGL组合与VC++ MFC SDI+CUDA+OpenGL组合两种方案的遥感影像显示:获得的重要结论!

    1.基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 //设置方式1 glutInitDisplayMode (G ...

  6. vs2010开发activex(MFC)控件/ie插件(一)

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/50782904  vs2010开发activex(MFC)控件:      第一步:生成ac ...

  7. VC++、MFC、COM和ATL的区别

    今天看到的,感觉不错.转载了 一.什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是W ...

  8. 基于VC++的网络扫描器设计与实现

    本文正文其实是自己的毕业论文,现在搬上来有两个原因. 一是之前大学的文档都放在百度网盘上,大概去年的时候百度网盘改版搞得不太稳定,文件夹移动次数一多里边就会有一些文件丢失了,也没有很在意.但前几天看申 ...

  9. VC++、MFC最好的开源项目

    介绍:介绍一下用VC++/MFC写的最好的开源项目. Sourceforge.net中有许多高质量的VC++开源项目,我列举了一些可以作为VC++程序员的参考. 正文: VC++.MFC中最好的开源项 ...

随机推荐

  1. 李洪强iOS之集成极光推送一iOS SDK概述

    李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...

  2. nodejs字符串操作

    nodejs的字符串操作需要引入querystring对象,querystring对象的方法有: 1:querystring.stringify(“对象”,“分隔符”,“分配符”),用来将一个json ...

  3. Gson json解析工具

    json 解析工具 ,谷歌出品 对象转换字符串 HashMap<String,String> hashMap = new HashMap<String, String>();  ...

  4. PHP的HashTable实现

    转载自: http://it.taocms.org/07/1145.htm 数据结构: HashTable数据结构的描述在Zend/zend_hash.h文件中.首先,HashTable中的每一个元素 ...

  5. 【Android】使用Pull生成/解析XML文件

    一.生成XML文件,即是将对象集合转为XML文件存储. 对象集合 –> XML(序列化) Android中使用android.util.Xml类对其进行了描述,提供相应的API. 步骤大致如下: ...

  6. STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)

    Ⅰ.概述 本文讲述关于STM32功能比较强大的ADC模块.ADC(Analog to Digital Converter)也就是模拟量转化为数字量,而STM32的ADC模块功能比较多,本文主要讲述“三 ...

  7. CentOS6.4 配置Tengine(转)

    CentOS6.4 配置Tengine   1.安装Nginx所需的pcre-devel库 yum install -y gcc gcc-c++ wget ftp://ftp.csx.cam.ac.u ...

  8. VMWare虚拟机安装创建虚拟机的使用教程

    VMWare虚拟机安装创建虚拟机的使用教程   在配置虚拟机之前需要安装它,VMWare软件的安装过程比较简单,在安装在之前应该先看下说明文档.下面以VMWare Workstation6.5虚拟机 ...

  9. OC基础--常用类的初步介绍与简单实用之NSString

    一.NSString:不可变字符串/NSMutableString:可变字符串 1>字符串的常用创建方式: (1)NSString *s1 = @"Chaos"; (2)NS ...

  10. 在传统以太网中,为什么要有最小帧长度(64 bytes)和最大帧长度(1500 bytes)的限制?

    遇到的问题:以太网的数据帧封装如下图所示,包含在IP数据报中的数据部分最长应该是( )字节? A.1434 B.1460 C.1480 D.1500 答案:C 原因: 以太网(IEEE 802.3)帧 ...