- PR -

COMポートに接続されたことを検出する

投稿者投稿内容
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2007-04-12 21:02
今日は

RS232Cの規格を守ったハードー設計になっていると途中の抜き差しは大丈夫だと思いまよす。(出力最大電流500mA、最大電圧25V、入力インピーダンス3〜7KΩ,正確でないかも?)
USBみたいな電源供給がある低インピーダンスではホットプラグが無いと危険ですが。
moco
ベテラン
会議室デビュー日: 2006/05/01
投稿数: 54
投稿日時: 2007-04-12 21:10
みなさん沢山のご意見、大変ありがとうございます!!

アドバイスいただいて、SerialPort.PinChanged イベントを試してみましたが、
機器側がその特定のピンを使用していないらしいく、イベントは発生しませんでした。
また、ご指摘の通りUSB-シリアル変換での接続になりまして、
その変換は出来合いのICに完全に依存しているらしく、ハード的にも変更は難しいとのことでした。

みなさん、本当にありがとうございました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-04-13 06:24
引用:

RS232Cの規格を守ったハードー設計になっていると途中の抜き差しは大丈夫だと思いまよす。



極端に神経質になる必要はないと思いますが、RS232C の規格が活線挿抜を想定したものではないので、「接続機器が壊れちゃっても自己責任」てことですね。
TAD
ベテラン
会議室デビュー日: 2007/03/20
投稿数: 52
お住まい・勤務地: 海のそば
投稿日時: 2007-04-13 13:15
どっちかというと組み込みトピックスかも。
引用:
極端に神経質になる必要はないと思いますが、RS232C の規格が活線挿抜を想定したものではないので、「接続機器が壊れちゃっても自己責任」てことですね。


というよりは、きちんと設計された(といってもMAXあたりのICをそのまま使うことも多そう)回路なら
入力インピーダンスも高いし出力電流も制限されてるしで、抜き差し程度ではふつーハード的には
壊れそうにない、ということでしょう。これで壊れるのなら無接続状態や、電源を切った状態での抜き差しでも
危ないんじゃない? という感じかな。


ところで、そもそものアイデアの、「特定の機器が繋がれていたら...」という点ですが、期待しない機器が
繋がれていた場合、想定外の機器に対して(機器からみれば)目茶苦茶なフォーマットの通信が行われるわけで、
場合によってはその機器の予期しない動作を引き起こすこともあります。ユーザーが何を繋ぐか限定できないような
使い方の場合はむやみにデータを投げない方がいいかもしれません。

#いや、実際にやったことがあるもんで...PCじゃなかったですけど、起動時にある機器の初期化コマンドを
#決め打ちで投げたら別の機器が繋がっててそいつが固まっちゃって。
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-04-15 02:59
USBに挿入されたデバイスが、(USBを)仮想COMポートとして認識させる機能を
もっている場合、
SerialPort.PinChanged で、
・USBに現在このデバイスが挿入されているかどうか
・同時に今挿入されているUSBポート番号(名前)
をプログラム側で取得できるのでしょうか?
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2007-04-15 07:50
今日は

USBポート番号(名前)?がCOMポート番号のことであれば
可能です、SerialPort.PinChanged はCOMポート単位で発生する為
USBにCOMポートを複数つないでの制御は、かなり前ですが実績があります。
只、その時使ったUSB HUBのドライバーの不具合でHUBメーカと直接交渉でドライバーを修正してもらって、複数ポートを認識出来るようになった覚えがあります。
今はそんな不具合は無いと思いますが。

[ メッセージ編集済み 編集者: rvmx 編集日時 2007-04-15 07:55 ]
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-04-15 09:12
言い換えると

・特定の USB デバイスがPCに接続されているかどうか
・PCに接続されている(特定の)USB デバイスの列挙

をしたい、ということですよね?

可能ですが、SerialPort クラスでは出来ません。

SerialPort クラスは、あくまで「COM ポート」を扱うためのクラスです。
COM ポートが USB デバイスであるのか、PC内蔵のデバイスであるのかどうかまで関知しません。

そして、この手のプログラミングを .NET で行うのは非常に面倒です。
また、PnP やドライバ周りの知識がないと実装もちょっと難しいです。
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-04-16 04:00
RVMX様,渋木宏明様のアドバイス(書き込み内容)がまったく逆ということ
でしょうか?(?_?)
・今現在、USBに仮想COMポートとして認識されているデバイス(ドライバは事前に
 インストール済み)が挿入されているかどうか、
・そしてそれがどのUSBに挿入されているかどうか
というのは把握できるのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)