请教高手
我在用VC++进行串口通信时,遇到回复数据的时候一条数据分成2条回 我通过VC++对一台带有串口通信接口的设备通信,发送一条命令,正常返回数据的时候是应该返回168位,但是竟然返回了2条 分别是98 和 70 我接收的时候只能接收到98那条信息。 附上我的代码: m_com1.SetCommPort(1);
m_com1.SetSettings("2400,n,8,1");
m_com1.SetInputLen(0);
m_com1.SetInputMode(1);
m_com1.SetRThreshold(1);
m_com1.SetPortOpen(TRUE);
m_com1.GetInput(); sendData1 = "51 41 0D"; if(m_com1.GetPortOpen())
{
if (!sendData1.IsEmpty())
{
CByteArray hexdata;
int len = String2Hex(sendData1, hexdata);
m_com1.SetOutput(COleVariant(hexdata));
::Sleep(500);
}
else
{
::AfxMessageBox("没有可以发送的数据");
}
}
else
{
::AfxMessageBox("请先打开串行口");
}
COleSafeArray safearray_inp;
COleVariant varReceive;
varReceive.Attach(m_com1.GetInput());
::Sleep(300);
safearray_inp = varReceive;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}
我用DEBUG单步调试的时候每次都是回一条168字节的信息,但是直接运行就会回复98+70的信息 请教高手们 这是怎么回事啊??????
我在用VC++进行串口通信时,遇到回复数据的时候一条数据分成2条回 我通过VC++对一台带有串口通信接口的设备通信,发送一条命令,正常返回数据的时候是应该返回168位,但是竟然返回了2条 分别是98 和 70 我接收的时候只能接收到98那条信息。 附上我的代码: m_com1.SetCommPort(1);
m_com1.SetSettings("2400,n,8,1");
m_com1.SetInputLen(0);
m_com1.SetInputMode(1);
m_com1.SetRThreshold(1);
m_com1.SetPortOpen(TRUE);
m_com1.GetInput(); sendData1 = "51 41 0D"; if(m_com1.GetPortOpen())
{
if (!sendData1.IsEmpty())
{
CByteArray hexdata;
int len = String2Hex(sendData1, hexdata);
m_com1.SetOutput(COleVariant(hexdata));
::Sleep(500);
}
else
{
::AfxMessageBox("没有可以发送的数据");
}
}
else
{
::AfxMessageBox("请先打开串行口");
}
COleSafeArray safearray_inp;
COleVariant varReceive;
varReceive.Attach(m_com1.GetInput());
::Sleep(300);
safearray_inp = varReceive;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}
我用DEBUG单步调试的时候每次都是回一条168字节的信息,但是直接运行就会回复98+70的信息 请教高手们 这是怎么回事啊??????
通信格式设置(SetCommState)有问题;
确定通信格式设置没有问题,再看看读超时设置是否正常。
我这里有一个API设置串口超时的代码:
GetCommTimeouts(m_hCom, &cto);
cto.ReadIntervalTimeout = 20;//读间隔超时
cto.ReadTotalTimeoutMultiplier = 20;//读时间系数
cto.ReadTotalTimeoutConstant = 20;//读时间常量
SetCommTimeouts(m_hCom, &cto); //设置超时值
粗看了你的代码像是用了第三方COM控件(类),你单步调试是因为在时间上,单步调试的时间充足!好好想想,可能就是你时间把握的不好!