Foxtable(狐表)用户栏目专家坐堂 → 破案了, 串口问题


  共有2608人关注过本帖树形打印复制链接

主题:破案了, 串口问题

帅哥哟,离线,有人找我吗?
sloyy
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13810 威望:0 精华:2 注册:2012/2/25 10:59:00
破案了, 串口问题  发帖心情 Post By: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
 发送数据 关闭串口 都用同样的办法。缺点就是多占用了一个串口
各位大师还有没有更好的办法?


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13810 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By:2020/3/26 14:09:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/26 14:12:00 [只看该作者]

试试就知道了

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

 回到顶部
帅哥哟,离线,有人找我吗?
sloyy
  5楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2180 积分:13810 威望:0 精华:2 注册:2012/2/25 10:59:00
  发帖心情 Post By: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
试过了,不行 ,它好像只是找有哪些端口,并不能知道我用那个端口

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107147 积分:544978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/26 17:16:00 [只看该作者]

那就没有办法了

 回到顶部