spcomm第一次接收数据问题 ( 积分: 300 )

  • 主题发起人 主题发起人 哈利波特
  • 开始时间 开始时间

哈利波特

Unregistered / Unconfirmed
GUEST, unregistred user!
运行程序,接收数据,错误的数据
关闭程序,打开Windows的超级终端,接收数据
关闭超级终端,打开我的程序,接收数据,正确的数据

这是为什么啊?
 
运行程序,接收数据,错误的数据
关闭程序,打开Windows的超级终端,接收数据
关闭超级终端,打开我的程序,接收数据,正确的数据

这是为什么啊?
 
你的一帧数据有多少字节,SPCOMM靠帧间隔时间来确定一帧数据的接收完成,要是不间断的向SPCOMM发送数据也许会有你说的问题。
 
不全??是部分数据丢失,还是一桢没有接收完整呀..????
 
是部分数据丢失
数据来自一个文本文件,有28行
每行有50个字符
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3071598
 
9600波特率一秒只能往缓冲里面写入1200多个字节!
波特率/8=每秒接收字节数
所以,不管你的帧有多大,都要符合这个规律!
解决的方法是自己加一个缓冲处理:
开一个大队列,将收到的数据入队列!
判断收到完整的帧后,处理队列!
 
楼上说法不太对吧,波特率定了,每秒向缓冲区里写入的最大数据量也就定了,不可能超出。
测试一下,如果只在数据帧长度大于缓冲区长度时丢数据,那就是缓冲区溢出了。
 
不错楼主说的问题我也遇到过,已经解决了,但是已经很久了.如果可以的话你把你的代码发过来看看,看我能不能帮上你的忙.gfansenhua@163.com
 
楼上为何到处叫人给你发代码?????????
 
哦,这个问题可以大家讨论一下的,我开个群一起研究吧.QQ群号:2000202
 
这两天做了一个数据量比较大的,一帧数据10K左右,未发现丢数据,是分几次收完的,缓冲区满会触发接收事件,所以缓冲区溢出的可能也不大。
但是我发现了一个问题也许和你的情况一样。
我把几次接收的数据放到MEMO里,最后数MEMO的数据长度,总长度就会少。
如果把几次BufferLength的值累加数据就是完全正确的长度,所以问题出在MEMO上,与SPCOMM无关,具体原因还没时间细查,可能是某些字符被MEMO认做了控制字符。
 
调整SPCOMM的等待时间,可以解决问题
outputtimeout和inputtimeout的值!
 
应该不会,你光读应该没有问题的,可能是你的读写没有协调好,我的做法是把读入的数据全部都放到一个字符串里面,然后另外一个对象去处理这个字符串,处理一些截取一些,然后决定是否发送回去等等,
 
是不是特定字符丢失?比如每遇到12就丢失?
 
还有问题就是xor等的设置问题
 
我用COMPORT做过测试,在ONRXCHAR事件下第一次读,只能读到8个字节。先不读,延迟一定时间再读,就可以全部读到了。
如果不用ONRXCHAR事件,这样:
WRITE。。。
DELAY。。。这里延迟一定时间
READ。。。
 
你把你的接收代码贴上来,大家分析一下看看
 
多人接受答案了。
 
后退
顶部