VB.接收到的串行端口数据未触发VS2019



我正在为工作中的测试平台编写Arduino数据记录/处理程序,并在VB.net中编码,因为我在该语言中有几年的经验,并认为它会比重新学习c#更快。我目前遇到的问题是有时在调试串行端口。数据接收事件不会触发,也不会触发,直到我删除事件处理程序代码块并重新创建它。当这样做时,我复制子的内容,删除块并重新创建它,然后将代码粘贴回块并离开我再次得到。我试图在程序开始时通过addhandler调用处理程序,以编程方式将其设置在form1上。加载,但没有帮助。

Imports System
Imports System.ComponentModel
Imports System.Threading
Imports System.IO.Ports
Public Class Form1
Public WithEvents com1 As New IO.Ports.SerialPort
'serial port recreated and connection details set.
com1 = New IO.Ports.SerialPort(cb_Comms.Text, cb_Baud.Text, Parity.None, 8, StopBits.One)
com1.Handshake = Handshake.None
com1.WriteTimeout = 10
com1.ReadTimeout = 10


Private Sub com1_DataReceived() (sender As Object, e As SerialDataReceivedEventArgs)
Me.BeginInvoke(Sub() PortRead()) 
End Sub

任何帮助都会很感激。由于

Messages recieved from arduino finish in vbcrlf   
私有函数PortRead() As String
Dim msg As String = ""
If Not IsNothing(com1) AndAlso com1.IsOpen Then
tick = True

'string format Capacity tester *C5;V3.22;C102.30;E
'string format 150A tester *!5;V3.22;C102.30;E
Dim MsgIn As String = ""
Try
Try
MsgIn = com1.ReadTo(vbcrlf)
Catch ex As Exception
'Stop
End Try
If MsgIn.Length >= 0 Then
MsgIn = MsgIn.Replace(vbCrLf, "").Trim()
If cb_Date.Checked Then rtb_Serial.Text += DateTime.Now.ToString()
rtb_Serial.Text = MsgIn + vbCrLf + rtb_Serial.Text
If MsgIn.StartsWith("*C") Or MsgIn.StartsWith("*!") Then
Try
Process_Data(MsgIn)
Catch ex As Exception
MessageBox.Show("Message Processing Fail" + vbCrLf + MsgIn, "A15")

End Try
End If
Return MsgIn
Else
Return ""
End If
Catch e As Exception
If Not e.Message = "The operation has timed out." Then
MessageBox.Show("Error Reading Port: " + com1.PortName + vbCrLf + e.Message + vbCrLf + "Port " + com1.PortName + " Closed", "A13")
com1.Close()
End If
End Try
End If
rtb_Serial.Update()
Return msg
End Function

最新更新