Delphi Spcomm 串口通讯 为啥只能接受一条数据?

chenfeng3000 2018-04-27 03:59:42
Delphi Spcomm 串口通讯 为啥只能接受一条数据?
问题描述:
下位机 51单片机 发送一段中文字符串, 用串口调试助手程序(上位机程序),能看到一行行的中文不停的采集到
证明:51单片机的串口程序正常,pc串口通讯也正常

我的delphi程序:
procedure SpCommInit(); //com3 波特率 数据位啥的都设置的和串口调试助手一样的
begin
form1.Comm1.CommName:='COM3';
form1.Comm1.BaudRate:=4800;
form1.Comm1.Parity:=None;
form1.Comm1.ByteSize:=_8;
form1.Comm1.StopBits:=_1;
form1.comm1.ReadIntervalTimeout:=100;
form1.Comm1.StartComm;
// form1.Comm1.Inx_XonXoffFlow := False;
// form1.Comm1.Outx_XonXoffFlow := False;
end;

procedure TForm1.BitBtn1Click(Sender: TObject); //设置一个连接Com 的按钮, 按下 即连接Com3 按钮自动失效
begin
SpCommInit();
form1.BitBtn1.Enabled:=false;
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; //Comm1ReceiveData事件 获取下位机上传的数 // 据,并追加到Memo中
BufferLength: Word);

var
receivedata:array of byte;
str:string;
begin
// sleep(100);//等待100ms,保证接收到所有数据
SetLength(str,BufferLength);
move(Buffer^,pchar(@str[1])^,BufferLength); //从缓冲区将数据拷贝出来
form1.Memo1.Lines.Add(str);
end;
////////////////现在的问题是,我一按下按钮后,Memo有时会显示一整条下位机传上来的完整字符串,有时是半条不完整的字符串
///有时干脆不显示
///但是要命的是 Comm1ReceiveData事件 只触发了一次,就啥也没有了,单片机还在不停的上传数据, 可是就是看不到触发事件产生的Memo中的任何变化,希望诸位大侠给予解决啊
...全文
1717 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2018-04-29
  • 打赏
  • 举报
回复
根据有限的经验,跟你交流一下: begin // sleep(100);//等待100ms,保证接收到所有数据=======这一句切记不要用 SetLength(str,BufferLength);=========== move(Buffer^,pchar(@str[1])^,BufferLength); //从缓冲区将数据拷贝出来 form1.Memo1.Lines.Add(str);===========以上三行,不应该在事件中出现,你应该编写一个过程或函数,将缓冲区传送过去便可,在触发事件中写这种类型的代码,极容易造成你现在的这种效果 end;
看那山瞧那水 2018-04-29
  • 打赏
  • 举报
回复
sleep(100),100改成200,300,400试试 最好不用.Comm1ReceiveData()事件接收,自己开个线程手工读数据,可以判断缓冲区接收的数据(比如数据长度,帧标志等),然后读
xiaocongzhi 2018-04-28
  • 打赏
  • 举报
回复
确保设备通信正常;ReadIntervalTimeout设大点
nebula845026 2018-04-28
  • 打赏
  • 举报
回复
form1.comm1.ReadIntervalTimeout:=100; 把这一行注释掉
天行归来 2018-04-27
  • 打赏
  • 举报
回复
用 虚拟串口 模拟了一对串口,然后打开一个串口(COM2)写入数据,程序打开COM1接收,你的代码正常运行。 你可以用 portMon这个工具,监控下设备是不是正常发送数据。

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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