DOBON.NET DOBON.NETプログラミング掲示板過去ログ

PCに接続されているFAXモデムの接続状態について

環境/言語:[visual basic 2008]
分類:[.NET]


はじめまして、べんぞうと申します。

現在、FAX送信のツールを作成しております。
ハードウェア機器構成は以下です。

PC ⇒ PCIExpress RS-232C4股制御ボード ⇒ FAXモデム ⇒ 回線網

上記構成にて、
制御ボードに割り当てられているCOMポート名は取得できるのですが、
モデムの通信状態を取得することはできないのでしょうか。

物理的には、4ポートともFAXモデムを接続していますが、
そのうち2台の電源が入っていない場合などは、
モデムとの通信不可して検出したいのですが、
何か良い方法は御座いませんでしょうか?

SerialPortクラスなどで、いろいろ試してみたりしているのですが
うまくいきません。FAXモデムをつないでいるためか
アクセス拒否されたりします。

FAXモデムへのATコマンド送信などではなくても
各ポートに何かがつながっている(電源ON時は)程度の検出でもいいですので
ヒント等御座いましたら、ご返信よろしくお願いいたします。
> 上記構成にて、
> 制御ボードに割り当てられているCOMポート名は取得できるのですが、
> モデムの通信状態を取得することはできないのでしょうか。

  可能ですが、FAX送信するアプリが何かで可能か不可能か
  変化します。

> 物理的には、4ポートともFAXモデムを接続していますが、
> そのうち2台の電源が入っていない場合などは、
> モデムとの通信不可して検出したいのですが、
> 何か良い方法は御座いませんでしょうか?

  シリアルポートを占有するオープンの場合は、ポートが
  存在しても他アプリは開けないので、使用中と言うこと
  になります。

  開けた場合、未使用なので、ATコマンドを送信して、
  ステータスが返ってくれば解りますし、タイムアウトす
  れば、電源オフでしょう。

> SerialPortクラスなどで、いろいろ試してみたりしているのですが
> うまくいきません。FAXモデムをつないでいるためか
> アクセス拒否されたりします。

  アクセス拒否なら、ポートを占有されてますので電源オ
  フが取得できるか否かは、SerialPortクラスを使うので
  はなく、TAPIかな〜

  長らくその手のプログラムを組んでいないので、記憶の
  彼方です。TAPIも途中で仕様変更されているので、現在
  はどう呼ばれているか解りません。

> FAXモデムへのATコマンド送信などではなくても
> 各ポートに何かがつながっている(電源ON時は)程度の検出でもいいですので
> ヒント等御座いましたら、ご返信よろしくお願いいたします。

  昔は、ダイレクトにI/O叩けたので、信号線を直に読み
  だして取得できましたが(Win95とかWin98の時代)
  プロテクトモードOSになってからは無理なので、API
  か、OS側から提供される機能を使って取得するしかあ
  りません。

※ WMIでFAXモデムの状態取得はできませんか?
  RS-232Cに繋ぐFAXモデムはありますが、電源が行方
  しれずで・・・確認不能です。

以上。参考まで
>オショウさん

ご返信有難うございますm_ _m

>可能ですが、FAX送信するアプリが何かで可能か不可能か
>変化します。
上記にも関係するのですが、
FAXソフト起動時にFAXソフト側のモデム設定にて指定されているポートのモデムとの通信が確立していないとFAXソフト自体がエラーを検出し起動できないようになっています。

そこで、私が作成しているアプリからは
WMIのWin32_SerialPortConfigurationプロパティIsBusyにて
Ture(ビジー状態)が返却されれば、モデムとの接続は正常であると判断することにしました。

ほかにも色々と試した見たのですが、
制御ボードの状態までは取得できるのですが
制御ボードの先に接続されているデバイスの状態を取得するのが困難でした。。

今回は、FAXソフト側にて、事前にエラーを検出できることを前提に
暫定的に上記対応としましたが、ほかに何か妙案あればまたご返信頂ければと思います。

本質問に関しては一旦クローズとさせていただきます。
解決済み!
解決済になってますが・・・

> WMIのWin32_SerialPortConfigurationプロパティIsBusyにて
> Ture(ビジー状態)が返却されれば、モデムとの接続は正常であると判断することにしました。

  これを使うのであれば・・・
  Win32_POTSModem や Win32_POTSModemToSerialPort
  の方がよいのでは?

※ 最近のOSで正常値が返ってくるのかは未確認です。

以上。参考まで

DOBON.NET | プログラミング道 | プログラミング掲示板