在 COM 端口上与串行设备通信在 VB 中出现不可读的字符

Communication with Serial Device on COM port gives unreadable characters in VB

我正在尝试与通过 RS232 串行端口发送数据的 CBC 自动分析仪通信。这些是设备设置

enter image description here

我正在使用串行转 USB 适配器将它连接到 com4 端口

在 COM4 端口上我正在使用以下 VB 代码来读取通过的数据。

Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel


Public Class ComReadWrite
    Dim myPorts As Array
    Dim txtline As String
    Dim txtchar As String
    Dim txtbyte As String
    Dim txtexisting As String
    Delegate Sub setTextCallBack(ByVal txt As String)


    Private Sub ComReadWrite_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        myPorts = IO.Ports.SerialPort.GetPortNames()
        portnamecombo.Items.AddRange(myPorts)
        WriteButton.Enabled = False
        CloseButton.Enabled = False

    End Sub

    Private Sub Start_Click(sender As Object, e As EventArgs) Handles Start.Click
        SerialPort1.PortName = portnamecombo.Text
        SerialPort1.BaudRate = BaudRateBox.Text
        SerialPort1.ReadTimeout = 500

        SerialPort1.Parity = Parity.None
        SerialPort1.DataBits = 8
        SerialPort1.StopBits = StopBits.One

        SerialPort1.Open()

        Start.Enabled = False
        WriteButton.Enabled = True
        CloseButton.Enabled = True


    End Sub

    Private Sub WriteButton_Click(sender As Object, e As EventArgs) Handles WriteButton.Click
        SerialPort1.Write(WriteBox.Text)
    End Sub

    Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click
        SerialPort1.Close()
        Start.Enabled = True
        WriteButton.Enabled = False
        CloseButton.Enabled = False
    End Sub

    Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        RecievedText(SerialPort1.ReadExisting())

    End Sub

    Private Sub RecievedText(ByVal txt As String)
        If Me.ReadBox.InvokeRequired Then
            Dim x As New setTextCallBack(AddressOf RecievedText)
            Me.Invoke(x, New Object() {(txt)})
        Else

            Me.ReadBox.Text &= txt

        End If
    End Sub


    Private Sub portnamecombo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles portnamecombo.SelectedIndexChanged

    End Sub

    Private Sub Label5_Click(sender As Object, e As EventArgs)

    End Sub

    Private Sub BindingSource1_CurrentChanged(sender As Object, e As EventArgs) Handles BindingSource1.CurrentChanged

    End Sub
End Class

在 运行 程序中,表单仅读取奇怪的不可读字符,如 OOOOOOOO,但不是任何可读的字符,如图所示

only shows weird characters

设备附带的文档中有以下几页似乎是相关的。

page1

page2

我们需要用ASCII码来传达指令。 Enq 是 Chr(5) ack 是 Chr(6)。这些是不可读的字符。

嘿感谢 Stack overflow 社区的帮助。我找到了解决方案如下

机器应该说 enq 应该向哪个主机回复 ack。但是当我读取串口机器时,似乎正在发送一个不可读的字符。

好吧,enq 等于 ASCII 代码 5,它没有任何关联的字符,因此它是不可读的字符。因此,如果我写 serialport1.readchar() 而不是 serialport1.readexisting(),我会得到机器说 5。那是机器实际上正在发送 enq。

现在我们需要发送ASCII值为6的

如果我说 serialport1.write('6') 它不会开始工作。 有用的是 serialport1.write(Chr(6))

并使用它让机器发送数据。