描述:一个串口通讯类
应用平台:Windows
版本: v1.0
主要功能:设计了一个简洁易用的多线程串行通讯接口,可以切换查询和自动接收模式,进行对串口数据收发的类
接触VC,很不习惯mscomm等Active控件老让人去注册的方式,所以参照Delphi中的SpComm设计了一个类CComPort,对PJ Naughter 的CSerialPort进行了2次封装,主要目的是简化串口的使用.使其用简单的代码就可以完成串口通讯的过程.做了一个Demo程序演示了CComPort的使用,附图如下:
下面我从如何使用和类的设计两个方面说明一下:
一 如何使用:
考虑到使用过程尽可能简洁,实用,为了满足不同的使用要求设计4种接收模式, 前两种为手动接收方式,后两种为自动类回调方式,下面是使用代码
1.ManualReceiveByQuery 手动查询接收
#include "ComPort.h"
LsComm::CComPort m_ComPort; //LsComm is namespace in c++
m_ComPort.Open(2,LsComm::CComPort::AutoReceiveByquery);
//ReCeive Com Data: 接收语句
DWORD InBufferCount;
byte pbuffer[2048];
InBufferCount = m_ComPort.GetInBufferCount();
if(InBufferCount>0)
{
m_ComPort.GetInput(pbuffer,InBufferCount);
}
//Write Com Data: 写串口数据
char a[10]="abcdefg";
this->m_ComPort.Output(a,sizeof(a));
2.ManualReceiveByConst(异步模式) 手动定常数接收模式
#include "ComPort.h"
LsComm::CComPort m_ComPort;//LsComm is namespace in c++
m_ComPort.Open(2,LsComm::CComPort::AutoReceiveByConst);
//ReCeive Com Data: //接收数据
DWORD InBufferCount=0;
byte pbuffer[2048];
InBufferCount=this->m_ComPort.GetInput(pbuffer,10,1000);
//上面我要在1000毫秒内接收10字节的数据,IbufferCount返回实际得到的数据
if(InBufferCount==0)
return;
CString c;
char a[4];
for(int i=0;i<(int)InBufferCount;i++)
{
::sprintf(a,"%2.2X",pbuffer[i]);
c+=a;
c+=" ";
}
c="接收(Receive):"+c;