2014-09-11 64 views
-1

這是我遇到問題的代碼。SerialPort.Read()always TimeoutException

在我的形式加載,我得到這個:

Dim port as new Ports.SerialPort("MyPort", 100000) 
port.DataBits = 8 
port.StopBits = Ports.StopBits.One 
port.Parity = Ports.Parity.None 
port.Open() 
System.Threading.Thread.Sleep(200) 

然後在我的button1.Click事件中,我得到這個:

Try 
     If port.IsOpen Then 
      Dim inStream(80) As Byte 
      port.Read(inStream, 0, 80) 
      Dim returndata As String = System.Text.Encoding.ASCII.GetString(inStream, 0, 80) 
      returndata = returndata.Replace(Chr(2), "A") 
      returndata = returndata.Replace(Chr(3), "B") 
      msg("Data from Server : " + returndata) 
      Dim data As String 
      data = Write(TextBox2.Text, TextBox2.Text.Substring(0, 4)) 
      Dim outStream As Byte() = _ 
      System.Text.Encoding.ASCII.GetBytes(STX & data & ETX)   '("Message from Client$") 
      ashsp.Write(outStream, 0, outStream.Length) 

     End If 
Catch ex As Exception 
End try 

現在這裏的問題是,當我點擊按鈕1,我遇到port.Read(inStream, 0, 80)時發生TimeoutException。

+0

看起來像一個基本的因果關係違規。你通常*首先*寫一些東西,然後*讀取回應。點擊該按鈕不會強制設備發送任何內容。切勿忽略Read()的返回值。不設置握手屬性是另一個非常基本的原因,您爲什麼不從設備獲取任何回報。 – 2014-09-11 23:27:47

回答

0

你確定有80個字節要讀嗎?您可以使用BytesToRead屬性動態檢查可用字節數。或者,如果您只接收串口上的文本,則可以使用ReadExisting()方法將所有可用字節放入字符串對象中。