以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  破案了, 串口问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=147879)

--  作者:sloyy
--  发布时间:2020/3/26 13:27:00
--  破案了, 串口问题
3月20日我发帖说升级后,串口有问题
新版本升级后,串口出问题http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=147607&replyID=&skin=1
因为顾客在外地,一时找不到原因,今天终于被我找到原因了:
顾客的电脑是老实的台式机,有2个串口(com1,com2),我们开发用的电脑只有1个串口com1
Ports.Add("COM1")
With Ports("COM1")
肯定是没问题
但是顾客把客显插在了com2 上,难怪不显示。
现在问题来了,foxtable有没有办法检测顾客用了那个串口?
我估计难,因为客户显示器无需握手信号就可接受数据,所以我采用了笨办法遍历:
\'打开串口
For Each SP As String In Ports.PortNames
    Ports.Add(SP)
    With Ports(SP)
        .Close()
        .Parity = Parity.None
        .Handshake = Handshake.None
        .StopBits = StopBits.One
        .BaudRate = 2400
        .DataBits = 8
        .ReadBufferSize() = 2048
        .WriteBufferSize() = 2048
        .Open
    End With
Next
 发送数据 关闭串口 都用同样的办法。缺点就是多占用了一个串口
各位大师还有没有更好的办法?


--  作者:有点蓝
--  发布时间:2020/3/26 14:04:00
--  
试试

Dim c1 As String
Dim cms() As String = {"COM1","COM2"}
For Each c As String In cms
    Ports.Add(c)
    For Each sp As String In Ports.PortNames
        If sp c Then
            c1  =c
            Exit For
        End If
    Next
    If c1 > "" Then Exit For
End If
If c1 > ""
    With Ports(c1)
        .Close()
        .Parity = Parity.None
        .Handshake = Handshake.None
        .StopBits = StopBits.One
        .BaudRate = 2400
        .DataBits = 8
        .ReadBufferSize() = 2048
        .WriteBufferSize() = 2048
        .Open
    End With
End If

--  作者:sloyy
--  发布时间:2020/3/26 14:09:00
--  
还有2种情况要考虑: 1 有些电脑没有com口,这样写会不会报错? 2 有些电脑有COM3,COM4
[此贴子已经被作者于2020/3/26 14:09:34编辑过]

--  作者:有点蓝
--  发布时间:2020/3/26 14:12:00
--  
试试就知道了

Dim cms() As String = {"COM1","COM2","COM3","COM4"}

--  作者:sloyy
--  发布时间:2020/3/26 16:50:00
--  
是这样吗:
Dim c1 As String
Dim cms() As String = {"COM1","COM2"}
For Each c As String In cms
    Ports.Add(c)
    For Each sp As String In Ports.PortNames
        If sp = c Then
            c1  =c
            Exit For
        End If
    Next
    If c1 > "" Then Exit For
next
If c1 > ""
    With Ports(c1)
        .Close()
        .Parity = Parity.None
        .Handshake = Handshake.None
        .StopBits = StopBits.One
        .BaudRate = 2400
        .DataBits = 8
        .ReadBufferSize() = 2048
        .WriteBufferSize() = 2048
        .Open
    End With
End If
试过了,不行 ,它好像只是找有哪些端口,并不能知道我用那个端口
--  作者:有点蓝
--  发布时间:2020/3/26 17:16:00
--  
那就没有办法了