关于SPCOmm的问题:自动侦测波特率的相关问题
我的做法是:在未知设备的波特率的情况下,自动侦测设备的波特率,侦测的方式是用不同的波特率(循环)去发送握手信息,直到得到串口返回的信息;我是在FormCreate的时候调用AutoDetectBaudrate函数的
期望的结果:在循环的过程中当前循环的波特率为所需的时候能从CommReceiveData获得信息,以判断退出循环。
问题:每次只能循环结束后才能去执行CommReceiveData返回的信息,如何能在循环的时候调用CommReceiveData
希望各位大侠提供点意见和建议,或者提供点思路!
谢谢!!
procedure TForm1.FormCreate(Sender: TObject);
begin
Comm.StartComm;
AutoDetectBaudrate;
end;
procedure TForm1.AutoDetectBaudrate;
const
BaudRate:array[1..9]of integer =(1200,2400,4800,9600,14400,19200,38400,57600,115200);
var
i:integer;
begin
for i:=1 to 9 do
begin
comm.BaudRate:= BaudRate[i];
Handshake;
end;
end;
procedure TForm1.Handshake;
var
sbuf:array[1..7] of byte;
begin
sbuf[1]:=byte($7e); //帧头
sbuf[2]:=byte($00); //命令号
sbuf[3]:=byte($00);
sbuf[4]:=byte($02);
sbuf[5]:=byte($33);
sbuf[6]:=byte($32);
sbuf[7]:=byte($fc);
comm.WriteCommData('?',1);
sleep(100);
comm.writecommdata(@sbuf[1],7);
sleep(100);
sbuf[6]:=byte($33);
sbuf[7]:=byte($fd);
comm.writecommdata(@sbuf[1],7);
sleep(100);
sbuf[6]:=byte($34);
sbuf[7]:=byte($fb);
comm.writecommdata(@sbuf[1],7);
end;