- PR -

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

投稿者投稿内容
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-04-16 11:25
引用:

・今現在、USBに仮想COMポートとして認識されているデバイス(ドライバは事前に
 インストール済み)が挿入されているかどうか、
・そしてそれがどのUSBに挿入されているかどうか
というのは把握できるのでしょうか?



前の投稿で書いたとおりです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-16 22:01
すごく気になったのですが、私だけ?!
引用:

勉強ちゅうですさんの書き込み (2007-04-12 21:10) より:
また、ご指摘の通りUSB-シリアル変換での接続になりまして、


機器側が USB なら、PC の USB ポートにつなげばいいのでは?
PC 側が USB なら、COM ポートではないのでは?


引用:

ハムスターさんの書き込み (2007-04-15 02:59) より:
USBに挿入されたデバイスが、(USBを)仮想COMポートとして認識させる機能を
もっている場合、


それってデバイスがそういう機能を持っているのではなく、デバイス ドライバが USB にあがってきた信号を仮想 COM ポートにバイパスしている、ですよね?「USB → COM」な変換器を通すのではなく、USB ポートを使うんだけど、アプリケーションは COM ポートから操作できますよ、ってことですよね?

_________________
MyHandle
常連さん
会議室デビュー日: 2007/04/15
投稿数: 39
投稿日時: 2007-04-26 13:54
// 引用--------------------------------------------
Jittaさん 4/16投稿
それってデバイスがそういう機能を持っているのではなく、デバイス ドライバが USB にあがってきた信号を仮想 COM ポートにバイパスしている、ですよね?「USB → COM」な変換器を通すのではなく、USB ポートを使うんだけど、アプリケーションは COM ポートから操作できますよ、ってことですよね?
引用--------------------------------------------//

そうです。デバイスがCOMとして認識される機能をもっているわけではなく、
当該ドライバがその役割をしています。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-26 22:40
引用:

ハムスターさんの書き込み (2007-04-26 13:54) より:
そうです。デバイスがCOMとして認識される機能をもっているわけではなく、
当該ドライバがその役割をしています。


 だったら、ドライバーがそういう情報を公開するかどうか、じゃないですか?

 USB ポートにデバイスをつないだら、ドライバが COM ポートにマッピングするわけですよね?だったら、ドライバがそのマップを返してくれるなら、取れるのではないでしょうか。


余談:
 渋木さんと rvmxさんで、想定している使い方が異なるんじゃないかなぁ?
 で、USB の機器なんだから、USB ポートで制御する方が楽なんじゃない?と思いました。ハムスターさんは、すでにあるプログラムを使いたい、ってことなんだと思いますけど。

_________________
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-04-27 00:22
引用:

そうです。デバイスがCOMとして認識される機能をもっているわけではなく、
当該ドライバがその役割をしています。



↑は半分正しくて半分間違っています。
ドライバ「だけ」で単なる USB 接続の機器を COM ポートに見せることは出来ません。

「そういう仕様の USB 接続機器」と「その機器に対応したドライバ」の組み合わせによって、はじめて「USB 接続機器」が「(仮想)COM ポート」に見えるのです。

引用:

 渋木さんと rvmxさんで、想定している使い方が異なるんじゃないかなぁ?



状況説明が足りないので

・通常の COM ポートに制御対象となる機器を接続している。
・USB シリアル変換ケーブル経由で制御対象の機器を接続している。
・USB 接続すると仮想 COM ポートに見える機器を接続している。

のどれか分からなかったんですが、どうやら3番目のパターンのようですね。

まぁ、通常の COM ポートなんて見たこともなくて、説明し分ける必要がわからなかったのかもしれませんが。

引用:

 で、USB の機器なんだから、USB ポートで制御する方が楽なんじゃない?と思いました。ハムスターさんは、すでにあるプログラムを使いたい、ってことなんだと思いますけど。



ドライバレベルで「COM ポート」に見せかけてしまうと、なかなかそうもいかないんですよ。

たまたま必要もあったので少し調べてみましたが、WMI では無理ぽいです。

SetupDiXXX 系の API を使うことになる上、前に書いたようにある程度 DDK レベルの知識が必要です。
TAD
ベテラン
会議室デビュー日: 2007/03/20
投稿数: 52
お住まい・勤務地: 海のそば
投稿日時: 2007-04-27 15:52
引用:
「USB → COM」な変換器を通すのではなく、USB ポートを使うんだけど、アプリケーションは COM ポートから操作できますよ、ってこと


USBポートを使うんだけど、アプリケーションはCOMポートから操作して、ハード的にRS-232を入出力するようなハードとソフト(ドライバ)とより成るコンポーネントを「USB-シリアル変換器(ケーブル)」と呼んでいると思うのですが。

さて。測定器やなんかを扱う現場でありがちなパターンとしては

  • 「自社製の機器」にはシリアルのポートがついている。サンプルのコントロールソフトなんかもみんなCOMポート前提
  • 手元のノートPCにはCOMポートがない。
  • じゃあUSB-シリアルの変換ケーブルを使おう。
  • 普通製品として売っている変換ケーブルは仮想COMポートとして使用するドライバが付いてくる。
  • COMポートで作ったプログラムはシリアルポート付きのPCでも使えるし、そもそも機器のI/Fもシリアルだ。
  • COMポートレベルでプログラムを書こう

じゃないかと思うんですが。
「RS-232コネクタが付いているわけじゃないけど(ドライバとの組み合わせで)USB 接続するとCOM ポートに見える機器」ってのもないわけじゃないですが、RS-232なんていう簡単な(原始的ともいう)、かつ普及して"いた"I/Fだと生のポートをつけちゃうことが多いように思います。産業用の機器の世界では。

#USB接続して+ドライバで仮想HP..じゃなくて仮想GPIBっていうオシロはこないだ使いました。普通GPIBのI/Fなんて入れてないからこれはUSB化する意味大あり。

まぁ、こういう用途(シリアルポートが付いていないPCをシリアルポートのついた機器に繋げる)ですから市販の変換器ではUSBレベルでの仕様の公開や接続を検出したりするAPI(といっていいかな。外部への通知機構)は付いてないんじゃないかと思います(そういう製品ももしかしたらあるかも知れませんが)。
もちろん、変換ICは定番があるみたいですからそれを調べてドライバを自分で書くというのなら何でもありでしょうけど...
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-04-28 07:49
引用:

USBポートを使うんだけど、アプリケーションはCOMポートから操作して、ハード的にRS-232を入出力するようなハードとソフト(ドライバ)とより成るコンポーネントを「USB-シリアル変換器(ケーブル)」と呼んでいると思うのですが。



で、今回の場合は、その変換機の RS-232C 端の方に機器が固定的に接続されているようなイメージだと思います。

つまり

引用:

#USB接続して+ドライバで仮想HP..じゃなくて仮想GPIBっていうオシロはこないだ使いました。普通GPIBのI/Fなんて入れてないからこれはUSB化する意味大あり。



の COM ポート版かと。

最近のノートPCには COM ポートが付いてないものが多いので、これはこれでまぁ意味のあることなんでしょう。

引用:

まぁ、こういう用途(シリアルポートが付いていないPCをシリアルポートのついた機器に繋げる)ですから市販の変換器ではUSBレベルでの仕様の公開や接続を検出したりするAPI(といっていいかな。外部への通知機構)は付いてないんじゃないかと思います(そういう製品ももしかしたらあるかも知れませんが)。



えーとね、個々の製品に専用の API が用意されていることはありませんが、「USB-シリアル変換機(の先に制御機器が固定的に接続されているようなものも含めて)」にしたって、結局のところは「USB 機器」なんです。

だから、Windows の DDK レベルの API を使えば列挙できるし、特定の製品を検出することは可能です。
(試してないけど、接続の検知も WM_DEVICECHANGE 他で可能なはずです)

具体的な手順はもう分かってるんですが、結構面倒なんで、元質問者の人が DDK レベルの API を使う気があるのかどうかを知りたいところです。

せっかく情報公開しても「無理なんであきらめます」なんて言われた日には悲しいですから。



[ メッセージ編集済み 編集者: 渋木宏明(ひどり) 編集日時 2007-04-28 08:58 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-28 08:11
引用:

渋木宏明(ひどり)さんの書き込み (2007-04-28 07:49) より:
元質問者の人が DDK レベルの API を使う気があるのかどうかを知りたいところです。

せっかく情報公開しても「無理なんであきらめます」なんて言われた日には悲しいですから。




英語の文書を読み進む気合いがあるか、とかですね(笑)
私は一気にやる気合いがないので分散しています。
_________________

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