用控件(CMSComm)读串口代码(高效率,不同于网上常见的,决没有抄袭)!

原创 2004年10月28日 18:08:00

读串口的代码在网上是铺天盖地,但他们几乎完全是一样的,第一个人写出来的才是英雄,其它的不是。这段代码类似于下面:

VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
 ////////以下你可以根据自己的通信协议加入处理代码
 variant_inp=m_ctrlComm.GetInput(); //读缓冲区
 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("%c",bt); //将字符送入临时变量strtemp存放
  m_strRXData+=strtemp; //加入接收编辑框对应字符串
        }
}
UpdateData(FALSE); //更新编辑框内容

下面我先给出我的代码:

VARIANT Rec_Data;
int Data_Len;
char Rec_Data_Array[2048];
if (m_ctrlComm.GetCommEvent() == 2) //事件值为2表示接收缓冲区内有字符
{
 Rec_Data = m_SerialCOM.GetInput();
 int Data_Len = Rec_Data.parray->rgsabound->cElements; //取出一维的数据个数
 memcpy(Rec_Data_Array, (char*) Rec_Data.parray->pvData, Data_Len); //拷贝出数据
 Rec_Data_Array[Data_Len] = 0;
}
UpdateData(FALSE); //更新编辑框内容

我的代码有以下特点:
一:程序简单;
二:也是最主要的,效率很高!
我没有使用COleSafeArray类,大家知道,类要构造与析构,我敢保证,我上面的程序,在效率上,在第一段代码构造类的时候,我的代码已经收完数据了。另一点,是次要的,但要提一下,看看两段程序申请的变量个数,程序的长度,可读性,我的代码都应该较好!

简单的串口助手程序开发

1.简介 之前在烽火集团实习的时候,开发串口通信程序用的都是纯C++。感觉串口程序开发很考验人的逻辑思考能力。不过,现在好了,科研工作中,一切已存在的“利器”都可以用来为自己的“idea”服务。...
  • shenziheng1
  • shenziheng1
  • 2016年10月20日 23:04
  • 1796

串口操作---C代码

com.h #ifndef __COM_H__ #define __COM_H__ #ifdef __cplusplus extern "C" { #endif //打开串口 int OpenC...
  • flydream0
  • flydream0
  • 2011年12月10日 08:48
  • 6942

VS2013串口源代码

  • 2015年11月07日 22:32
  • 17.12MB
  • 下载

windows串口通信操作和代码实现

本文在撰写时参考了zwhxz的博客,博主的思路很清晰,可惜没有具体实现代码,所以本文在该博客的基础上进行了扩充并提供了实现代码。 zwhxz的博客网址:http://www.cnblogs.co...
  • wenshiabc
  • wenshiabc
  • 2016年11月03日 21:19
  • 3056

MSComm的属性介绍及其内部处理机制

1.CSerialPort类和MSComm该怎么选择 这里首先要澄清一个疑问:为什么已经有了CSerialPort类,我们还要去研究MSComm控件?这是因为CSerialPort类有局限(非MOD...
  • shenziheng1
  • shenziheng1
  • 2016年10月21日 21:57
  • 2228

【MFC】CMSComm 控件串口编程

之前在windows下用串口的时候都是用的windows的API做串口编程,他有个弊端,在接收到数据之后,不能立刻进行处理;但是CMSComm可以在接收到数据之后会立刻处理这些数据; m_seria...
  • ieczw
  • ieczw
  • 2014年03月20日 18:11
  • 1938

用控件(CMSComm)读串口代码(高效率,不同于网上常见的,决没有抄袭)!

读串口的代码在网上是铺天盖地,但他们几乎完全是一样的,第一个人写出来的才是英雄,其它的不是。这段代码类似于下面:VARIANT variant_inp;COleSafeArray safearray_...
  • yang79tao
  • yang79tao
  • 2004年10月28日 18:08
  • 3268

用控件(CMSComm)进行串口编程

1.建立项目  2.在项目中插入MSComm控件3.利用ClassWizard定义CMSComm类控制变量4.在对话框中添加控件  5.添加串口事件消息处理函数OnComm()6.打开和设置串口参数7...
  • luheng2006
  • luheng2006
  • 2010年04月16日 09:07
  • 2739

用控件(CMSComm)串口调试问题的解决

在编一个串口通信程序,因为刚上手,所以是按着龚建伟书的第一章改写的。 在处理接收数据的函数中 void CSerTestDlg::OnComm() { VARIANT variant_inp; COl...
  • charcy
  • charcy
  • 2010年05月27日 15:13
  • 1593

MScomm控件串口被占用的异常处理

最近在调试一个MFC的程序,通讯部分使用的是MScomm串口控件,我们的通信过程是首先找到设备的ID和Com口号,然后根据设备的ID做不同的数据发送和接收。这里少了一个判断串口是否被占用的情况,虽然使...
  • er9v_csdn
  • er9v_csdn
  • 2016年08月18日 11:26
  • 724
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用控件(CMSComm)读串口代码(高效率,不同于网上常见的,决没有抄袭)!
举报原因:
原因补充:

(最多只允许输入30个字)