实时从串口接收数据VB.net
Receive data from serialport in realtime VB.net
我创建此代码是为了从串行端口 (com) 接收数据
Private port As New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
Function ReceiveSerialData() As String
Dim returnStr As String = ""
Dim com1 As IO.Ports.SerialPort = Nothing
Try
port.Open()
port.ReadTimeout = 1000
Dim Incoming As String
Incoming = port.ReadLine()
returnStr = Incoming
Catch erreur As IOException
returnStr = "Check Port"
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Finally
If port IsNot Nothing Then port.Close()
End Try
Return returnStr
End Function
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Label2.Content = ReceiveSerialData()
End Sub
我想创建一个事件,以便在数据实时更改时重新执行此代码。
我的表格是这样的:
有什么建议吗?
好吧,您始终可以使用评论中提到的某种形式的 Do While True。不理想但是...
这是您的代码的修改版本,将阅读部分包含在不同的线程中。当它读到一些东西时,它会引发一个您可以订阅的事件(或者您可以在阅读后直接将文本放入您的控件中)。该端口一直保持打开状态,因此在此示例中,它在关闭表单时关闭。
试试看是否适合你。
Private port As New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
Private rdthread As System.Threading.Thread
Event PortData(ByVal Message as String)
Private Sub readPort()
Do While True
Try
Dim message As String = port.ReadLine()
RaiseEvent PortData(message)
System.Threading.Thread.Sleep(0)
My.Application.DoEvents()
Catch ex As Exception
Exit Do
End Try
Loop
End Sub
Private Sub HandleData(ByVal message as string) Handles Me.PortData
Label2.Content = message
End Sub
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
InitPort()
End Sub
Private Sub Window_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Try
If port.IsOpen Then port.Close()
Finally
port.Dispose()
End Try
End Sub
Sub InitPort()
Dim com1 As IO.Ports.SerialPort = Nothing
Try
port.Open()
port.ReadTimeout = 1000
rdthread = New System.Threading.Thread(AddressOf readPort)
rdthread.Start()
Catch erreur As IOException
returnStr = "Check Port"
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Catch ex as Exception
End Try
End Sub
我创建此代码是为了从串行端口 (com) 接收数据
Private port As New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
Function ReceiveSerialData() As String
Dim returnStr As String = ""
Dim com1 As IO.Ports.SerialPort = Nothing
Try
port.Open()
port.ReadTimeout = 1000
Dim Incoming As String
Incoming = port.ReadLine()
returnStr = Incoming
Catch erreur As IOException
returnStr = "Check Port"
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Finally
If port IsNot Nothing Then port.Close()
End Try
Return returnStr
End Function
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Label2.Content = ReceiveSerialData()
End Sub
我想创建一个事件,以便在数据实时更改时重新执行此代码。
我的表格是这样的:
有什么建议吗?
好吧,您始终可以使用评论中提到的某种形式的 Do While True。不理想但是...
这是您的代码的修改版本,将阅读部分包含在不同的线程中。当它读到一些东西时,它会引发一个您可以订阅的事件(或者您可以在阅读后直接将文本放入您的控件中)。该端口一直保持打开状态,因此在此示例中,它在关闭表单时关闭。
试试看是否适合你。
Private port As New SerialPort("COM1", 9600, Parity.None, 8, StopBits.One)
Private rdthread As System.Threading.Thread
Event PortData(ByVal Message as String)
Private Sub readPort()
Do While True
Try
Dim message As String = port.ReadLine()
RaiseEvent PortData(message)
System.Threading.Thread.Sleep(0)
My.Application.DoEvents()
Catch ex As Exception
Exit Do
End Try
Loop
End Sub
Private Sub HandleData(ByVal message as string) Handles Me.PortData
Label2.Content = message
End Sub
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
InitPort()
End Sub
Private Sub Window_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Try
If port.IsOpen Then port.Close()
Finally
port.Dispose()
End Try
End Sub
Sub InitPort()
Dim com1 As IO.Ports.SerialPort = Nothing
Try
port.Open()
port.ReadTimeout = 1000
rdthread = New System.Threading.Thread(AddressOf readPort)
rdthread.Start()
Catch erreur As IOException
returnStr = "Check Port"
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Catch ex as Exception
End Try
End Sub