(57)【特許請求の範囲】
【請求項１】
デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置であって、
上位層のソフトウェアからの要求により、前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド制御手段と、
前記通信スレッド制御手段によって生成される通信スレッドと、
前記通信スレッドにより生成され、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックとを備え、
前記通信スレッドは、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、当該検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行うことを特徴とする情報処理装置。
【請求項２】
前記通信スレッドは、前記非データ送受信状態であるデバイススタックが存在しない場合、当該非データ送受信状態であるデバイススタックが検出されるまで前記デバイス制御装置との接続を待機することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記通信スレッドは、前記デバイススタックが予め規定された個数生成されている場合、新たなデバイススタックの生成を行わないことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
新たなデバイススタックを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
前記非データ送受信状態であるデバイススタックの検出を行い、当該非データ送受信状態であるデバイススタックが検出されない場合のみ、新たなデバイススタックを生成することを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させることを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させないことを特徴とする請求項１に記載の情報処理装置。
【請求項８】
前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数が前記デバイススタックの個数を超える場合、当該通信スレッドとの接続に用いたデバイススタックを終了させないことを特徴とする請求項１に記載の情報処理装置。
【請求項９】
請求項１〜８のいずれか１項に記載の情報処理装置と、前記情報処理装置にネットワークを介して接続されたデバイス制御装置と、前記デバイス制御装置にローカル接続されたデバイスとを有し、前記情報処理装置が前記デバイス制御装置を介して前記デバイスを制御してデータ通信を行うことを特徴とするデバイス制御システム。
【請求項１０】
デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置の制御方法であって、
通信スレッド生成手段が上位層のソフトウェアからの要求により、通信スレッド制御手段が前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド生成ステップを実行し、
前記通信スレッド生成ステップで生成された通信スレッドは、
前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックを生成するデバイススタック生成ステップと、
前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行う検出ステップと、
前記検出ステップで検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行う接続ステップと
を実行することを特徴とする制御方法。
【請求項１１】
前記通信スレッドは、前記非データ送受信状態であるデバイススタックが存在しない場合、当該非データ送受信状態であるデバイススタックが検出されるまで前記デバイス制御装置との接続を待機する待機ステップを実行することを特徴とする請求項１０に記載の制御方法。
【請求項１２】
前記通信スレッドは、前記デバイススタックが予め規定された個数生成されている場合、前記デバイススタック生成ステップにおいて新たなデバイススタックの生成を行わないことを特徴とする請求項１０に記載の制御方法。
【請求項１３】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
前記デバイススタック生成ステップにおいて新たなデバイススタックを生成することを特徴とする請求項１０に記載の制御方法。
【請求項１４】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
前記検出ステップにおいて前記非データ送受信状態であるデバイススタックの検出を行い、当該非データ送受信状態であるデバイススタックが検出されない場合のみ、新たなデバイススタックを生成することを特徴とする請求項１０に記載の制御方法。
【請求項１５】
前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させる終了処理ステップを実行することを特徴とする請求項１０に記載の制御方法。
【請求項１６】
前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させない第２の終了処理ステップを実行することを特徴とする請求項１０に記載の制御方法。
【請求項１７】
前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数が前記デバイススタックの個数を超える場合、当該通信スレッドとの接続に用いたデバイススタックを終了させない第３の終了処理ステップを実行することを特徴とする請求項１０に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークを介して各種デバイスと通信を行う情報処理装置、その制御方法、およびデバイス制御システムに関する。
【背景技術】
【０００２】
従来、パーソナルコンピュータなどの情報処理装置（以下，ＰＣ）をクライアントとしてネットワークを介してプリンタ、ストレージ、およびスキャナなどのデバイス（周辺機器）を利用するシステムが知られている。このようなシステムにおいて、クライアントがネットワーク上のデバイスをローカル接続されたデバイスとして仮想的に認識して、ネットワーク上のクライアントからデバイスをアクセスできるようにしたものがある。
【０００３】
本出願人は、この際、ネットワーク上に存在するデバイスの台数分だけクライアントにデバイスサーバを介してデバイスを制御するためのデバイススタックを構成して、デバイスのインターフェース規格やメーカー又はベンダーが提供するデバイスの制御に必要なプログラム（機能）であるＳＤＫ（Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｋｉｔ）などで規定される最大接続台数までデバイスを接続できるように制御するクライアント装置及びデバイス制御システムを提案している（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１２９１１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、出願人自らが先に提案した特許文献１のクライアント装置及びデバイス制御システムをさらに拡張・発展させ、デバイスのインターフェース規格やＳＤＫで規定される最大接続台数を超えてデバイスを接続制御できる情報処理装置、その制御方法、およびデバイス制御システムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、本発明による情報処理装置は、デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置であって、上位層のソフトウェアからの要求により、前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド制御手段と、前記通信スレッド制御手段によって生成される通信スレッドと、前記通信スレッドにより生成され、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックとを備え、前記通信スレッドは、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、当該検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行うことを特徴とする。
【０００７】
本発明によるデバイス制御システムは、上記の情報処理装置と、前記情報処理装置にネットワークを介して接続されたデバイス制御装置と、前記デバイス制御装置にローカル接続されたデバイスとを有し、前記情報処理装置が前記デバイス制御装置を介して前記デバイスを制御してデータ通信を行うことを特徴とする。
【０００８】
本発明による制御方法は、デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置の制御方法であって、通信スレッド生成手段が上位層のソフトウェアからの要求により、通信スレッド制御手段が前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド生成ステップを実行し、前記通信スレッド生成ステップで生成された通信スレッドは、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックを生成するデバイススタック生成ステップと、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行う検出ステップと、前記検出ステップで検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行う接続ステップとを実行することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、情報処理装置がデバイス制御装置を介してデバイスとデータ通信を行う際、デバイスのインターフェース規格やＳＤＫで規定される最大接続台数に制限されることなく、情報処理装置の性能を効果的に発揮して、デバイスを接続制御できるようになる。
【図面の簡単な説明】
【００１０】
【図１】本発明の第１の実施形態による情報処理装置の一例が用いられたデバイス制御システムを示すブロック図である。
【図２】図１に示すデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。
【図３】図１に示す情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。
【図４】図３に示すフローチャートにおける通信スレッド生成・開始処理を説明するためのフローチャートである。
【図５】図３に示すフローチャートにおける接続処理を説明するためのフローチャートである。
【図６】図１に示すデバイス制御モジュールで行われるデータ送受信の一例を説明するためのフローチャートである。
【図７】図３に示すフローチャートにおける終了処理を説明するためのフローチャートである。
【図８】本発明の第２の実施形態によるデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。
【図９】本発明の第２の実施形態による情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。
【図１０】本発明の第３の実施形態によるデバイス制御システムの一例を示すブロック図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態による情報処理装置について図面を参照して説明する。なお、以下の説明では、情報処理装置としてパーソナルコンピュータ（ＰＣ）を一例に挙げて説明する。
【００１２】
［第１の実施形態］
図１は、本発明の第１の実施形態による情報処理装置の一例が用いられたデバイス制御システムを示すブロック図である。
【００１３】
情報処理装置１１は、ＬＡＮ（ローカルエリアネットワーク）などのネットワーク１０を介してデバイスサーバ１２−１〜１２−ｎ（図示の例では、ｎ＝４）と接続可能に構成されている。なお、上記のネットワーク１０は、有線又は無線のいずれの方式を用いてもよい。
【００１４】
また、デバイスサーバ１２−１〜１２−４夫々は、汎用的なインターフェースを備える入出力機器であるデバイス１３−１〜１３−２が接続ケーブル１０ａ〜１０ｄでローカル接続されている。ここでは、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インターフェースで接続されている例について説明するが、これに限定されるものではなく、例えば、ＨＤＭＩやＴｈｕｎｄｅｒｂｏｌｔなどの他のインターフェースに準拠するインターフェースを用いるようにしてもよい。
【００１５】
デバイス１３−１〜１３−４は、汎用的なインターフェース（ここでは、ＵＳＢインターフェース）を備えた入出力機器である。例えば、キーボード、マウス、又はカードリーダのような入力機器、ディスプレイなどの表示（出力）機器、そして、プリンタなどの単機能周辺機器、又は、プリント機能の他にスキャン機能、コピー機能、およびストレージ機能などを備える多機能周辺機器であってもよく、これら以外の入出力機器であってもよい。なお、デバイスサーバ１２−１〜１２−４は、それぞれが接続しているデバイス１３−１〜１３−４と一体化した構造とするようにしてもよい。
【００１６】
図１に示す例では、情報処理装置が１台であるが、複数の情報処理装置がネットワーク１０に接続されている構成であってよい。また、デバイスサーバには、夫々デバイスが１台ずつ接続されているが、複数のデバイスが接続されている構成であってもよい。
【００１７】
＜情報処理装置の構成＞
図１に示す情報処理装置１１は、本発明の情報処理装置の一例であり、例えば、ＰＣ（パーソナルコンピュータ）などの装置であって、内部バスで互いに接続されたＣＰＵ、入力部、表示部、メモリ、通信部、外部記憶部（何れも不図示）で構成され、ネットワーク１０を介してデバイスサーバ１２−１〜１２−４と通信することができる。
【００１８】
外部記憶部は、不図示のオペレーティングシステム（以下、ＯＳ）、外部アプリケーション１１ａ、常駐モジュール１１ｂ、デバイスサーバ通信モジュール１１ｃ、デバイス制御モジュール１１ｄ−１〜１１ｄ−３、デバイススタック１１ｆ〜１〜１１ｆ−３、および通信制御部１１ｅ等のソフトウェア部品に加えて、各種データが記憶される。これらソフトウェア部品及び各種データは、ＣＰＵ及びＯＳの制御に従い、メモリ上に読み出されて各種制御が実行される。
【００１９】
＜情報処理装置のソフトウェア構成＞
外部アプリケーション１１ａは、デバイス１３に対する要求（起動、接続、又は終了など）やユーザ操作に応じた要求を、常駐モジュール１１ｂを介して指示し、当該要求に対する結果を得るためのソフトウェアである。
【００２０】
常駐モジュール１１ｂは、ＯＳが起動している際、常に待機および動作しているソフトウェアであり、デバイスサーバ通信モジュール１１ｃおよび通信制御部１１ｅを起動して、ネットワーク上に存在するデバイスサーバ１２−１〜１２−４とデータ送受信を行う。また、常駐モジュール１１ｂは、デバイスサーバ１２及び夫々のデバイスサーバ１２にローカル接続されたデバイス１３−１〜１３−４を検知して、デバイスサーバ１２に関するデバイスサーバ情報及びデバイス１３に関するデバイス情報を取得する。
【００２１】
デバイスサーバ通信モジュール１１ｃは、常駐モジュール１１ｂによって起動されるソフトウェア部品であって、メインスレッド１２０及び通信スレッド１２１〜１２４によってデバイスサーバ１２−１〜１２−４夫々との通信を独立して制御するとともに、通信スレッドの個数、デバイススタック（後述）の個数及びその通信状態に関する情報（データ送受信中か否かなど）の管理を行う。
【００２２】
メインスレッド１２０は、上位層のソフトウェアである外部アプリケーション１１ａ、ＯＳ、常駐モジュール１１ｂの制御に従い、通信スレッド１２１〜１２４を生成、起動し、デバイスサーバ１２との間の通信を制御するソフトウェアである（通信スレッド制御手段）。
【００２３】
通信スレッド１２１〜１２４各々は、デバイス１３（１３−１〜４）が接続されたデバイスサーバ１２−１〜１２−４との間の通信制御を独立して実行するためのプログラムであり、外部アプリケーション１１ａからの起動要求が契機となり、制御対象とするデバイス１３（１３−１〜４）ごとに生成される。図１では、４個の通信スレッドが生成されているが、生成される個数はこれに限定されるものではなく、これ以上の個数であってもよい。
【００２４】
当該生成された通信スレッドは、常駐モジュール１１ｂが取得したデバイス情報に基づいてデバイス１３（１３−１〜１３−４）との間のデータ送受信に必要なドライバソフトウェアであるデバイスドライバ１１０、クラスドライバ１１１、および仮想バスドライバ１１２を一意に特定し、順次動的に生成する。これらドライバソフトウェア（デバイスドライバ１１０、クラスドライバ１１１、および仮想バスドライバ１１２）を総称してデバイススタックという。図１では、３つのデバイススタック１１ｆ−１〜１１ｆ−３が生成される。
【００２５】
なお、デバイススタックは、生成できる個数が決まっており、デバイスのインターフェース規格やＳＤＫなどによって規定された接続可能なデバイスの台数の上限（以後、最大接続数）と同数まで生成できる。例えば、ＵＳＢインターフェースの規格では、最大接続数は１２７台であり、規格によるとデバイススタックは１２７個まで生成できる。本実施例では、便宜上、最大接続数を３台、即ち、デバイススタックを３個まで生成できるものとして説明する。
【００２６】
また、デバイスの機種が異なる場合は、それぞれの機種に応じたデバイススタックが生成、起動される。この場合も同様に、生成可能なデバイススタックの総個数は、上述した最大接続数まで生成される。
【００２７】
更に、通信スレッド１２１〜１２４の各々は、外部アプリケーション１１ａ若しくは、デバイスサーバ１２を介してデバイス１３の動作状態（ステータス）の変化を示す接続通知を受けると、何れのデバイスサーバ１２ともデータ送受信を実行していない状態（以下、非データ送受信状態）のデバイススタック１１ｆの検出を行う。具体的には、デバイスサーバ通信モジュール１１ｃ内で管理してデバイスサーバとの通信状態に関する情報に基づいて非データ送受信状態を判断する。そして、該当する非データ送受信状態のデバイススタック１１ｆが検出されると、該当するデバイススタック１１ｆの仮想バスドライバ１１２に切替通知することで、データ通信経路の切り替えが行われ、デバイススタック１１ｆとの接続が行われる。そして、当該デバイススタック１１ｆを介して接続されるデバイスサーバ１２に対して、独立したセッションを開始し、データ送受信が完了すると当該セッションの終了を指示する。
【００２８】
通信スレッドの個数とデバイススタックの個数は必ずしも一致せず、デバイススタックの個数が最大接続数である場合、通信スレッド（１２１〜１２４）は、デバイススタックの生成を行わない。
【００２９】
デバイス制御モジュール１１ｄ−１〜１１ｄ−３の各々は、デバイスサーバ通信モジュール１１ｃによって、夫々のデバイススタック１１ｆに対応して起動されるソフトウェアである。例えば、デバイス制御モジュール１１ｄ−１は、デバイススタック１１ｆ−１、デバイス制御モジュール１１ｄ−２は、デバイススタック１１ｆ−２、デバイス制御モジュール１１ｄ−３は、デバイススタック１１ｆ−３、というように夫々のデバイススタック１１ｆと対応づけて起動される。そして、不図示のＳＤＫを介しデバイススタック１１ｆ−１〜１１ｆ−３夫々と対となって動作し、デバイス１３−１〜１３−４を各々に独立して制御する。
【００３０】
通信スレッド（１２１〜１２４）によってデバイスサーバ１２とのセッションが開始されると、該当の通信スレッドに対してデータ送受信開始通知を送って、接続したデバイススタック１１ｆ（１１ｆ−１〜３）を介してデバイスサーバ１２（１２−１〜４）とのデータ送受信の制御を開始し、データ送受信が終了すると、データ送受信完了通知を該当の通信スレッドに送信する。
【００３１】
＜デバイススタックの構成＞
次に、デバイススタック１１ｆ（１１ｆ−１〜３）を構成する各ソフトウェア部品について説明する。
【００３２】
デバイスドライバ１１０は、ＯＳや外部アプリケーション１１ａ又はデバイス制御モジュール１１ｄ−１〜１１ｄ−３の指示によって、デバイス１３（１３−１〜４）に対する制御コマンドを生成してデータ送受信を実行する。そして、デバイスドライバ１１０は当該制御コマンドに対するデバイス１３（１３−１〜４）からの応答（つまり、データ送受信の結果）を待って、当該応答をデバイス制御モジュール１１ｄ（１１ｄ−１〜３）に通知するソフトウェアである。
【００３３】
クラスドライバ１１１（ここでは、ＵＳＢクラスドライバ）は、制御コマンドを送受信するためのＵＳＢポートを有しており、デバイス制御モジュール１１ｄ（１１ｄ−１〜３）又はデバイスドライバ１１０で生成された制御コマンドをＵＳＢパケットに変換して仮想バスドライバ１１２へ送り、さらに当該ＵＳＢパケットを制御コマンドに変換してデバイス制御モジュール１１ｄ（１１ｄ−１〜３）又はデバイスドライバ１１０に渡す。
【００３４】
仮想バスドライバ１１２（ここでは、ＵＳＢ仮想バスドライバ）は、通信制御部１１ｅを介して夫々のデバイスサーバ１２に接続されたデバイス１３を、ローカル接続によって直接接続したときと同様に制御するためのソフトウェアである。
【００３５】
通信制御部１１ｅは、ネットワーク１０と接続してデバイスサーバ１２との間の通信を制御する。
【００３６】
＜デバイスサーバ１２の構成＞
デバイス制御装置の一例であるデバイスサーバ１２（１２−１〜４）の各々は、内部バスで互いに接続されたＣＰＵ、メモリ、通信部、ローカルインタフェース（ここでは、ＵＳＢインターフェース）、及び外部記憶部（何れも不図示）で構成されており、ネットワーク１０を介して情報処理装置１１と通信すると共に、ローカル接続しているデバイス１３−１〜１３−４夫々と接続ケーブルを介してデータ送受信することができる。
【００３７】
外部記憶部には、ＯＳ（不図示）、通信制御部１２ａ、仮想化制御部１２ｂ、およびデバイス制御部１２ｃなどのソフトウェアに加え各種データが記憶される。これらソフトウェア、及び記憶されたデータは、ＣＰＵの制御に従い、メモリ上に読み出されて各種制御が実行される。
【００３８】
通信制御部１２ａは、ネットワーク１０と接続して情報処理装置１１との間の通信を制御する。仮想化制御部１２ｂは、通信制御部１２ａを介して情報処理装置１１の仮想バスドライバ１１２と通信し、デバイス制御部１２ｃを制御する。デバイス制御部１２ｃは、ＵＳＢインターフェースを介して接続されているデバイス１３（１３−１〜４）を制御する。
【００３９】
このような構成のデバイス制御システムにおいて、情報処理装置１１は、仮想バスドライバ１１２によって、デバイスサーバ１２の仮想化制御部１２ｂを介しデバイス制御部１２ｃを遠隔で制御することで、情報処理装置１１にデバイス１３（１３−１〜４）があたかもローカル接続されたときと同様に制御することができる（仮想化制御）。
【００４０】
また、デバイスサーバ１２（１２−１〜４）は、ローカル接続しているデバイス１３（１３−１〜４）からデバイス情報（デバイス識別情報、デバイス構成、種別など）をデバイス制御部１２ｃによって取得し、当該デバイス情報及び自装置の情報であるデバイスサーバ情報（サーバ識別情報、サーバ設定情報など）を情報処理装置１１に送信する。
【００４１】
デバイス情報やデバイスサーバ情報は、情報処理装置１１からの要求でデバイスサーバ１２を介して取得するようにしてもよいし、デバイスサーバ１２で電源がオンされた場合又はデバイスサーバ１２の設定が変更された場合に、デバイスサーバ１２から情報処理装置１１に送信することで、情報処理装置１１に通知されるようにしてもよい。
【００４２】
＜第１の実施形態のデバイス制御システムの制御シーケンス及びフロー＞
図２は、図１に示すデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。なお、情報処理装置１１は、デバイスサーバ情報やデバイス情報を取得しているものとして説明する。
【００４３】
＜デバイスサーバ通信モジュール１１の動作フロー＞
図３は、図１に示す情報処理装置１１においてデバイスサーバ通信モジュール１１ｃのメインスレッド１２０の動作の一例を説明するためのフローチャートであり、図２のシーケンス図を参照しながら説明する。
【００４４】
常駐モジュール１１ｂは、プロセス起動通知によってデバイスサーバ通信モジュール１１ｃを起動する。デバイスサーバ通信モジュール１１ｃが起動するとメインスレッド１２０が開始され、メインスレッド１２０は、常駐モジュール１１ｂからの要求（起動、接続、又は終了など）を待ち受ける待機状態となる（ステップＳ３０１）。
【００４５】
そして、この待機状態において、常駐モジュール１１ｂからの要求を受けると常駐モジュール１１ｂからのプロセス終了通知であるか否かを判定する（ステップＳ３０２）。プロセス終了通知であると判定した場合（ステップＳ３０２において、ＹＥＳ）、デバイスサーバ通信モジュール１１ｃによる処理を終了する。一方、プロセス終了通知でない場合（ステップＳ３０２において、ＮＯ）、外部アプリケーション１１ａから通知されるデバイス１３に対する要求（起動、接続、又は終了など）の通知（以下、要求通知）であると判断する（ステップＳ３０３）。
【００４６】
続いて、受信した要求通知の判定処理を行う。まず、デバイスサーバ通信モジュール１１ｃは当該要求通知が起動通知であるか否かを判定する（ステップＳ３０４）。
【００４７】
＜通信スレッドの生成・開始＞
メインスレッド１２０は、要求通知が「起動通知」であると判定すると（ステップＳ３０４において、ＹＥＳ）、デバイスサーバ１２（１２−１〜４）毎に独立したデータ通信制御を行う通信スレッド（１２１〜１２４）を生成して、当該通信スレッドを開始させ（ステップＳ３０５）。そして、ステップＳ３０１の処理に戻る。
【００４８】
図４は、図３のステップＳ３０５に示す通信スレッド生成・開始処理を説明するためのフローチャートである。
【００４９】
メインスレッド１２０は、外部アプリケーション１１ａからの起動要求に応じて、常駐モジュール１１ｂから送られてくる起動通知を受けると、通信スレッドを生成し、当該通信スレッドは、デバイスサーバ１２との通信プロトコルの決定を行う。例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）で通信するか、ＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）などを使ってインターネットなど外部のネットワークを介して接続して通信するかを決定する（ステップＳ４０１）。なお、ここでは、ＬＡＮで通信するためのプロトコルで通信するものとし、以降、ＬＡＮで接続するものとして説明する。
【００５０】
次に、通信スレッドでは、デバイススタック１１ｆの個数が規定された最大接続数（ここでは、３個）か否かを判定する（ステップＳ４０２）。そして、デバイススタックの個数が最大接続数（３個）未満の場合（ステップＳ４０２において、ＮＯ）、常駐モジュール１１ｂが取得したデバイス情報に基づいてデバイススタック１１ｆを生成し、前述の仮想化制御を開始する（ステップＳ４０３）。
【００５１】
なお、デバイススタックを生成するときに、後述する非データ送受信状態のデバイススタックの検出を行い、当該非データ送受信状態のデバイススタックが検出されない（存在しない）場合のみ、新たにデバイススタックを生成するようにしてもよい。
【００５２】
続いて、通信スレッド（１２１〜１２４）は、ステップＳ４０３の処理で生成したデバイススタック１１ｆに応じたデバイス制御モジュール１１ｄを起動し（ステップＳ４０４）、当該デバイス制御モジュール１１ｄからの起動完了イベントの通知を受けると、該当するデバイスサーバ１２へセッションの接続を通信制御部１１ｅに対して指示する（ステップＳ４０５）。
【００５３】
そして、当該セッションが接続されると、通信スレッド（１２１〜１２４）に対してデバイス監視情報（後述）をデバイスサーバ１２に対して送信するように指示する（ステップＳ４０６）。そして、デバイスサーバ１２への送信が完了すると、通信制御部１１ｅに対してセッションの終了を指示し（ステップＳ４０７）、デバイスサーバ１２とのセッションが終了するとデバイスとの通信が切断され、常駐モジュール１１ｂやメインスレッド１２０からの指示を待機する。
【００５４】
なお、ステップＳ４０２において、デバイススタック１１ｆの個数が最大接続数（３個）である場合（ステップＳ４０２において、ＹＥＳ）、ステップＳ４０５の処理に移行する。
【００５５】
一方、ステップＳ４０６において、情報処理装置１１からのデバイス監視情報を受信したデバイスサーバ１２は、当該デバイス監視情報に基づいて、自装置にローカル接続されているデバイス１３の動作状態を監視する。そして、当該デバイス１３の状態変化を検知すると、当該検知を情報処理装置１１へ通知（接続通知）する。
【００５６】
ここで、状態変化とは、例えば、カードリーダ（デバイス）に対してカードの読み取り操作（ユーザＩＤの取得）が行われたことや、デバイスの操作ボタンが押下されたことなどによって生じるものであるが、これらに限定されるものではない。
【００５７】
なお、デバイス監視情報とは、デバイス１３の監視を行なうための１組の監視プログラム（監視情報）であり、デバイスの機種ごとに異なるっており、あらかじめデバイスサーバ１２に導入しておいてもよいし、必要なデータだけを情報処理装置１１などから取得するようにしてもよい。
【００５８】
＜通信スレッドによる接続処理＞
再び、図３を参照し、メインスレッド１２０は、ステップＳ３０４において、要求通知が「起動通知」でない場合（ステップＳ３０４において、ＮＯ）、「接続通知」であるか否かを判定する（ステップＳ３０６）。要求通知が「接続通知」である場合（ステップＳ３０６において、ＹＥＳ）、通信スレッド（１２１〜１２４）に接続処理を開始させ（ステップＳ３０７）、ステップＳ３０１の処理に戻る。
【００５９】
図５は、図３のステップＳ３０７に示す接続処理を説明するためのフローチャートである。
【００６０】
通信スレッド（１２１〜１２４）は、メインスレッド１２０で生成・開始された後、常駐モジュール１１ｂやメインスレッド１２０からの指示、若しくは、デバイスサーバ１２−１〜１２−４のいずれかからの接続通知を待つ待機状態となる（ステップＳ５０１）。
【００６１】
そして、常駐モジュール１１ｂを介して外部アプリケーション１１ａからの接続通知を受けた場合、若しくは、デバイスサーバ１２（１２−１〜４）のいずれかから接続通知を受けると、通信スレッド（１２１〜１２４）は、デバイススタック１１ｆのうち非データ送受信状態のデバイススタックの検出を行う（ステップＳ５０２）。
【００６２】
ここで、デバイススタック１１ｆ（１１ｆ−１〜３）の全てがデータ送受信状態である場合（ステップＳ５０２において、ＮＯ）、通信スレッド（１２１〜１２４）は非データ送受信状態のデバイススタックが検出されるまで待機状態とし（ステップＳ５０３）、ステップＳ５０２の処理へ戻る。
【００６３】
一方、非データ送信状態のデバイススタックが検出されると（ステップＳ５０２において、ＹＥＳ）、通信スレッド（１２１〜１２４）は、当該非データ送受信状態のデバイススタック（例えば、デバイススタック１１ｆ−２）と接続するためにデータ通信経路を切り替える（ステップＳ５０４）。
【００６４】
次に、通信スレッド（１２１〜１２４）は、非データ送受信状態であるデバイススタック１１ｆ−２を介して接続されるデバイスサーバ１２−２に対して独立したセッションを開始させ（ステップＳ５０５）、セッションが開始されると、デバイス制御モジュール１１ｄ−２は、通信スレッド（１２１〜１２４）にデータ送受信開始通知を送る（ステップＳ５０６）。
【００６５】
デバイス制御モジュール１１ｄ−２は、データ送受信開始通知を受信すると、デバイススタック１１ｆ−２を経由し、通信スレッド（ここでは、通信スレッド１２４）にデバイスサーバ１２−４を介してデバイス１３−４との間でデータ送受信の制御を行う。
【００６６】
通信スレッド１２４は、デバイススタック１１ｆ−２の制御によるデータ送受信が完了するまで待機し（ステップＳ５０７）、デバイス制御モジュール１１ｄ−２からデータ送受信終了通知を受信すると、デバイススタック１１ｆ−２を介して通信制御部１１ｅにデバイスサーバ１２−４との間のセッションを終了させる（ステップＳ５０８）。
【００６７】
＜デバイス制御モジュールによるデータ送受信制御フロー＞
図６は、図５のステップＳ５０６〜Ｓ５０７の処理で実行されるデバイス制御モジュール１１ｄによるデータ送受信制御の一例を説明するためのフローチャートである。
【００６８】
デバイス制御モジュール１１ｄ（ここでは、１１ｄ−２とする）は、デバイススタック１１ｆ（ここでは、１１ｆ−２とする）に対応して起動されており、例えば、通信スレッド１２４からの指示によりデータ送受信するための通信ポートをオープンし（ステップＳ６０１）、通信スレッド１２４からのデータ送受信開始通知を受けるまで待機し（ステップＳ６０２）、通信スレッド１２４から送られてくる通知の判定を行う（ステップＳ６０３）。
【００６９】
デバイス制御モジュール１１ｄ−２は、通信スレッド１２４からデータ送受信開始通知を受けると（ステップＳ６０３において、ＮＯ）、デバイススタック１１ｆ−２を制御して、デバイスサーバ１２−４を介してデバイス１３−４とのデータ送受信を開始し（ステップＳ６０４）、データ送受信が完了するまでの間（ステップＳ６０５において、ＮＯ）は、ステップＳ６０４に戻り、データ送受信を制御する。そして、データ送受信が完了すると（ステップＳ６０５において、ＹＥＳ）、通信スレッド１２４にデータ送受信完了通知を送信する（ステップＳ６０６）。そして、ステップＳ６０２の処理に戻る。
【００７０】
一方、通信スレッド１２４からデータ送受信の待機状態終了の指示により（ステップＳ６０３において、ＹＥＳ）、オープンしていた通信ポートをクローズして（ステップＳ６０７）、デバイススタック１１ｆ−２を非データ送信状態とする。
【００７１】
ここで、デバイススタック１１ｆ−２は、非データ送受信状態に遷移するだけであり、外部アプリケーション１１ａの指示などにより切断要求（後述）がなされるまで終了（消滅）させず、別の通信スレッドがすぐに利用可能な状態としておく。
【００７２】
＜終了処理について＞
再び図３を参照し、ステップＳ３０６において、要求通知が「接続通知」でないと（ステップＳ３０６において、ＮＯ）、デバイスサーバ通信モジュール１１ｃのメインスレッド１２０は要求通知が「終了通知」であるか否かを判定する（ステップＳ３０８）。要求通知が「終了通知」であると（ステップＳ３０８において、ＹＥＳ）、デバイスサーバ通信モジュール１１ｃは後述する終了処理を行って（ステップＳ３０９）、ステップＳ３０１の処理に戻る。
【００７３】
＜通信スレッドの終了及びデバイススタックの終了（消滅）＞
図７は、図３のステップＳ３０９に示す終了処理を説明するためのフローチャートである。
【００７４】
終了処理は、外部アプリケーション１１ａからの切断要求応じて実行される。常駐モジュール１１ｂは当該切断要求に応じてメインスレッド１２０に通信スレッド終了通知を送り、メインスレッド１２０は通信スレッド（１２１〜１２４）に終了を指示する。
【００７５】
通信スレッド（１２１〜１２４）は、スレッド終了の指示を受けると、デバイスサーバ
通信モジュール１１ｃ内で管理している通信スレッドの個数とデバイススタックの個数とを比較して、通信スレッドの個数がデバイススタックの個数以下であるか否かを判定する（ステップＳ７０１）。
【００７６】
通信スレッドの個数がデバイススタックの個数以下であると（ステップＳ７０１において、ＹＥＳ）、通信スレッド（１２１〜１２４）は、該当するデバイス制御モジュール１１ｄ（ここでは、１１ｄ−２）に終了通知を送って、デバイス制御モジュール１１ｄ−２は、デバイススタック１１ｆ（ここでは、１１ｆ−２）の終了処理を実行し、通信スレッド（１２１〜１２４）に終了処理完了イベントを通知する（ステップＳ７０２）。
【００７７】
通信スレッド（１２１〜１２４）は、終了処理完了イベントの通知を受けると、デバイススタック１１ｆ−２による仮想制御を終了させてデバイス１３との接続を切断し、デバイススタック１１ｆ−２を終了（消滅）させる（ステップＳ７０３）。
【００７８】
常駐モジュール１１ｂは、終了通知を送った後、メインスレッド１２０にプロセス終了通知を指示し、メインスレッド１２０はプロセス終了通知を受信すると当該通信スレッド（１２１〜１２４）を終了させる。
【００７９】
一方、ステップＳ７０１において、通信スレッドの個数がデバイススタックの個数を超えている場合（ステップＳ７０１において、ＮＯ）、デバイススタック１１ｆ−２は、消滅させず、デバイススタック１１ｆ−２と接続していた通信スレッドのみを終了させる。
【００８０】
上述のように、本発明の第１の実施形態では、情報処理装置において、接続通知に応じて非データ送受信状態であるデバイススタックの検出を行い、検出された非データ送受信状態のデバイススタックを介してデバイスサーバと通信を行うようにしたので、インターフェース規格やＳＤＫなどの規定に制限されることなく、性能を効果的に発揮して、最大接続台数を超えたデバイスを制御することができる。
【００８１】
そして、第１の実施形態では、デバイスとの間でデータ送受信が終了した際、通信スレッドの個数がデバイススタックの個数より少ない場合には、当該デバイススタックを消滅させるので、非データ送受信状態のデバイススタックによって情報処理装置のリソースが消費されることを低減させることができる。
【００８２】
このように、最大接続台数を超えたデバイスを制御する場合も、１台の情報処理装置で制御、管理することが可能であり、新たに別の情報処理装置を用意しなくてもよいので、管理も容易となってコストを低減することができる。
【００８３】
［第２の実施形態］
続いて、本発明の第２の実施形態による情報処理装置が用いられたデバイス制御システムの一例について説明する。
【００８４】
第２の実施形態は、通信スレッドの終了時の処理が第１の実施例と異なっており、通信スレッド終了時にデバイススタックを終了（消滅）させない点が特徴である。
【００８５】
なお、第２の実施形態によるデバイス制御システムの構成は図１に示すデバイス制御システムの構成と同様であり、図８に示すシーケンス図において、符号８０１で示す太線枠で囲った部分のみの制御が異なるだけであるため、システム構成や各装置の機能などの詳細な説明を省略する。
【００８６】
＜第２の実施形態のデバイス制御システムの制御シーケンス及びフロー＞
図８は、本発明の第２の実施形態によるデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。また、図９は、本発明の第２の実施形態による情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。
【００８７】
図９は、図１に示す情報処理装置１１においてデバイスサーバ通信モジュール１１ｃのメインスレッド１２０の動作の一例を説明するためのフローチャートであり、図８を参照しながら説明する。
【００８８】
＜メインスレッドの動作フロー＞
常駐モジュール１１ｂは、プロセス起動通知によってデバイスサーバ通信モジュール１１ｃを起動し、デバイスサーバ通信モジュール１１ｃが起動するとメインスレッド１２０が開始され、メインスレッド１２０は、常駐モジュール１１ｂからの要求（起動、接続、又は終了など）を待ち受ける待機状態となる（ステップＳ９０１）。
【００８９】
そして、この待機状態において、常駐モジュール１１ｂからの要求を受けると常駐モジュール１１ｂからのプロセス終了通知であるか否かを判定する（ステップＳ９０２）。プロセス終了通知である場合は、後述するステップＳ９１０へ移行する。一方、プロセス終了通知のプロセス終了通知でない場合（ステップＳ９０２において、ＮＯ）、外部アプリケーション１１ａから通知されるデバイス１３に対する要求（起動、接続、又は終了など）の通知（以下、要求通知）であると判断する（ステップＳ９０３）。
【００９０】
＜通信スレッドの生成・開始＞
続いて、受信した要求通知の判定処理を行う。まず、デバイスサーバ通信モジュール１１ｃは当該要求通知が「起動通知」であるか否かを判定する（ステップＳ９０４）。メインスレッド１２０は、要求通知が「起動通知」であると判定すると（ステップＳ３０４において、ＹＥＳ）、図４で説明したと同様のフローを実行し、デバイスサーバ１２（１２−１〜４）毎に独立した通信制御を行う通信スレッド（１２１〜１２４）を生成して、当該通信スレッドを開始させる（ステップＳ９０５）。そして、ステップＳ９０１の処理に戻る。
【００９１】
＜通信スレッドによる接続処理＞
要求通知が「起動通知」でない場合（ステップＳ９０４において、ＮＯ）、「接続通知」であるか否かを判定する（ステップＳ９０６）。要求通知が「接続通知」である場合（ステップＳ９０６において、ＹＥＳ）、図５および図６の説明と同様のフローを実行し、通信スレッドに接続処理を開始させ（ステップＳ９０７）、ステップＳ３０１の処理に戻る。
【００９２】
＜通信スレッドの終了処理＞
要求通知が接続通知でないと（ステップＳ９０６において、ＮＯ）、デバイスサーバ通信モジュール１１ｃのメインスレッド１２０は要求通知が「終了通知」であるか否かを判定する（ステップＳ９０８）。要求通知が「終了通知」である場合（ステップＳ９０８において、ＹＥＳ）、メインスレッド１２０は該当する通信スレッドを終了させる（ステップＳ９０９）。この際、デバイススタック１１ｆを終了（消滅）させず、ステップＳ９０１の処理に戻る。即ち、デバイススタック１１ｆは終了させず、該当する通信スレッドのみを終了させる。
【００９３】
＜デバイススタックの終了（消滅）＞
デバイススタック１１ｆを終了（消滅）させる場合は、常駐モジュール１１ｂからデバイスサーバ通信モジュール１１ｃのメインスレッド１２０に対してプロセス終了通知を送ることによって実行される（ステップＳ９０２において、ＹＥＳ）。
【００９４】
常駐モジュール１１ｂからプロセス終了通知が送られると、デバイスサーバ通信モジュール１１ｃのメインスレッド１２０は該当するデバイス制御モジュール１１ｄに終了通知を送って、デバイス制御モジュール１１ｄ−２は、デバイススタック１１ｆ（ここでは、１１ｆ−２）の終了処理を実行し、通信スレッドに終了処理完了イベントを通知する（ステップＳ９１０）。
【００９５】
通信スレッド（１２１〜１２４）は、終了処理完了イベントの通知を受けると、デバイススタック１１ｆ−２による仮想制御を終了させてデバイス１３との接続を切断し、デバイススタック１１ｆ−２を終了（消滅）させる（ステップＳ９１１）。
【００９６】
このように、第２の実施形態においても、情報処理装置において、接続通知に応じて非データ送受信状態であるデバイススタックの検出を行い、検出された非データ送受信状態のデバイススタックを介してデバイスサーバと通信を行うようにしたので、インターフェース規格やＳＤＫなどの規定に制限されることなく、性能を効果的に発揮して、最大接続台数を超えたデバイスを制御することができる。
【００９７】
そして、第２の実施形態では、デバイスとの間でデータ送受信が終了した際、当該データ送受信に係るデバイススタックを終了（消滅）させない、即ち、非データ送受信状態のデバイススタックとして終了（消滅）させないようにしたので、例えば、接続待ちの通信スレッドがある場合には、新たなデバイススタックの生成を待つことなく、当該非データ送受信状態のデバイススタックを利用してデータ送受信を実行することができる。
【００９８】
なお、デバイススタックを生成した後、所定の時間が経過すると、当該デバイススタックを消滅させるようにして非データ送受信状態のデバイススタックの個数を制限し、情報処理装置のリソースが消費されることを低減するようにしてもよい。
【００９９】
［第３の実施形態］
次に、本発明の第３の実施形態による情報処理装置が用いられたデバイス制御システムの一例について説明する。
【０１００】
図１０は、本発明の第３の実施形態によるデバイス制御システムの一例を示すブロック図であり、図１に示すネットワーク１０がインターネットなど外部のネットワークを介して接続する場合のデバイス制御システムの一例を示す図である。
【０１０１】
なお、第３の実施形態に示すデバイス制御システムにおいて、情報処理装置１１の構成は図１に示す情報処理装置と同様である。また、第３の実施形態に示すデバイス制御システムにおいて、図１に示すデバイス制御システムと同一の構成要素については同一の参照番号を付す。
【０１０２】
図１０において、情報処理装置１１はＬＡＮなどのネットワーク１０００を介してプロキシサーバ１００１に接続される。そして、プロキシサーバ１００１はインターネット（Ｉｎｔｅｒｎｅｔ）など外部のネットワーク（以下、インターネット１００２）と接続されている。
【０１０３】
さらに、図示の例では、インターネット１００２にはプロキシサーバ１００３および１００４が接続され、プロキシサーバ１００３にはＬＡＮなどのネットワーク１００５を介してデバイスサーバ１２−１および１２−２が接続される。また、プロキシサーバ１００４にはＬＡＮなどのネットワーク１００６を介してデバイスサーバ１２−３および１２−４が接続される。
【０１０４】
ここでは、情報処理装置１１に備えられたデバイスサーバ通信モジュール１１ｃはインターネット接続による通信制御を行う。デバイスサーバ通信モジュール１１ｃは、デバイススタックで生成されたＵＳＢパケットとデバイスサーバと通信する際のネットワークパケットとを、例えば、ＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）などのプロトコルで規定されたデータ部に乗せてデバイスサーバと通信を行う。これによって、デバイスサーバ通信モジュール１１ｃはブラウザによってＷｅｂサーバと接続する場合と同一の手法でプロキシサーバおよびファイアーウォール（ＦＷ）を越えて外部サーバであるデバイスサーバに接続する。
【０１０５】
なお、上述のように、インターネットなど外部のネットワークに接続するシステムの場合、例えば、サーバコンピュータをホスティングするサービスのようなクラウド・コンピューティング（以下クラウドという）の技術を利用してシステム構成するようにしてもよい。クラウドを利用することによって、本実施例におけるデバイスサーバおよびデバイスを外部のネットワーク上に任意に配置することが可能となり、ユーザがこれらの所在を意識することなく、インターネットなどのネットワークを通じて利用できる。このように、クラウドを用いればシステムを柔軟に構成（変更又は拡張）することができる。
【０１０６】
上述のように、本発明の実施の形態では、インターネットなど外部のネットワークを介して接続されており、デバイス（及びデバイスサーバ）の台数が確認できないような場合であっても、第１及び第２の実施形態と同様、情報処理装置は、インターフェース規格やＳＤＫなどによって規定される最大接続数を超えてデバイスの制御を行うことができるので、外部のネットワーク上に接続されているデバイス（及びデバイスサーバ）の台数を意識することなく制御することが可能である。
【０１０７】
上述の説明から明らかなように、図１に示す例では、デバイスサーバ通信モジュール１１ｃ（メインスレッド）が通信スレッド制御手段として機能する。
【０１０８】
以上、本発明について実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。
【０１０９】
例えば、上記の実施の形態の機能を制御方法として、この制御方法を情報処理装置に実行させるようにすればよい。また、上述の実施の形態の機能を有するプログラムを制御プログラムとして、この制御プログラムを情報処理装置が備えるコンピュータに実行させるようにしてもよい。なお、制御プログラムは、例えば、コンピュータに読み取り可能な記録媒体に記録される。
【０１１０】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記録媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【０１１１】
１１  情報処理装置
１２−１〜１２−４  デバイスサーバ
１３−１〜１３−４  デバイス
１１ｂ  常駐モジュール
１１ｃ  デバイスサーバ通信モジュール
１２０  メインスレッド
１２１〜１２４  通信スレッド
１１ｄ−１〜１１ｄ−３  デバイス制御モジュール
１１ｆ−１〜１１ｆ−３  デバイススタック
１１ｅ  通信制御部
１００１，１００３，１００４  プロキシサーバ
【図１】
0005890648.tif 000002
【図２】
0005890648.tif 000003
【図３】
0005890648.tif 000004
【図４】
0005890648.tif 000005
【図５】
0005890648.tif 000006
【図６】
0005890648.tif 000007
【図７】
0005890648.tif 000008
【図８】
0005890648.tif 000009
【図９】
0005890648.tif 000010
【図１０】
0005890648.tif 000011