CSerialport类用WriteToPort多次发送数据时,只有最后一次成功

kingapp 2014-05-15 09:42:46
请大家帮忙看下,用CSerialport类的WriteToPort连续写串口时,出现问题:
下位机发送 FF ** ** ** 4个字节为1帧,上位机收到后进行判断,正常的话,就发送一个应答帧,同样是FF ** ** **4个字节,下位机以同样的方式,进行应答式通信。
下面的代码,WriteToPort写串口,只有最后一次写有效,加SetTimer,在OnTimer里写,也是一样的。

LONG CB2AutoTestDlg::OnComm( WPARAM ch, LPARAM port )
{
......

char data[4] = { 0xFF, 0x00, 0x01, 0x00 };

if( rxDataCount <4 ) //如果4个字节还没接收完,继续接收
{
rxDataCount = rxDataCount%4; //保证按4个字节存入数组
return 1;
}
else //此时已经接收到4个字节
{
rxDataCount = 0; //此时rxDataCount=4,重置为0,重新开始填充数组

if( hexRecv[0] == 0xFF ) //判断是不是帧开头
{
if( hexRecv[3] == (unsigned char)(hexRecv[0] + hexRecv[1] + hexRecv[2]) ) //判断检查和
{
switch( hexRecv[2] )
{
case 0x01: //应答(收到数据应答)
《======下面这2句,效果都是一样的======》
//m_Port.WriteToPort( data, 4 ); //发送应答指令
SetTimer( nTestSerial+1, 40, NULL );

break;

case 0x02: //成功
《======下面这2句,效果都是一样的======》
m_Port.WriteToPort( data, 4 ); //发送应答指令
//SetTimer( nTestSerial+1, 40, NULL );

m_list1.InsertItem( nTestSerial, strStatus[0] );
m_list1.SetItemText( nTestSerial, 0, itoa( nTestSerial%29+1, sn, 10 ) );
m_list1.SetItemText( nTestSerial, 1, m_strTestItem[nTestSerial%29] );//连串口调试助手时用这一句
//m_list1.SetItemText( nTestSerial, 1, m_strTestItem[hexRecv[1] - 10 ] ); //连BCM时用这一句
m_list1.SetItemText( nTestSerial, 2, strStatus[1] );

nTestSerial++; //为显示下一行做准备

break;
......

}
}
else //检查和错误
{
MessageBox( "检查和错误" );
}
}
else //帧头错误
{
MessageBox( "帧头错误" );
}
}

return 0;
}
...全文
220 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧