外部インタフェース/API | ![]() ![]() |
データフローの制御: ハンドシェイク
データフローコントロールまたはハンドシェイク は、送信中のデータのロスを防ぐためにDCEとDTE間の通信に用いられる方法です。たとえば、コンピュータが処理される前に限られた量のデータしか受信しないと仮定します。この制限に達すると、データの送信を中止するためにハンドシェイク信号がDCEに送信されます。コンピュータがより多くのデータを受信できるときは、他のハンドシェイク信号がDCEに送信されてデータの送信を再開します。
デバイスがサポートしている場合は、つぎの方法のいずれかを使ってデータフローを制御することができます。
FlowControl
プロパティを使ってデータフロー制御方法を指定できます。FlowControl
がhardware
である場合は、データフローの制御にハードウェアハンドシェイクが利用されます。FlowControl
がsoftware
である場合は、データフローの制御にソフトウェアハンドシェイクが利用されます。FlowControl
がnone
,である場合は、ハンドシェイクは用いられません。
ハードウェアハンドシェイク
ハードウェアハンドシェイクは、特定のシリアルポートピンを使ってデータフローを制御します。ほとんとの場合で、これらはRTSピンとCTSピンです。これらのピンを使ったハードウェアハンドシェイクは、RTSピンとCTSピンに説明されています。
FlowControl
がhardware
である場合は、RTSピンとCTSピンは、DTEとDCEによって自動的に管理されます。PinStatus
プロパティを使ってCTSピンの値を出力することができます。RequestToSend
プロパティを使ってRTSピンの値を設定あるいは出力することができます。
注意 デバイスの中には、ハンドシェイク用にDTRピンとDSRピンを利用するものがあります。しかし、これらのピンは、主として通信用にシステムの準備が完了していることを示すために利用され、データ送信を制御するためには利用されません。MATLABでは、ハードウェアハンドシェイクは常にRTSピンとCTSピンを使います。 |
デバイスが標準の方法でハードウェアハンドシェイクを利用しない場合は、RequestToSend
プロパティをマニュアルで設定する必要があります。この場合、FlowControl
をnone
に設定します。FlowControl
がhardware
である場合は、指定するRequestToSend
値は与えられません。ピンの挙動を指定するためには、デバイスのドキュメントを参照してください。
ソフトウェアハンドシェイク
ソフトウェアハンドシェイクは、特定のASCIIキャラクタを使ってデータフローを制御します。XonおよびXoff(またはXONおよびXOFF)として知られているこれらのキャラクタを、以下に説明します。
キャラクタ |
値 |
説明 |
Xon |
17 |
データ送信を再開 |
Xoff |
19 |
データ送信を中止 |
ソフトウェアハンドシェイクの利用時に、コントロールキャラクタは、通常のデータと同じ方法で送信ライン上で送信されます。そのため、TD, RD, GNDピンのみが必要です。
ソフトウェアハンドシェイクの主な短所は、数値データがデバイスに書き出されているときにXonあるいはXoffキャラクタを書き出せないことです。これは、数値データは17または19を含む場合があり、コントロールキャラクタとデータを区別できないためです。しかし、データをデバイスから非同期的に読み込んでいるときにはTDとRDピンを使っているので、XonまたはXoffを書き出すことができます。
例題: ソフトウェアハンドシェイクの利用
例題:バイナリデータの読み込みで説明した例題を使ってソフトウェアフロー制御を利用したいと仮定します。そのためには、ソフトウェアフロー制御用にオシロスコープとシリアルポートオブジェクトを設定する必要があります。
fprintf(s,'RS232:SOFTF ON') s.FlowControl = 'software';
fwrite(s,19)
fwrite(s,17)
![]() | 接続されているデバイスの存在を知らせる | デバッグ: 情報をディスクに記録 | ![]() |