(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-06
(45)【発行日】2024-12-16
(54)【発明の名称】USB仮想COMデバイスを接続する接続方法及びプログラム
(51)【国際特許分類】
G06F 13/10 20060101AFI20241209BHJP
G06F 13/38 20060101ALI20241209BHJP
【FI】
G06F13/10 310C
G06F13/10 320Z
G06F13/10 330C
G06F13/38 350
(21)【出願番号】P 2021012961
(22)【出願日】2021-01-29
【審査請求日】2023-12-18
(73)【特許権者】
【識別番号】000002233
【氏名又は名称】ニデックインスツルメンツ株式会社
(74)【代理人】
【識別番号】100123788
【氏名又は名称】宮崎 昭夫
(74)【代理人】
【識別番号】100127454
【氏名又は名称】緒方 雅昭
(72)【発明者】
【氏名】久保田 恭輔
【審査官】田名網 忠雄
(56)【参考文献】
【文献】特開2012-014356(JP,A)
【文献】特開2006-134093(JP,A)
【文献】特開2010-015372(JP,A)
【文献】特開2007-034524(JP,A)
【文献】特開2016-173705(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10-13/14
G06F 13/20-13/42
(57)【特許請求の範囲】
【請求項1】
アプリケーションプログラムを実行する上位装置に、USB仮想COMデバイスである外部機器を接続する接続方法であって、
前記アプリケーションプログラムから前記外部機器に対してシリアル形態での通信を行なおうとするときに、前記外部機器のUSBデバイスとしての識別情報を検索キーとして前記上位装置のオペレーティングシステムの設定情報データベースを検索して前記外部機器に対応するポート番号を取得し、
取得した前記ポート番号を使用して、前記アプリケーションプログラムと前記外部機器との間の通信を開始
し、
同一の前記識別情報を有する外部機器が重複して前記設定情報データベースに登録されているときには、重複している前記外部機器のそれぞれの前記ポート番号を取得し、その後、取得したポート番号の各々を用いて接続確認を順次行ってから、前記アプリケーションプログラムと前記外部機器との間の前記通信を開始する、接続方法。
【請求項2】
前記識別情報はベンダID及びプロダクトIDである、請求項1に記載の接続方法。
【請求項3】
前記アプリケーションプログラムと前記オペレーティングシステムとの間にダイナミックリンクライブラリが介在し、
前記ダイナミックリンクライブラリは、前記アプリケーションプログラムからの前記外部機器に対する接続要求を受け取ったときに、前記設定情報データベースを検索して前記外部機器に対応するポート番号を取得する処理を実行する、請求項1または2に記載の接続方法。
【請求項4】
USB仮想COMデバイスである外部機器が接続されるUSBポートを有してアプリケーションプログラムを実行するコンピュータに、
前記アプリケーションプログラムから前記外部機器に対してシリアル形態での通信を行なおうとするときに、前記外部機器のUSBデバイスとしての識別情報を検索キーとして前記
コンピュータのオペレーティングシステムの設定情報データベースを検索して前記外部機器に対応するポート番号を取得する処理と、
取得した前記ポート番号を使用して、前記アプリケーションプログラムと前記外部機器との間の通信を開始させる処理と、
を実行させ
、
同一の前記識別情報を有する外部機器が重複して前記設定情報データベースに登録されているときには、前記コンピュータに、重複している前記外部機器のそれぞれについて前記ポート番号を取得する処理と、取得したポート番号の各々を用いて接続確認を順次行う処理と、を実行させる、プログラム。
【請求項5】
前記識別情報はベンダID及びプロダクトIDである、請求項
4に記載のプログラム。
【請求項6】
前記プログラムは、前記アプリケーションプログラムと前記オペレーティングシステムとの間に介在するダイナミックリンクライブラリのプログラムであって、
前記コンピュータに、前記アプリケーションプログラムからの前記外部機器に対する接続要求を受け取ったときに、前記設定情報データベースを検索して前記外部機器に対応するポート番号を取得する処理を実行させる、請求項
4または
5に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、USB仮想COMデバイスである外部機器をホストコンピュータなどである上位装置に接続する接続方法及びプログラムに関する。
【背景技術】
【0002】
コンピュータなどの情報処理装置である上位装置に対してシリアル通信で動作する外部機器(例えばモデムなど)を接続する場合、かっては、用途別の個別のシリアルポート(シリアルインタフェース)を上位装置に設け、シリアルポートと接続対象の外部機器とを1対1で接続していた。個別のシリアルポートが複数ある場合には、COM1,COM2,…などのポート番号を付与してポートを区別していた。しかしながら、形状や規格が用途別の異なるポートあるいは物理インタフェースを設けることは、情報処理装置において物理的に実装しなければならないポートの数を増加させることともなるため、汎用のインタフェース規格であるUSB(Universal Serial Bus)規格が提案され、USBポートを介して各種の外部機器を上位装置に接続することが主流となってきた。USB規格とは異なるインタフェース規格の外部機器にアクセスすることを前提とするアプリケーションプログラムから、USBポートに物理的に接続された外部機器にアクセスすることが必要となることもあるが、その場合には、インタフェース規格の違いを吸収するデバイスドライバを介在させてアプリケーションプログラムから外部機器にアクセスする。シリアル通信で動作する例えばモデムなどの外部機器を接続するためのデバイスドライバとして、一般的なオペレーティングシステム(OS)には、CDC(Communication Device Class;通信機器クラス)デバイスが用意されている。以下の説明において、上位装置に対して物理的にはUSBポートを介して接続するものの、上位装置におけるアプリケーションプログラムからはシリアル通信で接続されているものとして扱われる外部機器のことをUSB仮想COMデバイスと呼ぶ。USB仮想COMデバイス自体は、USBポートに物理的に接続する機器であるので、USBデバイスの一種である。特許文献1は、USB規格とは異なるインタフェース規格に対応するソフトウェアによってUSBデバイスを制御する情報処理装置の一例を開示している。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上位装置のUSBポートに接続されるUSB仮想COMデバイスは、上位装置のアプリケーションプログラムからは、その仮想デバイスがあたかも個別のシリアルポートに接続されているかのようにしてポート番号により特定される。異なる種類の複数のUSB仮想COMデバイスが上位装置に接続されているときにアプリケーションプログラムが特定のUSB仮想COMデバイスと通信しようとするときは、アプリケーションプログラム側で、そのUSB仮想COMデバイスのポート番号を知っている必要がある。通信対象としたいUSB仮想COMデバイスのポート番号を調べる方法として、アプリケーションソフトウェアの側からCOM1,COM2,…と順番にポート番号を変えつつ対象とするUSB仮想COMデバイスに適合したコマンドを送信し、コマンド送信に対して期待された応答を行ったポート番号を、その対象とするUSB仮想COMデバイスに通信するためのポーと番号と認識する方法がある。しかしながらこの方法では、探索対象のUSB仮想COMデバイス以外のUSB仮想COMデバイス(すなわち、他のUSB仮想COMデバイス)に対してもコマンドを送信するので、当該他のUSB仮想COMデバイスに対する通信に干渉したり、当該他の仮想COMデバイスの誤動作を引き起こす恐れがある。
【0005】
本発明の目的は、他の仮想COMデバイスにおける誤動作や通信の干渉を引き起こすことなくUSB仮想COMデバイスである所望の外部機器を検索して、上位装置のアプリケーションプログラムの側からその外部機器にシリアル形態で通信することを可能にする接続方法及びプログラムを提供することにある。
【課題を解決するための手段】
【0006】
本発明の接続方法は、アプリケーションプログラムを実行する上位装置に、USB仮想COMデバイスである外部機器を接続する接続方法であって、アプリケーションプログラムから外部機器に対してシリアル形態での通信を行なおうとするときに、外部機器のUSBデバイスとしての識別情報を検索キーとして上位装置のオペレーティングシステムの設定情報データベースを検索して外部機器に対応するポート番号を取得し、取得したポート番号を使用して、アプリケーションプログラムと外部機器との間の通信を開始し、同一の識別情報を有する外部機器が重複して設定情報データベースに登録されているときには、重複している外部機器のそれぞれのポート番号を取得し、その後、取得したポート番号の各々を用いて接続確認を順次行ってから、アプリケーションプログラムと外部機器との間の通信を開始する。
【0007】
本発明の接続方法では、外部機器のUSBデバイスとしての識別情報を検索キーとしてオペレーティングシステムの設定情報データベース(例えばレジストリ)を検索してポート番号を取得するので、上位装置に接続している他のUSB仮想COMデバイスにコマンドを送信することがなく、したがって、当該他のUSB仮想COMデバイスにおける誤動作や通信の干渉を引き起こすことがない。ポート番号が取得できれば、アプリケーションプログラムは、外部機器とのシリアル形態での通信を行うことができるようになる。
【0008】
本発明の接続方法では、USBデバイスとしてのベンダID及びプロダクトIDを識別情報とすることが好ましい。ベンダID及びプロダクトIDを識別情報として使用することにより、同一機種の異なる外部機器を意識する必要がなくなり、アプリケーションプログラム側の動作を複雑なものとしなくて済むようになる。
【0009】
本発明の接続方法では、アプリケーションプログラムとオペレーティングシステムとの間にダイナミックリンクライブラリが介在する場合に、アプリケーションプログラムからの外部機器に対する接続要求を受け取ったときに、ダイナミックリンクライブラリが設定情報データベースを検索して外部機器に対応するポート番号を取得する処理を実行することが好ましい。このように構成することにより、外部機器の機種の変更などがあったときにその影響をダイナミックリンクライブラリで吸収できるようになるので、アプリケーションプログラムを更新したりする必要がなくなる。
【0010】
同一機種の外部機器を取り換えて接続したり、異なるUSBポートに接続した場合などに、同一の識別情報を有する外部機器が重複して設定情報データベースされることがある。本発明の接続方法では、そのような場合には、取得したポート番号の各々を用いて接続確認を順次行うことにより、外部機器に関して実際に通信に使用できるポート番号を知ることができる。この場合、対象とする外部機器以外の他のUSB仮想COMデバイスは接続確認の対象とはならないから、当該他のUSB仮想COMデバイスにおける誤動作や通信の干渉を起こらない。
【0011】
本発明のプログラムは、USB仮想COMデバイスである外部機器が接続されるUSBポートを有してアプリケーションプログラムを実行するコンピュータに、アプリケーションプログラムから外部機器に対してシリアル形態での通信を行なおうとするときに、外部機器のUSBデバイスとしての識別情報を検索キーとしてコンピュータのオペレーティングシステムの設定情報データベースを検索して外部機器に対応するポート番号を取得する処理と、取得したポート番号を使用して、アプリケーションプログラムと外部機器との間の通信を開始させる処理と、を実行させ、同一の識別情報を有する外部機器が重複して設定情報データベースに登録されているときには、コンピュータに、重複している外部機器のそれぞれについてポート番号を取得する処理と、取得したポート番号の各々を用いて接続確認を順次行う処理と、を実行させる。
【0012】
本発明のプログラムによれば、外部機器のUSBデバイスとしての識別情報を検索キーとしてオペレーティングシステムの設定情報データベース(例えばレジストリ)を検索してポート番号を取得するので、コンピュータである上位装置に接続している他のUSB仮想COMデバイスにコマンドを送信することなくポート番号を取得できることとなり、当該他のUSB仮想COMデバイスにおける誤動作や通信の干渉を引き起こすことなくポート番号を取得することができる。ポート番号が取得できれば、アプリケーションプログラムは、外部機器とのシリアル形態での通信を行うことができるようになる。
【0013】
本発明のプログラムでは、USBデバイスとしてのベンダID及びプロダクトIDを識別情報とすることが好ましい。ベンダID及びプロダクトIDを識別情報として使用することにより、同一機種の異なる外部機器を意識する必要がなくなり、アプリケーションプログラム側の動作を複雑なものとしなくて済むようになる。
【0014】
本発明のプログラムは、アプリケーションプログラムとオペレーティングシステムとの間に介在するダイナミックリンクライブラリのプログラムであって、アプリケーションプログラムからの外部機器に対する接続要求を受け取ったときに、コンピュータに、設定情報データベースを検索して外部機器に対応するポート番号を取得する処理を実行させるプログラムであることが好ましい。このように構成することにより、外部機器の機種の変更などがあったときにその影響をダイナミックリンクライブラリで吸収できるようになって、アプリケーションプログラムを更新したりする必要がなくなる。
【0015】
また本発明のプログラムによれば、同一の識別情報を有する外部機器が重複して設定情報データベースされている場合に、取得したポート番号の各々を用いて接続確認を順次行うことにより、実際に通信に使用できるポート番号を知ることができる。この場合、対象とする外部機器以外の他のUSB仮想COMデバイスは接続確認の対象とはならないから、当該他のUSB仮想COMデバイスにおける誤動作や通信の干渉を起こらない。
【発明の効果】
【0016】
本発明によれば、他のUSB仮想COMデバイスにおける誤動作や通信の干渉を引き起こすことなく所望のUSB仮想COMデバイスである外部機器を検索して、上位装置のアプリケーションプログラムの側からその外部機器にアプリケーションプログラムがシリアル形態で通信することが可能になる。
【図面の簡単な説明】
【0017】
【
図1】上位装置であるホストコンピュータとUSB仮想COMデバイスである外部機器との接続を説明するブロック図である。
【
図2】設定情報ファイルの内容の一例を示す図である。
【
図3】本発明の一実施形態の接続方法を説明するフローチャートである。
【発明を実施するための形態】
【0018】
次に、本発明を実施するための形態について、図面を参照して説明する。本発明は、上位装置に対してUSB仮想COMデバイスを接続することに関するものであり、
図1は、上位装置であるホストコンピュータ1とUSB仮想COMデバイスである外部機器2との接続を示している。
【0019】
ホストコンピュータ1は、例えば汎用のパーソナルコンピュータによって構成されるものであり、任意のアプリケーションプログラム11を実行可能なものである。特にホストコンピュータ1は、ハードウェアであるインタフェースとして、USBポート3を備えている。ホストコンピュータ1は、アプリケーションプログラム11に対する各種のサービスを提供するオペレーティングシステム(OS)20によって制御される。このホストコンピュータ1では、アプリケーションプログラム11は、ダイナミックリンクライブラリ(DLL)を介してOS20に対してサービスのリクエストを行い、OS20から処理結果を受け取るように構成されている。OS20は、USB CDCプロトコルが組み込まれており、そのため、シリアル通信で動作するデバイスに対するデバイスドライバであるCDCドライバ21と、CDCドライバ21とUSBポート3の間にあってUSBプロトコルに関連する処理を実行するUSBドライバ22を備えている。さらにOS20は、ホストコンピュータ1のシステムに関する設定情報、アプリケーションプログラム11に関する設定情報、DLL12に関する設定情報及びOS20に関する設定情報などを一括して格納する設定情報データベース23を備えている。OS20は、例えば、Microsoft(登録商標) Windows(登録商標)であり、その場合、設定情報データベース23は、レジストリである。
【0020】
USB仮想COMデバイスである外部機器2は、アプリケーションプログラム11からのシリアルデータによって動作するものであり、USBケーブルを介して上位装置1のUSBポート3に着脱可能に物理的に接続している。外部機器2は、ホストコンピュータ1との接続のためにUSBポート4を備えており、USBポート4を介し、ホストコンピュータ1からのコマンドデータ(命令文)を受け付け、それに対するレスポンス(応答)をホストコンピュータ1に送信するインタフェースを有する。外部機器2には、受信したコマンドデータにしたがって動作し、機械制御を行なうために、不図示のCPU(中央処理装置)、ROM(読み出し専用メモリ)、RAM(ランダムアクセスメモリ)などを備えている。一例として外部機器2は、ICカードに対して読み書きを行うICカードリーダであってもよい。USBデバイスである外部機器2には、ベンダ(製造者)ID、プロダクト(製品)ID及びシリアル番号(個体番号)が付与されている。ベンダID、プロダクトID及びシリアル番号は、USBデバイスを一意に特定することを可能にする識別情報である。ベンダIDとプロダクトIDとよって、外部機器2の種類や仕様を特定することができ、これに加えてシリアル番号を用いることによって、外部機器2を一意に特定することができる。
【0021】
USB規格とOS20の仕様に基づき、USBポート3に初めて外部機器2を接続したときには、外部機器2からベンダIDと製品IDとシリアル番号が読み出されて設定情報データベース23に登録される。外部機器2はUSB仮想COMデバイスであるので、ポート番号「COMn」(nは例えば1以上256以下の自然数)も割り当てられ、これも、ベンダIDと製品ID及びシリアル番号に関連付けられて設定情報データベース23に登録される。外部機器2に関してひとたび設定情報データベース23に登録された情報は、その外部機器2をホストコンピュータ1から取り外したのちも設定情報データベース23に保存される。OS20がMicrosoft(登録商標) Windows(登録商標)であ場合には、設定情報データベース23であるレジストリにおいて、キーHKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Enum¥USBに、USB仮想COMデバイスである外部機器2に関する情報が格納される。
図2は、レジストリのキーHKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Enum¥USBに格納される情報の一例を示している。
【0022】
図2では、ベンダID(VID)とプロダクトID(PID)との組み合わせごとにエントリが設けられ、そのようなエントリが多数、レジストリに記録されていることが示されている。これらのエントリの各々は、ホストコンピュータ1に接続されたことがあるUSBデバイスを示している。そして、ベンダID(VID)が1089であり、プロダクトID(PID)が0021であるエントリ(すなわち図示「VID_1089&PID_0021」であるエントリ)における「Device Parameters」の内容が、
図2における右側の領域に示されている。ここで名前が「PortName」であるパラメータに対して記録されたデータである「COM13」が、USB仮想COMデバイスであってベンダIDが1069でありプロダクトIDが0021である外部機器2に割り当てられたポート番号を示している。
【0023】
上述したようにUSB仮想CDCデバイスである外部機器2をホストコンピュータ1に接続した時点で、外部機器2に対してポート番号が割り当てられ、設定情報データベース23に格納される。しかしながら、割り当てられたポート番号は自動的にはアプリケーションプログラム11には通知されず、アプリケーションプログラム11は外部機器2に割り当てられたポート番号を知ることができない。外部機器2はUSB仮想CDCデバイスであるので、アプリケーションプログラム11の側から外部機器2に対してデータやコマンドの送受信を行うためにはその外部機器2に割り当てられたポート番号を用いる必要がある。アプリケーションプログラム11の側から所望の外部機器2のポート番号を知る方法として、アプリケーソンソフトウェア11の側からCOM1,COM2,…と順番にポート番号を変えつつ対象とする外部機器2に適合したコマンドを送信し、コマンド送信に対して期待された応答を行ったポート番号を、その対象とする外部機器2に通信するためのポート番号と認識する方法がある。しかしながらこの方法では、探索対象の外部機器2以外のUSB仮想COMデバイス(すなわち、他のUSB仮想COMデバイス)に対してもコマンドを送信するので、当該他のUSB仮想COMデバイスに対する通信に干渉したり、当該他の仮想COMデバイスの誤動作を引き起こす恐れがある。
【0024】
そこで本実施形態の接続方法では、アプリケーションプログラム2が所望の外部機器2に対してシリアル形態の通信を行なおうとするときに、USBポート3に接続されているデバイスにコマンドなどを送信することなく所望の外部機器2のポート番号を検索し、検索して見つかったポート番号を使用して通信を開始する。
図3は、本実施形態の接続方法を説明するフローチャートである。
【0025】
所望の外部機器2のポート番号は分からなくても、特定の外部機器2との通信を行なおうとする以上、その外部機器2の少なくともそのベンダIDとプロダクトIDは既知である。ステップ101において、DLL12は、アプリケーションプログラム11からの外部機器2への接続要求を待ち受ける。DLL12がアプリケーションプログラム11から外部機器2への接続要求を受け取ったときにDLL12は、ステップ102において、その外部機器2のベンダIDとプロダクトIDとを検索キーとしてOS20内の設定情報データベース23を検索し、ポート番号を取得する。その後、アプリケーションプログラム11またはDLL12は、ステップ103において、取得したポート番号を使用して、アプリケーションプログラム11と外部機器2とのシリアル形態での通信を開始する。外部機器2のベンダID及びプロダクトIDは、アプリケーションプログラム11からDLL12への接続要求に含まれていてもよいし、接続要求を受け取ったDLL12がその接続要求の内容に応じ、例えばDLL12内に設けられたテーブルを参照して、決定してもよい。DLL12においてベンダID及びプロダクトIDを決定するようにしたときは、新機種であって少なくともプロダクトIDが異なる外部機器2に対応できるようにするためにはDLL12だけを更新すればよく、アプリケーションプログラム11を更新する必要がないという利点が生じる。
【0026】
以上説明したように本実施形態によれば、ホストコンピュータ1にインストールされているアプリケーションプログラム11が、ホストコンピュータ1のUSBポート3に接続されたUSB仮想COMデバイスである外部機器2に対してシリアル形態での通信を行なおうとするときに、実際のコマンドデータを送出することなく、外部機器2に割り当てられているポート番号を取得することができる。その結果、ホストコンピュータ1に接続されている他のUSB仮想COMデバイスにおける誤動作や通信の干渉を引き起こすことなく、アプリケーションプログラム11は、所望の外部機器2に対する通信を開始することができる。
【0027】
ところで設定情報データベース23において、同一のベンダID及び同一のプロダクトIDを有するエントリが複数登録される場合、すなわち、同一機種の外部機器2が重複して登録される場合がある。このように重複登録される場合には、現実に同一機種の外部機器2の複数台が同時にホストコンピュータ1に接続されている場合もあるが、上述したように設定情報データベース23に登録された情報は原則として削除されないので、既設の外部機器2を同一機種の異なる外部機器2(すなわちシリアル番号だけが異なる外部機器2)に置き換えた場合や、ホストコンピュータ1の異なるUSBポート3に外部機器2を接続し直した場合などが含まれる。同一機種の外部機器2が設定情報データベース23に重複登録されている場合には、ベンダID及びプロダクトIDを用いて上述と同様に検索すると、多くの場合、重複登録されていることに伴って複数のポート番号が取得される。そして複数のポート番号が取得されたら、取得されたポート番号の各々を用いてコマンドを送信するなどの方法により接続確認を順次行い、コマンド送信に対して期待された応答を行ったポート番号を通信に用いるポート番号とする。この場合、ベンダID及びプロダクトIDを検索キーとして用いて設定情報データベース23を検索したときに、対象の外部機器2以外の他のUSB仮想COMデバイスが使用しているポート番号は検索結果として得られないから、コマンド送信による接続確認を行ったとしても、ホストコンピュータ1に接続されている当該他のUSB仮想COMデバイスにおける誤動作や通信の干渉が引き起こされない。
【0028】
以上の説明では、アプリケーションプログラム11とOS20との間にDLL12が介在し、DLL12が設定情報データべース23の検索を行うこととしているが、アプリケーションプログラム11とOS20の間にDLL12を介在させずに、アプリケーションプログラム11自体がベンダIDとプロダクトIDとを検索キーとする設定情報データベース23の検索を行うようにしてもよい。ただし、DLL12を設けることにより、アプリケーションプログラム11の更新などを行うことなく、外部機器2を新機種のものに変更するなどの状況に柔軟に対応することができるようになり、また、アプリケーションプログラム11での通信処理の負担を軽減することができる。
【0029】
図1に示したホストコンピュータ1において、アプリケーションプログラム11、DLL12及びOS20は、いずれもソフトウェアプログラムによって実現されるものである。したがって本発明には、上述した処理をホストコンピュータ1に実行させるコンピュータプログラムも含まれる。そのようなプログラムは、CD-ROMなどの適宜の記録媒体を介して、あるいは、ネットワークを介して、ホストコンピュータ1に読み込まれる。
【符号の説明】
【0030】
1…ホストコンピュータ;2…外部機器;3,4…USBポート;11…アプリケーションプログラム;12…DLL(ダイナミックリンクライブラリ);20…OS(オペレーティングシステム);21…CDCドライバ;22…USBドライバ;23…設定情報データベース。