2016-09-22 114 views
0

我有一臺PC將串行數據發送到一個標誌。我想要做的是刪除標誌,並使用.Net程序和另一臺PC自行顯示。我有一個.Net程序,用於從串口讀取數據(從PC到PC的串口線) - 讀數正常,但我不確定如何正確解析我想要的數據,並將其顯示在標籤。vb.net中的SerialPort Datareceive - 我如何解析收到的數據

這是它目前的工作原理。

  • 計算機向com端口發送交易信息(價格)。 30秒後,它發送字符串終止 - 表示我們不再想要顯示信息了。

  • 我可以看到這個,包括價格,消息的開始和消息字符的結束。下面是我在當前.net中收到的數據的圖像。你會注意到它發送01然後價格,在這種情況下2000(20.00美元)。然後在30秒後,它顯示剩餘的字符。

enter image description here

這裏是我當前的代碼:

Imports System 
Imports System.Collections.Generic 
Imports System.Text 
Imports System.Windows.Forms 
Imports System.Drawing 
Imports System.ComponentModel 
Imports System.Threading 
Imports System.IO.Ports 

Public Class Form1 
    Dim myport As Array 
    Delegate Sub settextcallback(ByVal [text] As String) 
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     'This is the connect button 
     SerialPort1.PortName = "COM3" 'Connect on COM3 
     SerialPort1.BaudRate = "1200" 'Set BaudRate to 1200 
     SerialPort1.Open() 
     Button1.Enabled = False 


    End Sub 

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 
'this is the disconnect button 
     SerialPort1.Close() 

    End Sub 

    Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived 
     ReceivedText(SerialPort1.ReadExisting) 

    End Sub 
    Private Sub ReceivedText(ByVal [text] As String) 
'now we display the information 
     If Me.RichTextBox1.InvokeRequired Then 

      Dim x As New settextcallback(AddressOf ReceivedText) 
      Me.Invoke(x, New Object() {(text)}) 


     Else 
      Me.RichTextBox1.Text &= [text] 

     End If 
    End Sub 
End Class 

如何可以解析出龍頭01,只是顯示,在這種情況下,$ 20.00在一個標籤 - 讓我們把它「label1」,直到我收到尾隨的'01'。一旦我收到尾隨'01',我想清除標籤。

我試圖清除,然後轉移線程中的文本框,但是,因爲數據一次只有一個 - 這不會給我我期待的結果。

+0

輸出總是類似於$ XXXXX $ XX? – noidea

+0

@noidea是 - 除了內部4個字符外,輸出將完全相同。如果這使分析更容易,我也可以添加小數點。舉個例子:$ 012000 $ 01 $ 011500 $ 01或者,我可以這樣做:$ 0120.00 $ 01你有這個想法 - 它總是領先$ 01,然後在30秒後跟隨$ 01,以表明我們不應該再顯示它。 – Shmewnix

+0

所以你只想格式化richtextbox的輸出值?並將其放置在標籤中? – noidea

回答

1

我認爲這是非常強大的,但你可以自己搞清楚。

把它放在一個計時器,它工作正常。

Private Sub TimerPrice_Tick(sender As Object, e As EventArgs) Handles TimerPrice.Tick 

Dim output As Array = TextBox1.Text.Split("#") 

    If output.Length = 2 Then 
     Label1.Text = output(1) 
    Else 
     Label1.Text = vbNullString 
    End If 
End Sub 
+0

這讓我在需要的地方。 – Shmewnix