Tak to čtení mám tak jak poradil Wikan a bych řek, že je to dobrý napad.
procedure TForm1.LazSerial1RxData(Sender: TObject);
var
sl: TStringList;
begin
data := '';
stavvazeni := '';
vaha := '';
sleep(50);
data := lazserial1.ReadData;
sl := TStringList.Create;
sl.Delimiter := ',';
sl.DelimitedText := data;
if Trim (sl[0]) = 'ST' then
begin
stavvazeni := Trim (sl[0]);
vaha := Trim (sl[2]);
Label1.Caption:= Trim (sl[0]);
Label2.Caption:= Trim (sl[1]);
Label3.Caption:= Trim (sl[2]);
Label4.Caption:= Trim (sl[3]);
end
else LazSerial1.WriteData('hups');
sl.Free;
end;
Ale to "ještě by bylo dobré dát tam nějaký timeout, aby program neuváznul v té smyčce navěky" mi nedalo spat.
Takže asi klasika s repeat.
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
i:=0;
LazSerial1.WriteData('hups');
repeat
inc(i);
Application.ProcessMessages;
if stavvazeni = 'ST' then continue;
sleep(50);
until i=100;
Memo1.Lines.AddText('stav vazeni ' + stavvazeni);
Label5.Caption:= stavvazeni;
Label6.Caption:= vaha;
end;
Nějake připominky?