串口类 SerialPort 断开后重新打开的问题?
wopos 2007-12-06 10:40:52 大家好:
我利用 .Net2.0中的 SerialPort类来访问串口,我要求串口连接如果中途断开了,需要自动重新连接,我写了如下代码:
Private WithEvents COMPort As New SerialPort
Private Timer1 As System.Timers.Timer '声明两个变量
Private Sub FrmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
COMPort.PortName = "COM3"
COMPort.BaudRate = 57600
COMPort.Parity = Parity.None
COMPort.DataBits = 8
COMPort.StopBits = StopBits.One
COMPort.Handshake = Handshake.None
COMPort.ReadTimeout = 100
COMPort.Open() '打开串口 ,然后接收数据等工作正常。
Timer1 = New Timer
Timer1.Interval = 2000
AddHandler Timer1.Elapsed, AddressOf Timer1_Tick
Timer1.Start '开启时钟
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
If COMPort.IsOpen = False Then '如果发现 IsOpen=False 即连接已经断开,例如把串口线拔掉。
COMPort.Close
Threading.Thread.Sleep(1000) ' 此时串口线已经重新连接上。
dim portNames() as string =SerialPort.GetPortNames
dim ComName as string =portNames(0) ' ComName="COM3" 能发现串口 COM3
COMPort.PortName = ComName
COMPort.Open '尝重连时总是提示“The Port "COM3" does not exist"
End If
End Sub
如果中途把串口拔掉,程序中有一个时钟一直在监视连接情况的,这时会检测到串口 已经断了,然后多次尝试再次连接,如果这时再把串口线接上,就应该会自动再打开串口。现在的问题是当线接上,尝试再打开时总是提示串口不存在。
VB.net代码,很简单,因为C#人气足,高手多,所以发这里了,请见谅。
求一个解决方案,谢谢。