マイクロテクニカ製品サポートFAQ
[一覧] [1つ前に戻る] [マニュアル及び各種ダウンロードページへ]
フローコントロールの使用方法について
Parani-SD1000ではRS232Cのハードウエアフロー制御が可能です。
ハードウエアフロー制御はRTS/CTS信号によるものです。

RTSはRequest To Sendの略で、通信相手(リモートデバイス)にデータ送信を許可するための信号です。これは自機からすると出力信号となります。リモートデバイスに対して「データを送ってもいいよ」という信号です。自機がデータ受信できない時、RTS信号を0にします。これでリモートデバイスに対して「自機は受信できない」ということを伝えます。

CTSはClear to Sendの略で入力信号です。この信号が1の時、データを出力します。0の時はリモートデバイスが受信できないことを伝えているのでデータは出力しません。

RTS信号ピンとCTS信号ピンを接続します。
RTSは出力→CTSは入力となり、相互のデバイスが受信可能かどうかを相手の機器に伝えます。

なお注意が必要なのは、このRTSとCTSは送信または受信するデータがあることを相手に知らせる信号ではないということです。RTS信号はあくまでも「受信可能」であることを通知するためにのみ使われます。


■Parani-SD1000などSPPを使うデバイスでのフロー制御

SPPはシリアル通信をBluetoothで無線化するときに使うプロファイルです。Parani-SD1000はSPPを使ってRS232C通信を無線化しています。
そのためRTS/CTSフロー制御の使い方は単に有線で配線した時とその役割が若干異なります。

通常有線であればRTSピンが1となれば、それはリモートデバイスのCTSピンに入力されリモートデバイスはデータを送信してきます。

SPPではシリアル通信を仮想化してRS232C通信をエミュレーションしています。

Parani-SD1000ではRST/CTS信号線がD-USB9ピンで制御できますが、これには次のような仕組みが関係します。

1.Parani-SD1000はRXピンから受信したデータを内部バッファにバッファリングします。
バッファリングされたデータは逐次リモートデバイスに送信されるわけですが、このときリモートデバイスのRTSピンが0になっている場合、データは送信しません。
データはバッファリングされ続けます。
リモートデバイスのRTSピンの状態は仮想的にParani-SD1000にCTS信号として入力されているわけです。

※バッファのサイズは約5KB程度です。

2.リモートデバイスがRTS信号として1を出力するとそれは仮想的に自機のCTS信号として入力され、バッファリングされていたデータが出力されます。
結果、リモートデバイスにデータが届きます。(TXから出力されます)


上記1、2のことからRTSピンの状態は、物理的な状態がリモートデバイスに出力されるわけではありません。すなわち、リモートデバイスのRTS信号の状態が変わったからといって、自機のRTSピンが変わるわけではありません。
RTS信号は「仮想的に」CTS信号として自機に入力されることになります。

しかし、バッファがいっぱいになった場合には「実際の」Parani-SD1000のD-SUB9ピンRS232C信号のRTSピンの物理状態が変わります。
バッファがいっぱいになる(オーバーフロー)するのは次のような時です。


・通信状態が悪くリモートデバイスにデータが送れない、もしくは通信速度が低下している場合

・リモートデバイスがRTS信号を受信可能にしない


このような場合、Parani-SD1000のバッファがデータでいっぱいになり、オーバーフローしてしまいます。このような状態になった時にはRTS信号を0にして(受信不可能にして)、受信できないことを通知します。
その場合にはフロー制御をONにしているRS232C機器であればParani-SD1000にデータを送るのを停止しますので、フロー制御ができることになります。

すなわち、Parani-SD1000のフロー制御では本体のバッファリング可能なデータサイズ未満であれば、仮想的なフロー制御を、バッファオーバーフロー時には物理的なフロー制御(実際にRS232Cポートのピン状態が変化する)となります。


実際の運用ではRTS/CTSフロー制御は「仮想的にも物理的」にもParani-SD1000が制御しているため、運用者側で上記のような仕組みに対して何か対策をするということは必要ありません。ご使用のRS232C機器がハードウエアフロー制御有効になってるのであれば、Parani-SD1000のフロー制御も有効にしてご利用いただければよいということになります。


■なぜこのような仕組みなのか?

有線で接続された2台のRS232C機器が通信するのであれば、このような煩雑な仕組みは必要ありません。しかしBluetoothで無線化されている場合にはいろいろな事情でデータをすぐには送受信できないことがあります。
通信状況が悪かったり、RS232C側の通信速度に対して無線通信部分の速度が追いつかなかったりと、理想的に1対1の通信ができないことが想定されます。
そのため、Parani-SD1000では本体内部にバッファを設けることで、バッファにデータを一時的に蓄積し、通信状態に合わせてデータを送り出しているのです。
そのためバッファを有効的に機能させるためにこのような仕組みが用意されています。
オリジナル - FAQみたいです - 猫でいいです