用SPCOMM控件接收下位机发送的数据,下位机是每隔5秒发送7个字节的数据,我用onreceivedata事件接收数据,但是一直处在接收数据的状态,导致数据的提取和显示一直进行。
图:
程序:Move(Buffer^,PChar(@rbuf)^,BufferLength);
if(rbuf[6]=$ff)then //以0xff(END)结尾
begin
//取出需要的数据
mmoComm.Lines.Add('已收到:'+intTostr(BufferLength)+'字节的数据');
mmocomm.Lines.Add('测试时间'+ IntToStr(hour)+'小时'+ IntToStr(min) + '分'+ IntToStr(sec) + '秒') ;
mmoComm.Lines.Add('电池电压:'+prvol+'mv');
end;
我在数据接收后,清空缓冲区,但这样就无法接受数据了。小弟初学,求大神帮忙。测试串口通讯Delphi
图:
程序:Move(Buffer^,PChar(@rbuf)^,BufferLength);
if(rbuf[6]=$ff)then //以0xff(END)结尾
begin
//取出需要的数据
mmoComm.Lines.Add('已收到:'+intTostr(BufferLength)+'字节的数据');
mmocomm.Lines.Add('测试时间'+ IntToStr(hour)+'小时'+ IntToStr(min) + '分'+ IntToStr(sec) + '秒') ;
mmoComm.Lines.Add('电池电压:'+prvol+'mv');
end;
我在数据接收后,清空缓冲区,但这样就无法接受数据了。小弟初学,求大神帮忙。测试串口通讯Delphi
解决方案 »
- 急,简单问题,在线等待
- Delphi调用LINUX API程序(高分求救,在线等待)
- DELPHI+ADO中:如果想将表1中的记录逐条地插入表2,用如下语句,能否完成如在未全部完成时(比
- '故国' VS 'FS'决斗! (请大家来评一评,天下不乱我心不安,今天特爽)
- 求“delphi技术手册”免费版,帮忙呀
- 关于临时表的问题(在线急用!高分求助)
- 什麼原因會出現這種問題(insert)
- Delphi的Function 里面怎样声明控件啊?怎么在Funtion里辨识不到已经放到Form上的控件的?
- 怎么把剪贴板上的内容写到流中(TADOBlobStream)?
- 一个关于inherited的简单问题
- delpih 识别excel颜色吗?
- DLL窗体之间发消息问题
如果没有,那么就在onreceivedata过滤下,当发现数据和上次读到的数据相同时,那过5秒数据还是相同才作相应处理,或者没变就一直不处理。
至于接收格式,也要考虑,本次接收有可能接收一个不完全的数据,通过分析提取有效的数据,把不完整的数据合并下次接收数据一起分析。如数据有效格式为ABC:本次接收为ABCABCAB,通过分析,本次接收的数据有两个有效数据ABC,ABC,一个不完整数据AB,这个AB可留做下次接收的数据全并分析。我用过消费机有确认功能,即它会重复地发送数据,直到主机接收后给它一个确认信息。不知道你这个有没有。
onreceivedata的方法里的第一句加个
sleep(50);这个"10"具体大小你自己试下调整如是还有问题,你换个CPort控件试试,肯定行的