[問題] 串列傳輸接收完整資料疑問!

看板C_Sharp作者 (無傷大雅)時間6年前 (2018/03/21 13:57), 編輯推噓1(103)
留言4則, 2人參與, 6年前最新討論串1/1
目前在弄串列傳輸的程式, 當送命令格式給設備時,設備會回應。 傳送7個bytes命令格式時,只有第一次會收到完整的7個bytes的回應, 但是接下來傳送時,有時會收到拆成兩次的回應, 請問該如何解決呢? 謝謝。 目前是先用網上找的範例程式來測試, http://www.haolizi.net/example/view_9841.html void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (sp1.IsOpen) //此处可能没有必要判断是否打开串口,但为了严谨性,我还 是加上了 { //输出当前时间 DateTime dt = DateTime.Now; txtReceive.Text += dt.GetDateTimeFormats('f')[0].ToString() + "\r\n"; txtReceive.SelectAll(); txtReceive.SelectionColor = Color.Blue; //改变字体的颜色 byte[] byteRead = new byte[sp1.BytesToRead]; //BytesToRead:sp1接收 的字符个数 if (rdSendStr.Checked) //'发送字符串'单选按钮 { txtReceive.Text += sp1.ReadLine() + "\r\n"; //注意:回车换行必须这 样写,单独使用"\r"和"\n"都不会有效果 sp1.DiscardInBuffer(); //清空SerialPort控件的 Buffer } else //'发送16进制按钮' { try { Byte[] receivedData = new Byte[sp1.BytesToRead]; //创建 接收字节数组 sp1.Read(receivedData, 0, receivedData.Length); //读取 数据 //string text = sp1.Read(); //Encoding.ASCII.GetString(receivedData); sp1.DiscardInBuffer(); //清空 SerialPort控件的Buffer //这是用以显示字符串 // string strRcv = null; // for (int i = 0; i < receivedData.Length; i++ ) // { // strRcv += ((char)Convert.ToInt32(receivedData[i])) ; // } // txtReceive.Text += strRcv + "\r\n"; //显示信 息 //} string strRcv = null; //int decNum = 0;//存储十进制 for (int i = 0; i < receivedData.Length; i++) //窗体显示 { strRcv += receivedData[i].ToString("X2"); //16进制显示 } txtReceive.Text += strRcv + "\r\n"; } catch (System.Exception ex) { MessageBox.Show(ex.Message, "出错提示"); txtSend.Text = ""; } } } else { MessageBox.Show("请打开某个串口", "错误提示"); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.128.217 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1521611841.A.EF5.html

03/21 15:39, 6年前 , 1F
送過來的字串請設定結束碼(如\r),接受方面以累進塞入
03/21 15:39, 1F

03/21 15:39, 6年前 , 2F
容器裡,另外寫函數來判斷結束碼的搜尋與擷取,再將擷
03/21 15:39, 2F

03/21 15:39, 6年前 , 3F
取到的字串從容器裡刪除(先進先出),就可以達成
03/21 15:39, 3F

03/26 06:37, 6年前 , 4F
不然就是送過來的字串裡加上這次傳輸的長度多少
03/26 06:37, 4F
文章代碼(AID): #1QiVH1xr (C_Sharp)