串口接收的问题

franny4611 2006-07-25 10:29:02
串口接收数据的时候,为什么我每改变一次RThreshold的值,收到的数据都不一样,同时在RThreshold不变的情况下将memo1.Lines.Add(str)换成memo1.text:=memo1.text+str后收到的数据又不一样
请问这是怎么回事,哪位高手指点一下?

procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.clear;
MSComm1.CommPort := 1;
MSComm1.Settings := '9600,n,8,1';
MSComm1.InputLen := 0;
MSComm1.InBufferCount := 0;
MSComm1.RThreshold := 16;
MSComm1.InputMode := comInputModeBinary;
if MSComm1.PortOpen then
begin
MSComm1.PortOpen:= false;
MSComm1.PortOpen := true;
end else
begin
mscomm1.PortOpen:=true;
mscomm1.DTREnable:=true;
mscomm1.RTSEnable:=true;
end;
end;

procedure TForm1.MSComm1Comm(Sender: TObject);
var
recstr: Olevariant;
i:integer;
str:string;
begin
str:='';
if mscomm1.CommEvent=ComEvReceive then
begin
recstr:=mscomm1.Input;
for i:=0 to mscomm1.RThreshold-1 do
str:=str+inttohex(recstr[i],2)+' ';
end;
memo1.Lines.Add(str);
end;
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rowa11 2006-07-27
  • 打赏
  • 举报
回复
如果确切的知道接受数据的长度,就可以循环检测接受缓冲区的长度,达到某个长度时读取,;
循环次数超某个值时退出循环,接受超时.
我觉得这样比较可靠
雪狼__ 2006-07-25
  • 打赏
  • 举报
回复
是不是本来传过来的值,变化的周期很长?
虽然可能性不大,不过这种情况没见到过;顶多有乱码,不可能数据不一样
luxuewei5214 2006-07-25
  • 打赏
  • 举报
回复
delphi里用spcomm方便
franny4611 2006-07-25
  • 打赏
  • 举报
回复
刚才又试了几次,是每次收到的数据都不同,不管RThreshold变不变
franny4611 2006-07-25
  • 打赏
  • 举报
回复
其实数据不多,大概1000个字节吧,不知为什么会有这种情况
franny4611 2006-07-25
  • 打赏
  • 举报
回复
刚问了做硬件的人,因为里面存储的有当前时间,所以数据有些变化.我发现我的问题在于有些数据丢失了,请问有什么办法解决吗?

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧