2016-08-19 38 views
-1

我有一個串行COM GUI,我必須對串行端口的現有數據就是基於一箱顯示的文本顯示文本,但不究竟什麼串口數據是。例如,如果串行端口的現有行是「!+0007」,我希望我的文本框讀取「類型K」。我已經嘗試了多種方法,如If-Then和Select Case,我沒有任何運氣。如何在一個盒子基於串口的現有數據

Private Sub GetInput_Click(sender As Object, e As EventArgs) Handles GetInput.Click 
    SerialPort1.Write("$" & ComboBox4.Text & ComboBox5.Text & "06" & vbCr) 
    System.Threading.Thread.Sleep(50) 
    If SerialPort1.ReadExisting = "!+0007." Then 
     GetInputBox.Text = "Type K" 
    End If 

    SerialPort1.DiscardOutBuffer() 
End Sub 

沒有運氣與

Private Sub GetInput_Click(sender As Object, e As EventArgs) Handles GetInput.Click 
    Dim value As String = SerialPort1.ReadExisting 
    SerialPort1.Write("$" & ComboBox4.Text & ComboBox5.Text & "06" & vbCr) 
    System.Threading.Thread.Sleep(50) 
    Select Case value 
     Case value = "!+0007." 
      GetInputBox.Text = "Type K" 
    End Select 
    SerialPort1.DiscardOutBuffer() 
End Sub 

無任何這裏。 有什麼建議嗎?

+0

在第一個示例中,嘗試使用「SerialPort1.ReadLine()」而不是「SerialPort1.ReadExisting」。您還可以嘗試增加「睡眠」中的值。 –

+0

@JimHewitt ReadLine()導致程序凍結 –

+0

您是否嘗試設置'SerialPort1.NewLine = vbCR'? –

回答

0

建議:

  1. 開始通過登錄您發送和接收的數據使用Console.Writeline
  2. 它看起來像將數據發送到串行端口之前,你的電話ReadExisting,那你就等着,那你就測試。我懷疑你需要做什麼(你應該澄清這一點)是發送數據到com端口,等待,然後讀取響應。在這種情況下,你想:

     SerialPort1.Write("$" & ComboBox4.Text & ComboBox5.Text & "06" & vbCr) 
        System.Threading.Thread.Sleep(50) 
        Dim value As String = SerialPort1.ReadExisting 
    
  3. 你清除傳出緩衝區但不是你的傳入緩衝區,這樣最有可能你就必須從以前的通訊科的部分包在裏面。

  4. 不要以爲你總是會從1個響應中獲得1個數據包......因此需要記錄數據。

+0

所以我已經添加了你說過的代碼,並將它放在'If value =「!+0007之後。然後getinputbox.text =「Type K」' –

+0

好的...你有問題嗎?或者有些日誌讓我看看? – FloatingKiwi

+0

我對你的建議沒什麼好運氣,我只是最後一個空白的文本框。我對此很新,所以我對任何事情都很開放 –

相關問題