串口接收数据出错,数据多了几个?为什么? 600分! (200分)

  • 主题发起人 主题发起人 missqiao
  • 开始时间 开始时间
我把我的程序做了些改进,发现了以下情况:
正确的数据为:ABCDEFGHIJKLMNOP 16位数据
但是我得的是:ABCDEFGH##########IJKLMNOP##########
8位 10位 8位 10位
#是多余的,前十位和后十位是相同的。
我怀疑是串口的接收缓冲区先接收前18位数据,再接收后18位数据,因为我的
INPUTBUFFERSIZE和OUTPUTBUFFERSIZE是18,但是我把它改为16和8得到的结果还是一样,
改为小于8就出错了。我真是不明白它是怎么接收数据的,
究竟怎么做才能得到正确的数据?
在此我先谢谢楼上几位朋友的回答。
 
分少吗?我共有600分,会全部散给大家的。

哪位有DataPacket的例子或源码,我在大富翁上看到过,一不小心没有保存,
哪位好心的大富翁能提供给我,另外200分酬谢。
 
datapacket的中文资料我也没有,我也是看他的帮助。很简单的,设置几个属性就可以了
具体情况与和我联系,qq:46524223
 
我最近也出现过这种情况,不过和你说的不一样。。我是把串口打开后,发送和接受正常
但是我把串口关闭键点击后,在打开串口,接收地都是乱码,怎么也想不通,我想还是程序设计出的问题
 
我查询了每次接收的INPUTCOUNT,(the number of bytes in input buffer)
接收缓冲区字节的数量是:8,我设想如果是16那就一定没有问题了,
但是它是不能被设置的,做过的朋友要帮帮我啊,应该从哪里着手去修改它?
 
那你只收8个数据,其余的都不要它!
 
I have serial component written by myself.
tigerii@sina.com
 
comport的属性要设置对,而且收到数据时,以下为参考:
var hex:array[0..16] of byte;
s:string;
j:integer;
......
comport1.Read(hex,16);
s:='';
for j:=0 to 7 do
begin
s:=s+format('%x',[hex[j]]);
s:=s+' ';
end;
Memo1.Text := Memo1.Text + s;
 
我以前遇到过0为字符串结束符的问题
你试试看
1)握手协议是否一致
2)通信速率是否一致
3)rxChar是否能满足要求
4)我用的是Apro
5)Ontrigeravial
 
很感谢大家的回复,尤其是pengfeiyan的多次关注,最近上不了网,所以今天才来散分,
先给pengfeiyan100分,还有whtsuperant,tingjie.其他DFW到我新开贴的地方领分把。
 
后退
顶部