通信用のシリアルポートの確認方法 – プログラミング – Home

通信用のシリアルポートの確認方法
 
通知
すべてクリア

[解決済] 通信用のシリアルポートの確認方法


kyu-bu
 kyu-bu
(@kyu-bu)
ゲスト
結合: 17年前
投稿: 4
Topic starter  

VC++6.0 MFCです。

RS-232Cを使用した通信を行っています。
  
CreateFile()で取得したシリアルポートのハンドルが、
例えばプリンター用のシリアルポートだったりした場合に、
それを検出しエラーメッセージを表示したいのですが、

何か標準関数で、通信に使えるシリアルポートか判断できる
ような物はありませんでしょうか?

よろしくお願い致します。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

無いですだ。
RS-232C (EIA-574) は、実際に通信してみないと相手が何かはわからない仕様。

シリアルプリンター(っつーのがあるかどうかはわからんが)がつながっているなら
スプーラがずっとポートをつかんでいるはずなので、単純に開けないはずだが。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

基本的にユーザーに指定されたものを信用してやってみて
うまく繋げない時は、設定しているCOMポートに対象物が本当に繋がっているかを
確認してもらうようなメッセージを出すくらいしか無いと思います。

この辺は、ユーザーがどう対処すれば良いのかを示す事ができれば、
エラーメッセージとしてはOKだと思いますよ。


返信引用
kyu-bu
 kyu-bu
(@kyu-bu)
ゲスト
結合: 17年前
投稿: 4
Topic starter  

tetrapodさん、PATIOさん

ありがとうございます。

>シリアルプリンター(っつーのがあるかどうかはわからんが)がつながっているなら
プリンター用のポートではなかったようでした。

通常COM1を使っているのですが、COM3でも試したところ
CreateFile()が成功するようでしたので、
そのままですと、データを受信で失敗して、
タイムアウトエラーと表示されるのですが、

どうしてタイムアウトエラーなのか考える要因
(接続ミス?DCB構造体違が通信対象と違う?等)、を減らすために

通信を行う前に確認できたら良いなと思ったのですが、
無いのなら仕方ないですね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「非同期(オーバーラップド)で待ち続けて、指定した時間(例えば1秒)たったら
タイムアウトとする」という方法もあるかなと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました