j = 0
For i = 1 To 16 Step 1
If comISP.PortOpen = True Then '先关闭串口
comISP.PortOpen = False
End If
comISP.CommPort = i
On Error Resume Next '说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用 On Error GoTo。
comISP.PortOpen = True
If Err.Number <> 8002 Then '无效的串口号。这样可以检测到虚拟串口,如果用Err.Number = 0的话检测不到虚拟串口
If j = 0 Then
j = i
End If
cboPort.AddItem "COM" & i '生成串口选择列表
End If
comISP.PortOpen = False
Next i
If j >= 1 Then
cboPort.Text = "COM" & j '自动打开可用的最小串口号
comISP.CommPort = j
comISP.PortOpen = True
cmdOpenCom.Caption = "关闭串口"
shpCOM.FillColor = vbGreen
If Err.Number = 8005 Then '串口已打开,vbExclamation '
comISP.PortOpen = False
cboPort.Text = ""
cmdOpenCom.Caption = "打开串口"
shpCOM.FillColor = vbRed
End If
End If
Private Sub Form_Load()
On Error GoTo errline '如果出错,进入错误处理程序
Dim i As Integer '定义可访问的串口总数
Dim Counter As Integer '用于记录经检查可以使用的串口号
'=======================初始化串口列表====================
Counter = 0 '计数器清零
For i = 1 To 16 '循环检查可能存在的16个串口
MSComm1.CommPort = i '依次打开每个串口
MSComm1.PortOpen = True '打开串口
If MSComm1.PortOpen = True Then '如果打开成功,说明该串口可用
MSComm1.PortOpen = False '检查完毕,关闭串口
Combo1(0).AddItem "COM" + CStr(i), Counter '将可用串口增加到组合框
Counter = Counter + 1 '计数器加1
End If
Next i
Combo1(0).ListIndex = 0 '将第一个可用串口设为默认值
'=======================初始化波特率列表====================
Dim Baud As Integer
Counter = 0 '计数器清零
Baud = 1200
While Baud <= 115200 '依次列出1200-15200的波特率
Combo1(1).AddItem CStr(Baud), Counter
Baud = Baud * 2
Wend
Exit Sub
errline:
If Err.Number = 8005 Then '若有的串口已被其他程序打开,也应该将其加入组合框内
Combo1(0).AddItem "COM" + CStr(i), Counter '将可用串口增加到组合框内
Counter = Counter + 1 '计数器加1
End If
Resume Next '回到出错入口处,继续执行巡检串口程序
End Sub