Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

シリアル接続のフロー制御について教え て下さい

1,488 views
Skip to first unread message

Yoriko Nakata

unread,
Dec 15, 1998, 3:00:00 AM12/15/98
to
はじめて投稿します。 Nakataともうします。

win32の関数を使ってCOMポートに直接RS232Cをつないで通信を行うプログ
ラムの質問なのですが。
CreateFile()関数でポートをオープンしその後DCB構造体のメンバを
変えて
・ハード制御
・Xon/Xoff
・両方なし
の3つの方法で通信をしたいと思うのですが、このハード制御というのはどこを変更
したらできるのでしょうか?
また、Xon/Xoffは
DWORD fOutX: 1; /* XON/XOFF出力フロー制御 */
DWORD fInX: 1; /* XON/XOFF入力フロー制御 */
このメンバをTRUE又はFALSEにすればよいのでしょうか?

どうそよろしくお願いします。

平木 裕盛

unread,
Dec 24, 1998, 3:00:00 AM12/24/98
to
ども。

ハードウェアフロー制御を行うには、RTS/CTSフローでしたらDCBの、
fOutxCtsFlowにTRUE、fRtsControlにRTS_CONTROL_HANDSHAKEをセットします。
行わないなら、それぞれFALSE、RTS_CONTROL_ENABLEをセットしておけばよいと思います。

Xon/Xoffソフトウェアフロー制御を行うにはDCBの、
fInXをTRUEにすれば受信バッファの状態によってXon/Xoffを送信するようになります。
fOutXがTRUEであれば、Xoffを受けて送信を停止しXonを受けて送信を再開するようになります。
XonCharとXoffCharが変えられるようになっていますので、
通常のXon/Xoff文字を使用するのなら一応0x11(Xon)と0x13(Xoff)をセットした方がよいでしょう。

これらは独立して設定可能ですから、ハードウェアフロー制御とXon/Xoffフロー制御を同時に
行うようにも、どちらとも行わないようにもできます。

受信フロー制御を行う場合は
受信停止境界(XoffLim)、受信再開境界(XonLim)を調整する事ができます。
これはXon/Xoffに限らずハードウェアフロー制御にも適用されるようです。
なお受信停止境界(XoffLim)は、停止するときの受信バッファの空き文字数をセットするよう
になっています。

送信フロー制御を行うなら
オーバーラップ入出力を利用するか別スレッドで送信するようにしないと
WriteFileでブロックされてしまうのでその辺も考慮しましょう。

ちなみにWin32のヘルプファイルがあれば、そこに詳しく書いてありますんで探してみてください。
私が使っているのはC++Builder1のCDROMに入っている、おそらくちょっと古いWin32の日本語ヘルプ
です(API32WH.HLP)。開発ツールのパッケージにきっと含まれていると思います。
Microsoftのサイトにも置いてあるかもしれませんね。

では。
--
ひらき ひろもり

平木 裕盛

unread,
Dec 24, 1998, 3:00:00 AM12/24/98
to
うーむ、マルチポストされていたのか、、
確認わすれてた (^^;
--
ひらき ひろもり

Yoriko Nakata

unread,
Dec 25, 1998, 3:00:00 AM12/25/98
to
ありがとうございました。
ハードウェア制御とXon/Xoffはどちらかしか設定できないのかと思っていました。
独立でできるのですね。 勉強になりました。


0 new messages