spcomm长时间接收,大数据量,怎么显示接收进程。(100分)

  • 主题发起人 主题发起人 felong11
  • 开始时间 开始时间
F

felong11

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟做的一个与单片机通信的小程序。用spcomm控件实现。
要接受大量的数据,因为波特率很低,时间就变得很长,我怎么样才能显示接收的进程呢。
pc端发出读命令后,
单片机发出格式为
要传送的信息条数n+信息1+…………+信息n
大概有一万条左右,
我怎么知道传送到哪里了?
 
如果知道信息格式事情不是非常简单吗?
在OnReceiveData事件中处理不行吗?
有个好的建议:将SpComm控件的INPUTBUFFERSIZE常量改小一些,这样会有好的响应.
我的经验值对于低波特率的系统来说是256字节.当然你得有SpComm的源代码才行.
 
在开始传输的时候把要传输的字节数传输过来,在onrecieve事件里统计接受的字节数就
可以了
 
能不能给个demo??
谢谢
 
to barton
因为数据量大,我发现会多次调用onreceviedata事件,因而每次接收缓冲区都会改变。
我传输的是大数据量,如果inputbuffer小的话,我怎么才能接受大数据量

是不是说如果输入数据缓冲区满的话就会触发onreceviedata事件?
spcomm的默认的输入缓冲区是4096字节。
 
to donkey
数据帧如上所说的。
一开始首先传来了信息的条数,接着就是信息了。
我一开始尝试使用定时器隔一段时间去查一次,(我假定在这段时间内肯定接受完),这
样的话在小数据量的时候没错,一旦大数量的时候就不行了,定时器的时间就不好设了。
他会多次触发onrecevedata事件。我的怎么才能知道进来多少数据?
 
也许是你的接收事件处理代码有问题,每次接收以后应该清除缓存的,否则就可能引起
错误。比如说多读,无法知道接收的起始等等
 
但是,spcomm会自动清除发送缓冲区的不是吗?
 
清除接收缓冲区,不是发送的。
 
spcomm没有默认缓冲区大小一说,是不可改变的,除非修改程序。
如果缓冲区太大,而波特率太小要等到缓冲区满了或者等候时太会触发OnReceiveData事件。
OnReceiveData事件是由读线程触发的。缓冲区改小后,你的事件触发次数多了,当然可以检
测到数据接收进度了。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部