vb.net 中的 SerialPort Datareceive - 我如何解析接收到的数据
SerialPort Datareceive in vb.net - how can I parse the data received
我有一台 PC 可以将串行数据发送到一个标志。我想做的是删除标志,然后使用 .Net 程序和另一台 PC 自行显示它。我有一个从 com 端口(从 PC 到 PC 的串行电缆)读取数据的 .Net 程序 - 读取工作正常,但我不确定如何正确解析我想要的数据,并将其显示在标签。
这是目前的运作方式。
电脑发送交易信息(价格)到com口。 30 秒后,它发送字符串的终止 - 表示我们不再希望显示信息。
我可以看到这个,包括价格,以及消息的开头和结尾字符。下面是我在当前 .net 中收到的数据图像。您会注意到它发送 01 然后是价格,在本例中为 2000 ($20.00)。然后30秒后,显示剩余的字符。
这是我当前的代码:
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”后,我想清除标签。
我试图清除,然后传输线程中的文本框,但是,由于数据一次进入一个 - 这没有给我正在寻找的结果。
我认为这非常稳健,但您可以自己解决。
将其放入计时器中,它会正常工作。
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
我有一台 PC 可以将串行数据发送到一个标志。我想做的是删除标志,然后使用 .Net 程序和另一台 PC 自行显示它。我有一个从 com 端口(从 PC 到 PC 的串行电缆)读取数据的 .Net 程序 - 读取工作正常,但我不确定如何正确解析我想要的数据,并将其显示在标签。
这是目前的运作方式。
电脑发送交易信息(价格)到com口。 30 秒后,它发送字符串的终止 - 表示我们不再希望显示信息。
我可以看到这个,包括价格,以及消息的开头和结尾字符。下面是我在当前 .net 中收到的数据图像。您会注意到它发送 01 然后是价格,在本例中为 2000 ($20.00)。然后30秒后,显示剩余的字符。
这是我当前的代码:
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”后,我想清除标签。
我试图清除,然后传输线程中的文本框,但是,由于数据一次进入一个 - 这没有给我正在寻找的结果。
我认为这非常稳健,但您可以自己解决。
将其放入计时器中,它会正常工作。
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