vb 串口编程 mscomm控件和串口API的InBufferSize的问题(50分)

  • 主题发起人 主题发起人 wjwwj
  • 开始时间 开始时间
W

wjwwj

Unregistered / Unconfirmed
GUEST, unregistred user!
vb 串口编程:
使用mscomm控件时,我要一下子将单片机里面的4000或者更多的数据读出来,每条数据有16个字节,但我发现inbuffersize最多可以设置成32600多而已。没法一下全部读出来,有没有办法将inbuffersize设置成更大的值,用串口API的InBufferSize可以吗?
我发现用VC写的,同样也是用MSCOMM,读同样的数据,却可以读到4000条以上。
我只有怎么多分了,希望各位不吝赐教,谢谢
 
vc是一次读入吗?
mscomm缓冲区有数据时会触发事件让你取出数据,
你取出以后并不会影响单片机继续发数据吧?
最多把两次的数据放一起。
 
不会影响单片机继续发数据
我就是根据VC的哪个程序一样处理的
我是发个命令给单片机让他把所有的数据都发
然后单片机不断发数据到MSCOMM的缓存,我不断的到缓存里面用下面的程序
L_RecBuffLen = 16
ReDim InBuffer(L_RecBuffLen)
MSCom_Assess.InputLen = L_RecBuffLen
InBuffer = MSCom_Assess.Input
取走缓存里面的数据,这里我不清楚MSCOMM的缓存里会不会将数据依次向前移,再将后面发过来的数据放到后面,不过我感觉没有,就算我将前面的读空了,单片机发到我定义的inbuffsize的最大值时就不会发了。
所以
“最多把两次的数据放一起。”是不可以的
 
既然你已经可以正确的读出数据,不就很好吗?
你想一次就处理完啊,
 
是啊,但是最多只能读3000条左右
 
概念错误
 
我就是在取走缓存里面的数据这里不清楚MSCOMM的缓存里会不会将数据依次向前移,再将后面发过来的数据放到后面,这样不断持续下去,直到数据发完
 
串口UART即统一异步接收发送器 做了很多协议和检错的工作,所以导致你对缓冲区的内幕不了解,缓冲区的数据取出后就被移走了,不会再占用缓冲区,
 
建议访问http://zhaokaien.17757.com里面有关于串口通信很详细的资料,你可好好研究一下
 
那取走MSCOMM的缓存里会不会将数据依次向前移,再将后面发过来的数据放到后面,这样不断持续下去,直到数据发完
 
你可以放心的处理。
可以这样理解,
mscomm接收事件触发—》取出数据放入一个公共变量rec_str(这个时候可能没有传输完成)-》mscomm接收事件再次触发->取出数据放入rec_str:=rec_str+本次接收的数据->......
可以一直这样下去,知道单片机全部数据发送完毕。(通常会有一个完整包结束标识吧?你应该监测这个标识。)
 
我的inbuffsize设置为32600,我每次读16个字节,0.1秒读一次,单片机里面有5000条数据,每条也有16个字节,是按9600.n.0.1来发的,我按照我上面说的方法读数据,会不会出现来不及读数据,前面的数据被后面发的冲掉了
 
还是使用代码运行测试,这样说一点用处没有。已经说的很清楚了,只要你不停的去缓冲区读就不会有问题。
 
多人接受答案了。
 
后退
顶部