当前位置:编程学习 > VB >>

急求 mscomm 自动搜索端口号 方法

我用VB6的mscomm来完成pc机与其它设备的串口通讯,但是在应用中可能出现端口号不同,程序都要正确运行的问题,比如我把其它设备通过串口插入comm1那么commport=1;如果把设备通过串口插入comm2那么commport=2。如果端口号设置错误就会报错,而且连on error 都解决不了。
我想问一下各位大侠怎么实现自动搜索端口号呢? --------------------编程问答-------------------- 没法搜,只能指定。你可以将每个端口都打开一遍,然后发送数据,看看哪个正确哪个就是了。 --------------------编程问答--------------------

Private Function funCommPortDetect(PortNumber As Integer) As Integer
    On Error Resume Next'//屏蔽错误
    MSComm0.CommPort = PortNumber'//指定端口号
    MSComm0.PortOpen = True'//打开端口
    If Err Then'//如果端口不存在产生错误
        funCommPortDetect = -1'//返回-1
    Else'//端口存在返回当前端口号
        funCommPortDetect = PortNumber
    End If
    MSComm0.PortOpen = False'//关闭打开的端口
End Function

Public Function CommPortFix() As String
    Dim intCommPortNumber As Integer, blnFirst As Boolean
    Dim strResult As String
    On Error Resume Next    '//屏蔽错误
    For intCommPortNumber = 1 To 16'//一般机器上不超过16个串口
        If funCommPortDetect(intCommPortNumber) <> -1 Then
            strResult = strResult & " " intCommPortNumber'//如果存在串口1,2,5.则结果strResult=1 2 5
        End If
    Next
    CommPortFix = strResult'//返回结果
End Function

调用的时候直接令一字符变量strString=CommPortFix()即可,得到的字符串自己可以用Split处理.如果想先预处理,返回一个数组的话可以如下定义CommPortFix()函数:

Public Function CommPortFix() As String()
    Dim intCommPortNumber As Integer, blnFirst As Boolean
    Dim strResult As String
    On Error Resume Next    '屏蔽错误
    blnFirst = True
    For intCommPortNumber = 1 To 16
        If funCommPortDetect(intCommPortNumber) <> -1 Then
            If blnFirst Then
                strResult = "COM" & intCommPortNumber
                blnFirst = False
            Else
                strResult = strResult & " " & "COM" & intCommPortNumber
            End If
        End If
    Next
    CommPortFix = Split(strResult, " ")
End Function

如果存在串口1,2,5,定义一个数组,Dim arrString() As String,arrString=CommPortFix().这样arrString(0)="COM1",arrString(1)="COM2",arrString(2)="COM5". --------------------编程问答-------------------- 如果有什么问题请指正
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,