串口通信速度的问题
char str[100];
memset(str,'\0',100);
DWORD wCount=100;//读取的字节数
BOOL bReadStat;
char lpOutBuffer[7];//?
memset(lpOutBuffer,'\0',7);//前7个字节先清零?
memset(lpOutBuffer,0xff,1);//
memset(lpOutBuffer+1,0x1b,1);//
memset(lpOutBuffer+2,0xa0,1);//
DWORD dwBytesWrite=7;
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hCom,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hCom,lpOutBuffer,dwBytesWrite,& dwBytesWrite,NULL);
if(!bWriteStat)
{
MessageBox("写串口失败!");
}
bReadStat=ReadFile(hCom,str,wCount,&wCount,NULL);
if(!bReadStat)
{
MessageBox("读串口失败!");
}
PurgeComm(hCom,PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR);
m_fGongMoPing=(str[7]*16+str[8])/100;
m_fHuiLiuPing=(str[9]<<8+str[10]);
m_disp=str;
UpdateData(FALSE);
#pragma once
#include <SetupAPI.h>
enum
{
LED_SUCCESS=0, //成功
LED_INIERRO=1, //初始化失败
LED_RDEMPTY=2, //读缓冲区为空
LED_RDTIMEOUT=3, //读取超时
LED_GETLENERRO=4, //ClearCommErro失败.
LED_PACKLENERRO=5, //包长错误
LED_RDBUFOVERFLOW=6, //读缓冲区不够大.
LED_CRCERRO=7, //CRC校验失败.
LED_WRITEERRO=8, //数据写入失败
LED_DATAERRO=9, //返回数据错误.
LED_TESTTING, //正在测试串口设备
};
void showErroCode(int nCode);
CString getErroString(int nCode);
class CAccessCom
{
public:
CAccessCom(void);
~CAccessCom(void);
private:
HANDLE m_hCurCom; //当前访问的com接口句柄.
DWORD m_inBuffSize;
DWORD m_outBuffSize;
DCB m_portDCB;
TCHAR m_curName[0x20];
public:
BOOL connectCom(LPCTSTR comName);
void closeCom();
UINT comRead(BYTE *outBuf,const DWORD nReadLen,DWORD &outLen,DWORD timeOut=1000);
UINT comWrite(const BYTE *wrBuf,DWORD wrLen,DWORD timeOut=1000);
void breakRead();
void breakWrite();
DWORD getRdSize();//获得输入缓冲区中的数据长度;
DWORD getWrSize();//获得输出缓冲区中的数据和度.
BOOL dcbDialog(HWND hParent);
int putChar(BYTE ch);
int getChar(BYTE &ch,int nTimeout=500);
void flushInput(void);
static void makeComName(TCHAR *nameBuff,int nMaxSize,int comNum);
public:
//清空输入缓冲区
inline void clearRdBuff()
{
PurgeComm(m_hCurCom,PURGE_RXCLEAR);
}
//清空输出缓冲区
inline void clearWrBuff()
{
PurgeComm(m_hCurCom,PURGE_TXCLEAR);
}
inline BOOL isOpen(){return m_hCurCom!=NULL;}
//设置串口输入输了缓冲区大小.
inline void setComBuffSize(DWORD inBuffSize,DWORD outBuffSize)
{
m_inBuffSize=inBuffSize;
m_outBuffSize=outBuffSize;
}
//设置串口参数
inline void setComState(DWORD baudRate,BYTE byteSize,BYTE parity,BYTE stopBits)
{
m_portDCB.BaudRate=baudRate;
m_portDCB.ByteSize=byteSize;
m_portDCB.Parity=parity;
m_portDCB.StopBits=stopBits;
}
//设置串口参数
inline void setComState(const DCB &dcb)
{
m_portDCB=dcb;
}
private:
//释放句柄
inline void releaseHandle(HANDLE &desHand)
{
if(desHand)
{
CloseHandle(desHand);
desHand=NULL;
}
}
};