RS232C送信の完了待ち指定

送信時、書き込み完了をしてから、アプリケーションに実行を戻す場合は、

Comm1.CommWaitFors := [waitWrite];

を指定します。

(指定は、RS232CデバイスをOPENする前に指定する必要があります。)

書き込みが完了しない限り、

Comm1.Write(const Buffer:,Size: integer);の、ルーチンから戻りません。

データー長が、FIFOバッファの空き内であれば、即戻ります。

書き込み時に、タイムアウト時間より長くなった場合は、完了を待たず戻ります。

その場合は、タイムアウト時間を長くしてください。

タイムアウトの時間を設定してあれば、その時間で終了し、タイムアウトエラーを発生します。

OutQueueの書き込みバッファを有効に利用したい場合は、プロパティwaitWrite をFasleにするか

Comm1.CommWaitFors := [];    又は Comm1.CommWaitFors := [waitRead]; 読み出しのみ

     を指定します。

Comm1.SendString(S:string);を使用してもComm1.Write(Buffer,Size);を使用するため、同じ動作となります。

Win9x,MEの場合は、次のデーターを書き込むのは、必ず、書き込みバッファが空になってから次のデーターを書き込むようにして下さい、OnCommTransmitComm.RemainSizeを利用して下さい。

バッファの空き容量確認で書き込みを行うと、データーが正しく書き込まれないことがあります。

waitWriteTrueであれば、問題ありません。

確実に、送信するためには、waitWriteを指定します。

送信速度が遅く、待ち時間が長い場合は、waitWriteを指定せず、バッファに書き込まれたら、直ぐに制御が戻るようにする事が出来ます。

その場合、プログラムを終了する時に、書き込みデーターが残っている場合があります、未送信データーが無くなってからプログラムを終了しましょう。

指定無し

Comm1.CommWaitFors := []; 又は Comm1.CommWaitFors := [waitRead];

procedure TForm.FormCloseQuery(Sender: TObject;var CanClose: Boolean);

begin

if (Comm1. RemainSize) > 0 then

CanClose:= False //書き込みが済んでなかったら、閉じない。

end;

指定有り

Comm1.CommWaitFors := [waitWrite];

Comm1.CommWaitFors := [waitRead, waitWrite];の様に、読み取り側の指定も同時に出来ます。

送信バッファ残り容量調査

受信の完了待ち指定