外部インタフェース/API    

データフローの制御: ハンドシェイク

データフローコントロールまたはハンドシェイク は、送信中のデータのロスを防ぐためにDCEとDTE間の通信に用いられる方法です。たとえば、コンピュータが処理される前に限られた量のデータしか受信しないと仮定します。この制限に達すると、データの送信を中止するためにハンドシェイク信号がDCEに送信されます。コンピュータがより多くのデータを受信できるときは、他のハンドシェイク信号がDCEに送信されてデータの送信を再開します。

デバイスがサポートしている場合は、つぎの方法のいずれかを使ってデータフローを制御することができます。

FlowControlプロパティを使ってデータフロー制御方法を指定できます。FlowControlhardwareである場合は、データフローの制御にハードウェアハンドシェイクが利用されます。FlowControlsoftwareである場合は、データフローの制御にソフトウェアハンドシェイクが利用されます。FlowControlnone,である場合は、ハンドシェイクは用いられません。

ハードウェアハンドシェイク

ハードウェアハンドシェイクは、特定のシリアルポートピンを使ってデータフローを制御します。ほとんとの場合で、これらはRTSピンとCTSピンです。これらのピンを使ったハードウェアハンドシェイクは、RTSピンとCTSピンに説明されています。

FlowControlhardwareである場合は、RTSピンとCTSピンは、DTEとDCEによって自動的に管理されます。PinStatusプロパティを使ってCTSピンの値を出力することができます。RequestToSendプロパティを使ってRTSピンの値を設定あるいは出力することができます。

デバイスが標準の方法でハードウェアハンドシェイクを利用しない場合は、RequestToSendプロパティをマニュアルで設定する必要があります。この場合、FlowControlnoneに設定します。FlowControlhardwareである場合は、指定するRequestToSend値は与えられません。ピンの挙動を指定するためには、デバイスのドキュメントを参照してください。

ソフトウェアハンドシェイク

ソフトウェアハンドシェイクは、特定のASCIIキャラクタを使ってデータフローを制御します。XonおよびXoff(またはXONおよびXOFF)として知られているこれらのキャラクタを、以下に説明します。

表 8-12: ソフトウェアハンドシェイクキャラクタ 
キャラクタ

説明
Xon
17
データ送信を再開
Xoff
19
データ送信を中止

ソフトウェアハンドシェイクの利用時に、コントロールキャラクタは、通常のデータと同じ方法で送信ライン上で送信されます。そのため、TD, RD, GNDピンのみが必要です。

ソフトウェアハンドシェイクの主な短所は、数値データがデバイスに書き出されているときにXonあるいはXoffキャラクタを書き出せないことです。これは、数値データは17または19を含む場合があり、コントロールキャラクタとデータを区別できないためです。しかし、データをデバイスから非同期的に読み込んでいるときにはTDとRDピンを使っているので、XonまたはXoffを書き出すことができます。

例題: ソフトウェアハンドシェイクの利用

例題:バイナリデータの読み込みで説明した例題を使ってソフトウェアフロー制御を利用したいと仮定します。そのためには、ソフトウェアフロー制御用にオシロスコープとシリアルポートオブジェクトを設定する必要があります。

データ送信を中止するには、数値19をデバイスに書きます。

データ送信を再開するには、数値17をデバイスに書きます。


 接続されているデバイスの存在を知らせる デバッグ: 情報をディスクに記録