2016-01-03 63 views
1

我正在開發一個串行端口應用程序。而且我無法正確接收數據。我使用ReadExisting()來讀取即將到來的數據。 serialport- receiving missing data.NET串行端口 - 接收丟失的數據

這是我的代碼。請指教,接收數據的正確方法是什麼,以及如果我想檢查每條消息的長度和格式的有效性,該怎麼辦。

public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits) 
     { 
      DateTime dt = DateTime.Now; 
      String dtn = dt.ToShortTimeString(); 

      sport = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits); 

      try 
      { 
       sport.Open(); 
       status.AppendText("[" + dtn + "] " + "Connected\n"); 
       sport.DataReceived += new SerialDataReceivedEventHandler(sport_DataReceived); 
      } 
      catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); } 
     } 

     private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e) 
     { 
      DateTime dt = DateTime.Now; 
      String dtn = dt.ToShortTimeString(); 
      String comingData = sport.ReadExisting(); 

      if (comingData != String.Empty) 
      { 
       Dispatcher.Invoke(new Action(() => 
       { 
        current.AppendText("[" + dtn + "] " + "Received: " + sport.ReadExisting() + "\n"); 
       })); 
      } 

     } 

謝謝。

回答

2

您的事件循環比以9600波特發送單個字符所需的時間快得多。我建議將收到的字符附加到字符串中,直到收到像「\ n」這樣的終止字符,或者您收到您期望的字符數。

這裏是一個項目,我等待一個例子,直到我收到10個字符:

int datalen = serialPort1.BytesToRead; 
label1.Text="Readexisting"; 
if (datalen >=10) 
{ 
    string data = serialPort1.ReadExisting(); 
    label1.Text=data; 
} 
相關問題