いつも参考にしています。
現在BorlandC++を利用しシリアル通信にてPC間のデータの送受信のプログラムを作成しています。
データを一バイトづつ送信していますが、途中で物理的なシリアルケーブルがPCから抜けても、数十秒はWriteFileが正常を返してきます、Lenにも1が入っています。
このように、物理的に断線したことを察知するにはどうすればいいですか?
ポートの設定はデフォルトのまま行っています。
宜しくお願いします。
シリアルポートの使い方はケーブル・相手機器によってさまざまなので
どんな場合にも通用する判断方法はありません。あきらめてください。
相手がモデムであって、かつ、全線結線ケーブルを使っていれば GetCommModemStatus でわかる。
PC 同士をフロー制御なしでつなぐのであればデータ+GND、の3本だけで
通信できてしまうので、断線検出することは不可能です。
tetrapodさん
返答ありがとうございます。
返答を見ると、フロー制御を行えば、断線の検出をすることが出来るように感じるのですが、どのようにフロー制御を行えば、断線の検出が出来るのでしょうか?初歩的な質問で申し訳ありませんが、宜しくお願いします。
フロー制御はフロー制御以上でも以下でもないので断線チェックの代用にはなりません。
# フロー制御しないのであればその線を断線チェックに使うことは可能かもしれない
# 強く非推奨
EIA-232/574 自体には「相手がつながっているか信号」があります。が、
お客様が購入されたケーブルにおいて「こちらの期待通りに」線が
つながっているかどうかは話が別。
つながっていないかもしれないし、別の意味の信号として使われているかもしれない。
特にクロスケーブルだし。
俺なら、ケーブル断線はチェックしない仕様にします。
ソフトウェア的に通信プロトコル応答なしの検出にとどめるでしょう。
どちらのほうがクレーム電話が多いか、俺は後者のほうだと思う。
「ケーブル抜けてる検出に数秒かかる」
「つながってるのに断線してるってどういうこっちゃ!」
っていうか少しは自分で調べましょうよ...
シリアルポートってのが一般的なRS-232Cだとして
断線云々と言う話をするならハードウエア周りの仕様まで含めてちゃんと調べましょう。
仕事でやっているならなおさらの事です。
ハードウエアの仕様がわからなくても大丈夫なレベルまでしかソフト側では
感知しないと言うなら話は別ですけれど。
ハード絡みの場合は繋がる先の機器の仕様も関係しますから
そこまで含めてきちんと把握しないとシステムは組めません。
PC相手ならまあ同じような仕様だと思いますけれど。
あと、tetrapodさんが言われているようにケーブルにしても色々ありえるので
そっちの方まで考え出すと結構話が複雑になりますよ。
あと蛇足ですが、
一応ここはVisual C++の掲示板なのでその辺も考慮してくださいね。
話がBorlandC++のライブラリ周りまで波及するといよいよ板違いになりますので。
tetrapodさん
PATIOさん
返答ありがとうございます。
もちろん自分でも調べて、疑問なので、こちらで質問させていただきましたが、安易に質問してしまい申し訳ありません。
又、IDEがBorlandというのも問題ですね。失礼いたしました。
ツイート | ![]() |