用MSCOMMON控件来实现通讯,我一次从仪表读取20个参数,具体在程序里面这么写:
MSCOMM1.OUTPUT = "......" //第一个仪表的读命令
sleep(150)
MSCOMM1.OUTPUT = "......" //第二个仪表的读命令
sleep(150)
......
MSCOMM1.OUTPUT = "......" //第二十个仪表的读命令
sleep(150)
这样做会出现一个问题,就是一点“读数据”按钮的时候,程序在读取仪表数据的时候会定住一段时间。不知道各位大侠有什么
好办法来解决这个问题?谢谢!
MSCOMM1.OUTPUT = "......" //第一个仪表的读命令
sleep(150)
MSCOMM1.OUTPUT = "......" //第二个仪表的读命令
sleep(150)
......
MSCOMM1.OUTPUT = "......" //第二十个仪表的读命令
sleep(150)
这样做会出现一个问题,就是一点“读数据”按钮的时候,程序在读取仪表数据的时候会定住一段时间。不知道各位大侠有什么
好办法来解决这个问题?谢谢!
timer1.enable=ture
Do While True DoEvents (在timer 中 延时150毫秒 让后让flag=true)
if flag=ture then exit sub
Loop
Dim Start As Single
Start = Timer ' 设置开始暂停的时刻。
Do While Timer < Start + PauseTime
DoEvents
Loop
End Sub
'
MSCOMM1.OUTPUT = "......" //第一个仪表的读命令
Delay 0.2'延迟
MSCOMM1.OUTPUT = "......" //第二个仪表的读命令
Delay 0.2
......
MSCOMM1.OUTPUT = "......" //第二十个仪表的读命令
Delay 0.2
解决这个问题的办法是在发送间隔增加延时,可以用sleep,也可以自己用timer控件写。前者的缺点是sleep的时候会造成你的整个应用程序没有响应,此间,如果你要产生oncome时间就会失败,所以最好使用后者,在timer里延时,别忘了加doevents哦!
可以用onComm事件,也可以用循环,但是必须要有判断数据是否正确和数据是否已经读取完毕的语句,在读取完毕上一条数据的前提下再使用延迟,这样才能保证你的数据的完整性和准确性。
建议用延迟函数() '参照楼上
觉得这个和VB的数据传输机制有关.数据传送的时候,并不是楼主所设想的那样,收到第一个数据,然后150ms后,收到第二个数据。我也遇到过同样的问题,点击按钮的时候,不管数据量多大,都是在接收框一下收到,如果数据量很大,那么,就会出现楼主谈到的问题,"定住一段时间".不过,如果影响不大,可以随它去.
最近怎么这么多问串口操作的?
你把要发送的数据定义成数组发送不就成了么:)
谢谢大虾,经你提醒,定义了一个足够大的字符数组,结果显示,在每次间隔足够(相比单片机接收的时间间隔)的情况下,效果良好。谢谢您啊!