Foxtable(狐表)用户栏目专家坐堂 → [求助]串口读取数据问题


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

主题:[求助]串口读取数据问题

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/1 16:21:00 [显示全部帖子]

不能直接用 parity.none 这些值,要对应改成 0、1、2、3 这样

 

0-None
1-Odd
2-Even
3-Mark
4-Space

 

--------------------StopBits 也是

 

0-None
1-One
2-Two
3-OnePointFive

 

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/1 16:24:00 [显示全部帖子]

 你在DataReceived事件,把接收到的信息都打印出来,看是否正确

 

Dim cnt As Integer = e.Port.BytesToRead
If cnt > 0 Then '缓冲区是否有数据
    Dim Val(cnt - 1) As Byte
    e.Port.Read(val,0,cnt)
    For Each s As object In val
        output.show(s & " " & DecToHex(s))
    Next
End If


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/1 17:44:00 [显示全部帖子]

1、不一样的,字符串你不能直接当代码用的;

 

2、不应该,认真对比测试一下,肯定能正常读取到值的


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/2 8:38:00 [显示全部帖子]

以下是引用YDS在2017/11/2 7:54:00的发言:
我再试试,还有就是怎么能把Ports.PortNames获得的串口名称设置为forms("主窗口").Controls("ck").ComboList

 

For Each p As String In Ports.PortNames
    forms("主窗口").Controls("ck").items.add(p)
Next


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/2 8:40:00 [显示全部帖子]

以下是引用YDS在2017/11/2 8:11:00的发言:
    .ReadBufferSize() = 4096
    .WriteBufferSize() =
2048
还有就是这两个属性的具体用法在那里可以查找到

 

这两个的设置基本不影响,这两个是缓冲的大小值,基本都不会超出的。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/2 11:50:00 [显示全部帖子]

1、缓冲区的内容会一直存在,直到满或者被清空。

 

你可以用下面代码获取全部内容。

 

Dim cnt As Integer = Ports("COM2").BytesToRead
If cnt > 0 Then '缓冲区是否有数据
    Dim Val(cnt - 1) As Byte
    Ports("COM2").Read(val,0,cnt)
End If

 

其中一个属性 ReceivedBytesThreshold 整数型,获取或设置触发DataReceived事件前内部输入缓冲区中至少应该有的字节数。

 

2、

 

Dim cnt As Integer = Ports("COM2").BytesToRead
If cnt > 0 Then '缓冲区是否有数据
    Dim Val(cnt - 1) As Byte
    Ports("COM2").Read(val,0,cnt)

    For Each s As object In val
        output.show(s & " " & DecToHex(s))
    Next


End If

 


 回到顶部