【问题标题】:SerialPort Datareceive in vb.net - how can I parse the data receivedvb.net 中的 SerialPort Datareceive - 如何解析接收到的数据
【发布时间】:2016-09-22 23:54:36
【问题描述】:

我有一台可以向标牌发送串行数据的 PC。我想做的是删除标志,并使用.Net程序和另一台PC自行显示。我有一个 .Net 程序,它从 com 端口(从 PC 到 PC 的串行电缆)读取数据 - 读取工作正常,但是我不确定如何正确解析我想要的数据,并将其显示在标签。

这是它目前的工作方式。

  • 计算机将交易信息(价格)发送到 com 端口。 30 秒后,它发送终止字符串 - 表示我们不再希望显示该信息。

  • 我可以看到包括价格在内的消息开头和结尾字符。我在当前 .net 中收到的数据图像如下。您会注意到它发送 01 Then 价格,在本例中为 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”后,我想清除标签。

我试图清除,然后在线程中传输文本框,因为数据一次输入一个 - 这并没有给我我正在寻找的结果。

【问题讨论】:

  • 输出总是像 $XXXXX$XX ?
  • @noidea 是的 - 除了内部 4 个字符之外,输出将完全相同。如果这使解析更容易,我也可以添加小数点。举个例子:$012000$01 $011500$01 或者,我可以这样做:$0120.00$01 你明白了 - 它总是领先 $01,然后在 30 秒后尾随 $01,表明我们不再应该显示它。
  • 所以你只想格式化来自richtextbox的输出值?并将其放在标签中?
  • 或多或少。我只想要内部 4 个字符(价格)。并将其显示在标签中,直到我收到尾随的“01”当我收到尾随的“01”时,我想清除标签以不显示任何内容,直到收到下一个价格,我将再次显示,直到收到尾随“01”

标签: .net vb.net multithreading serialization serial-port


【解决方案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

【讨论】:

  • 这把我带到了我需要去的地方。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2020-09-13
  • 2018-11-18
  • 1970-01-01
相关资源
最近更新 更多