Foxtable(狐表)用户栏目专家坐堂 → 在循环中的串口收发速度太快


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

主题:在循环中的串口收发速度太快

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


加好友 发短信
等级:婴狐 帖子:35 积分:294 威望:0 精华:0 注册:2021/7/18 21:37:00
在循环中的串口收发速度太快  发帖心情 Post By:2021/8/7 18:10:00 [只看该作者]

 Dim max As Integer =40
                Dim start As Integer =0
                Dim a As Integer
                Dim b As Integer
                Dim st As String =""
                For i As Integer  = 1 To max/2
                    a = start
                    b = start + 2
                    start= start+3
                    If start>max Then
                        a =start-3
                        b = max
                        Exit For
                    End If
                    st = cstr(DecToHex(a)).PadLeft(8,"0") & cstr(DecToHex(b)).PadLeft(8,"0")
                    Dim st1 As String =DecToHex(dr("地址")) & "65090D" & st
                    Functions.Execute("sendstr",st1,dr("串口号"))    '发送代码
                    
                    Dim cnt As Integer =  Ports(dr("串口号")).BytesToRead  '接受设备反馈回来的代码
                    Dim str As String=""
                    If cnt > 0 Then '缓冲区是否有数据
                        Dim rval(cnt - 1) As Byte
                        Ports(dr("串口号")).Read(rval,0,cnt)
                        str =BitConverter.ToString(rval).Replace("-", "")
                        Dim dr1 As DataRow =DataTables("日志信息").AddNew
                        dr1("记录信息")="【接收数据】" & str
                        dr1("记录时间")=  Date.Now
                        dr1.Save
                    End If
                    
                   
                Next
                
问题是:当循环进行的时候速度太快,设备都来不及反应。怎么才能让循环慢慢进行,比如说  发送和接受全部数据后再下一轮发送,请老师帮忙解决一下  谢谢
[此贴子已经被作者于2021/8/7 18:10:42编辑过]

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/8 20:10:00 [只看该作者]


do while true
                    Dim cnt As Integer =  Ports(dr("串口号")).BytesToRead  '接受设备反馈回来的代码
                    Dim str As String=""
                    If cnt > 0 Then '缓冲区是否有数据
                        Dim rval(cnt - 1) As Byte
                        Ports(dr("串口号")).Read(rval,0,cnt)
                        str =BitConverter.ToString(rval).Replace("-", "")
                        Dim dr1 As DataRow =DataTables("日志信息").AddNew
                        dr1("记录信息")="【接收数据】" & str
                        dr1("记录时间")=  Date.Now
                        dr1.Save
exit do
                    End If
loop                    
                   
                Next

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


加好友 发短信
等级:婴狐 帖子:35 积分:294 威望:0 精华:0 注册:2021/7/18 21:37:00
  发帖心情 Post By:2021/8/8 22:39:00 [只看该作者]

不是上面都发送完再接受,是发送一条接受一条,这个过程有一个缓冲,不要太快    发送后间隔时间   再接受  是不是Threading.Thread.Sleep(3000)这个?

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/8/8 23:04:00 [只看该作者]

那就用Threading.Thread.Sleep

 回到顶部