Odbieram dane z wagi poprzez komponent ComPort w następujący sposób:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str,waga: String;
begin
ComPort.ReadStr(Str, Count);
waga:=Copy(Str,10,5);
Memo.Text:=Memo.Text+waga;
end;
Waga wysyła ramkę danych w postaci 'SI 0.00 kg'
, z której potrzebuję wyciąć samą wagę. Napisana powyżej funkcja Copy działając na danych wysyłanych z portu z prędkością 9600 zwraca w Memo ten sam string).
Uruchomienie funkcji Copy w następujący sposób zwraca prawidłowy wynik.
procedure TForm1.Button1Click(Sender: TObject);
var Str:string;
begin
str:='SI 0.00 kg'; //ciąg skopiowany z terminala
Memo.Text:=Copy(Str,10,4);
end;
Wg dokumentacji wagi wysyłany string ma postac
S _ _ _ _ - _ _ _ _ _ _ 8 . 5 _ kg _ _ CR LF //podkreśliniki to spacje
Próba usunięcia znaków końca linii w ten sposób również nic nie daje.
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str,str2,waga: String;
begin
ComPort.ReadStr(Str, Count);
Str2:=StringReplace(Str,#13#10,'add',[rfReplaceAll]);
waga:=Copy(Str2,12,5);
Memo.Text:=Memo.Text+waga;
end;
dodanie znaczników <code class="delphi"> i `` - Furious Programming