RS-232Cでのストップビットについて

[戻る]
ロケットサラダ 2007/07/10(火) 15:16:09
VC++6.0 MFC です。

パソコンと制御機器で、RS-232Cを使った通信を行うプログラムを作っています。
その中で、ストップビットについて教えて下さい。

制御機器のストップビットの設定が ONESTOPBIT 
パソコンのストップビットの設定が TWOSTOPBITS

この条件でも通信が成功してしまいます。
  
ONESTOPBIT設定の制御機器が、TWOSTOPBITSの信号を受信しても、
タイムアウトなどを考えないと、調歩同期が取れそうな感じがするのですが。
  
TWOSTOPBITS設定のパソコンは、ONESTOPBITの信号では、エラーを出すのかな?
と考えているのですが、どうして成功するのでしょうか?
パソコンはそういう物なのでしょうか?
  
オシロスコープで波形を数えた所、ストップビットの設定はプログラム通りに
なっているようでした。

パソコン IBM Thinkpad
OS  winXP professionalです。

パソコン側の設定は、GetCommState、SetCommStateを使い、
DCB構造体の必要な箇所を修正しています。

 DCB dcb;

 GetCommState(m_hComm, &dcb);

 dcb.StopBits = ONESTOPBIT;    //ストップビット 1

 //dcb.StopBits = TWOSTOPBITS;    //ストップビット 2又は

 SetCommState(m_hComm, &dcb);

επιστημη [HomePage] 2007/07/10(火) 15:25:07
2-stopbitに設定すると、
送信: stopbitを2つ送る
受信: stopbitひとつで受信完了とみなす
ってことになってんじゃないすか。
テレタイプ時代の名残で、stopbitが短いと
受信側の打刻が間に合わなかったとかなんとか。

ロケットサラダ 2007/07/10(火) 17:46:52
επιστημηさんありがとうございます。

何か変な感じがしますが、
通信は出来てしまうものなんですね。

tetrapod 2007/07/10(火) 22:07:44
変な感じがするかも試練が 16550A のマニュアルにはそう明記されているからなー
ぐぐってみそ
ストップビット数2に設定した場合の挙動
送信側=ストップビット位置に2ビットを置く
受信側=最初のストップビットだけを数える

まあ 8250 の頃からの仕様だろうし (未確認) いまさら変わらんと思うよ

ロケットサラダ 2007/07/11(水) 11:05:12
[[解決]]
tetrapodさん詳しくありがとうございます。

16550Aのマニュアル探して読んでみます。

仕様ならしかたないですね。
納得しました。

古いスレッドには追加発言できません。