串口在115200的波特率下传输数据时丢包的情况有没有什么好的解决方法?欢迎大家讨论。使用SPCOMM控件(100分)

谢谢zhanggm关注,我不会用没有源代码的控件。

大家继续关注!
 
应该跟机子上串口的硬件有关系,速率太高出错也会高,校验也不是根本方法
有本书是串行开发指南,有源代码,可以看看他是怎样封装Windows 串行Api的
Mscomm好像是消息机制,有代码在运行时会延时触发OnRead
 
我手头有一本《Delphi与RS-232串行通信控制》,范逸之 陈立元编著,感觉这本书还不错。
 
你把SPCOMM的comm1.ReadIntervalTimeout设小一点(如10)试试。
 
谢谢南宫先生,我暂时没办法测,没有环境。明天我试试。
希望大家继续关注,也算是大家对串口编程经验的一个总结,
以便以后有人全文检索发现这个帖子时能有所收获。
 
你有多少字节
你可能方法不当
以前我也出现过,解决后速度还可以
 
mylovegirl:数据量可能会很大,否则不会用115200的波特率。

现在的这个程序在一个同学的帮助下,修改了一下SPComm的源代码,
已经把丢包率由原先的5%~6%减少到2%~3%,但是还需要继续完善。
 
发送包和接受包数据长度定吗?如果定的,请查看SPCOMM的属性。我这里没有装DELPHI,所以。。。

建议你检查设备响应延迟时间,优化你的程序。

另外问一下,如果你觉得在高速率下丢包,那么你是否做过9600这档的测试呢?

你现在的通讯时间是多少ms一个问答。

spcomm你同学修改了哪些部分呢?将你的掉包率大大提高了。。。呵呵


 
丢失包的情况估计是和波特率误差有关,还有单片机处理的效率,及通讯硬件
 
以前我写的一个程序用9600的波特率,丢包十分严重,十包九丢
波特率改为4800,一个也不丢了,效率高多了,

减小包的大小,也可以减少丢包率,
ATM的数据包,多小啊
 
同意楼上的,测试结果证明这种串口通信只有在波特率小于9600才可以实用化,没办法
如果加自己的校验,应该是可以实现的
 
lp414, 在每次接收完数据后调用一次PurgeComm函数就达到了那种效果。
 
SPCOMM控件默认属性是使用软件流控制的,这样会丢失#19和#17两个字符。
请把Outx_XonXoffFlow和Inx_XonXoffFlow的属性改为False试一试。
 
谢谢hdfsun的关注。
这样设置过了,否则情况更严重。


周末结贴吧。
 
看看这个贴子http://www.delphibbs.com/delphibbs/dispq.asp?lid=1548794
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
901
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
573
import
I
顶部