+ -
当前位置:首页 → 问答吧 → CSerialPort类读取消息,读不到,请大家来看看

CSerialPort类读取消息,读不到,请大家来看看

时间:2011-11-24

来源:互联网

C/C++ code
   //定义发送单个字符的空间大小
    char *buffA = new char[1];
    char *buffB = new char[1];
    char *buffC = new char[1];
    char *buffD = new char[1];
    //分配每次发送的空间
    memset(buffA,0,sizeof(char)*1);
    memset(buffB,0,sizeof(char)*1);
    memset(buffC,0,sizeof(char)*1);
    memset(buffD,0,sizeof(char)*1);
    //设置发送字符
    buffA[0]= 'P';
    buffB[0]= 'O';
    buffC[0]= 'N';
    buffD[0]= 13;
    //清空串口读写缓存;
//     m_SerialPort.ClearReadBuffer();
//     m_SerialPort.ClearWriteBuffer();
    
    //向串口发送数据
    
    m_SerialPort.Write(buffA,sizeof(char)*1);
    SetTimeOut();
    m_SerialPort.Write(buffB,sizeof(char)*1);
    SetTimeOut();
    m_SerialPort.Write(buffC,sizeof(char)*1);
    SetTimeOut();
    m_SerialPort.Write(buffD,sizeof(char)*1);
    SetTimeOut();
    //数据发送完成,释放分配空间
    
    delete[] buffA;
    delete[] buffB;
    delete[] buffC;
    delete[] buffD;
    //设置延迟,等待下位机向串口发送数据
    SetTimeOut();
    //开始读取串口数据
    
         char *Readbuff = new char [50];
    memset(Readbuff,0,sizeof(char)*50);
    m_SerialPort.Read(Readbuff,50);
    
    //读取完成,显示在文本框中
    
    GetDlgItem(IDC_BACKMESSAGE)->SetWindowText(Readbuff);
    
    //清理串口中的读缓存
    m_SerialPort.ClearReadBuffer();
    m_SerialPort.ClearWriteBuffer();
    
    //释放读取缓存空间
    delete[] Readbuff;



串口读消息,但是程序读不到,而且读时程序繁忙,需要强行关闭。

作者: pcn9635457   发布时间: 2011-11-24

那是因为使用的是阻塞的串口读写方式,Read时程序阻塞等待串口发过来的消息,但是串口肯定并没有发过来消息(信息、数据),所以就一直死等了,所以必须强制关闭。
感觉楼主的意思是向串口发送一个命令,外部设备通过串口接收该命令后立即返回一些数据,有可能是指令格式不正确。
或者是发送的数据不够50个,所以一直在等了,用5个、1个试试看。

作者: noodle123   发布时间: 2011-11-26

VC串口修正类应用的小项目及其CSerialPort类的经典使用,可以直接用到项目中去:http://blog.csdn.net/liquanhai/article/details/6941574

作者: liquanhai   发布时间: 2011-11-26