以下、本発明に係る印刷制御装置および印刷装置について、図面を参照しつつ、実施例に基づいて説明する。
A.第1実施例:
・分散印刷システムの構成:
図1および図2を参照して、本発明の第1実施例における分散印刷システムの構成について説明する。図1は、本発明の第1実施例における分散印刷システムの概略構成を示す説明図である。図2は、第1実施例における分散印刷システムを構成する各機器の内部構成を示すブロック図である。
この分散印刷システムは、図1に示すように、クライアントとしての複数の計算機(以下、単にクライアントという。)CLa、CLbと、複数のプリンタPRT1〜PRT4を含む。クライアントCLa、CLbと、プリンタPRT1〜PRT4は、ローカルエリアネットワーク(LAN)を介して互いに接続されている。各機器間の通信は、TCP/IPプロトコルを用いて行われるため、各機器にはそれぞれIPアドレスが割り振られる。説明の便宜上、クライアントCLa、CLbにはそれぞれ「IPa」「IPb」、プリンタPRT1〜PRT4には、それぞれ「IP1」〜「IP4」なるIPアドレスが設定されているものとする。なお、厳密に言えば、これらIPアドレスは、クライアントCLa、CLb,プリンタPRT1〜PRT4自体に設定されているわけではなく、TCP/IPのネットワークから見た場合のノード(すなわち、具体的には、TCP/IP通信を行うためにネットワークに接続されているネットワークボードなど)に設定されている。
これらプリンタのうち、プリンタPRT1およびPRT4には、カスタムネットワークボード100がそれぞれ取り付けられている。このカスタムネットワークボード100は、クライアントCLa、CLbから受信した印刷ジョブを他のプリンタに分散して、分散印刷を実行するための分散印刷制御機能を備えており、請求項における印刷制御装置に相当する。プリンタPRT2およびPRT3には、それぞれ、標準のネットワークボード200が取り付けられている。
図1において、実線で示す矢印は、クライアントCLaからプリンタPRT1のカスタムネットワークボード100に印刷ジョブが送信され、プリンタPRT1のカスタムネットワークボード100からプリンタPRT1〜PRT4にその印刷ジョブが分散される様子を概念的に示している。破線で示す矢印は、クライアントCLbからプリンタPRT4のカスタムネットワークボード100に印刷ジョブが送信され、プリンタPRT4のカスタムネットワークボード100からプリンタPRT1〜PRT4にその印刷ジョブが分散される様子を概念的に示している。このように、プリンタPRT1〜PRT4は、プリンタPRT1およびプリンタPRT2のカスタムネットワークボード100のいずれからも分散印刷の分散先とされ得る。以下において、各プリンタPRT1〜PRT4を区別する必要のない場合には、符号の末尾の数字を省略しプリンタPRTともいう。また、クライアントCLa、CLbを区別する必要のない場合には、符号の小文字の英字を省略しクライアントCLともいう。
プリンタPRT1は、図2に示すように、プリンタ本体PRB1と、上述したカスタムネットワークボード100とを備えている。プリンタ本体PRB1は、主として、プリンタエンジン90と、プリンタコントローラ80とを備えている。プリンタエンジン90は、実際に印刷を行う機構部分である。プリンタコントローラ80は、後述する印刷ジョブ制御部60から供給される印刷ジョブデータを受け取り、その印刷ジョブを解釈してプリンタエンジン90を制御し、印刷を実行させる。プリンタコントローラ80は、印刷ジョブに応答を要求するコマンド(例えば、後述する判定コマンド)が含まれている場合には、必要な応答を印刷ジョブ制御部60に送信することができる。プリンタコントローラ80は、並行して複数の印刷ジョブを処理することはできず、1つずつ印刷ジョブを受け取って処理することしかできない。プリンタコントローラ80は、供給された印刷ジョブデータを一時的に格納するプリンタバッファ82を備えている。また、プリンタコントローラ80は、プリンタ本体PRB1に関する種々の情報を収集してMIB(Management Information Base)と呼ばれる形式で保存したファイル(以下、MIBファイルという。)81を格納している。MIBファイル81には、種々の情報がオブジェクト単位で保存され、オブジェクトごとに、オブジェクトID(以下、OIDという。)が割り振られている。
カスタムネットワークボード100は、主として、中央演算装置(CPU)20と、メモリ30とを備えている。また、この他、実際にネットワーク通信を行うための通信用インタフェースなども備えているが、説明の便宜上、省略している。
CPU20は、メモリ30より、上記した分散印刷を実行するためのソフトウェアなどのプログラムを読み出して、実行することにより、図示した各機能ブロックをソフトウエア的に実現する。なお、各機能ブロックをハードウェア的に構築しても構わない。
CPU20によって実現される機能ブロックには、TCP/IP部10と、分散制御部50と、印刷ジョブ制御部60と、SNMPマネージャ40と、SNMPエージェント70が含まれる。
TCP/IP部10は、TCP/IPプロトコルを解釈して、主としてネットワークを介して外部との通信を行う。TCP/IPプロトコルにおいてトランスポート層の処理を行うプロトコルとして、TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)がある。TCPは、信頼性の高いコネクション型の通信を実現するプロトコルである。一方、UDPは、高速なコネクションレス型の通信を実現するプロトコルである。TCP/IP部10は、後述する印刷ジョブの通信を、TCPを用いて行うと共に、後述するSNMPマネージャ40とSNMPエージェント70間の通信を、UDPを用いて行う。
分散制御部50は、分散印刷を指定した印刷ジョブ(以下、分散印刷ジョブともいう。)を受信して、分散先に印刷ジョブを分散する。分散制御部50は、サブ機能ブロックとして分散先選択部52と、受信状態判定部54と、印刷ジョブ送信部56とを備えている。分散先選択部52は、カスタムネットワークボード100と接続されているプリンタの中から印刷ジョブの分散先となるプリンタ(以下、分散先プリンタという。)を選択する。受信状態判定部54は、分散先プリンタが直ちに印刷ジョブを受信可能な状態にあるか否かを判定する。受信状態判定部54は、さらに、受信可能な状態にあるか否かの判定に用いるコマンドを送信するコマンド送信部541と、送信されたコマンドに対する応答を受信する応答受信部542とを備える。印刷ジョブ送信部56は、直ちに印刷ジョブを受信可能と判定された分散先プリンタに対して印刷ジョブを送信する。以上のような分散制御部50が実行する処理については、さらに後述する。
印刷ジョブ制御部60は、分散印刷を指定していない通常の印刷ジョブ(以下、通常印刷ジョブという。)を受信してプリンタコントローラ80に供給する。また、印刷ジョブ制御部60は、プリンタコントローラ80から印刷ジョブに含まれるコマンドに対する応答を受信して応答を印刷ジョブの送信元に送信する応答部61を備えている。
SNMPマネージャ40は、SNMP(Simple Network Management Control Protocol)と呼ばれる通信プロトコルを用いて、各プリンタPRT1〜PRT4が備えるSNMPエージェント70に問い合わせて、各種の情報を取得する。SNMPマネージャ40は、上述したOIDを指定することにより取得すべき情報を特定して問い合わせを行う。
SNMPエージェント70は、SNMPマネージャ40の問い合わせに応じて、上述したMIBファイルから所望の情報を取得し、SNMPマネージャ40にその情報を送信する。
一方、メモリ30は、上述の各機能を実現するためのプログラムを格納する他、OID格納部32、分散先指定ファイル格納部34、バッファ36を備えている。OID格納部32には、SNMPマネージャ40が上述した問い合わせを行う際に指定するOIDが格納されている。OIDは、問い合わせ可能な情報の種類と関連付けられて格納されており、SNMPマネージャ40は、OID格納部32を参照して指定すべきOIDを取得することができる。分散先指定ファイル格納部34は、分散先指定ファイルを格納する。この分散先指定ファイルは、LANに接続されている複数のプリンタの中で、分散印刷における分散先として使用したいプリンタを、前もって、指定して限定しておきたい場合に用いる。従って、そのような指定が不要な場合には、分散先指定ファイル格納部34には何も格納されない。バッファ36は、受信した印刷ジョブデータを一時的に格納するための格納部である。
プリンタPRT2は、図2に示すように、プリンタ本体PRB2および上述したネットワークボード200を備えている。プリンタ本体PRB2の構成は、上述したプリンタPRT1のプリンタ本体PRB1と同一の構成を有しているので、各構成要素にプリンタPRT1のプリンタ本体PRB1の構成要素と同一の符号を付しその説明を省略する。ネットワークボード200は、上述したカスタムネットワークボード100が有する機能のうち、分散印刷制御機能を除く機能を有している。すなわち、ネットワークボード200は、TCP/IP部10と、印刷ジョブ制御部60と、SNMPエージェント70とを有している。ネットワークボード200の各構成要素は、カスタムネットワークボード100の同名の構成要素と同様の機能や構成を有しているのでその説明を省略する。
ここで、上記説明から解るように、プリンタPRT1およびPRT4に搭載されたカスタムネットワークボード100は、プリンタPRT2およびプリンタPRT3に搭載されたネットワークボード200の備える機能を全て備えている。すなわち、ネットワークボード200の分散制御部50からみて、プリンタPRT1〜プリンタPRT4は、全て等価であり、後述する分散印刷処理において全て分散先プリンタとして指定され得る。分散制御部50は、分散制御部50自体が内蔵されているプリンタPRT1についても、他のプリンタについても区別なく扱うことができる。
クライアントCLaは、図2に示すように、アプリケーション11の他、機能ブロックとして、TCP/IP部13と印刷ジョブ送信部12とを有している。TCP/IP部13は、上述したカスタムネットワークボード100のTCP/IP部10と同様の機能および構成を有している。印刷ジョブ送信部12は、アプリケーション11の印刷要求に応じて印刷ジョブを生成し、TCP/IP部13を介して生成された印刷ジョブをプリンタPRTに送信する。なお、分散印刷を指定する分散印刷ジョブは、カスタムネットワークボード100を備えるプリンタPRT1およびPRT4にのみ送信することができ、分散印刷を指定しない通常印刷ジョブは、プリンタPRT1〜PRT4のいずれにも送信することができる。
プリンタPRT4は、上述したプリンタPRT1と同様の構成を有し、プリンタPRT3は、上述したプリンタPRT2と同様の構成を有している。クライアントCLbは、上述したクライアントCLaと同様の構成を有している。これらについては、詳しい説明を省略する。
・プリンタによる通常印刷ジョブの受信:
分散印刷処理を説明する前に、図3を参照して、プリンタPRTによる通常印刷ジョブの受信について説明する。図3は、通常印刷ジョブの受信について説明する説明図である。図3(a)は、印刷ジョブの通信に用いられる通信データの構成を概念的に示す説明図である。図3(b)(c)は、複数のコネクションが保持されている場合における印刷ジョブの受信について説明する概念図である。
印刷ジョブは、TCP/IPプロトコルに従った形式の通信データとして送信される。この通信データは、図3(a)に示すように、ヘッダ400と、データ部450とに分かれている。このうち、ヘッダ400には、その通信データの送信元である機器のIPアドレス(送信元IPアドレス)と、その機器内における送信元であるソフトウェアを特定するポート番号(送信元ポート番号)と、を含む他、その通信データの送信先である機器のIPアドレス(送信先IPアドレス)と、その機器内における送信先であるソフトウェアを特定するポート番号(送信先ポート番号)とを含んでいる。送信元である機器のソフトウェアから発信された通信データは、送信先IPアドレスに従って、そのIPアドレスを有する機器に送信され、さらに、受信したその機器内では、送信先ポート番号に従って、その番号のポートで待機しているソフトウェアに渡される。データ部450は、送受信の対象となるデータが格納される部分であり、例えば、印刷ジョブデータが格納される。
例えば、クライアントCLaからプリンタPRT2に通常印刷ジョブを送信する場合、通信データのヘッダ400には、上述した送信先IPアドレスとして「IP2」が、送信先ポート番号として「9100」がそれぞれ記載される。「9100」は、通常印刷ジョブの受信を行う印刷ジョブ制御部60が待機しているポート番号である。また、ヘッダ400には、送信元IPアドレスとして「IPa」が、送信元ポート番号として印刷ジョブ送信部12が待機しているポート番号(具体的な数字は省略)が記載される。
さらに具体的に順を追って説明する。クライアントCLのアプリケーション11が印刷を指示すると、クライアントCLの印刷ジョブ送信部12は印刷プロトコルに従い、TCP/IP部13を介して印刷ジョブデータを送信する。本実施例では、印刷プロトコルとして無手順プロトコルを用いている。クライアントCLのTCP/IP部13は、印刷ジョブデータの送信に先立って、コネクション型の通信プロトコルであるTCPに従って、送信先であるプリンタPRTのTCP/IP部10との間にコネクションを確立する。
コネクションを確立するとは、2つのプロセス(本実施例では、印刷ジョブ送信部12と印刷ジョブ制御部60)間でデータ通信を行うための仮想的な通信路を形成することをいう。以下、このような仮想的な通信路をコネクションと呼ぶ。こうすることで信頼性の高い双方向のストリーム転送を行うことができる。すなわち、確立されたコネクションを介して印刷ジョブを送信すれば、送信中にデータの順番が入れ替わったり、データが欠落したりすることを抑制することができる。
図3(b)は、3つのクライアントCLa〜CLcとが、並行して、1つのプリンタPRT2に印刷ジョブを送信しようとする様子を概念的に示している。記号CN1〜CN3と、クライアントCLa〜CLcのTCP/IP部13とプリンタPRT2のTCP/IP部10との間で確立されたコネクションを示しており、符号の末尾の数字は、コネクションが確立された時間的な順番を示している。すなわち、クライアントCLaのTCP/IP部13が1番先に、クライアントCLcのTCP/IP部13が2番目に、クライアントCLbのTCP/IP部13が3番目に、それぞれプリンタPRT2のTCP/IP部10とコネクションを確立したことを示している。
このように、プリンタPRTのTCP/IP部10は、複数のコネクションを確立し、同時に保持することができるように構成されている。本実施例では、最大8つのコネクションを保持することができる。これは、1つのコネクションしか保持できないとすると、プリンタPRTに複数のクライアントが並行して印刷ジョブを送信しようとした場合に、2番目以降にプリンタPRTとコネクションを確立しようとしたクライアントCLがプリンタPRTを認識することができないためである。クライアントCLは、プリンタPRTを認識することができないと、プリンタPRTに電源が投入されていないと判断したり、プリンタPRTとの物理的な接続が切断されていると判断したりする場合があり、不都合を生じるおそれがある。
一方で、プリンタPRTの印刷ジョブ制御部60は、1つのコネクションから、1つずつ印刷ジョブを受信するように構成されている。プリンタコントローラ80は並行して複数の印刷ジョブを処理することができないため、印刷ジョブ制御部60はプリンタコントローラ80に1つずつ印刷ジョブデータを供給する必要があるからである。上述したように印刷ジョブ制御部60は、先に確立されたコネクションを介して送信される印刷ジョブを優先して受信する。図3(b)に示す具体例では、プリンタPRT2の印刷ジョブ制御部60は、最初に確立されたコネクションCN1を介して、クライアントCLaから送信される印刷ジョブを、最初に受信する。印刷ジョブ制御部60は、印刷プロトコルに従って、受信された印刷ジョブをプリンタ本体PRB2に供給する。印刷ジョブ制御部60がクライアントCLaから送信される印刷ジョブを受信している間、他のクライアントCLb、CLcは、コネクションCN3、2を保持したまま、待機させられる。さらに、詳しく説明するとTCPプロトコルを用いた通信では、データのフロー制御(データの流れを許可したり禁止したりする制御)がなされており、コネクションを介してTCP/IP部10の上位アプリケーションである印刷ジョブ制御部60が印刷ジョブを受信しない(TCP/IP部10から受け取らない)場合は、TCP/IP部10はフロー制御によりデータの流れを禁止する。すなわち、送信元のTCP/IP部(この例ではクライアントCLb、CLcのTCP/IP部13)に対して、データを送信しないように通知する。この状態では、クライアントCLb、CLcは、データを送信することができず、データの送信が許可されるまで待機することになる。以下、このような状態を待機状態という。
そして、印刷ジョブ制御部60がクライアントCLaから送信される印刷ジョブを全て受信すると、TCP/IP部10は、コネクションCN1を終了する。コネクションCN1が終了された後、図3(c)に示すように、印刷ジョブ制御部60は、2番目に確立されたコネクションCN2を介して、クライアントCLcから印刷ジョブを受信する。印刷ジョブ制御部60がコネクションCN2を介して送信されてきた印刷ジョブを受信する(TCP/IP部10から受け取る)ようになると、TCP/IP部10は上述したフロー制御によりデータの流れを許可する。すなわち、TCP/IP部10は、送信元のTCP/IP部10に、データの送信を許可する。こうして、クライアントCLcは、待機状態から解放されて、印刷ジョブを送信できるようになる。
このように、印刷ジョブ制御部60が、コネクションが確立された順番に印刷ジョブを順次受信し、プリンタ本体PRB2のプリンタコントローラ80に受信された印刷ジョブを順次供給することによって、クライアントのアクセス順に印刷が順次実行される。
以上の説明から解るように、印刷ジョブ制御部60が印刷ジョブを受信するためのコネクションを確立するTCP/IP部10は、請求項における第1の通信部に相当する。
・分散印刷処理:
次に、分散印刷処理について詳細に説明する。分散印刷を行う際には、ユーザは、クライアント(例えば、クライアントCLa(図1))におけるプリンタドライバにおいて、印刷プロトコルの設定が、無手順プロトコルに設定されていることを確認した上で、ポート番号の設定を、通常の「9100」から特定の「59100」または「59101」に変更する。すなわち、本実施例では、ここでのポート番号の設定を切り換えることにより、通常の「9100」では通常印刷を、特定の「59100」または「59101」では分散印刷を、それぞれ選択することになる。また、本実施例では、分散印刷として2種類のモードを選択することができる。1つは、部数分割型の分散印刷モード(以下、分割モードという。)であり、もう1つは、複製作成型の分散印刷モード(以下、複製モードという。)である。これら2つのモードはポート番号の設定によって選択される。ユーザは、分割モードを選択する際には、ポート番号を「59100」に設定し、複製モードを選択する際には、ポート番号を「59101」に設定する。
分割モードは、指定された印刷部数を、分散先のプリンタに配分して印刷する分散印刷モードである。例えば、分割モードでは、印刷部数を100部とした分散印刷ジョブを受信した場合に、印刷部数を25部とした通常印刷ジョブをプリンタPRT1〜PRT4にそれぞれ送信して印刷させることによって、合計として100部の印刷を行う。分割モードでは、指定された印刷部数を速やかに印刷することが重視される。
複製モードは、指定された印刷部数を分散先のプリンタにおいて、それぞれ印刷する分散印刷モードである。例えば、複製モードでは、印刷部数を1部とした分散印刷ジョブを受信した場合に、印刷部数を1部とした通常印刷ジョブをプリンタPRT1〜PRT4にそれぞれ送信して印刷させることによって、合計として4部の印刷を行う。複製モードでは、速やかに印刷を行うことよりも、多くの分散先のプリンタにおいて確実に印刷を実行することが重視される。
図4は、分散印刷処理の処理ルーチンを示す第1のフローチャートである。分散印刷処理は、カスタムネットワークボード100のCPU20が備える分散制御部50によって実行される処理である。カスタムネットワークボード100が搭載されたプリンタ(例えば、プリンタPRT1)が印刷ジョブを受け付ける状態にあるとき、分散制御部50は、ポート番号「59100」または「59101」に印刷ジョブが着信したか否かを常に監視している(ステップS102)。例えば、クライアントCLaから印刷ジョブを含む通信データがプリンタPRT1に着信すると、TCP/IP部10が着信した通信データに含まれる送信先ポート番号を取得する。送信先ポート番号が「59100」または「59101」である場合には、TCP/IP部10は、通信データから印刷ジョブを取り出して、順次、分散制御部50に渡す。分散制御部50は、TCP/IP部10から送信先ポート番号が「59100」宛のデータとして印刷ジョブを受け取った場合には、分割モードを実行する処理(ステップS104〜)に移行する。分散制御部50は、TCP/IP部10から送信ポート番号が「59101」宛のデータとして印刷ジョブを受け取った場合には、複製モードを実行する処理(図8)に移行する。なお、分散制御部50は、受け取った印刷ジョブを、バッファ36に一時的に格納しておく。
ここで、印刷ジョブは、所定の形式を有するデータ(以下、印刷ジョブデータという。)として構成されている。図5は、印刷ジョブデータについて説明する説明図である。図5(a)は、印刷ジョブデータの構成を概念的に示している。図5(b)は、一例として印刷ジョブのデータをエディタで開いて示した説明図である。図5(c)は、印刷ジョブデータがパケットに分けられた様子を概念的に示す図である。印刷ジョブデータ500は、図5(a)(b)に示すように、ジョブ制御言語部501と、ページ記述言語部502を有している。ページ記述言語部502は、印刷内容が所定のページ記述言語を用いて記述されている部分である。ページ記述言語としては、ESC/PageやPostscriptなどが用いられ得る。ジョブ制御言語部501は、印刷部数、印刷用紙サイズ、ページ記述言語部502の記述に使用されているページ記述言語の種別を始め、ページ記述言語部502に記述された印刷内容を印刷するために必要な属性が記述されている。ジョブ制御言語部501は、所定のジョブ制御言語、本実施例ではEJL(Epson Job Language)を用いて記述されている。
印刷ジョブデータの大きさは、一部あたりの印刷量に応じて大きくなるのに対し、バッファ36の大きさは限られているので、実際には、印刷ジョブデータ500は、バッファ36より小さなデータの固まり(以下、パケットという。)に分割してクライアントから取得される。図3(c)では、印刷ジョブデータ500は、各パケットP1〜P8に分けられている。上述したステップS102で印刷ジョブが着信した時点では、パケットP1のみが取得され、バッファ36に格納されている。
図4に戻って、説明を続ける。説明の便宜上、先に分割モードを実行する処理から先に説明し、複製モードを実行する処理については後述する。分割モードを実行する処理が開始されると、分散制御部50の分散先選択部52は、分散先プリンタ選択処理を実行する(ステップS104)。
図6は、分散先プリンタ選択処理の処理ルーチンを示すフローチャートである。分散先プリンタ選択処理が開始されると、分散先選択部52は、ネットワーク上に接続された機器のIPアドレスを取得する(ステップS202)。分散先選択部52は、分散先指定ファイル格納部34に分散先指定ファイルが格納されている場合には、分散先指定ファイルを参照して、IPアドレスを取得する。分散先指定ファイルには、分散先として使用したいプリンタのIPアドレスが列挙して記載されている。このような分散先指定ファイルは、例えば、サービスマンが、プリンタPRT1を設置して初期設定する際に、そのプリンタPRT1に設定用コンピュータなどを接続して、インストールすることにより、分散先指定ファイル格納部34に格納することができる。また、LANを介してインストールするようにしてもよい。なお、このような分散先指定ファイルを用いる場合、分散先として自己のプリンタPRT1も使用したい場合には、自己プリンタPRT1のIPアドレス「IP1」も、分散先指定ファイルに記載しておく必要がある。
一方、分散先指定ファイルが格納されていない場合には、分散先選択部52は、SNMPマネージャ40を用いて、LANに対し、ブロードキャストでLANに接続されている各機器のIPアドレスを問い合わせ、応答されたIPアドレスを取得する。
次に、分散先選択部52は、取得されたIPアドレスを割り当てられた各機器に関する情報を取得する(ステップS204)。具体的には、分散先選択部52は、SNMPマネージャ40を用いて、マルチキャストで各機器に対して問い合わせを行い、問い合わせの応答として機種名およびステータスを取得する。
分散先選択部52は、取得された機種名およびステータスに基づいて、ネットワーク上に接続された機器の中から所定の条件を満たすプリンタを検索し、検索されたプリンタを分散先プリンタとして選択する(ステップS206)。分割モードの場合における所定の条件を、以下に示す。
1.自己プリンタPRT1と同一の機種であること。
2・電源が投入されていること。
3.トナー残量が所定の閾値以上であること。
4.オンライン状態にあること。
5.印刷中でないこと(プリンタエンジン90が駆動中でないこと)。
これらの項目についての情報は、全て上述のSNMPマネージャ40による問い合わせによって、取得することができる。自己プリンタPRT1と同一機種であることを、分散先プリンタとして選択する条件とするのは、分散印刷を行う際に、各分散先プリンタにおいて、印刷ジョブのデータ変換などをすることなく、適正な印刷を行わせるためである。この結果、各分散先プリンタでの印刷物の品質、例えば、解像度やフォントなどを統一することができる。カラー印刷や両面印刷指定も統一して実行する。分散先指定ファイルで指定されているIPアドレスの機器に対しても、機種名の問い合わせを行うのは、次の理由による。すなわち、分散先指定ファイル作成後に、機器の入れ換えなどにより、分散先指定ファイルに記載されていたIPアドレスが、自己のプリンタPRT1と別機種のプリンタに割り振られたり、プリンタ以外の機器に割り振られたりする可能性があるので、自己のプリンタPRT1と同一機種であるかの確認を行うためである。
2〜5の条件は、すぐに印刷できないプリンタを分散先プリンタとして選択することを防ぐためである。オンライン状態とは、用紙切れや紙詰まりといったエラーを起こしている状態(オフライン状態)ではない正常な状態のことを指す。
そして、分散先選択部52は、1台以上の分散先プリンタが選択されたか否かを判断する(ステップS208)。一台以上選択されている場合(ステップS208:YES)には、分散先選択部52は分散先プリンタ選択処理を終了する。一台の分散先プリンタも選択されていない場合(ステップS208:NO)には、分散先選択部52は、所定期間待機して(ステップS210)、ステップS202〜ステップS208の処理を繰り返す。本実施例では、分散先プリンタとして、上述したプリンタPRT1〜PRT4の一部または全部が分散先プリンタとして選択されるものとする。
分散先プリンタが選択されると、分散制御部50は、選択された各分散先プリンタとの間に、分散制御部50から分散先プリンタの印刷ジョブ制御部60に印刷ジョブを送信するためのコネクションを確立する(ステップS106)。具体的には、分散制御部50は、カスタムネットワークボード100のTCP/IP部10に、分散先プリンタのTCP/IP部10との間で、コネクションの確立処理を行わせる。カスタムネットワークボード100から分散先プリンタへの第1の確立要求を示すTCPパケット(SYNパケット)と、第1の確立要求に対する受信確認と分散先プリンタからカスタムネットワークボード100への第2の確立要求とを兼ねるTCPパケット(ACK/SYNパケット)と、第2の確立要求に対する受信確認を示すTCPパケット(ACKパケット)とが、2つのTCP/IP部10間において、順次やり取りされると、コネクションが確立される。以上の説明から解るように、分散制御部50が印刷ジョブを送信するためのコネクションを確立するTCP/IP部10が請求項における第2の通信部に相当する。
受信状態判定部54のコマンド送信部541は、確立された各コネクションを介して、各分散先プリンタに判定コマンドを送信する(ステップS108)。本実施例では、判定コマンドとして、上述したジョブ制御言語であるEJLで記述されたコマンドであって分散先プリンタの印刷ジョブ制御部60が受信すると、直ちにデバイスIDを応答するコマンド(以下、EJL IDコマンドという。)が用いられる。デバイスIDは、印刷装置のメーカや機種を特定するための情報であり、EJL IDコマンドは、通常は、印刷ジョブの送信元の機器がプリンタドライバの種類を選択するため等に用いられている。
ジョブ制御言語によって記述されるEJL IDコマンドは、印刷ジョブ制御部60によって印刷ジョブと同様に受信される。従って、EJL IDコマンドが印刷ジョブ制御部60に受信されて、印刷ジョブ制御部60が応答を返したということは、印刷ジョブ制御部60が直ちに印刷ジョブを受信可能な状態(以下、即時受信可能状態という。)にあることを示している。言い換えれば、EJL IDコマンドの送信に用いたコネクションは、現在、その分散先プリンタに保持されているコネクションの中で最も先に確立されたコネクションであり、このコネクションから印刷ジョブを送信しようとした場合、上述した待機状態にされることはないことを示している。一方で、EJL IDコマンドを送信したにも関わらず印刷ジョブ制御部60に受信されず、応答が帰ってこないということは、印刷ジョブ制御部60が即時受信可能状態にはないことを示している。言い換えれば、EJL IDコマンドの送信に用いたコネクションより先に確立されたコネクションが、現在、その分散先プリンタに保持されており、EJL IDコマンドの送信に用いたコネクションから印刷ジョブを送信しようとした場合、上述した待機状態にされることを示している。
受信状態判定部54は、判定コマンドが送信されると、タイムアウト時刻をカウントするためのタイムカウントを開始し(ステップS110)、送信された判定コマンドに対する応答(以下、コマンド応答という。)の受信を待つ(ステップS112)。この受信待ち期間中にコマンド応答が、分散先プリンタの印刷ジョブ制御部60からあった場合には、受信状態判定部54の応答受信部542は、コマンド応答を受信する。
受信状態判定部54は、所定のタイムアウト時刻になったか否かを確認(ステップS114)、タイムアウト時刻になっていない場合(ステップS114:NO)には、上述のコマンド応答の受信待ちを継続する。タイムアウト時刻になった場合(ステップS114:YES)には、応答受信部542が1以上のコマンド応答を受信したか否かを判断する(ステップS116)。受信状態判定部54は、応答受信部542は未だ1つのコマンド応答も受信していないと判断すると(ステップS116:NO)、ステップS110に戻って、再びコマンド応答の受信待ちを行う。
受信状態判定部54が、応答受信部542が1以上のコマンド応答を受信したと判断すると(ステップS116:YES)、分散制御部50の印刷ジョブ送信部56は、コマンド応答を送信してきた分散先プリンタの印刷ジョブ制御部60に印刷ジョブを送信する(ステップS118)。上述したように、応答を返信してきた分散先プリンタの印刷ジョブ制御部60は、即時受信可能状態にあると判定できるからである。具体的には、印刷ジョブ送信部56は、コマンド応答が送信されてきたコネクションをそのまま用いて、そのコネクションの相手方として分散先プリンタで待機している印刷ジョブ制御部60に印刷ジョブを送信する。2以上の分散先プリンタからコマンド応答を受信した場合には、コマンド応答を送信してきた全ての分散先プリンタに対して印刷ジョブを送信する。一方、タイムアウト時刻までにコマンド応答を送信してこなかった分散先プリンタには、印刷ジョブを送信しない。コマンド応答を直ちに送信してこない分散先プリンタの印刷ジョブ制御部60は、即時受信可能状態にないと判定できるからである。
ここで、本ステップで分散先プリンタに送信される印刷ジョブは、印刷ジョブ制御部60宛(ポート番号9100宛)であるので通常印刷ジョブということになる。通常印刷ジョブを送信すべき(コマンド応答を送信してきた)分散先プリンタが2以上ある場合には、ステップS102において受信した分散印刷ジョブのジョブ言語記述部に記述された印刷部数を、2以上の分散先プリンタに送信する通常印刷ジョブにできる限り均等に配分する。具体的には、図5(b)において、ジョブ制御言語部501に「QT」として記述されている値が印刷部数を表しており、この値を変更することによって通常印刷ジョブに配分される印刷部数を設定することができる。なお、本ステップにおいて、2以上の分散先プリンタへ印刷ジョブを送信する処理においては、さらに、後述する。
印刷ジョブの送信が終了されると、印刷ジョブを送信した分散先プリンタとのコネクションは終了される。終了要求を示すTCPパケット(FINパケット)と終了要求に対する受信確認を示すTCPパケット(ACKパケット)とからなる要求/応答プロセスを、カスタムネットワークボード100と分散先プリンタの2つのTCP/IP部10間において、互いに実行することでコネクションが終了される。
分散制御部50は、ステップS108においてコマンド送信部541が判定コマンドを送信したが、未だにコマンド応答を送信してきていない分散先プリンタがある場合には、そのコマンド応答が送信されてくるのを待ち(ステップS120)、全てのコマンド応答が送信されてきたら(ステップS122:YES)、本処理を終了する。ステップS120およびステップS122の処理は、EJL IDコマンドを送信した以上、その応答を受信する必要があるというソフトウエア上の仕様のために必要である処理であり、分散印刷処理において本質的に必要とされる処理ではない。
続いて、図7を参照して、上記の分割モードにおけるカスタムネットワークボード100の分散制御部50と分散先プリンタの印刷ジョブ制御部60との間の通信シーケンスについて説明する。図7は、分割モードにおける分散制御部と印刷ジョブ制御部との間の通信シーケンスの一例を示す説明図である。図7では、上記ステップS106において、分散先プリンタとしてコネクションを確立されたプリンタが、プリンタPRT2およびプリンタPRT3である場合を例としている。
コネクションが確立される(図4:ステップS106)と、分散制御部50から各プリンタPRT2、PRT3の各印刷ジョブ制御部60に、判定コマンドが送信される。図7の例では、プリンタPRT2の印刷ジョブ制御部60は即時受信可能状態にあり、直ちにコマンド応答が返信されている。一方で、プリンタPRT3の印刷ジョブ制御部60は即時受信可能状態にはなく、コマンド応答は直ちには返信されていない。判定コマンドの送信から所定のウエイト期間Wt(上述したタイムカウント開始からタイムアウト時刻までの期間に対応する)後に、それまでにコマンド応答を送信してきたプリンタPRT2の印刷ジョブ制御部60に対して、分散制御部50から印刷ジョブが送信される。印刷ジョブの送信が完了すると、分散制御部50とプリンタPRT2の印刷ジョブ制御部60とのコネクションは終了される。その後、プリンタPRT3の印刷ジョブ制御部60が受信可能な状態になり、判定コマンドが受信され、プリンタPRT3の印刷ジョブ制御部60から分散制御部50にコマンド応答が返信されている。そして、分散制御部50からプリンタPRT3の印刷ジョブ制御部60に印刷ジョブが送信されることなく、分散制御部50とプリンタPRT2の印刷ジョブ制御部60とのコネクションは終了される。
次に、図8を参照して複製モードを実行する処理について説明する。図8は、分散印刷処理の処理ルーチンを示す第2のフローチャートである。複製モードを実行する処理が開始されると、分散制御部50の分散先選択部52は、分散先プリンタ選択処理を実行する(ステップS302)。複製モードにおける分散先プリンタ選択処理は、分割モードにおける分散先プリンタ選択処理(図4:ステップS104)とは、多少異なるが基本的なステップは同様であるので、分割モードと同様に図6を参照して説明する。
分散先プリンタ選択処理が開始されると、分散先選択部52は、分割モードの場合と同様に、ネットワーク上に接続された機器のIPアドレスを取得する(ステップS202)。次に、分散先選択部52は、取得されたIPアドレスを割り当てられた各機器に関する情報を取得する(ステップS204)。複製モードでは、ここで取得される情報は、分割モードと異なり、機種名だけである。
分散先選択部52は、取得された情報に基づいて、ネットワーク上に接続された機器の中から所定の条件を満たすプリンタを検索し、検索されたプリンタを分散先プリンタとして選択する(ステップS206)。複製モードの場合における所定の条件は、分割モードの場合と異なり以下の2つだけである。
1.自己プリンタPRT1と同一の機種であること。
2・電源が投入されていること。
ステップS204において、SNMPを用いて機種名を取得できた場合には、電源が投入されているので、結局は、1の条件のみを確認すれば良いことになる。
このように、分割モードより分散先プリンタとして選択するための条件が少ないのは、上述したように、複製モードでは、多くの分散先プリンタにおいて印刷することが重視されるからである。
分散先選択部52は、分割モードの場合と同様の処理により、1台以上の分散先プリンタが確実に選択されるようにする(ステップS208、S210参照)。
図8に戻って説明を続ける。分散先プリンタが選択されると、分散制御部50は、分割モードの場合と同様に、選択された各分散先プリンタとの間に、分散制御部50から分散先プリンタの印刷ジョブ制御部60に印刷ジョブを送信するためのコネクションを確立する(ステップS304)。ただし、複製モードでは、選択された全ての分散先プリンタとの間にコネクションが確立されるまで、コネクションの確立を繰り返す。これもまた、複製モードでは、多くの分散先プリンタにおいて印刷することが重視されるからである。
受信状態判定部54のコマンド送信部541は、分割モードの場合と同様に、確立された各コネクションを介して、各分散先プリンタに判定コマンドを送信する(ステップS306)。受信状態判定部54は、判定コマンドが送信されると、分割モードの場合と同様に、タイムカウントを開始し(ステップS308)、コマンド応答を待つ(ステップS310)。
受信状態判定部54は、所定のタイムアウト時刻になったか否かを確認(ステップS312)し、タイムアウト時刻になっていない場合(ステップS312:NO)には、上述のコマンド応答の受信待ちを継続する。タイムアウト時刻になった場合(ステップS312:YES)には、応答受信部542が選択された全ての分散先プリンタからコマンド応答を受信したか否かを判断する(ステップS314)。受信状態判定部54が未だコマンド応答を受信していない分散先プリンタがあると判断すると(ステップS314:NO)、一旦、分散制御部50は、コマンド応答を送信してきた分散先プリンタとのコネクションを終了する(ステップS316)。分散制御部50は、所定時間待機した後、ステップS316において、一旦終了させた分散先プリンタとのコネクションを、もう一度確立する(ステップS318)。本ステップで、待機する時間は、乱数を用いて常に一定の時間とならないようにされる。ステップS316およびS318を実行する理由については、後述する。
コネクションが再確立されると、分散制御部50は、直前のコマンド応答の受信待ちの期間(ステップS310)において、コマンド応答を送信してきた分散先プリンタに対して、もう一度判定コマンドを送信する(ステップS320)。判定コマンドが再送信されると、分散制御部50は、ステップS308に戻って、再び、所定時間に亘るコマンド待ちを行う(ステップS308〜S312)。
所定期間内に、受信状態判定部54が、選択された全ての分散先プリンタからのコマンド応答が受信されたと判断すると(ステップS314:YES)、印刷ジョブ送信部56は、選択された全ての分散先プリンタの印刷ジョブ制御部60に印刷ジョブを送信する(ステップS322)。本ステップにおいても、全ての分散先プリンタからコマンド応答が受信された(全ての分散先プリンタが即時受信可能状態にある)ことを条件にするのは、上述したように複製モードでは、多くの分散先プリンタにおいて印刷することが重視されるからである。すなわち、分割モードの場合と同様に、印刷ジョブ送信部56は、コマンド応答が送信されてきたコネクションをそのまま用いて、そのコネクションの相手方として分散先プリンタで待機している印刷ジョブ制御部60に印刷ジョブを送信する。
続いて、図9を参照して、上記の複製モードにおけるカスタムネットワークボード100の分散制御部50と分散先プリンタの印刷ジョブ制御部60との間の通信シーケンスについて説明する。図9は、複製モードにおける分散制御部と印刷ジョブ制御部との間の通信シーケンスの一例を示す説明図である。図9では、上記ステップS304において、分散先プリンタとしてコネクションを確立されたプリンタが、プリンタPRT2およびプリンタPRT3である場合を例としている。
コネクションが確立される(図8:ステップS304)と、分散制御部50から各プリンタPRT2、PRT3の各印刷ジョブ制御部60に、判定コマンドが送信される。図9の例では、プリンタPRT2の印刷ジョブ制御部60は即時受信可能状態にあり、直ちにコマンド応答が返信されている。一方で、プリンタPRT3の印刷ジョブ制御部60は即時受信可能状態にはなく、コマンド応答は直ちには返信されていない。判定コマンドの送信から所定のウエイト期間Wtの間に、プリンタPRT3からコマンド応答が送信されていないので、コマンド応答を送信してきたプリンタPRT2の印刷ジョブ制御部60と分散制御部50とのコネクションは、一旦終了される。そして、所定の待機時間Wrの経過後に、プリンタPRT2の印刷ジョブ制御部60と分散制御部50とのコネクションが再確立される。そして、再確立されたコネクションを介して、分散制御部50からプリンタPRT2の印刷ジョブ制御部60へ、判定コマンドが再送信される。
判定コマンドの再送信後、2回目のウエイト期間Wtの間に、プリンタPRT2とプリンタPRT3の両方からコマンド応答が送信されている。つまり、プリンタPRT2の印刷ジョブ制御部60は、2回目の判定コマンドが送信された時点においても、即時受信可能状態にあり、プリンタPRT2の印刷ジョブ制御部60から分散制御部50に直ちにコマンド応答が返信されている。一方、プリンタPRT3の印刷ジョブ制御部60が、ちょうど2回目のウエイト期間Wtの間に、即時受信可能状態に移行して1回目の判定コマンドを受信したため、2回目のウエイト期間Wtの間にプリンタPRT3の印刷ジョブ制御部60から分散制御部50にコマンド応答が返信されている。この結果、2回目のウエイト期間Wtが終了した時に、プリンタPRT2とプリンタPRT3は両方とも即時受信可能状態にあると判定され、分散制御部50からプリンタPRT2およびプリンタPRT3の印刷ジョブ制御部60にそれぞれ印刷ジョブが送信されている。
次に、図10を参照して分散印刷処理における分散制御部50から分散先プリンタの印刷ジョブ制御部60への印刷ジョブの送信について、さらに説明する。図10は、印刷ジョブが複数の印刷ジョブ制御部60に送信される通信シーケンスの一例を示す説明図である。図10では、クライアントCLaから送信された印刷ジョブを、プリンタPRT1の分散制御部50が受信し、2つのプリンタPRT2およびプリンタPRT3の印刷ジョブ制御部60にそれぞれ受信した印刷ジョブを送信(分散)する様子を示している。
図5(c)を参照して上述したように、印刷ジョブデータ500は、バッファ36より小さなパケットに分けてクライアントから取得される。したがって、上述の図7および図9では印刷ジョブの送信を一本の矢印で簡単に示しているが、実際には、分散制御部50から分散先プリンタの印刷ジョブ制御部60への印刷ジョブの送信は、パケット単位で複数回に分けて行う必要がある。図10に示す例では、図5(c)に示す8つのパケットP1〜P8に分けられた印刷ジョブデータ500が送信される場合を示している。
分散制御部50が印刷ジョブの送信(図4:ステップS118または図8:ステップS322)を開始すると、まず、最初にバッファ36に格納されているパケットP1(ジョブ制御言語部501を含む印刷ジョブの最初のパケット)をプリンタPRT2およびプリンタPRT3の印刷ジョブ制御部60にそれぞれ送信する。以下、このようにパケットを複数の分散先プリンタの印刷ジョブ制御部60にそれぞれ送信することをパケット分散という。図10において、記号PDで示す破線で囲まれた矢印の集合は、1回のパケット分散に対応している。
最初のパケットP1のパケット分散PDの終了が確認されると、分散制御部50は、図10に示すようにクライアントCLaから次のパケットP2を受信する。パケット分散PDの終了の確認は、TCPプロトコルにしたがって送信元と送信先のTCP/IP部10が行う。分散制御部50は、バッファ36に格納されたパケットP1を消去して、新たに受信されたパケットP2をバッファ36に格納する。分散制御部50は、バッファ36に格納されたパケットP2について、パケットP1と同様のパケット分散PDを実行する。同様の処理を印刷ジョブデータ500を構成する残りのパケットP3〜P8について繰り返し実行することにより、印刷ジョブデータ500は、最終的に全てプリンタPRT2およびプリンタPRT3の印刷ジョブ制御部60にそれぞれ送信される。
以上説明した、本実施例における印刷制御装置としてのカスタムネットワークボード100によれば、コネクションを介して印刷ジョブを送信した場合、送信先の印刷ジョブ制御部60が送信された印刷ジョブを直ちに受信できる状態にあるかを判定してから、印刷ジョブを送信するので、速やかに分散印刷を実現することができる。つまり、カスタムネットワークボード100が分散先プリンタに印刷ジョブを送信したときに、上述した待機状態にさせられ分散印刷の進行が妨げられることがない。
さらに、本実施例におけるカスタムネットワークボード100によれば、デッドロックの発生を防止することができる。ここで、デッドロックとは、分散印刷処理が完全に停止してしまう不具合をいうものとする。例えば、2以上のカスタムネットワークボード100と、2以上のカスタムネットワークボード100のそれぞれが印刷ジョブの分散先として指定可能な2以上の分散先プリンタとを含む分散印刷システムがあるとする。このシステムにおいて、2以上のカスタムネットワークボード100が、分散印刷処理によって、ほぼ同時に2以上の分散先プリンタに対して印刷ジョブを送信しようとした場合に、従来はデッドロックが発生する場合があった。
ここで、理解の容易のため、図11および図12を参照して、デッドロックが発生するメカニズムについて説明する。図11はデッドロックの発生する場合の通信シーケンスを示す説明図である。図12は、デッドロックが発生する場合を概念的に示す説明図である。図12において実線は、コネクションを示している。図11および図12は、判定コマンドを用いた即時受信可能状態か否かの確認をしない場合、すなわち、上述した図4におけるステップS106〜S116あるいは図8におけるステップS306〜S320を実行せずに分散印刷処理を実行した場合に、デッドロックが起きる様子を示している。
例えば、プリンタPRT1の分散制御部50とプリンタPRT4の分散制御部50とが、プリンタPRT2およびプリンタPRT3の印刷ジョブ制御部60にそれぞれほぼ同時に印刷ジョブを送信しようとして、それぞれコネクションを確立したとする。上述したように、各プリンタのTCP/IP部10は、複数のコネクションを同時に保持することができるので、各コネクションの確立は成功する。図11において、白抜きの丸は、プリンタPRT1の分散制御部50とプリンタPRT2およびプリンタPRT3の各印刷ジョブ制御部60との間のコネクションが確立されたタイミングを示している。一方、黒塗りの丸は、プリンタPRT4の分散制御部50とプリンタPRT2およびプリンタPRT3の各印刷ジョブ制御部60との間のコネクションが確立されたタイミングを示している。
図11に示すように、プリンタPRT2の印刷ジョブ制御部60とのコネクションは、プリンタPRT1の分散制御部50が先に確立している。従って、プリンタPRT2の印刷ジョブ制御部60は、プリンタPRT1の分散制御部50から送信されてくる印刷ジョブを優先的に受信し、この印刷ジョブの受信が全て終了するまで、プリンタPRT4の分散制御部50は待機状態にされる。
一方、図11に示すように、プリンタPRT3の印刷ジョブ制御部60とのコネクションは、プリンタPRT4の分散制御部50が先に確立している。従って、プリンタPRT3の印刷ジョブ制御部60は、プリンタPRT4の分散制御部50から送信されてくる印刷ジョブを優先的に受信し、この印刷ジョブの受信が全て終了するまで、プリンタPRT1の分散制御部50は待機状態にされる。図11において、太い実線は、優先的に印刷ジョブを受信するコネクションCN12、CN43を示し、細い実線は、待機状態にされているコネクションC42、C13を示している。
このような状態から、プリンタPRT1の分散制御部50は、確立されたコネクションC12、C13を介して、上述したパケット分散PD(図10)を実行してプリンタPRT2、PRT3の各印刷ジョブ制御部60に印刷ジョブを送信しようとする。かかる場合には、プリンタPRT2の印刷ジョブ制御部60に送信されるパケットP1は、直ちに受信されるが、プリンタPRT3の印刷ジョブ制御部60に送信されるパケットP1は、コネクションCN13の優先順位が低いために受信されない。そのため、プリンタPRT1の分散制御部50は、1回目のパケット分散PDを終了することができず待機状態になる。
同様にして、プリンタPRT4の分散制御部50は、確立されたコネクションC42、C43を介して、プリンタPRT2、PRT3の各印刷ジョブ制御部60に印刷ジョブを送信しようとする。かかる場合には、プリンタPRT3の印刷ジョブ制御部60に送信されるパケットP1は、直ちに受信されるが、プリンタPRT2の印刷ジョブ制御部60に送信されるパケットP1は、コネクションCN42の優先順位が低いために受信されない。そのため、プリンタPRT1の分散制御部50と同様に、プリンタPRT4の分散制御部50は、1回目のパケット分散PDを終了することができず待機状態になる。
この結果、プリンタPRT1の分散制御部50およびプリンタPRT4の分散制御部50による分散印刷処理は、両方とも完全に停止状態に陥ってしまう。プリンタPRT1の分散制御部50の待機状態は、プリンタPRT4の分散制御部50による分散印刷処理が終了するまで解消されず、一方でプリンタPRT4の分散制御部50の待機状態は、プリンタPRT1の分散制御部50による分散印刷処理が終了するまで解消されないためである。
図11のようなデッドロックは、図12に示すような場合に起こる。概念的に説明すると、印刷ジョブの送信側である複数の分散制御部と、受信側である複数の印刷制御部があり、分散制御部と印刷制御部間の通信のためのコネクションによって、分散制御部と印刷制御部とを交互に結ぶ閉じた環が形成され得るシステムにおいて、デッドロックが起き得る。上述したようにコネクションの環が確立され、環上にある全ての印刷制御部に少なくとも待機状態になるコネクションが1つ以上ある状態で、分散印刷処理が実行されるとデッドロック状態になる。図12において、コネクションに付されている番号は、1が即時受信状態のコネクション、2が待機状態のコネクションを示している。
本実施例に係るカスタムネットワークボード100では、判定コマンドを用いた即時受信可能状態か否かの確認を実行しているので、待機状態の分散先プリンタに対して、印刷ジョブを送信することがない。従って、上述のデッドロックは確実に防止することができる。例えば、分割モードの場合において、図11に示すようなタイミングでコネクションの確立がおこなわれたとしても、PRT1の分散制御部50は、判定コマンドにより即時受信可能状態にあると判定されるPRT2の印刷ジョブ制御部60に対してのみ印刷ジョブを送信するので、上述のデッドロックは回避される。
複製モードにおいて、コネクションを一旦終了する(図8:ステップS316)理由およびコネクションを再確立するまで待機する時間を乱数により決定する(図8:ステップS318)理由は、このようなデッドロックをうまく回避するためである。例えば、図11に示すようなタイミングで、プリンタPRT1およびプリンタPRT2の各分散制御部50が複製モードにおいて、コネクションを確立したとする。この場合、少なくともプリンタPRT1およびプリンタPRT2の各分散制御部50の一方が、一旦即時受信状態にあるコネクションを終了しなければ、どちらか一方の分散制御部50が即時受信可能状態にあるコネクションを独占することができない。このため、複製モードでは、図8のステップS316において、即時受信状態にあるコネクションを一旦終了する。さらに、一旦コネクションを終了させた後、プリンタPRT1およびプリンタPRT2の各分散制御部50が同じ待機期間をおいて再び同じようなタイミングでコネクションを確立すると、また、各分散制御部50がコネクションの確立を互いに競合しあうことになり、どちらか一方の分散制御部50が即時受信可能状態にあるコネクションを独占することが困難になる。このため、図8のステップS316において、コネクションを再確立するまでの待機期間を乱数により決定している。こうすることによって、複製モードにおいても、デッドロックを速やかに回避して、分散印刷処理を円滑に進行させることができる。
さらに、判定コマンドには、印刷ジョブの少なくとも一部を記述するための言語であるEJLによって記述されたEJL IDコマンドを用いている。従って、EJL言語を解釈可能な印刷装置であれば、EJL IDコマンドに対する応答を返すことができる。この結果、既存のEJL言語を解釈可能な印刷装置を分散先プリンタとしてそのまま使用できる。
また、コマンド応答が送信されてきたコネクションをそのまま用いて印刷ジョブを投入するので、確実にそのコネクションの相手方である印刷ジョブ制御部60が即時受信可能状態であることを確実に判定できる。例えば、UDP層の上位層としてのSNMP等のコネクションレス型の通信プロトコルを用いて確認するとすれば、確認後、コネクションを確立しようとした一瞬の間に、他の機器がコネクションを確立してしまうこともあり得るが、本実施例ではそのような不都合はない。
さらに、印刷ジョブを複数のパケットに分けて、上述したようにパケット分散(図10)により送信するので、カスタムネットワークボード100に搭載されるバッファ36の必要容量を小さくすることができる。この結果、カスタムネットワークボード100の部品点数や製造コストの低減、および、小型化が図られる。また、分散先プリンタに搭載されたバッファ(例えば、プリンタPRT2のプリンタバッファ82)の容量が小さい場合であっても、複数の分散先プリンタに並行して印刷ジョブを分散することができる。
さらに、分散制御部50はプリンタ(PRT1またはPRT4)に内蔵されているので、専用サーバを用いることなく、簡易で小型の分散印刷システムを実現することができる。
さらに、分散制御部50は、分散制御部50を含むカスタムネットワークボード100が内蔵されているプリンタ自体も分散先として指定することができるので、分散先プリンタの選択範囲が広い。
B.第2実施例:
・分散印刷システムの構成:
第2実施例における分散印刷システムの概略構成は、図1を参照して説明した第1実施例における構成と同一であるので、その説明を省略する。図13は、第2実施例における分散印刷システムを構成する各機器の内部構成を示すブロック図である。
第2実施例におけるプリンタPRT1は、第1実施例におけるPRT1と比較して、カスタムネットワークボード100内の分散制御部50と印刷ジョブ制御部60の構成が異なっている。第2実施例における分散制御部50は、第1実施例におけるコマンド送信部541に代えて占有要求部543を備え、応答受信部542に代えて通知受信部544を備えている。占有要求部543は、分散先プリンタの占有を求める占有要求に関連するコマンドを送信する。通知受信部544は、占有要求部が送信したコマンドに対する応答を受信する。
また、第2実施例における印刷ジョブ制御部60は、第1実施例における応答部61に代えて、占有許可部62を備えている。占有許可部62は、プリンタPRT1に印刷ジョブを送信しようとする送信機器に対して、プリンタPRT1の占有を認めるための機能ブロックである。
第2実施例におけるプリンタPRT1のその他の構成は、図2に示した第1実施例におけるプリンタPRT1と同一であるので、同一の構成要素については、図13において図2と同一の符号を付し、その説明を省略する。
第2実施例におけるプリンタPRT2は、第1実施例におけるPRT2と比較して、ネットワークボード200内の印刷ジョブ制御部60の構成が異なっている。すなわち、第2実施例における印刷ジョブ制御部60は、上述したPRT1の印刷ジョブ制御部60と同様に、第1実施例における応答部61に代えて、上述した占有許可部62を備えている。第2実施例におけるプリンタPRT2のその他の構成は、図2に示した第1実施例におけるプリンタPRT2と同一であるので、同一の構成要素については、図13において図2と同一の符号を付し、その説明を省略する。なお、第2実施例においても、プリンタPRT4はプリンタPRT1と、プリンタPRT3はプリンタPRT2と、それぞれ同一の構成を備えているので、これらの説明は省略する。
・分散先プリンタの占有許可部の処理:
本実施例における分散先プリンタとなるプリンタPRTの印刷ジョブ制御部60が備える占有許可部62の行う処理について、さらに、説明する。先ず、図14を参照して占有許可部62が実行する占有予約処理について説明する。図14は、占有予約処理の処理ルーチンを示すフローチャートである。占有許可部62は、電源が投入されている場合には、常時この占有予約処理を実行している。占有予約処理が実行されている時、占有許可部62は、常に占有ID要求の受信が有るか否かを監視している(ステップS402)。占有ID要求は、上述した占有要求に関連するコマンドの1つであり、プリンタPRTに対して、プリンタPRTの占有を予約するコマンドである。プリンタPRTに印刷ジョブを送信しようとする機器(以下、送信機器という。)は、後述する占有要求を送信する前に、プリンタPRTに対して、占有ID要求を送信する。送信機器は、例えば、LANに接続された計算機やサーバーを含み、本実施例におけるカスタムネットワークボード100の分散制御部50を含む。
占有ID要求を受信すると(ステップS402:YES)、占有許可部62は、占有ID要求を送信してきた送信機器に対して、占有IDを記述した応答を送信する。以下、この応答の送信を、占有IDの発行ともいう。占有IDは、占有許可部62が、送信機器に対して占有を許可する順番を管理するために用いるものであり、占有ID要求ごとに異なる固有のIDである。
占有許可部62は、送信機器に対して発行した占有IDを、記録しておく(ステップS406)。この際、占有IDは、占有IDが発行された順番が解るように記録しておく。または、占有ID自体を占有IDが発行された順番そのものとしておく。以下、占有IDが発行された順番が早いことを予約順位が高いともいい、占有IDが発行された順番が遅いことを予約順位が低いともいう。占有許可部62は、占有IDを記録すると、ステップS402に戻って占有ID要求の受信を待つ状態に戻る。
次に、図15を参照して、占有許可部62が実行する占有許可処理について説明する。図15は、占有管理処理の処理ルーチンを示すフローチャートである。占有管理処理は、1つ以上の占有IDが発行されている場合に、占有許可部62によって、上述の占有予約処理と並行して常時実行されている。占有予約処理が実行されている時、占有許可部62は、常に占有要求の受信が有るか否かを監視している(ステップS502)。占有要求は、上述した占有要求に関連するコマンドの1つであり、プリンタPRTに対して、プリンタPRTの占有を要求するコマンドである。送信機器は、印刷ジョブの送信しようとする際に、先に取得した占有IDを占有要求に記述して、その占有要求を占有IDを発行したプリンタPRTに送信する。プリンタPRT側では、占有許可部62が送信機器から送信された占有要求を受信する。
占有許可部62は、占有要求を受信すると(ステップS502:YES)、受信した占有要求に含まれる占有IDを取得する(ステップS504)。占有許可部62は、記録されている発行済みの占有IDを参照して、占有要求に含まれる占有IDの予約順位が最も高いか否かを判断する(ステップS506)。占有要求に含まれる占有IDの予約順位が最も高くないと判断すると(ステップS506:NO)、占有許可部62は、占有要求を送信してきた送信機器に対してプリンタPRTの占有を許可しないと決定し、占有の不許可通知を占有要求に対する応答として送信する(ステップS508)。
一方、占有要求に含まれる占有IDの予約順位が最も高いと判断すると(ステップS506:YES)、占有許可部62は、占有要求を送信してきた送信機器に対してプリンタPRTの占有を許可すると決定し、占有の許可通知を占有要求に対する応答として送信する(ステップS510)。占有許可部62は、プリンタPRTを、許可通知を送信した送信機器による占有状態にする(ステップS512)。例えば、TCP/IP部10に、占有を許可した送信機器のIPアドレスを通知して、TCP/IP部10に通知されたIPアドレスを有する機器とだけコネクションの確立を行うように指示する。
この結果、占有が許可された送信機器は、印刷ジョブを印刷ジョブ制御部60に送信するためのコネクションを確立したとき、必ず印刷ジョブ制御部60は上述した即時受信可能状態になる。すなわち、占有が許可された送信機器は、コネクションを確立後、待機状態にさせられることはなく、直ちに送信された印刷ジョブを印刷ジョブ制御部60に受信させることができる。言い換えれば、送信機器は、コネクションの確立に先立って、占有許可部62からプリンタPRTの占有の許可を受ければ、その後にプリンタPRTの印刷ジョブ制御部60とコネクションを確立したとき、印刷ジョブ制御部60は即時受信可能状態であると判定することができる。
ステップS512またはステップS508を終了すると、占有許可部62は、ステップS502に戻って、占有要求の受信を監視する状態に戻る。
次に、図16を参照して、占有許可部62が実行する占有解放処理について説明する。図16は、占有解放処理の処理ルーチンを示すフローチャートである。占有解放処理は、ある送信機器にプリンタPRTの占有を許可している場合に、占有許可部62によって、上述の占有予約処理および占有許可処理と並行して実行されている。占有許可部62は、ある送信機器に占有を許可すると、占有解放通知の受信が有るか否かを監視している(ステップS602)。占有解放通知は、現在、プリンタPRTを占有している送信機器が占有の解放を通知するためのコマンドである。占有を許可された送信機器は、印刷すべき印刷ジョブをプリンタPRTに送信し終えると、占有解放通知をプリンタPRTに送信してくる。
占有許可部62は、占有解放通知を受信すると、占有解放通知に対する応答として、占有の解放を了解する通知(解放了解通知という。)を返信する(ステップS604)。占有許可部62は、占有解放通知を送信してきた送信機器による占有状態からプリンタPRTを解放する(ステップS606)。例えば、TCP/IP部10に、全ての送信機器とコネクションの確立を行わないように指示する。占有許可部62は、次に、占有を許可した占有要求に含まれていた占有ID、すなわち、予約順位が最も高い占有IDの記録を削除する(ステップS608)。この結果、予約順位が2番目であった占有IDが最も予約順位の高い占有IDとして記録されることになる。以上のステップを終えると、占有許可部62は、ステップS602に戻る。
以上説明した占有許可部62による処理において、送信機器との各種コマンドの送受信は、全てコネクションレス型の通信プロトコルであるUDPの上位層としてのSNMPを用いて実行される。すなわち、送信機器は、SNMPマネージャ(例えば、カスタムネットワークボード100が送信機器である場合には、SNMPマネージャ40)を備えており、SNMPマネージャを介して占有ID要求、占有要求、占有解放通知を送信する。占有許可部62は、SNMPエージェント70を介して、これらのコマンドに対する応答として、占有ID、許可通知、不許可通知、解放了解通知を送信する。従って、これらのコマンド/応答の送受信は、コネクションを必要とせず、印刷ジョブを送信するためのコネクションとは無関係に、独立して、実行されることができる。
・分散印刷処理:
以上のような処理を実行する占有許可部62を備えるプリンタPRTを分散先プリンタとする前提を踏まえて、第2実施例に係る分散印刷処理について説明する。
図17は、第2実施例における分散印刷処理の処理ルーチンを示す第1のフローチャートである。第2実施例に係る分散印刷処理において、ステップS702は、第1実施例におけるステップS102と同一であり、印刷ジョブが着信したポート番号に応じて、分割モードの処理に移行するか、複製モードの処理に移行するかを判断する処理である。第1実施例と同様にして、先ず、分割モードにおける処理(ステップS704〜)を説明する。ステップS704は、第1実施例におけるステップS104と同一であり、分散先プリンタを選択する処理である。分散先プリンタが選択されると、分散制御部50の受信状態判定部54は、選択された各分散先プリンタから占有IDを取得する(ステップS706)。具体的には、受信状態判定部54の占有要求部543が、上述した占有ID要求を、SNMPマネージャ40を介して、各分散先プリンタに送信する。その結果、受信状態判定部54の通知受信部544は、占有IDに対する応答として、各分散先プリンタの占有許可部62から占有IDを取得することができる。
占有IDが取得されると、受信状態判定部54の占有要求部543は、取得された占有IDを記述して、占有要求を、占有IDを発行した分散先プリンタにそれぞれ送信する(ステップS708)。この結果、受信状態判定部54の通知受信部544は、占有要求に対する応答として、各分散先プリンタの占有許可部62から上述した許可通知または不許可通知を受信する(ステップS710)。
受信状態判定部54は、許可通知を送信してきた分散先プリンタについて、この後にその分散先プリンタの印刷ジョブ制御部60とコネクションを確立したとき、印刷ジョブ制御部60は即時受信可能状態にあると判定することができる。
受信状態判定部54は、通知受信部544が1以上の許可通知を受信したか否かを判断する(ステップS712)。言い換えれば、印刷ジョブ制御部60が即時受信可能状態にある分散先プリンタが1以上あるかを判断することと等しい。受信状態判定部54は、受信された通知が全て不許可通知である場合(ステップS712:NO)には、所定期間待機した(ステップS714)後、ステップS708に戻る。一方、受信状態判定部54が1以上の許可通知を受信した場合(ステップS712:YES)には、分散制御部50は、許可通知を送信してきた分散先プリンタとの間に、印刷ジョブを送信するためのコネクションを確立する(ステップS716)。分散制御部50の印刷ジョブ送信部56は、確立されたコネクションを介して、許可通知を送信してきた分散先プリンタに印刷ジョブを送信する(ステップS718)。印刷ジョブの送信は、第1実施例と同様、パケット分散PDを繰り返すことによって実行される(図10)。
印刷ジョブの送信が完了されると、占有要求部543は、占有許可を送信してきた分散先プリンタに、上述した解放通知を送信する(ステップS720)。送信された解放通知に対する応答として、通知受信部544が上述した解放了解通知を受信する(ステップS722)と、分割モードの処理は終了される。
続いて、図18を参照して、分割モードにおけるカスタムネットワークボード100の分散制御部50と分散先プリンタとの間の通信シーケンスについて説明する。図18は、分割モードにおける分散制御部と分散先プリンタとの間の通信シーケンスの一例を示す説明図である。図18では、上記ステップS704において、分散先プリンタとして選択されたプリンタが、プリンタPRT2およびプリンタPRT3である場合を例としている。図18において、プリンタPRT2およびプリンタPRT3を示す縦線のうち破線部分に発着する矢印は、SNMPを用いて実行されるコネクションレス型の通信を示す。一方、実線部分に発着する矢印は、TCPを用いて実行されるコネクション型の通信を示す。
まず、分散制御部50から各プリンタPRT2、PRT3の占有許可部62に占有ID要求が送信される。占有ID要求の送信は、上述のとおりSNMPを用いて実行されるコネクションレス型の通信であるので待機状態にされることはなく、占有許可部62によって直ちに受信される。占有ID要求の送信後、直ちに応答として各プリンタPRT2、PRT3の占有許可部62から分散制御部50に占有IDが返信される。
占有IDが返信された後、分散制御部50から各プリンタPRT2、PRT3の占有許可部62に占有要求が送信される。占有要求の送信は、占有ID要求と同様にSNMPを用いて実行されるコネクションレス型の通信であるので待機状態にされることはなく、占有許可部62によって直ちに受信される。占有要求の送信後、直ちに応答として各プリンタPRT2、PRT3の占有許可部62から分散制御部50に許可通知または不許可通知が返信される。
図18に示す例では、プリンタPRT2からの応答が不許可通知であり、プリンタPRT3からの応答が許可通知である。従って、分散制御部50は、許可通知を送信してきたプリンタPRT3との間にだけコネクションを確立し、確立されたコネクションを介してプリンタPRT3の印刷ジョブ制御部60に印刷ジョブを送信している。
印刷ジョブの送信が終了されると、コネクションが終了され、分散制御部50からプリンタPRT3の占有許可部62に占有解放通知が送信される。占有ID要求の送信後、直ちに応答としてプリンタPRT3の占有許可部62から分散制御部50に解放了解通知が返信され処理が終了する。
次に、図19を参照して複製モードを実行する処理について説明する。図19は、第2実施例における分散印刷処理の処理ルーチンを示す第2のフローチャートである。ステップS802における処理は、分散先プリンタを選択する処理であり、第1実施例において説明した図8のステップS302と同一の処理である。分散先プリンタが選択されると、分散制御部50の受信状態判定部54は、分割モードのステップS706と同様の処理により選択された各分散先プリンタから占有IDを取得する(ステップS804)。次に受信状態判定部54は、分割モードのステップS708、S710と同様の処理により、選択された各分散先プリンタに占有要求を送信し(ステップS806)、占有要求に対する応答として許可通知または不許可通知を取得する(ステップS808)。
受信状態判定部54は、全ての分散先プリンタからの通知が許可通知であるか否かを判断する(ステップS810)。受信状態判定部54は、受信された通知のうちに1つでも不許可通知がある場合には(ステップS810:NO)、許可通知を受信した分散先プリンタに占有の解放通知を送信して、一旦、分散先プリンタの占有を解放する(ステップS812)。この結果、受信状態判定部54の通知受信部544は、解放通知の応答として分散先プリンタから解放了解通知を受信する(ステップS814)。ここで、ステップS812において、一旦、分散先プリンタの占有を解放するのは、第1実施例におけるステップS316において、一旦、分散先プリンタとのコネクションを終了するのと同様の理由による。
その後、受信状態判定部54は、所定時間待機し(ステップS816)、その後、占有を一旦解放した分散先プリンタから占有IDを再取得する(ステップS818)。ここで、ステップS816において、待機する時間は、第1実施例におけるステップS318と同様に、乱数を用いて常に一定の時間とならないようにされる。ここで、ステップS816において、待機する時間を乱数により決定するのは、第1実施例におけるステップS318における待機の時間を乱数により決定するのと同様の理由による。待機時間の終了後、処理はステップS806にリターンされ、上述した処理が繰り返される。
受信された通知の全てが許可通知である場合には(ステップS810:YES)、選択された全ての分散先プリンタの各印刷ジョブ制御部60が即時受信可能状態にあると判定される。かかる場合には、分散制御部50は、全ての分散先プリンタとの間に、印刷ジョブを送信するためのコネクションを確立(ステップS820)し、確立されてコネクションを介して全ての分散先プリンタに印刷ジョブを送信する(ステップS322)。印刷ジョブの送信は、第1実施例と同様、パケット分散PDを繰り返すことによって実行される(図10)。
印刷ジョブの送信が完了されると、占有要求部543は、全ての分散先プリンタに、上述した解放通知を送信する(ステップS824)。解放通知に対する応答として分散先プリンタから送信された解放了解通知を受信される(ステップS826)と、複製モードの処理は終了される。
続いて、図20を参照して、複製モードにおけるカスタムネットワークボード100の分散制御部50と分散先プリンタとの間の通信シーケンスについて説明する。図20は、複製モードにおける分散制御部と分散先プリンタとの間の通信シーケンスの一例を示す説明図である。図20では、上記ステップS802において、分散先プリンタとして選択されたプリンタが、プリンタPRT2およびプリンタPRT3である場合を例としている。図20においては、図18と同様に、各プリンタPRT2、PRT3を示す縦線のうち破線部分に発着する矢印は、コネクションレス型の通信を示し、実線部分に発着する矢印は、コネクション型の通信を示す。
まず、分散制御部50から各プリンタPRT2、PRT3の占有許可部62に占有ID要求が送信される。占有ID要求の送信後、直ちに応答として各プリンタPRT2、PRT3の占有許可部62から分散制御部50に占有IDが返信される。占有IDが返信された後、分散制御部50から各プリンタPRT2、PRT3の占有許可部62に占有要求が送信される。占有要求の送信後、直ちに応答として各プリンタPRT2、PRT3の占有許可部62から分散制御部50に許可通知または不許可通知が返信される。
図20に示す例では、プリンタPRT2からの応答が許可通知であり、プリンタPRT3からの応答が不許可通知である。この場合、全ての分散先プリンタ(プリンタPRT2とプリンタPRT3)からの通知が許可通知ではないので、一旦、占有を許可されたプリンタPRT2を占有状態から解放するために、分散制御部50からプリンタPRT2の占有許可部62に占有の解放通知が送信される。そして、直ちに応答としてプリンタPRT2の占有許可部62から分散制御部50に解放了解通知が返信される。
そして、所定の待機時間Wrの経過後に、分散制御部50からプリンタPRT2の占有許可部62に占有ID要求が送信される。占有ID要求の送信後、直ちに応答としてプリンタPRT2の占有許可部62から分散制御部50に占有IDが返信され、分散制御部50は占有IDを再取得する。そして、2回目の占有要求が、分散制御部50から各プリンタPRT2、PRT3の占有許可部62に送信される。2回目の占有要求において、プリンタPRT2に送信される占有要求には再取得された占有IDが記述され、プリンタPRT2に送信される占有要求には1回目の占有要求と同じ占有IDが記述される。再び、応答として各プリンタPRT2、PRT3の占有許可部62から分散制御部50に許可通知または不許可通知が返信される。図20に示す例では、2回目の占有要求に対しては、プリンタPRT2およびプリンタPRT3からの応答が共に許可通知である。
従って、プリンタPRT2およびプリンタPRT3の印刷ジョブ制御部60は、共に、即時受信可能状態であると判定される。その結果、分散制御部50とプリンタPRT2およびプリンタPRT3との間にそれぞれコネクションが確立され、確立されたコネクションを介して、分散制御部50からプリンタPRT2およびプリンタPRT3の各印刷ジョブ制御部60に対して印刷ジョブが送信されている。
印刷ジョブの送信が終了されると、各コネクションが終了され、分散制御部50からプリンタPRT2、PRT3の各占有許可部62に占有解放通知が送信される。占有ID要求の送信後、直ちに応答としてプリンタPRT2、PRT3の各占有許可部62から分散制御部50に解放了解通知が返信され処理が終了する。
以上説明した本実施例に係るカスタムネットワークボード100によれば、占有の許可通知を取得して分散先プリンタを占有してから、分散先プリンタに印刷ジョブを送信するので、第1実施例と同様に、印刷ジョブを送信したときに、上述した待機状態にさせられ分散印刷の進行が妨げられることがない。
さらに、第1実施例と同様に、本実施例に係るカスタムネットワークボード100によれば、上述したデッドロックの発生を防止することができる。第1実施例と同様に、分割モード、複製モード共に、円滑な分散印刷処理を実現することができる。
本実施例では、分散先プリンタが上述したようなプリンタの占有を管理する処理(図14〜図16)を実行する占有許可部62を備えている必要があるが、コネクションレス型の高速な通信を用いて円滑な分散処理を実現することができる。
C.変形例:
上記第1実施例において、判定コマンドとしてEJL IDコマンドを用いているが、他のコマンドを用いても良い。判定コマンドとしては、1.印刷ジョブが印刷ジョブ制御部60によって受信される場合に同様に受信されるコマンドであり、かつ、2.印刷ジョブが受信されない場合には受信されないコマンドであり、かつ、3.受信された場合には、何等かの応答が返信されるコマンドであれば良い。例えば、印刷ジョブの送信に用いられるコネクションを介して送信されるコマンドであれば、1.2.の条件は満たされる。例えば、印刷ジョブデータの少なくとも一部を記述するための言語で記述されるコマンドであれば、印刷ジョブの送信に用いられるコネクションを介して送信された場合に、印刷ジョブと同様に解釈されることができるため好ましい。また、コマンドの応答は、コマンドが受信され処理された場合に直ちに返信されることが好ましい。具体的には、EJL IDコマンドと同様にEJL言語で記述されるEJL INQUIRE NEMEコマンドや、EJL VALUE PAGESIZEコマンドを判定コマンドとして用いても良い。EJL INQUIRE NEMEコマンドは、プリンタの機種名を問い合わせるコマンドであり、受信されると直ちに機種名を記述した応答が返信される。EJL VALUE PAGESIZEコマンドは、プリンタにおいて現在選択されている用紙のサイズを問い合わせるコマンドであり、受信されると直ちに用紙のサイズが記述された応答が返される。
上記第1および第2実施例では、プリンタコントローラ80は、並行して複数の印刷ジョブを処理することができないが、プリンタコントローラ80が2以上の印刷ジョブを並行して処理することができることとしても良い。例えば、プリンタコントローラ80が並行して2つの印刷ジョブを処理して、各印刷ジョブに係る印刷を1枚ずつ交互にプリンタエンジン90に実行させることができる構成としても良い。係る場合には印刷ジョブ制御部60は、2つのコネクションを介して、並行して2つの印刷ジョブを受信することができるように構成される。そして、印刷ジョブ制御部60は、3以上のコネクションが保持されている場合は、最も先に確立されたコネクションと2番目に確立されたコネクションから送信される印刷ジョブを優先して受信し、3番目以降に確立されてコネクションを介して印刷ジョブを送信しようとする送信機器については待機状態にさせれば良い。すなわち、TCP/IP部10が同時に保持できるコネクションの数より、印刷ジョブ制御部60が並行して受信できる印刷ジョブの数が少ない場合には、送信機器が待機状態にさせられる場合があるので、本実施例のように印刷ジョブ制御部60が即時受信可能状態であるか否かを判定する仕組みを設けることが有効である。
上記第1および第2実施例において説明した分割モードおよび複製モードは、分散印刷の態様の一例であり、他の態様の分散印刷処理であっても良い。例えば、分散先プリンタの選択条件等は、適宜変更しても良い。具体的には、第1実施例において、分割モードにおいて分散先プリンタを選択する(ステップS206)際に、印刷中でないことを、選択条件からはずしても良い。こうすれば、例えば、選択された全ての分散先プリンタが印刷中であった場合、印刷が終了した分散先プリンタから順次、判定コマンドに対する応答が送信されてくるので、早く印刷が終了した分散先プリンタを用いて印刷を実行することができる。すなわち、判定コマンドを用いて印刷中のプリンタの予約をすることができる。
上記第2実施例において、プリンタPRTが備える占有許可部62によって、プリンタPRTの占有を管理する手法は、種々の変形が可能である。例えば、占有要求部543は、占有ID要求に代えて、自身のIPアドレスを送信することとし、占有要求には、占有IDに代えて自身のIPアドレスを記述しても良い。かかる場合には、占有許可部62は、送信されたIPアドレスを記録しておき、占有要求に対する許可通知および不許可通知の判断を、占有要求に記述されたIPアドレスに基づいて実行することとすれば良い。
以上、本発明の実施例および変形例について説明したが、本発明はこれらの実施例および変形例になんら限定されるものではなく、その要旨を逸脱しない範囲内において種々の態様での実施が可能である。