如题,使用的是CserialPort类制作的一个小的串口调试工具,需要工具在接收到数据帧的时候能后自动应答。现在数据是成功的接收到了,但是发送好像总是不成功,哪位大侠可以指教一下。下面是原码:
LPARAM CToolDlg::OnReceiveData(WPARAM ch, LPARAM port)
{
UpdateData(true);
m_uReceiveBytes++;
CString strTemp,iTemp;
//BYTE iTemp=0;
strTemp.Format("%d",m_uReceiveBytes);
m_StrReceiveBytes=strTemp;
if(m_bHexReceive)
{
iTemp=DevideHexChar(ch);
m_StrReceiveData += iTemp+_T(" ");
}
else
m_StrReceiveData += char(ch);
UpdateData(false); ((CEdit*)GetDlgItem(IDC_EDIT_RECEIVE_DATA))->LineScroll(
m_StrReceiveData.GetLength()/(((CEdit*)GetDlgItem(IDC_EDIT_RECEIVE_DATA))->LineLength())); m_Wireless_BUFFER[m_bRevComm]=ch;
//从下面开始解析串口传送过来的数据帧
if((m_Wireless_BUFFER[0]==RF_Synchronization_Frame)) //发现同步帧开始接受否则继续监听
m_bRevComm++;
else
{
Comm_Wireless_Modify.Clear_RxBuffer(m_Wireless_BUFFER,&m_bRevComm);
m_bRevComm=0;
} if(m_bRevComm==2) //第二个字节不是 RF_STX 清除缓存
{
if(m_Wireless_BUFFER[1]!=RF_STX)
{
Comm_Wireless_Modify.Clear_RxBuffer(m_Wireless_BUFFER,&m_bRevComm);
}
}
if(m_bRevComm>2)
{
if((m_bRevComm==(m_Wireless_BUFFER[2]+3))&&
(m_Wireless_BUFFER[m_bRevComm-1]==0x03))
{
if((m_Wireless_BUFFER[3]==RF_RECEIVED_FRAME_ACK_CMD)&&
(m_Wireless_BUFFER[7]==0x1f))
{
}
Comm_Wireless_Modify.m_nCRC_Result=Comm_Wireless_Modify.CRC_New((m_Wireless_BUFFER[2])-2, &(m_Wireless_BUFFER[2]));
if(((Comm_Wireless_Modify.m_nCRC_Result>>8)==m_Wireless_BUFFER[m_bRevComm-2])&&
((Comm_Wireless_Modify.m_nCRC_Result&0xFF)==m_Wireless_BUFFER[m_bRevComm-3]))
{ m_SerialPort.InitPort(this,MAX_SERIAL_PORT_NUM-1);
switch(m_Wireless_BUFFER[3] )
{
case RF_ACK_CMD:
break;
case RF_NACK_CMD:
break;
case RF_RES_FW_VERSION_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);
break;
case RF_RECEIVED_FRAME_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);
switch(m_Wireless_BUFFER[10])
{
case 0x12 : //读取实时温度,加含时间戳
break; //读取实时温度信息
case 0x13 :
break; //读取实时温度信息
case 0x14: break;
case 0x15: break;
case 0x16: break;
case 0x17: break; //矫正0温度点
default :break;
}
break;
case RF_RECEIVED_FRAME_ACK_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);break;
case RF_ACK_SEND_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);
break;
default:
break;
}
}
else
{
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_NACK_CMD,AON_ACK_Length);
}
Comm_Wireless_Modify. Clear_RxBuffer(m_Wireless_BUFFER,&m_bRevComm);
}
} return 0;
}第一次写上位机调试软件,还请大家指教
LPARAM CToolDlg::OnReceiveData(WPARAM ch, LPARAM port)
{
UpdateData(true);
m_uReceiveBytes++;
CString strTemp,iTemp;
//BYTE iTemp=0;
strTemp.Format("%d",m_uReceiveBytes);
m_StrReceiveBytes=strTemp;
if(m_bHexReceive)
{
iTemp=DevideHexChar(ch);
m_StrReceiveData += iTemp+_T(" ");
}
else
m_StrReceiveData += char(ch);
UpdateData(false); ((CEdit*)GetDlgItem(IDC_EDIT_RECEIVE_DATA))->LineScroll(
m_StrReceiveData.GetLength()/(((CEdit*)GetDlgItem(IDC_EDIT_RECEIVE_DATA))->LineLength())); m_Wireless_BUFFER[m_bRevComm]=ch;
//从下面开始解析串口传送过来的数据帧
if((m_Wireless_BUFFER[0]==RF_Synchronization_Frame)) //发现同步帧开始接受否则继续监听
m_bRevComm++;
else
{
Comm_Wireless_Modify.Clear_RxBuffer(m_Wireless_BUFFER,&m_bRevComm);
m_bRevComm=0;
} if(m_bRevComm==2) //第二个字节不是 RF_STX 清除缓存
{
if(m_Wireless_BUFFER[1]!=RF_STX)
{
Comm_Wireless_Modify.Clear_RxBuffer(m_Wireless_BUFFER,&m_bRevComm);
}
}
if(m_bRevComm>2)
{
if((m_bRevComm==(m_Wireless_BUFFER[2]+3))&&
(m_Wireless_BUFFER[m_bRevComm-1]==0x03))
{
if((m_Wireless_BUFFER[3]==RF_RECEIVED_FRAME_ACK_CMD)&&
(m_Wireless_BUFFER[7]==0x1f))
{
}
Comm_Wireless_Modify.m_nCRC_Result=Comm_Wireless_Modify.CRC_New((m_Wireless_BUFFER[2])-2, &(m_Wireless_BUFFER[2]));
if(((Comm_Wireless_Modify.m_nCRC_Result>>8)==m_Wireless_BUFFER[m_bRevComm-2])&&
((Comm_Wireless_Modify.m_nCRC_Result&0xFF)==m_Wireless_BUFFER[m_bRevComm-3]))
{ m_SerialPort.InitPort(this,MAX_SERIAL_PORT_NUM-1);
switch(m_Wireless_BUFFER[3] )
{
case RF_ACK_CMD:
break;
case RF_NACK_CMD:
break;
case RF_RES_FW_VERSION_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);
break;
case RF_RECEIVED_FRAME_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);
switch(m_Wireless_BUFFER[10])
{
case 0x12 : //读取实时温度,加含时间戳
break; //读取实时温度信息
case 0x13 :
break; //读取实时温度信息
case 0x14: break;
case 0x15: break;
case 0x16: break;
case 0x17: break; //矫正0温度点
default :break;
}
break;
case RF_RECEIVED_FRAME_ACK_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);break;
case RF_ACK_SEND_CMD:
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_ACK_CMD,AON_ACK_Length);
break;
default:
break;
}
}
else
{
Comm_Wireless_Modify.Ack_NAck_All_Group_Fun(RF_NACK_CMD,AON_ACK_Length);
}
Comm_Wireless_Modify. Clear_RxBuffer(m_Wireless_BUFFER,&m_bRevComm);
}
} return 0;
}第一次写上位机调试软件,还请大家指教
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货