为何在同一段串口程序里发送数据,却接收不到数据?
if (m_ComPort.GetPortOpen()==TRUE) m_ComPort.SetPortOpen(FALSE);
m_ComPort.SetCommPort(1);
m_ComPort.SetSettings("1200,e,8,1"); //设置波特率等参数 
m_ComPort.SetInputMode(1); //设置输入方式为二进制方式 1; text 0
m_ComPort.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes 
m_ComPort.SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes

m_ComPort.SetRThreshold(0); //为1表示有一个接受字符引发一个事件
m_ComPort.SetSThreshold(0); //为1表示有一个发送字符引发一个事件
m_ComPort.SetInputLen(0);
//m_ComPort.SetInBufferCount(0);
m_ComPort.SetHandshaking(0); //if(!m_ComPort.GetPortOpen()) //打开串口 
m_ComPort.SetPortOpen(TRUE);

cout << "串口打开!" << endl;
CString m_txd;
CByteArray m_bytetxd;
BYTE a;
BYTE b;
CString outPut; m_txd="01 31 02 30 30 30 00 03";
m_bytetxd.RemoveAll(); 
m_bytetxd.SetSize((m_txd.GetLength()+2)/3,-1);
m_bytetxd.RemoveAll(); for (int i=0;i<m_txd.GetLength();)
{
if ('0'<=m_txd.GetAt(i) && m_txd.GetAt(i)<='9') {a=m_txd.GetAt(i)-'0'; cout<< "a:" << char(a) <<endl;}
else if ('a'<=m_txd.GetAt(i) && m_txd.GetAt(i)<='f') a=m_txd.GetAt(i)-'a'+10;
a=a*16;
if ('0'<=m_txd.GetAt(i+1) && m_txd.GetAt(i+1)<='9') b=m_txd.GetAt(i+1)-'0';
else if ('a'<=m_txd.GetAt(i+1) && m_txd.GetAt(i+1)<='f') b=m_txd.GetAt(i+1)-'a'+10;
a=a+b;
m_bytetxd.Add(a);
i=i+3;
} m_ComPort.SetOutput(COleVariant(m_bytetxd));   //COleVariant(array)); // 发送数据  Sleep(20000); CString temp;
CString m_rxd;
long l;
COleSafeArray tempinput;
VARIANT vResponse; if(m_ComPort.GetCommEvent()==2) //接收缓冲区内有字符
{
cout << "开始接受数据!" << endl;
     vResponse=m_ComPort.GetInput();
tempinput=vResponse;

for (l=0;l<(long)tempinput.GetOneDimSize();l++)
{
tempinput.GetElement(&l,&b);
temp.Format("%02x ",b);
m_rxd=m_rxd+temp;
}

m_ComPort.SetRThreshold(1);//设置激发oncomm事件要接收字符数的个数0

}
else
cout << "没有接受数据!" << endl;

解决方案 »

  1.   

    if (m_ComPort.GetPortOpen()==TRUE) m_ComPort.SetPortOpen(FALSE);
    m_ComPort.SetCommPort(1);
    m_ComPort.SetSettings("1200,e,8,1"); //设置波特率等参数 
    SetSettings(“1200,n,8,1”)???????
    最好设置一个断点看看是不是成功打开串口
    m_ComPort.SetInputMode(1); //设置输入方式为二进制方式 1; text 0
    m_ComPort.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes 
    m_ComPort.SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes

    m_ComPort.SetRThreshold(0); //为1表示有一个接受字符引发一个事件
    m_ComPort.SetSThreshold(0); //为1表示有一个发送字符引发一个事件
    m_ComPort.SetInputLen(0);
    //m_ComPort.SetInBufferCount(0);
    m_ComPort.SetHandshaking(0); //if(!m_ComPort.GetPortOpen()) //打开串口 
    m_ComPort.SetPortOpen(TRUE);

    cout << "串口打开!" << endl;
    并且用MMSCom的OnComm事件,没有必要自己写循环读串口。
    你可以用CreateFile、ReadFile等函数试一试,好像有很多的例子!
      

  2.   

    我建的是基于win32 Console application (Support MFC)的project。
    其中,增加了Microsoft Communications Control, version 6.0。如何用MMSCom的OnComm事件??? 谢谢!!!
      

  3.   

    该问题已经解决
    1、改为基于MFC exe的project;
    2、串口和所连设备都SetSettings(“1200,n,8,1”)