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



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

在此处输入图像描述

我正在使用串行到 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

在运行程序时,表单仅读取奇怪的不可读字符,如OOOOOOOOO,但不能读取任何可读的内容,如图所示

只显示奇怪的字符

设备附带的文档具有以下页面,这些页面似乎是相关的。

页1

页2

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

嘿,感谢堆栈溢出社区的帮助。我找到了解决方案如下

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

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

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

如果我说serialport1.write('6'(,它就无法正常工作。 有效的是 serialport1.write(Chr(6((

使用这个,我让机器发送数据。

最新更新