以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  在循环中的串口收发速度太快  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=170797)

--  作者:shyilin6
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间: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
--  发布时间:2021/8/8 22:39:00
--  
不是上面都发送完再接受,是发送一条接受一条,这个过程有一个缓冲,不要太快    发送后间隔时间   再接受  是不是Threading.Thread.Sleep(3000)这个?
--  作者:有点蓝
--  发布时间:2021/8/8 23:04:00
--  
那就用Threading.Thread.Sleep