以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  串口连续扫描报超时错误  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=113854)

--  作者:colink
--  发布时间:2018/1/24 10:45:00
--  串口连续扫描报超时错误
串口连续扫描报超时错误,单次扫描并且隔几秒再扫没问题。请帮忙,代码如下:

监视器代码
Forms("数据扫描").Controls("bar").value =e.Port.ReadTo(Chr(10))
串口代码
Dim txt As String=e.Form.controls("com").value
If Ports.Contains(txt) = False Then
    Ports.Add(txt)
End If
If Ports(txt).Isopen=True Then
Ports(txt).Close()
End If
With Ports(txt)
    .Parity = Parity.None
    .Handshake = Handshake.None
    .StopBits = StopBits.One
    .BaudRate = 38400
    .DataBits = 8
    .ReadBufferSize() = 4096
    .WriteBufferSize() = 2048
    .Encoding = Encoding.ASCII
    .Open
End With
messagebox.show("打开成功")

--  作者:有点甜
--  发布时间:2018/1/24 10:47:00
--  
你窗口控件【bar】那里,有没有写有什么代码?或者你窗口那里有没有写什么其它代码?
--  作者:colink
--  发布时间:2018/1/24 10:52:00
--  
目前还没有


--  作者:colink
--  发布时间:2018/1/24 10:53:00
--  
baR控件不会运行其他代码


--  作者:有点甜
--  发布时间:2018/1/24 12:25:00
--  

如果改成这样呢?是否报错?

 

dim str = e.Port.ReadTo(Chr(10))


--  作者:有点甜
--  发布时间:2018/1/24 12:26:00
--  

或者改成这样呢

 

dim str = e.port.ReadExisting


--  作者:colink
--  发布时间:2018/1/24 20:12:00
--  
改为dim str = e.Port.ReadTo(Chr(10))一样报超时错
改为dim str = e.port.ReadExisting不报错,但读出来的数据位数不正确,16位的条码,有时是正确的,有时只有一部分

--  作者:有点甜
--  发布时间:2018/1/24 20:27:00
--  

你试试这样处理

 

vars("str") = vars("str") & e.port.ReadExisting

 

然后在需要的地方,处理str字符串,如

 

Dim str As String = vars("str")
msgbox(str)
Dim i As Integer = str.IndexOf(chr(10))
If i >= 0 Then
    Dim s As String = str.SubString(0, i)
    msgbox(s)
    str = str.SubString(i+1)
    vars("str") = str
End If