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);
2-stopbitに設定すると、
送信: stopbitを2つ送る
受信: stopbitひとつで受信完了とみなす
ってことになってんじゃないすか。
テレタイプ時代の名残で、stopbitが短いと
受信側の打刻が間に合わなかったとかなんとか。
επιστημηさんありがとうございます。
何か変な感じがしますが、
通信は出来てしまうものなんですね。
変な感じがするかも試練が 16550A のマニュアルにはそう明記されているからなー
ぐぐってみそ
ストップビット数2に設定した場合の挙動
送信側=ストップビット位置に2ビットを置く
受信側=最初のストップビットだけを数える
まあ 8250 の頃からの仕様だろうし (未確認) いまさら変わらんと思うよ
tetrapodさん詳しくありがとうございます。
16550Aのマニュアル探して読んでみます。
仕様ならしかたないですね。
納得しました。