我写了个单一给串口发送0xff命令的程序,单击一下发送一个命令,然后下位机就回给我一条数据,在EDIT上显示数据。
我写了两个方法,两个是简单验证串口是否正常通信的,代码如下BOOL OnSendSimple(unsigned char command,unsigned char data)
{
     BOOL ret=OnSendSimple(command,data);
 if(ret!=TRUE)
{
Sleep(50);
ret=OnSendSimple(command,data);
if(ret!=TRUE) 
{
Sleep(120);
ret=OnSendSimple(command,data);
if(ret!=TRUE)
{
Sleep(1000);
ret=OnSendSimple(command,data);
if(ret!=TRUE)
{
Sleep(2000);
ret=OnSendSimple(command,data);
if(ret!=TRUE)
{
AfxMessageBox(_T("通讯被干扰,请检查是否有大的用电设备在使用!"));
return FALSE;
}
}
}
}
}
}BOOL OnSendOne(unsigned char command,unsigned char data)
{      DWORD dwactlen=1;
DWORD dwLength;
int len; //要发送的字符长度
len=1;
CString Rev_Data;
unsigned char *psendbuf=new unsigned char[len];  //unsigned 范围0~255
unsigned char recvBuf[1024];
     memset(recvBuf,0,1024);
psendbuf[0]=command;
PurgeComm(m_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
WriteFile(m_hCom,psendbuf,len,&dwactlen,NULL);
ReadFile(m_hCom,recvBuf,1024,&dwLength,NULL);
        if(dwLength==0)
{
//AfxMessageBox(_T("COM3通讯失败!"));
PurgeComm(m_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清除收/发缓冲区
WriteFile(m_hCom,psendbuf,len,&dwactlen,NULL);
Sleep(5);
ReadFile(m_hCom,recvBuf,1024,&dwLength,NULL);
if(dwLength==0)
{
PurgeComm(m_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); //清除收/发缓冲区
WriteFile(m_hCom,psendbuf,len,&dwactlen,NULL);
Sleep(200);
ReadFile(m_hCom,recvBuf,1024,&dwLength,NULL);
if(dwLength==0)
{
AfxMessageBox(_T("COM3通讯中断err1,请检查设备电源是否已连接或USB松动!"));
ClosePort();
OpenPort(_T("COM3:"),115200,8,ONESTOPBIT,NOPARITY); //自动重新连接
return FALSE; //发送失败
}
}
}
else
{
 
for(int i=0;i<12;i++)
{
             CString str;
             str.Format(" %d",recvBuf[i]);//(int)recvBuf[i]*256+(int)recvBuf[i+1]);
             Rev_Data += str;
}
             
            ASTR = Rev_Data;
}       }
在OnButton2() 里调用这两个方法,还有发送0xff命令,代码如下void CWaveDlg::OnButton2() 
{
BOOL flag;
flag = true;
OnSendOne(0xff,flag);
SetDlgItemText(IDC_EDIT1,ASTR);
}
可以接收数据了,我用串口大师接收数据每次都是正常的,如下
02 58 02 01 02 58 02 01 03 ff 00 00
然后我程序中我接收接收就是有几次是后面几位都是0,一下正常一下不正常,麻烦各位帮我看下,急,谢谢了