Witam.
Mam problem z odbiorem danych z RS232 za pomocą komponentu ComPort. Za każdym razem, gdy do urządzenia wyślemy jakąkolwiek komendę zwraca ono cyfrę 2. Na próbę napisałem taki prosty program. Na początku wysyłamy pierwszą komendę a następną (z resztą cały czas to samo) wysyłamy dopiero, gdy urządzenia odeśle nam znak 2 - i tak robimy 10 razy. Odbiór zrealizowałem w zdarzeniu ComPort1RxChar
Cały program wygląda tak:
unit Test;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CPort, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ComPort1: TComPort;
Button2: TButton;
Button3: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ComPort1RxChar(Sender: TObject; Count: Integer);
private
{ Private declarations }
public
{ Public declarations }
stop : byte;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
if ComPort1.Connected then
begin
ComPort1.Close;
button2.Caption:='Połącz';
end else begin
ComPort1.Open;
button2.Caption:='Rozłącz';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort1.ShowSetupDialog;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
st : string;
licznik : integer;
begin
for licznik := 1 to 10 do
begin
if licznik > 1 then
while stop <> 1 do
begin
end;
stop := 0;
st:=#27 + '008couTEST' + #27 ;
if ComPort1.Connected then
ComPort1.WriteStr(st);
end;
end ;
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
int: byte;
begin
ComPort1.Read(int, count);
if int = 2 then
stop:=1;
end;
end.
Pętla While jest wprowadzona tutaj do testu. Jednak program ten, nie działa. Raz wyśle to co powinien, potem się zawiesza, a teoretycznie nie powinien, bo zmienna Stop powinna przyjąć wartość 1. Robiłem już testy, które polegały na dodaniu w zdarzeniu ComPort1RxChar instrukcji która dane z RS-a wpisywała do memo. Podczas gdy powinny być one wpisane po każdym przejściu pętli for to w rzeczywistości następowało to naraz dopiero po ostatnim przejściu pętli. Wygląda to tak jakby zdarzenie ComPort1RxChar nie było wywoływane za każdym razem gdy program odbierze jakiś znak. Co może być tego przyczyną?