RS232C指定文字割り込み受信

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;