原来我的串口程序出了问题,
后来在高手指教下改正过来为每次在退出程序的时候都会先关闭串口再退出。
可是后来操作的时候有一次忘记关闭串口就退出了,下次再打开就提示错误,串口已打开。然后就算我换了其他串口也不行。不知道怎么了。代码如下:
Private Sub Form_Load()
MsgBox MSComm1.PortOpen
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
Command2_Click
End SubPrivate Sub Command2_Click()
On Error GoTo errhandler
With MSComm1
.CommPort = 3
.Settings = "19200,N,8,2"
If .PortOpen = False Then
.PortOpen = True
End If
End With
MsgBox MSComm1.PortOpen
'Exit Sub
errhandler:
If Err > 0 Then MsgBox "串口已打开"
MsgBox MSComm1.PortOpen
End SubPublic Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False '退出时关掉端口
End SubPrivate Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Dim buffer As Variant
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
Case Else
End Select
End Sub再麻烦高手帮我看看,谢谢
后来在高手指教下改正过来为每次在退出程序的时候都会先关闭串口再退出。
可是后来操作的时候有一次忘记关闭串口就退出了,下次再打开就提示错误,串口已打开。然后就算我换了其他串口也不行。不知道怎么了。代码如下:
Private Sub Form_Load()
MsgBox MSComm1.PortOpen
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
Command2_Click
End SubPrivate Sub Command2_Click()
On Error GoTo errhandler
With MSComm1
.CommPort = 3
.Settings = "19200,N,8,2"
If .PortOpen = False Then
.PortOpen = True
End If
End With
MsgBox MSComm1.PortOpen
'Exit Sub
errhandler:
If Err > 0 Then MsgBox "串口已打开"
MsgBox MSComm1.PortOpen
End SubPublic Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False '退出时关掉端口
End SubPrivate Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Dim buffer As Variant
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
Case Else
End Select
End Sub再麻烦高手帮我看看,谢谢
后来在高手指教下改正过来为每次在退出程序的时候都会先关闭串口再退出。
可是后来操作的时候有一次忘记关闭串口就退出了,下次再打开就提示错误,串口已打开。然后就算我换了其他串口也不行。不知道怎么了。代码如下:
Private Sub Form_Load()
MsgBox MSComm1.PortOpen
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
Command2_Click
End Sub Private Sub Command2_Click()
On Error GoTo errhandler
With MSComm1
.CommPort = 3
.Settings = "19200,N,8,2"
If .PortOpen = False Then
.PortOpen = True
End If
End With
MsgBox MSComm1.PortOpen
'Exit Sub
errhandler:
If Err > 0 Then MsgBox "串口已打开"
MsgBox MSComm1.PortOpen
End Sub Public Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False '退出时关掉端口
End Sub Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Dim buffer As Variant
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
Case Else
End Select
End Sub
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
MsgBox "串口已打开"
Else
End If
End SubPublic Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MsgBox "关掉串口"
End If
End SubPrivate Sub MSComm1_OnComm()
Dim buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
End Select
End Sub
MSComm1.CommPort = 3
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
MsgBox "串口已打开"
Else
End If
End SubPublic Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MsgBox "关掉串口"
End If
End SubPrivate Sub MSComm1_OnComm()
Dim buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
End Select
End Sub
是用2个form,原给出代码考虑有MSComm控件窗体仅加载到内存,不作显示的。
实际上尽量少用MsgBox函数,特别是在接收代码中,它会干扰正常接收。
结合在那个贴的答复和本贴答复:'Form1的代码:
Option ExplicitPrivate Sub Command1_Click()
Form2.MSComm1.Output = "aaa"
End SubPrivate Sub Form_load()
Load Form2
End Sub'Form2的代码:
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
MsgBox "串口已打开"
Else
End If
End SubPublic Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MsgBox "关闭会串口"
End If
End SubPrivate Sub MSComm1_OnComm()
Dim buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
End Select
End Sub
'Form1的代码:
Option ExplicitPrivate Sub Command1_Click()
Form2.MSComm1.Output = "aaa"
End SubPrivate Sub Form_load()
Load Form2
End Sub'Form2的代码
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.RThreshold = 1
MSComm1.Settings = "19200,N,8,2"
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
MsgBox "串口已打开"
Else
End If
End SubPublic Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MsgBox "关闭会串口"
End If
End SubPrivate Sub MSComm1_OnComm()
Dim buffer As Variant
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeText
buffer = MSComm1.Input
'Form1.Text2.Text = buffer
Form1.List1.AddItem buffer
End Select
End Sub
提问者对于答案的评价:
呵呵,看了很多你很多别的回答,看来你是专门解答串口问题的,还是要给你分的你太强了,谢谢哈