//1.定义超时标识
.................................
public
{ Public declarations }
G_PortTimeOut:Boolean=False;//超时标识
G_RecData:Boolean=False;//接收成功标识
//2.向目标发送485信息的命令语句 举例 (Send485Data是我自己编写的发送命令语句,Dev.Handle是设备的句柄,sTemp是命令内容)
if Send485Data(Dev.Handle,PChar(sTemp),Length(sTemp))=1 then
begin
tmr_TimeOut.Enabled:=True;//定时器启动
repeat
Application.ProcessMessages;
Sleep(1);
until G_PortTimeOut or G_RecData;//如果需要判断接收的数据 这里添加接收标识
G_PortTimeOut:=False;
tmr_TimeOut.Enabled:=False;
G_RecData:=False;
end;
//3. 主单元加入定时器tmr_TimeOut,Interval为3000,定时器事件如下
procedure TFrm_Main.tmr_TimeOutTimer(Sender: TObject);
begin
tmr_TimeOut.Enabled:=False;
G_PortTimeOut:=True;
end;
说明:
//4.接收函数 举例
procedure TForm1.WMPortMsg(var msg:TMessage);
var
index: Integer;
strText: String;
count: Integer;
rec:string;
i:Integer;
begin
//接收数据条件判断
.............
G_RecData:=true;
tmr_TimeOut.Enabled:=False;
end;