RxflagReceive
割り込みを発生させる文字
(char)を指定して、受信割り込みを発生させます。
ターミネーターが決まっていて、送受信の手順も決まっている場合は、受信プログラムが容易になります。
送信
XXXXX復帰改行
受信
XXXXXXX復帰改行
送信
XXXXXXXX復帰改行
受信
XXX復帰改行
上記の様に、送信受信が必ず、交互に行われる、アプリによるハンドシェイクの場合で、最後の文字を表すターミネーターが決まっている場合は、その文字を割り込み発生文字とすれば、プログラムが容易になります。
上記例では、改行
(0Ah)を割り込み発生文字として、指定すれば、良いことになります。
プログラム例
Comm1.EventFlag := UserIn; //
ユーザー入力
Ahを指定してもかまいません。
Comm1.FlagIn :=
#10; // 改行
(0Ah)を指定
#10 = 0Ah
Comm1.EventMask := [evRxflag,evBreak]; // evBreak
は無くても可
、
evRxcharは指定しません。
Comm1.RxflagReceive := eventOn; // Receive
割り込みに
Rxflagを指定します。
Comm1.Open; // Comm1
を オープンします。
(eventOff
の場合は、単に、
CommEventを発生します、データーの受信は出来ません。
)
var
InputString: string; //グローバル変数
Procedure TForm1.Comm1CommReceive(Sender: TObject; Size: Cardinal);
var
Buf: pchar;
begin
Buf := AllocMem(Size + 1); // メモリ確保します。
Comm1.Read(Buf,Size);
InputString := Buf; // pchar -> string 型変換です。
FreeMem(Buf, Size + 1); // メモリーの解放 メモリ確保をした場合必ず実行します。
ここで
InputStringの内容により必要なデーター処理します。
end;
Procedure TForm1.Comm1CommReceive(Sender: TObject; Size:Cardinal);
var
Buf: pchar;
begin
Buf := AllocMem(Size + 1); // メモリ確保します。
Comm1.Read(Buf,Size);
ここで
Bufの内容により必要な処理を行います。
FreeMem(Buf, Size + 1); // メモリーの解放 メモリ確保をした場合必ず実行します。
end;