大家好,我最近在用mscomm控制元件做串口通信,但是資料在收發程序中會出現資料掉幀現象。從上位機往下位機發資料的時候,某一幀資料在下位機收不到。我的資料是用modbus協議寫的,請問大家有什么好意見嗎?
貼一下 發送資料的代碼
void CGKtDlg::OnReadregister(void)
{
BYTE buff[256];
CString temp;
CByteArray arraySend;
memset(buff, 0x00, 255);
Sleep(100);
buff[0]=0x01;
buff[1]=0x03;
buff[2]=0x00;
buff[3]=0x0A;
buff[4]=0x00;
buff[5]=0x02;
USHORT CRC=MBCRC16((UCHAR *)buff,6);//CRC校驗
buff[6]=(CHAR)(CRC & 0xFF);
buff[7]=(CHAR)((CRC & 0xFF00)>>8);
arraySend.RemoveAll();
arraySend.SetSize(8);
m_txd="";
for(int i=0;i<8;i++)
{
arraySend.SetAt(i,buff[i]);
}
m_Comm.put_Output(COleVariant(arraySend));
for(int i=0;i<8;i++)
{
BYTE bt=*(char *)(buff+i);
temp.Format(_T("%02X "),bt);
m_txd+=temp;
}
m_txd+="\r\n";
int LineNum=TXD.GetLineCount();
if(LineNum<=14)
{
TXD.SetSel(-1,-1);
TXD.ReplaceSel(m_txd);
}
else
{
TXD.SetSel(0,-1);
TXD.Clear();
TXD.SetSel(-1,-1);
TXD.ReplaceSel(m_txd);
}
}
uj5u.com熱心網友回復:
安裝個CommMonitor,監控一下,看看是沒發出去還是下位機沒收到。uj5u.com熱心網友回復:
你要規定一個超時值,超過這時間,就認為通訊超時。它接識訓分幾次才能接收完。所以,必須在這規定的時間讀到規定的長度。不到的話,你還得繼續讀。
uj5u.com熱心網友回復:
mobus是主從協議, 保證總線上同時只有一個節點發資料。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47603.html
標籤:基礎類
