串口收发数据 for循环中 或者Ontimer中发出指令,接收不到反馈信号。
用MFC做编程,有关数据的收发,用的串口类。
PC与温度采集ADAM4015模块数据交互。
我PC 发送指令读取温度,ADAM反馈回温度值,PC读取结果。
单独发送指令:
SerialPort.WriteToPort((LPCTSTR)("#030\r")); //发送读数指令
接收:
LONG CSetExDlg::OnComm(WPARAM ch,LPARAM port)
{
dateLength++;
CString str(_T(""));
str.Format("%c",ch);
if (dateLength > 8 )
{
if(dateLength > 9){
dateLength = 1;
m_strRxMsg.Empty();
}
}
m_strRxMsg += str; //将接收到的字符存入编辑框对应的变量中
UpdateData(FALSE); //将接收到的字符显示在接受编辑框中
}
可以实现。
但是比如 用多次发送
for(i=0;i<10;i++)
{
SerialPort.WriteToPort((LPCTSTR)("#030\r")); //发送读数指令
}
这时候就不能收到十次的反馈值,只有一次的反馈值可以接收到。
另外
在使用OnTimer函数时候,在Ontimer中:
void CProofDlg::OnTimer(UINT nIDEvent) //
{
if (1 == nIDEvent)
{
SerialPort.WriteToPort((LPCTSTR)("#030\r")); //发送读数指令
}
}
则
接收:
LONG CSetExDlg::OnComm(WPARAM ch,LPARAM port)
{
......
}
不能够接收到反馈的值。
采用Ontimer的意思是改成自动化,IO信号交互中,触发即可采集温度。
最上面直接发SerialPort.WriteToPort((LPCTSTR)("#030\r")); //可以理解为手动采集。