今天在开发一个APP控制串口软件,用的是MSCOMM控件,存在一个问题就是下位机上电或者重启时,APP就接不到数据了,有遇到过的吗?程序如下:
Private Sub Command1_Click()
On Error Resume Next '//屏蔽错误
If MSC.PortOpen = False Then
MSC.CommPort = Combo1.ListIndex + 1
MSC.Settings = "9600,N,8,1"
MSC.RThreshold = 1
MSC.SThreshold = 0
MSC.InBufferSize = 512
MSC.OutBufferSize = 512
MSC.InputLen = 0
MSC.OutBufferCount = 0
MSC.InBufferCount = 0
MSC.PortOpen = True
'T1 = Combo1.ListIndex
Command1.Caption = "关闭串口"
LED.BorderColor = &HFF&
Else
Dim buffer() As Byte, CharCount As Integer
CharCount = MSC.InBufferCount
If CharCount > 0 Then
ReDim buffer(0 To CharCount - 1)
MSC.InputLen = CharCount
buffer = MSC.Input
End If
MSC.PortOpen = False
Command1.Caption = "打开串口"
LED.BorderColor = &H0&
End If
If Err Then '//如果端口不存在产生错误
MsgBox "端口无效", 16, "错误提示"
MSC.PortOpen = False
Command1.Caption = "打开串口"
LED.BorderColor = &H0&
Else '//端口存在返回当前端口号
' Command1.Caption = "关闭串口"
' LED.BorderColor = &HFF&
End If
End Sub
Private Sub MSC_OnComm()
On Error Resume Next '//屏蔽错误
Static blIsOnComm As Boolean
If blIsOnComm = True Then Exit Sub
blIsOnComm = True ' 正在执行MSComm11_OnComm,防止重入
If MSC.CommEvent <> comEvReceive Then Exit Sub ' 接收事件
Dim CharCount As Integer
Dim buffer() As Byte
CharCount = MSC.InBufferCount
ReDim buffer(0 To CharCount - 1)
MSC.InputLen = CharCount
buffer = MSC.Input
Dim i As Byte
For i = 0 To CharCount - 1 '数据多放了一位造成的 多一位现象
If receNum > 20 Then
receNum = 0
MsgBox "接收数据大于20个!", 16, "错误提示"
End If
receArray(receNum) = buffer(i)
receNum = receNum + 1
Next i
receTime = 6
'If Err Then '//如果端口不存在产生错误
' MsgBox MSC.CommEvent & " " & receNum, 16, "错误提示"
' Err.Clear
'End If
blIsOnComm = False
End Sub