1,用spcomm时计算接受次数在XP机下是n个n个的加的,n指的是一次接收了多少字符,而在自己的win机下用同样的程序试了下,发现是正常的一个一个加的,不知道跟系统有么有关系?
2,在打开串口时也遇到同样问题,在自己电脑下是用try except 可以捕捉异常,在xp下就不同。而且delphi和spcomm是一模一样的·····
2,在打开串口时也遇到同样问题,在自己电脑下是用try except 可以捕捉异常,在xp下就不同。而且delphi和spcomm是一模一样的·····
接受代码跟大家的差不多,如下
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring1:='';
sleep(30);
move(buffer^ ,(pchar(@rbuf))^,Bufferlength);
for i:=1 to bufferlength do
begin
viewstring1:=viewstring1+inttohex(rbuf[i],2)+' ';
end;
Memo2.Text:=Memo2.Text+viewstring1;
statusbar1.Panels[1].Text:='通讯状态:'+'串口正在接收数据';
count2:=count2+1; //这是计算接收次数的,在公司电脑就是几个几个加的,自己电脑就是一个一个加
Label7.Caption:='Tx:'+IntToStr(count2);
s:='$0012';
n:=strtoint(s);
memo3.text:=memo3.Text+inttostr(n);
if autoclear.Checked and (Memo1.Lines.Count > 100) then
Memo2.Clear;
end;
另外一个原因是发送超时,每个字节和每包数据都有超时时间,超过这个临界值,一包数据也会被分为二次触发,你的记数也会增加。
电脑cpu在很忙,或者内存吃紧的时候串口数据收发会有延迟,也可能会影响超时时间,从而影响触发次数。
经验之谈,仅供参考。