(57)【要約】【課題】  円滑な分散印刷処理を実現する。【解決手段】印刷制御装置は、並行してデータを受信可能なコネクションの数は、同時に保持可能なコネクション数より少なく、受信可能な数を超えるコネクションが保持されている場合には、先に確立された前記コネクションを介して送信されるデータを優先的に受信する印刷装置を分散先印刷装置とする。印刷制御装置は、２以上の分散先印刷装置との間にそれぞれコネクションを確立し、２以上の分散先印刷装置がコネクションを介して送信されるデータを直ちに受信可能である即時受信可能状態か否かを判定し、即時受信可能状態であると判定された分散先印刷装置に対して印刷ジョブを送信する。【選択図】  図７
2006338446.tif 000002
【特許請求の範囲】
【請求項１】
供給された印刷ジョブに応じて印刷を実行する印刷部と、コネクション型のプロトコルを用いる通信を行う第１の通信部であって、前記通信のためのコネクションを複数個同時に保持することが可能である第１の通信部と、前記コネクションを介して前記印刷ジョブを受信して前記印刷部に前記印刷ジョブを供給する印刷ジョブ制御部であって、並行してデータを受信可能なコネクションの数は、前記第１の通信部が同時に保持可能なコネクション数より少なく、前記受信可能な数を超える前記コネクションが保持されている場合には、先に確立された前記コネクションを介して送信されるデータを優先的に受信する印刷ジョブ制御部と、を有する２以上の分散先印刷装置に対して印刷ジョブをそれぞれ送信可能な印刷制御装置であって、
２以上の前記分散先印刷装置の前記第１の通信部との間に前記コネクションをそれぞれ確立する第２の通信部と、
２以上の前記分散先印刷装置の前記印刷ジョブ制御部が、前記第２の通信部により確立される前記コネクションを介して送信されるデータを直ちに受信可能である即時受信可能状態か否かを判定する受信状態判定部と、
前記印刷ジョブ制御部が前記即時受信可能状態であると判定された前記分散先印刷装置に対して前記印刷ジョブを送信する印刷ジョブ送信部と、
を備える印刷制御装置。
【請求項２】
請求項１に記載の印刷制御装置において、
前記印刷ジョブ送信部は、前記印刷ジョブを複数のパケットに分割し、前記パケットを２以上の前記分散先印刷装置に対してそれぞれ送信するパケット分散を、前記分割されたパケットごとに繰り返し実行することによって、前記印刷ジョブを２以上の前記分散先印刷装置に対してそれぞれ送信する印刷制御装置。
【請求項３】
請求項２に記載の印刷制御装置において、
前記印刷制御装置と接続された計算機から前記印刷ジョブを前記パケットごとに受信し、前記受信されたパケットが前記印刷ジョブ送信部により前記分散先印刷装置に送信されたことが確認された後に、次に送信されるべき前記パケットを前記計算機から受信する印刷制御装置。
【請求項４】
請求項１ないし請求項３のいずれかに記載の印刷制御装置において、
２以上の前記印刷制御装置と、前記２以上の前記印刷制御装置のそれぞれが前記印刷ジョブの分散先として指定可能な２以上の前記分散先印刷装置とを含む分散印刷システムに用いられる印刷制御装置。
【請求項５】
請求項１ないし請求項３のいずれかに記載の印刷制御装置において、
２以上の前記分散先印刷装置と２以上の前記印刷制御装置とを含む分散印刷システムであって、前記第１の通信部と前記第２の通信部との間に確立される前記コネクションによって前記分散先印刷装置と前記印刷制御装置とを結ぶ閉じた環を形成可能な分散印刷システムに用いられる印刷制御装置。
【請求項６】
請求項１ないし請求項５のいずれかに記載の印刷制御装置において、
前記受信状態判定部は、
前記分散先印刷装置に応答を要求するコマンドを送信するコマンド送信部と、
前記分散先印刷装置から前記コマンドに対する応答を受信するための応答受信部と、
を備え、
前記受信状態判定部は、
前記コマンドに対する応答に応じて、前記印刷ジョブ制御部が前記即時受信可能状態であるか否かを判定する印刷制御装置。
【請求項７】
請求項６に記載の印刷制御装置において、
前記コマンドは、前記確立されたコネクションを介して前記印刷ジョブ制御部に送信されると共に前記印刷ジョブ制御部が前記即時受信可能状態である場合に受信されるコマンドであり、
前記コマンドに対する応答は、前記コマンドが前記印刷ジョブ制御部によって受信された場合に、前記コマンドの送信に用いられたコネクションを介して返信され、
前記受信状態判定部は、前記コマンドに対する応答を受信した場合に、前記印刷ジョブ制御部は前記即時受信可能状態であると判定する印刷制御装置。
【請求項８】
請求項７に記載の印刷制御装置において、
前記印刷ジョブ送信部は、前記コマンドに対する応答の受信に用いられた前記コネクションを介して、前記印刷ジョブを送信する印刷制御装置。
印刷制御装置。
【請求項９】
請求項７または請求項８に記載の印刷制御装置において、
前記コマンドは、前記印刷ジョブの少なくとも一部を記述するための言語を用いて記述されている印刷制御装置。
【請求項１０】
請求項６に記載の印刷制御装置において、
前記コマンドは、前記分散先印刷装置に対して、前記分散先印刷装置の占有を求める占有要求であり、
前記コマンドに対する応答は、前記占有要求に応じて前記印刷制御装置に前記分散先印刷装置の占有を許可する場合に送信される許可通知と占有を許可しない場合に送信される不許可通知のいずれかであり、
前記受信状態判定部は、前記許可通知を受信した場合に、前記印刷ジョブ制御部は前記即時受信可能状態であると判定する印刷制御装置。
【請求項１１】
請求項１０に記載の印刷制御装置において、
前記占有要求および許可通知および不許可通知の送受信は、コネクションレス型の通信プロトコルを用いて行われる印刷制御装置。
【請求項１２】
請求項１ないし請求項１１のいずれかに記載の印刷制御装置は、さらに、
前記印刷制御装置と接続されている印刷装置の中から、所定の条件を満たす印刷装置を前記分散先印刷装置として選択する分散先選択部を備え、
前記受信状態判定部は、選択された前記分散先印刷装置の前記印刷ジョブ制御部について、前記即時受信可能状態であるか否かを判定し、
前記印刷ジョブ送信部は、選択された前記分散先印刷装置のうち、所定時間内に前記即時受信可能状態であると判定された前記分散先印刷装置に対して前記印刷ジョブを送信する印刷制御装置。
【請求項１３】
請求項１ないし請求項１１のいずれかに記載の印刷制御装置は、さらに、
前記印刷制御装置と接続されている印刷装置の中から、所定の条件を満たす印刷装置を前記分散先印刷装置として選択する分散先選択部を備え、
前記受信状態判定部は、前記即時受信可能状態であるか否かを判定する処理を、選択された全ての前記分散先印刷装置の前記印刷ジョブ制御部について前記即時受信可能状態であると判定されるまで、繰り返し実行し、
前記印刷ジョブ送信部は、選択された全ての前記分散先印刷装置の前記印刷ジョブ制御部について前記即時受信可能状態であると判定された場合に、選択された全ての前記分散先印刷装置に印刷ジョブを送信する印刷制御装置。
【請求項１４】
請求項１ないし請求項１３のいずれかに記載の印刷制御装置において、
前記印刷制御装置は、前記印刷制御装置と接続されている印刷装置のいずれかに内蔵されている印刷制御装置。
【請求項１５】
請求項１４に記載の印刷制御装置において、
前記印刷制御装置が内蔵されている印刷装置が前記分散先印刷装置とされることを許容する印刷制御装置。
【請求項１６】
印刷装置であって、
請求項１ないし請求項１３のいずれかに記載の印刷制御装置を内蔵する印刷装置。
【請求項１７】
供給された印刷ジョブに応じて印刷を実行する印刷部と、コネクション型のプロトコルを用いる通信を行う第１の通信部であって、前記通信のためのコネクションを複数個同時に保持することが可能である第１の通信部と、前記コネクションを介して前記印刷ジョブを受信して前記印刷部に前記印刷ジョブを供給する印刷ジョブ制御部であって、並行してデータを受信可能なコネクションの数は、前記第１の通信部が同時に保持可能なコネクション数より少なく、前記受信可能な数を超える前記コネクションが保持されている場合には、先に確立された前記コネクションを介して送信されるデータを優先的に受信する印刷ジョブ制御部と、を有する２以上の分散先印刷装置に対して、前記印刷ジョブをそれぞれ送信可能な印刷ジョブ送信方法であって、
２以上の前記分散先印刷装置の前記第１の通信部との間にそれぞれ前記コネクションを確立し、
２以上の前記分散先印刷装置の前記印刷ジョブ制御部が、前記第２の通信部により確立される前記コネクションを介して送信されるデータを直ちに受信可能である即時受信可能状態か否かを判定し、
前記印刷ジョブ制御部が前記即時受信可能状態であると判定された前記分散先印刷装置に対して前記印刷ジョブを送信する印刷ジョブ送信方法。
【請求項１８】
供給された印刷ジョブに応じて印刷を実行する印刷部と、コネクション型のプロトコルを用いる通信を行う第１の通信部であって、前記通信のためのコネクションを複数個同時に保持することが可能である第１の通信部と、前記コネクションを介して前記印刷ジョブを受信して前記印刷部に前記印刷ジョブを供給する印刷ジョブ制御部であって、並行してデータを受信可能なコネクションの数は、前記第１の通信部が同時に保持可能なコネクション数より少なく、前記受信可能な数を超える前記コネクションが保持されている場合には、先に確立された前記コネクションを介して送信されるデータを優先的に受信する印刷ジョブ制御部と、を有する２以上の分散先印刷装置に対して、前記印刷ジョブをそれぞれ送信可能なコンピュータプログラムであって、
２以上の前記分散先印刷装置の前記第１の通信部との間にそれぞれ前記コネクションを確立する第１の機能と、
２以上前記分散先印刷装置の前記印刷ジョブ制御部が、前記第２の通信部により確立される前記コネクションを介して送信されるデータを直ちに受信可能である即時受信可能状態か否かを判定する第２の機能と、
前記印刷ジョブ制御部が前記即時受信可能状態であると判定された前記分散先印刷装置に対して前記印刷ジョブを送信する第３の機能と、
を印刷制御装置に内蔵されたコンピュータに実現させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、印刷ジョブを２以上の印刷装置に分散して、分散印刷を行う技術に関する。
【背景技術】
【０００２】
複数の印刷装置に接続された印刷制御装置が、複数の印刷装置に印刷ジョブを分散する分散印刷システムが知られている（例えば、特許文献１）。上記技術では、印刷すべき部数を複数の印刷装置に適切に配分し、並行して印刷を行うことにより、短時間で複数部数の印刷を完了することができる。
【０００３】
【特許文献１】特開２００１−２７３１１３号公報
【特許文献２】特開２００１−１００９６３号公報
【特許文献３】特開平６−２１４９２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、このような分散印刷システムにおいて、印刷ジョブを複数のパケットに分けて分散する方法がある。この分散方法では、パケットを複数の分散先プリンタに分散する処理を、パケットごとに繰り返し実行することにより、印刷ジョブを分散する。こうすれば、例えば、クライアントとしての計算機からネットワークを介して印刷ジョブを受信し、受信された印刷ジョブを複数の印刷装置に分散する場合に、印刷制御装置が備えるバッファの容量が小さくクライアントとしての計算機から全ての印刷ジョブを一度に受信することができない場合でも、印刷制御装置は、印刷ジョブを分散することができる。
【０００５】
しかしながら、上記従来技術において、上述の分散方法を用いると、分散先の印刷装置によっては円滑な分散印刷が妨げられるおそれがあった。例えば、印刷装置が、印刷ジョブを受信するためのコネクションを複数個同時に保持できる一方で、印刷ジョブは１つずつしか処理できない場合、その印刷装置は、一般的に、先に確立されたコネクションから順番に印刷ジョブを受信し、その印刷ジョブの処理が終了してから次のコネクションからの印刷ジョブを受信する。このような、印刷装置を分散先として、上述した分散方法を用いると、順番待ちの状態にあるコネクションにパケットを送信した場合に、そのパケットが受信されるまで分散処理を停止せざるを得なくなる。
【０００６】
特に、複数の印刷制御装置が共通する複数の印刷装置を分散先として、上述した分散方法により印刷ジョブを分散すると、分散処理が完全に停止してしまうおそれがあった。
【０００７】
本発明は、上記課題を解決するためになされたものであり、円滑な分散印刷処理を実現することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために本発明は、供給された印刷ジョブに応じて印刷を実行する印刷部と、コネクション型のプロトコルを用いる通信を行う第１の通信部であって、前記通信のためのコネクションを複数個同時に保持することが可能である第１の通信部と、前記コネクションを介して前記印刷ジョブを受信して前記印刷部に前記印刷ジョブを供給する印刷ジョブ制御部であって、並行してデータを受信可能なコネクションの数は、前記第１の通信部が同時に保持可能なコネクション数より少なく、前記受信可能な数を超える前記コネクションが保持されている場合には、先に確立された前記コネクションを介して送信されるデータを優先的に受信する印刷ジョブ制御部と、を有する２以上の分散先印刷装置に対して印刷ジョブをそれぞれ送信可能な印刷制御装置を提供する。本発明に係る印刷制御装置は、２以上の前記分散先印刷装置の前記第１の通信部との間に前記コネクションをそれぞれ確立する第２の通信部と、２以上の前記分散先印刷装置の前記印刷ジョブ制御部が、前記第２の通信部により確立される前記コネクションを介して送信されるデータを直ちに受信可能である即時受信可能状態か否かを判定する受信状態判定部と、前記印刷ジョブ制御部が前記即時受信可能状態であると判定された前記分散先印刷装置に対して前記印刷ジョブを送信する印刷ジョブ送信部と、を備えることを要旨とする。
【０００９】
本発明に係る印刷制御装置によれば、送信先の印刷ジョブ制御部が送信された印刷ジョブを直ちに受信できる状態にあるかを判定してから、印刷ジョブを送信するので、印刷制御装置が待機状態になることを回避して、速やかな分散印刷を実現することができる。
【００１０】
本発明に係る印刷制御装置において、前記印刷ジョブを複数のパケットに分割し、前記パケットを２以上の前記分散先印刷装置に対してそれぞれ送信するパケット分散を、前記分割されたパケットごとに繰り返し実行することによって、前記印刷ジョブを２以上の前記分散先印刷装置に対してそれぞれ送信しても良い。パケット分散を繰り返して印刷ジョブを送信する分散印刷では、分散印刷処理が完全に停止するデッドロック（デッドロックについては、詳しく後述する。）が起こり得るが、本発明に係る印刷制御装置によれば、デッドロックを抑制することができる。
【００１１】
本発明に係る印刷制御装置において、前記印刷制御装置と接続された計算機から前記印刷ジョブを前記パケットごとに受信し、前記受信されたパケットが前記印刷ジョブ送信部により前記分散先印刷装置に送信されたことが確認された後に、次に送信されるべき前記パケットを前記計算機から受信しても良い。
【００１２】
かかる場合には、分散先印刷装置が１つでもパケットを受信しなければ分散印刷処理が停止するが、送信先の印刷ジョブ制御部が送信された印刷ジョブを直ちに受信できる状態にあるかを判定してから印刷ジョブを送信するので、分散印刷処理の停止を抑制することができる。
【００１３】
本発明に係る印刷制御装置において、２以上の前記印刷制御装置と、前記２以上の前記印刷制御装置のそれぞれが前記印刷ジョブの分散先として指定可能な２以上の前記分散先印刷装置とを含む分散印刷システムに用いられても良く、２以上の前記分散先印刷装置と２以上の前記印刷制御装置とを含む分散印刷システムであって、前記第１の通信部と前記第２の通信部との間に確立される前記コネクションによって前記分散先印刷装置と前記印刷制御装置とを結ぶ閉じた環を形成可能な分散印刷システムに用いられても良い。このようなデッドロックが起こりえるシステムにおいて、デッドロックの発生を防止することができる。
【００１４】
本発明に係る印刷制御装置において、前記受信状態判定部は、前記分散先印刷装置に応答を要求するコマンドを送信するコマンド送信部と、前記分散先印刷装置から前記コマンドに対する応答を受信するための応答受信部と、を備え、前記受信状態判定部は、前記コマンドに対する応答に応じて、前記印刷ジョブ制御部が前記即時受信可能状態であるか否かを判定しても良い。こうすれば、コマンドの送受信によって即時受信可能状態か否かを容易に判定することができる。
【００１５】
本発明に係る印刷制御装置において、前記コマンドは、前記確立されたコネクションを介して前記印刷ジョブ制御部に送信されると共に前記印刷ジョブ制御部が前記即時受信可能状態である場合に受信されるコマンドであり、前記コマンドに対する応答は、前記コマンドが前記印刷ジョブ制御部によって受信された場合に、前記コマンドの送信に用いられたコネクションを介して返信され、前記受信状態判定部は、前記コマンドに対する応答を受信した場合に、前記印刷ジョブ制御部は前記即時受信可能状態であると判定しても良い。こうすれば、コマンドに対する応答の有無により、容易に即時受信可能状態であるか否かを判定することができる。
【００１６】
本発明に係る印刷制御装置において、前記印刷ジョブ送信部は、前記コマンドに対する応答の受信に用いられた前記コネクションを介して、前記印刷ジョブを送信しても良い。こうすれば、コマンドの応答に用いられたコネクションを介して印刷ジョブを送信するので、印刷ジョブ制御部に印刷ジョブを確実に受信させることができる。
【００１７】
本発明に係る印刷制御装置において、前記コマンドは、前記印刷ジョブの少なくとも一部を記述するための言語を用いて記述されていても良い。こうすれば、印刷ジョブを解釈できる分散先印刷装置であればコマンドを解釈することができるので、分散先印刷装置が特別な機能を備えていなくとも、即時受信可能状態であるか否かを判定することができる。
【００１８】
本発明に係る印刷制御装置において、前記コマンドは、前記分散先印刷装置に対して、前記分散先印刷装置の占有を求める占有要求であり、前記コマンドに対する応答は、前記占有要求に応じて前記印刷制御装置に前記分散先印刷装置の占有を許可する場合に送信される許可通知と占有を許可しない場合に送信される不許可通知のいずれかであり、前記受信状態判定部は、前記許可通知を受信した場合に、前記印刷ジョブ制御部は前記即時受信可能状態であると判定しても良い。こうすれば、印刷ジョブの送信に先立って、分散印刷装置の占有を確保するので、印刷ジョブの送信前に確実に印刷ジョブ制御部は即時受信可能状態であると判定できる。
【００１９】
本発明に係る印刷制御装置において、前記占有要求および許可通知および不許可通知の送受信は、コネクションレス型の通信プロトコルを用いて行われても良い。こうすれば、コネクションを分散印刷装置との間に確立しなくても、簡易で高速なコネクションレス型のプロトコルを用いて印刷ジョブ制御部は即時受信可能状態であると判定できる。
【００２０】
本発明に係る印刷制御装置は、さらに、前記印刷制御装置と接続されている印刷装置の中から、所定の条件を満たす印刷装置を前記分散先印刷装置として選択する分散先選択部を備え、前記受信状態判定部は、選択された前記分散先印刷装置の前記印刷ジョブ制御部について、前記即時受信可能状態であるか否かを判定し、前記印刷ジョブ送信部は、選択された前記分散先印刷装置のうち、所定時間内に前記即時受信可能状態であると判定された前記分散先印刷装置に対して前記印刷ジョブを送信しても良い。こうすれば、所定時間内に即時受信可能状態であると判定された前記分散先印刷装置にのみ前記印刷ジョブを送信するので、より速やかに分散印刷処理を実行することができる。
【００２１】
本発明に係る印刷制御装置は、さらに、前記印刷制御装置と接続されている印刷装置の中から、所定の条件を満たす印刷装置を前記分散先印刷装置として選択する分散先選択部を備え、前記受信状態判定部は、前記即時受信可能状態であるか否かを判定する処理を、選択された全ての前記分散先印刷装置の前記印刷ジョブ制御部について前記即時受信可能状態であると判定されるまで、繰り返し実行し、前記印刷ジョブ送信部は、選択された全ての前記分散先印刷装置の前記印刷ジョブ制御部について前記即時受信可能状態であると判定された場合に、選択された全ての前記分散先印刷装置に印刷ジョブを送信しても良い。こうすれば、選択された分散先印刷装置に確実に分散印刷を実行させることができる。
【００２２】
本発明に係る印刷制御装置において、前記印刷制御装置は、前記印刷制御装置と接続されている印刷装置のいずれかに内蔵されていても良い。かかる場合において、前記印刷制御装置が内蔵されている印刷装置が前記分散先印刷装置とされることを許容しても良い。
【００２３】
なお、本発明は、上記した印刷制御装置としての構成の他、その印刷制御装置を内蔵する印刷装置としても構成することができる。また、そのような装置発明の態様に限ることなく、印刷ジョブ送信方法などの方法発明としての態様で実現することも可能である。さらには、それら方法や装置を構築するためのコンピュータプログラムとしての態様や、そのようなコンピュータプログラムを記録した記録媒体としての態様や、上記コンピュータプログラムを含み搬送波内に具現化されたデータ信号など、種々の態様で実現することも可能である。
【発明を実施するための最良の形態】
【００２４】
以下、本発明に係る印刷制御装置および印刷装置について、図面を参照しつつ、実施例に基づいて説明する。
【００２５】
Ａ．第１実施例：
・分散印刷システムの構成：
図１および図２を参照して、本発明の第１実施例における分散印刷システムの構成について説明する。図１は、本発明の第１実施例における分散印刷システムの概略構成を示す説明図である。図２は、第１実施例における分散印刷システムを構成する各機器の内部構成を示すブロック図である。
【００２６】
この分散印刷システムは、図１に示すように、クライアントとしての複数の計算機（以下、単にクライアントという。）ＣＬａ、ＣＬｂと、複数のプリンタＰＲＴ１〜ＰＲＴ４を含む。クライアントＣＬａ、ＣＬｂと、プリンタＰＲＴ１〜ＰＲＴ４は、ローカルエリアネットワーク（ＬＡＮ）を介して互いに接続されている。各機器間の通信は、ＴＣＰ／ＩＰプロトコルを用いて行われるため、各機器にはそれぞれＩＰアドレスが割り振られる。説明の便宜上、クライアントＣＬａ、ＣＬｂにはそれぞれ「ＩＰａ」「ＩＰｂ」、プリンタＰＲＴ１〜ＰＲＴ４には、それぞれ「ＩＰ１」〜「ＩＰ４」なるＩＰアドレスが設定されているものとする。なお、厳密に言えば、これらＩＰアドレスは、クライアントＣＬａ、ＣＬｂ，プリンタＰＲＴ１〜ＰＲＴ４自体に設定されているわけではなく、ＴＣＰ／ＩＰのネットワークから見た場合のノード（すなわち、具体的には、ＴＣＰ／ＩＰ通信を行うためにネットワークに接続されているネットワークボードなど）に設定されている。
【００２７】
これらプリンタのうち、プリンタＰＲＴ１およびＰＲＴ４には、カスタムネットワークボード１００がそれぞれ取り付けられている。このカスタムネットワークボード１００は、クライアントＣＬａ、ＣＬｂから受信した印刷ジョブを他のプリンタに分散して、分散印刷を実行するための分散印刷制御機能を備えており、請求項における印刷制御装置に相当する。プリンタＰＲＴ２およびＰＲＴ３には、それぞれ、標準のネットワークボード２００が取り付けられている。
【００２８】
図１において、実線で示す矢印は、クライアントＣＬａからプリンタＰＲＴ１のカスタムネットワークボード１００に印刷ジョブが送信され、プリンタＰＲＴ１のカスタムネットワークボード１００からプリンタＰＲＴ１〜ＰＲＴ４にその印刷ジョブが分散される様子を概念的に示している。破線で示す矢印は、クライアントＣＬｂからプリンタＰＲＴ４のカスタムネットワークボード１００に印刷ジョブが送信され、プリンタＰＲＴ４のカスタムネットワークボード１００からプリンタＰＲＴ１〜ＰＲＴ４にその印刷ジョブが分散される様子を概念的に示している。このように、プリンタＰＲＴ１〜ＰＲＴ４は、プリンタＰＲＴ１およびプリンタＰＲＴ２のカスタムネットワークボード１００のいずれからも分散印刷の分散先とされ得る。以下において、各プリンタＰＲＴ１〜ＰＲＴ４を区別する必要のない場合には、符号の末尾の数字を省略しプリンタＰＲＴともいう。また、クライアントＣＬａ、ＣＬｂを区別する必要のない場合には、符号の小文字の英字を省略しクライアントＣＬともいう。
【００２９】
プリンタＰＲＴ１は、図２に示すように、プリンタ本体ＰＲＢ１と、上述したカスタムネットワークボード１００とを備えている。プリンタ本体ＰＲＢ１は、主として、プリンタエンジン９０と、プリンタコントローラ８０とを備えている。プリンタエンジン９０は、実際に印刷を行う機構部分である。プリンタコントローラ８０は、後述する印刷ジョブ制御部６０から供給される印刷ジョブデータを受け取り、その印刷ジョブを解釈してプリンタエンジン９０を制御し、印刷を実行させる。プリンタコントローラ８０は、印刷ジョブに応答を要求するコマンド（例えば、後述する判定コマンド）が含まれている場合には、必要な応答を印刷ジョブ制御部６０に送信することができる。プリンタコントローラ８０は、並行して複数の印刷ジョブを処理することはできず、１つずつ印刷ジョブを受け取って処理することしかできない。プリンタコントローラ８０は、供給された印刷ジョブデータを一時的に格納するプリンタバッファ８２を備えている。また、プリンタコントローラ８０は、プリンタ本体ＰＲＢ１に関する種々の情報を収集してＭＩＢ(Management Information Base)と呼ばれる形式で保存したファイル（以下、ＭＩＢファイルという。）８１を格納している。ＭＩＢファイル８１には、種々の情報がオブジェクト単位で保存され、オブジェクトごとに、オブジェクトＩＤ（以下、ＯＩＤという。）が割り振られている。
【００３０】
カスタムネットワークボード１００は、主として、中央演算装置（ＣＰＵ）２０と、メモリ３０とを備えている。また、この他、実際にネットワーク通信を行うための通信用インタフェースなども備えているが、説明の便宜上、省略している。
【００３１】
ＣＰＵ２０は、メモリ３０より、上記した分散印刷を実行するためのソフトウェアなどのプログラムを読み出して、実行することにより、図示した各機能ブロックをソフトウエア的に実現する。なお、各機能ブロックをハードウェア的に構築しても構わない。
【００３２】
ＣＰＵ２０によって実現される機能ブロックには、ＴＣＰ／ＩＰ部１０と、分散制御部５０と、印刷ジョブ制御部６０と、ＳＮＭＰマネージャ４０と、ＳＮＭＰエージェント７０が含まれる。
【００３３】
ＴＣＰ／ＩＰ部１０は、ＴＣＰ／ＩＰプロトコルを解釈して、主としてネットワークを介して外部との通信を行う。ＴＣＰ／ＩＰプロトコルにおいてトランスポート層の処理を行うプロトコルとして、ＴＣＰ（Transmission Control Protocol）とＵＤＰ（User Datagram Protocol）がある。ＴＣＰは、信頼性の高いコネクション型の通信を実現するプロトコルである。一方、ＵＤＰは、高速なコネクションレス型の通信を実現するプロトコルである。ＴＣＰ／ＩＰ部１０は、後述する印刷ジョブの通信を、ＴＣＰを用いて行うと共に、後述するＳＮＭＰマネージャ４０とＳＮＭＰエージェント７０間の通信を、ＵＤＰを用いて行う。
【００３４】
分散制御部５０は、分散印刷を指定した印刷ジョブ（以下、分散印刷ジョブともいう。）を受信して、分散先に印刷ジョブを分散する。分散制御部５０は、サブ機能ブロックとして分散先選択部５２と、受信状態判定部５４と、印刷ジョブ送信部５６とを備えている。分散先選択部５２は、カスタムネットワークボード１００と接続されているプリンタの中から印刷ジョブの分散先となるプリンタ（以下、分散先プリンタという。）を選択する。受信状態判定部５４は、分散先プリンタが直ちに印刷ジョブを受信可能な状態にあるか否かを判定する。受信状態判定部５４は、さらに、受信可能な状態にあるか否かの判定に用いるコマンドを送信するコマンド送信部５４１と、送信されたコマンドに対する応答を受信する応答受信部５４２とを備える。印刷ジョブ送信部５６は、直ちに印刷ジョブを受信可能と判定された分散先プリンタに対して印刷ジョブを送信する。以上のような分散制御部５０が実行する処理については、さらに後述する。
【００３５】
印刷ジョブ制御部６０は、分散印刷を指定していない通常の印刷ジョブ（以下、通常印刷ジョブという。）を受信してプリンタコントローラ８０に供給する。また、印刷ジョブ制御部６０は、プリンタコントローラ８０から印刷ジョブに含まれるコマンドに対する応答を受信して応答を印刷ジョブの送信元に送信する応答部６１を備えている。
【００３６】
ＳＮＭＰマネージャ４０は、ＳＮＭＰ（Simple Network Management Control Protocol）と呼ばれる通信プロトコルを用いて、各プリンタＰＲＴ１〜ＰＲＴ４が備えるＳＮＭＰエージェント７０に問い合わせて、各種の情報を取得する。ＳＮＭＰマネージャ４０は、上述したＯＩＤを指定することにより取得すべき情報を特定して問い合わせを行う。
【００３７】
ＳＮＭＰエージェント７０は、ＳＮＭＰマネージャ４０の問い合わせに応じて、上述したＭＩＢファイルから所望の情報を取得し、ＳＮＭＰマネージャ４０にその情報を送信する。
【００３８】
一方、メモリ３０は、上述の各機能を実現するためのプログラムを格納する他、ＯＩＤ格納部３２、分散先指定ファイル格納部３４、バッファ３６を備えている。ＯＩＤ格納部３２には、ＳＮＭＰマネージャ４０が上述した問い合わせを行う際に指定するＯＩＤが格納されている。ＯＩＤは、問い合わせ可能な情報の種類と関連付けられて格納されており、ＳＮＭＰマネージャ４０は、ＯＩＤ格納部３２を参照して指定すべきＯＩＤを取得することができる。分散先指定ファイル格納部３４は、分散先指定ファイルを格納する。この分散先指定ファイルは、ＬＡＮに接続されている複数のプリンタの中で、分散印刷における分散先として使用したいプリンタを、前もって、指定して限定しておきたい場合に用いる。従って、そのような指定が不要な場合には、分散先指定ファイル格納部３４には何も格納されない。バッファ３６は、受信した印刷ジョブデータを一時的に格納するための格納部である。
【００３９】
プリンタＰＲＴ２は、図２に示すように、プリンタ本体ＰＲＢ２および上述したネットワークボード２００を備えている。プリンタ本体ＰＲＢ２の構成は、上述したプリンタＰＲＴ１のプリンタ本体ＰＲＢ１と同一の構成を有しているので、各構成要素にプリンタＰＲＴ１のプリンタ本体ＰＲＢ１の構成要素と同一の符号を付しその説明を省略する。ネットワークボード２００は、上述したカスタムネットワークボード１００が有する機能のうち、分散印刷制御機能を除く機能を有している。すなわち、ネットワークボード２００は、ＴＣＰ／ＩＰ部１０と、印刷ジョブ制御部６０と、ＳＮＭＰエージェント７０とを有している。ネットワークボード２００の各構成要素は、カスタムネットワークボード１００の同名の構成要素と同様の機能や構成を有しているのでその説明を省略する。
【００４０】
ここで、上記説明から解るように、プリンタＰＲＴ１およびＰＲＴ４に搭載されたカスタムネットワークボード１００は、プリンタＰＲＴ２およびプリンタＰＲＴ３に搭載されたネットワークボード２００の備える機能を全て備えている。すなわち、ネットワークボード２００の分散制御部５０からみて、プリンタＰＲＴ１〜プリンタＰＲＴ４は、全て等価であり、後述する分散印刷処理において全て分散先プリンタとして指定され得る。分散制御部５０は、分散制御部５０自体が内蔵されているプリンタＰＲＴ１についても、他のプリンタについても区別なく扱うことができる。
【００４１】
クライアントＣＬａは、図２に示すように、アプリケーション１１の他、機能ブロックとして、ＴＣＰ／ＩＰ部１３と印刷ジョブ送信部１２とを有している。ＴＣＰ／ＩＰ部１３は、上述したカスタムネットワークボード１００のＴＣＰ／ＩＰ部１０と同様の機能および構成を有している。印刷ジョブ送信部１２は、アプリケーション１１の印刷要求に応じて印刷ジョブを生成し、ＴＣＰ／ＩＰ部１３を介して生成された印刷ジョブをプリンタＰＲＴに送信する。なお、分散印刷を指定する分散印刷ジョブは、カスタムネットワークボード１００を備えるプリンタＰＲＴ１およびＰＲＴ４にのみ送信することができ、分散印刷を指定しない通常印刷ジョブは、プリンタＰＲＴ１〜ＰＲＴ４のいずれにも送信することができる。
【００４２】
プリンタＰＲＴ４は、上述したプリンタＰＲＴ１と同様の構成を有し、プリンタＰＲＴ３は、上述したプリンタＰＲＴ２と同様の構成を有している。クライアントＣＬｂは、上述したクライアントＣＬａと同様の構成を有している。これらについては、詳しい説明を省略する。
【００４３】
・プリンタによる通常印刷ジョブの受信：
分散印刷処理を説明する前に、図３を参照して、プリンタＰＲＴによる通常印刷ジョブの受信について説明する。図３は、通常印刷ジョブの受信について説明する説明図である。図３（ａ）は、印刷ジョブの通信に用いられる通信データの構成を概念的に示す説明図である。図３（ｂ）（ｃ）は、複数のコネクションが保持されている場合における印刷ジョブの受信について説明する概念図である。
【００４４】
印刷ジョブは、ＴＣＰ／ＩＰプロトコルに従った形式の通信データとして送信される。この通信データは、図３（ａ）に示すように、ヘッダ４００と、データ部４５０とに分かれている。このうち、ヘッダ４００には、その通信データの送信元である機器のＩＰアドレス（送信元ＩＰアドレス）と、その機器内における送信元であるソフトウェアを特定するポート番号（送信元ポート番号）と、を含む他、その通信データの送信先である機器のＩＰアドレス（送信先ＩＰアドレス）と、その機器内における送信先であるソフトウェアを特定するポート番号（送信先ポート番号）とを含んでいる。送信元である機器のソフトウェアから発信された通信データは、送信先ＩＰアドレスに従って、そのＩＰアドレスを有する機器に送信され、さらに、受信したその機器内では、送信先ポート番号に従って、その番号のポートで待機しているソフトウェアに渡される。データ部４５０は、送受信の対象となるデータが格納される部分であり、例えば、印刷ジョブデータが格納される。
【００４５】
例えば、クライアントＣＬａからプリンタＰＲＴ２に通常印刷ジョブを送信する場合、通信データのヘッダ４００には、上述した送信先ＩＰアドレスとして「ＩＰ２」が、送信先ポート番号として「９１００」がそれぞれ記載される。「９１００」は、通常印刷ジョブの受信を行う印刷ジョブ制御部６０が待機しているポート番号である。また、ヘッダ４００には、送信元ＩＰアドレスとして「ＩＰａ」が、送信元ポート番号として印刷ジョブ送信部１２が待機しているポート番号（具体的な数字は省略）が記載される。
【００４６】
さらに具体的に順を追って説明する。クライアントＣＬのアプリケーション１１が印刷を指示すると、クライアントＣＬの印刷ジョブ送信部１２は印刷プロトコルに従い、ＴＣＰ／ＩＰ部１３を介して印刷ジョブデータを送信する。本実施例では、印刷プロトコルとして無手順プロトコルを用いている。クライアントＣＬのＴＣＰ／ＩＰ部１３は、印刷ジョブデータの送信に先立って、コネクション型の通信プロトコルであるＴＣＰに従って、送信先であるプリンタＰＲＴのＴＣＰ／ＩＰ部１０との間にコネクションを確立する。
【００４７】
コネクションを確立するとは、２つのプロセス（本実施例では、印刷ジョブ送信部１２と印刷ジョブ制御部６０）間でデータ通信を行うための仮想的な通信路を形成することをいう。以下、このような仮想的な通信路をコネクションと呼ぶ。こうすることで信頼性の高い双方向のストリーム転送を行うことができる。すなわち、確立されたコネクションを介して印刷ジョブを送信すれば、送信中にデータの順番が入れ替わったり、データが欠落したりすることを抑制することができる。
【００４８】
図３（ｂ）は、３つのクライアントＣＬａ〜ＣＬｃとが、並行して、１つのプリンタＰＲＴ２に印刷ジョブを送信しようとする様子を概念的に示している。記号ＣＮ１〜ＣＮ３と、クライアントＣＬａ〜ＣＬｃのＴＣＰ／ＩＰ部１３とプリンタＰＲＴ２のＴＣＰ／ＩＰ部１０との間で確立されたコネクションを示しており、符号の末尾の数字は、コネクションが確立された時間的な順番を示している。すなわち、クライアントＣＬａのＴＣＰ／ＩＰ部１３が１番先に、クライアントＣＬｃのＴＣＰ／ＩＰ部１３が２番目に、クライアントＣＬｂのＴＣＰ／ＩＰ部１３が３番目に、それぞれプリンタＰＲＴ２のＴＣＰ／ＩＰ部１０とコネクションを確立したことを示している。
【００４９】
このように、プリンタＰＲＴのＴＣＰ／ＩＰ部１０は、複数のコネクションを確立し、同時に保持することができるように構成されている。本実施例では、最大８つのコネクションを保持することができる。これは、１つのコネクションしか保持できないとすると、プリンタＰＲＴに複数のクライアントが並行して印刷ジョブを送信しようとした場合に、２番目以降にプリンタＰＲＴとコネクションを確立しようとしたクライアントＣＬがプリンタＰＲＴを認識することができないためである。クライアントＣＬは、プリンタＰＲＴを認識することができないと、プリンタＰＲＴに電源が投入されていないと判断したり、プリンタＰＲＴとの物理的な接続が切断されていると判断したりする場合があり、不都合を生じるおそれがある。
【００５０】
一方で、プリンタＰＲＴの印刷ジョブ制御部６０は、１つのコネクションから、１つずつ印刷ジョブを受信するように構成されている。プリンタコントローラ８０は並行して複数の印刷ジョブを処理することができないため、印刷ジョブ制御部６０はプリンタコントローラ８０に１つずつ印刷ジョブデータを供給する必要があるからである。上述したように印刷ジョブ制御部６０は、先に確立されたコネクションを介して送信される印刷ジョブを優先して受信する。図３（ｂ）に示す具体例では、プリンタＰＲＴ２の印刷ジョブ制御部６０は、最初に確立されたコネクションＣＮ１を介して、クライアントＣＬａから送信される印刷ジョブを、最初に受信する。印刷ジョブ制御部６０は、印刷プロトコルに従って、受信された印刷ジョブをプリンタ本体ＰＲＢ２に供給する。印刷ジョブ制御部６０がクライアントＣＬａから送信される印刷ジョブを受信している間、他のクライアントＣＬｂ、ＣＬｃは、コネクションＣＮ３、２を保持したまま、待機させられる。さらに、詳しく説明するとＴＣＰプロトコルを用いた通信では、データのフロー制御（データの流れを許可したり禁止したりする制御）がなされており、コネクションを介してＴＣＰ／ＩＰ部１０の上位アプリケーションである印刷ジョブ制御部６０が印刷ジョブを受信しない（ＴＣＰ／ＩＰ部１０から受け取らない）場合は、ＴＣＰ／ＩＰ部１０はフロー制御によりデータの流れを禁止する。すなわち、送信元のＴＣＰ／ＩＰ部（この例ではクライアントＣＬｂ、ＣＬｃのＴＣＰ／ＩＰ部１３）に対して、データを送信しないように通知する。この状態では、クライアントＣＬｂ、ＣＬｃは、データを送信することができず、データの送信が許可されるまで待機することになる。以下、このような状態を待機状態という。
【００５１】
そして、印刷ジョブ制御部６０がクライアントＣＬａから送信される印刷ジョブを全て受信すると、ＴＣＰ／ＩＰ部１０は、コネクションＣＮ１を終了する。コネクションＣＮ１が終了された後、図３（ｃ）に示すように、印刷ジョブ制御部６０は、２番目に確立されたコネクションＣＮ２を介して、クライアントＣＬｃから印刷ジョブを受信する。印刷ジョブ制御部６０がコネクションＣＮ２を介して送信されてきた印刷ジョブを受信する（ＴＣＰ／ＩＰ部１０から受け取る）ようになると、ＴＣＰ／ＩＰ部１０は上述したフロー制御によりデータの流れを許可する。すなわち、ＴＣＰ／ＩＰ部１０は、送信元のＴＣＰ／ＩＰ部１０に、データの送信を許可する。こうして、クライアントＣＬｃは、待機状態から解放されて、印刷ジョブを送信できるようになる。
【００５２】
このように、印刷ジョブ制御部６０が、コネクションが確立された順番に印刷ジョブを順次受信し、プリンタ本体ＰＲＢ２のプリンタコントローラ８０に受信された印刷ジョブを順次供給することによって、クライアントのアクセス順に印刷が順次実行される。
【００５３】
以上の説明から解るように、印刷ジョブ制御部６０が印刷ジョブを受信するためのコネクションを確立するＴＣＰ／ＩＰ部１０は、請求項における第１の通信部に相当する。
【００５４】
・分散印刷処理：
次に、分散印刷処理について詳細に説明する。分散印刷を行う際には、ユーザは、クライアント（例えば、クライアントＣＬａ（図１））におけるプリンタドライバにおいて、印刷プロトコルの設定が、無手順プロトコルに設定されていることを確認した上で、ポート番号の設定を、通常の「９１００」から特定の「５９１００」または「５９１０１」に変更する。すなわち、本実施例では、ここでのポート番号の設定を切り換えることにより、通常の「９１００」では通常印刷を、特定の「５９１００」または「５９１０１」では分散印刷を、それぞれ選択することになる。また、本実施例では、分散印刷として２種類のモードを選択することができる。１つは、部数分割型の分散印刷モード（以下、分割モードという。）であり、もう１つは、複製作成型の分散印刷モード（以下、複製モードという。）である。これら２つのモードはポート番号の設定によって選択される。ユーザは、分割モードを選択する際には、ポート番号を「５９１００」に設定し、複製モードを選択する際には、ポート番号を「５９１０１」に設定する。
【００５５】
分割モードは、指定された印刷部数を、分散先のプリンタに配分して印刷する分散印刷モードである。例えば、分割モードでは、印刷部数を１００部とした分散印刷ジョブを受信した場合に、印刷部数を２５部とした通常印刷ジョブをプリンタＰＲＴ１〜ＰＲＴ４にそれぞれ送信して印刷させることによって、合計として１００部の印刷を行う。分割モードでは、指定された印刷部数を速やかに印刷することが重視される。
【００５６】
複製モードは、指定された印刷部数を分散先のプリンタにおいて、それぞれ印刷する分散印刷モードである。例えば、複製モードでは、印刷部数を１部とした分散印刷ジョブを受信した場合に、印刷部数を１部とした通常印刷ジョブをプリンタＰＲＴ１〜ＰＲＴ４にそれぞれ送信して印刷させることによって、合計として４部の印刷を行う。複製モードでは、速やかに印刷を行うことよりも、多くの分散先のプリンタにおいて確実に印刷を実行することが重視される。
【００５７】
図４は、分散印刷処理の処理ルーチンを示す第１のフローチャートである。分散印刷処理は、カスタムネットワークボード１００のＣＰＵ２０が備える分散制御部５０によって実行される処理である。カスタムネットワークボード１００が搭載されたプリンタ（例えば、プリンタＰＲＴ１）が印刷ジョブを受け付ける状態にあるとき、分散制御部５０は、ポート番号「５９１００」または「５９１０１」に印刷ジョブが着信したか否かを常に監視している（ステップＳ１０２）。例えば、クライアントＣＬａから印刷ジョブを含む通信データがプリンタＰＲＴ１に着信すると、ＴＣＰ／ＩＰ部１０が着信した通信データに含まれる送信先ポート番号を取得する。送信先ポート番号が「５９１００」または「５９１０１」である場合には、ＴＣＰ／ＩＰ部１０は、通信データから印刷ジョブを取り出して、順次、分散制御部５０に渡す。分散制御部５０は、ＴＣＰ／ＩＰ部１０から送信先ポート番号が「５９１００」宛のデータとして印刷ジョブを受け取った場合には、分割モードを実行する処理（ステップＳ１０４〜）に移行する。分散制御部５０は、ＴＣＰ／ＩＰ部１０から送信ポート番号が「５９１０１」宛のデータとして印刷ジョブを受け取った場合には、複製モードを実行する処理（図８）に移行する。なお、分散制御部５０は、受け取った印刷ジョブを、バッファ３６に一時的に格納しておく。
【００５８】
ここで、印刷ジョブは、所定の形式を有するデータ（以下、印刷ジョブデータという。）として構成されている。図５は、印刷ジョブデータについて説明する説明図である。図５（ａ）は、印刷ジョブデータの構成を概念的に示している。図５（ｂ）は、一例として印刷ジョブのデータをエディタで開いて示した説明図である。図５（ｃ）は、印刷ジョブデータがパケットに分けられた様子を概念的に示す図である。印刷ジョブデータ５００は、図５（ａ）（ｂ）に示すように、ジョブ制御言語部５０１と、ページ記述言語部５０２を有している。ページ記述言語部５０２は、印刷内容が所定のページ記述言語を用いて記述されている部分である。ページ記述言語としては、ESC/PageやPostscriptなどが用いられ得る。ジョブ制御言語部５０１は、印刷部数、印刷用紙サイズ、ページ記述言語部５０２の記述に使用されているページ記述言語の種別を始め、ページ記述言語部５０２に記述された印刷内容を印刷するために必要な属性が記述されている。ジョブ制御言語部５０１は、所定のジョブ制御言語、本実施例ではＥＪＬ（Epson Job Language）を用いて記述されている。
【００５９】
印刷ジョブデータの大きさは、一部あたりの印刷量に応じて大きくなるのに対し、バッファ３６の大きさは限られているので、実際には、印刷ジョブデータ５００は、バッファ３６より小さなデータの固まり（以下、パケットという。）に分割してクライアントから取得される。図３（ｃ）では、印刷ジョブデータ５００は、各パケットＰ１〜Ｐ８に分けられている。上述したステップＳ１０２で印刷ジョブが着信した時点では、パケットＰ１のみが取得され、バッファ３６に格納されている。
【００６０】
図４に戻って、説明を続ける。説明の便宜上、先に分割モードを実行する処理から先に説明し、複製モードを実行する処理については後述する。分割モードを実行する処理が開始されると、分散制御部５０の分散先選択部５２は、分散先プリンタ選択処理を実行する（ステップＳ１０４）。
【００６１】
図６は、分散先プリンタ選択処理の処理ルーチンを示すフローチャートである。分散先プリンタ選択処理が開始されると、分散先選択部５２は、ネットワーク上に接続された機器のＩＰアドレスを取得する（ステップＳ２０２）。分散先選択部５２は、分散先指定ファイル格納部３４に分散先指定ファイルが格納されている場合には、分散先指定ファイルを参照して、ＩＰアドレスを取得する。分散先指定ファイルには、分散先として使用したいプリンタのＩＰアドレスが列挙して記載されている。このような分散先指定ファイルは、例えば、サービスマンが、プリンタＰＲＴ１を設置して初期設定する際に、そのプリンタＰＲＴ１に設定用コンピュータなどを接続して、インストールすることにより、分散先指定ファイル格納部３４に格納することができる。また、ＬＡＮを介してインストールするようにしてもよい。なお、このような分散先指定ファイルを用いる場合、分散先として自己のプリンタＰＲＴ１も使用したい場合には、自己プリンタＰＲＴ１のＩＰアドレス「ＩＰ１」も、分散先指定ファイルに記載しておく必要がある。
【００６２】
一方、分散先指定ファイルが格納されていない場合には、分散先選択部５２は、ＳＮＭＰマネージャ４０を用いて、ＬＡＮに対し、ブロードキャストでＬＡＮに接続されている各機器のＩＰアドレスを問い合わせ、応答されたＩＰアドレスを取得する。
【００６３】
次に、分散先選択部５２は、取得されたＩＰアドレスを割り当てられた各機器に関する情報を取得する（ステップＳ２０４）。具体的には、分散先選択部５２は、ＳＮＭＰマネージャ４０を用いて、マルチキャストで各機器に対して問い合わせを行い、問い合わせの応答として機種名およびステータスを取得する。
【００６４】
分散先選択部５２は、取得された機種名およびステータスに基づいて、ネットワーク上に接続された機器の中から所定の条件を満たすプリンタを検索し、検索されたプリンタを分散先プリンタとして選択する（ステップＳ２０６）。分割モードの場合における所定の条件を、以下に示す。
１．自己プリンタＰＲＴ１と同一の機種であること。
２・電源が投入されていること。
３．トナー残量が所定の閾値以上であること。
４．オンライン状態にあること。
５．印刷中でないこと（プリンタエンジン９０が駆動中でないこと）。
【００６５】
これらの項目についての情報は、全て上述のＳＮＭＰマネージャ４０による問い合わせによって、取得することができる。自己プリンタＰＲＴ１と同一機種であることを、分散先プリンタとして選択する条件とするのは、分散印刷を行う際に、各分散先プリンタにおいて、印刷ジョブのデータ変換などをすることなく、適正な印刷を行わせるためである。この結果、各分散先プリンタでの印刷物の品質、例えば、解像度やフォントなどを統一することができる。カラー印刷や両面印刷指定も統一して実行する。分散先指定ファイルで指定されているＩＰアドレスの機器に対しても、機種名の問い合わせを行うのは、次の理由による。すなわち、分散先指定ファイル作成後に、機器の入れ換えなどにより、分散先指定ファイルに記載されていたＩＰアドレスが、自己のプリンタＰＲＴ１と別機種のプリンタに割り振られたり、プリンタ以外の機器に割り振られたりする可能性があるので、自己のプリンタＰＲＴ１と同一機種であるかの確認を行うためである。
【００６６】
２〜５の条件は、すぐに印刷できないプリンタを分散先プリンタとして選択することを防ぐためである。オンライン状態とは、用紙切れや紙詰まりといったエラーを起こしている状態（オフライン状態）ではない正常な状態のことを指す。
【００６７】
そして、分散先選択部５２は、１台以上の分散先プリンタが選択されたか否かを判断する（ステップＳ２０８）。一台以上選択されている場合（ステップＳ２０８：ＹＥＳ）には、分散先選択部５２は分散先プリンタ選択処理を終了する。一台の分散先プリンタも選択されていない場合（ステップＳ２０８：ＮＯ）には、分散先選択部５２は、所定期間待機して（ステップＳ２１０）、ステップＳ２０２〜ステップＳ２０８の処理を繰り返す。本実施例では、分散先プリンタとして、上述したプリンタＰＲＴ１〜ＰＲＴ４の一部または全部が分散先プリンタとして選択されるものとする。
【００６８】
分散先プリンタが選択されると、分散制御部５０は、選択された各分散先プリンタとの間に、分散制御部５０から分散先プリンタの印刷ジョブ制御部６０に印刷ジョブを送信するためのコネクションを確立する（ステップＳ１０６）。具体的には、分散制御部５０は、カスタムネットワークボード１００のＴＣＰ／ＩＰ部１０に、分散先プリンタのＴＣＰ／ＩＰ部１０との間で、コネクションの確立処理を行わせる。カスタムネットワークボード１００から分散先プリンタへの第１の確立要求を示すＴＣＰパケット（ＳＹＮパケット）と、第１の確立要求に対する受信確認と分散先プリンタからカスタムネットワークボード１００への第２の確立要求とを兼ねるＴＣＰパケット（ＡＣＫ／ＳＹＮパケット）と、第２の確立要求に対する受信確認を示すＴＣＰパケット（ＡＣＫパケット）とが、２つのＴＣＰ／ＩＰ部１０間において、順次やり取りされると、コネクションが確立される。以上の説明から解るように、分散制御部５０が印刷ジョブを送信するためのコネクションを確立するＴＣＰ／ＩＰ部１０が請求項における第２の通信部に相当する。
【００６９】
受信状態判定部５４のコマンド送信部５４１は、確立された各コネクションを介して、各分散先プリンタに判定コマンドを送信する（ステップＳ１０８）。本実施例では、判定コマンドとして、上述したジョブ制御言語であるＥＪＬで記述されたコマンドであって分散先プリンタの印刷ジョブ制御部６０が受信すると、直ちにデバイスＩＤを応答するコマンド（以下、EJL IDコマンドという。）が用いられる。デバイスＩＤは、印刷装置のメーカや機種を特定するための情報であり、EJL IDコマンドは、通常は、印刷ジョブの送信元の機器がプリンタドライバの種類を選択するため等に用いられている。
【００７０】
ジョブ制御言語によって記述されるEJL IDコマンドは、印刷ジョブ制御部６０によって印刷ジョブと同様に受信される。従って、EJL IDコマンドが印刷ジョブ制御部６０に受信されて、印刷ジョブ制御部６０が応答を返したということは、印刷ジョブ制御部６０が直ちに印刷ジョブを受信可能な状態（以下、即時受信可能状態という。）にあることを示している。言い換えれば、EJL IDコマンドの送信に用いたコネクションは、現在、その分散先プリンタに保持されているコネクションの中で最も先に確立されたコネクションであり、このコネクションから印刷ジョブを送信しようとした場合、上述した待機状態にされることはないことを示している。一方で、EJL IDコマンドを送信したにも関わらず印刷ジョブ制御部６０に受信されず、応答が帰ってこないということは、印刷ジョブ制御部６０が即時受信可能状態にはないことを示している。言い換えれば、EJL IDコマンドの送信に用いたコネクションより先に確立されたコネクションが、現在、その分散先プリンタに保持されており、EJL IDコマンドの送信に用いたコネクションから印刷ジョブを送信しようとした場合、上述した待機状態にされることを示している。
【００７１】
受信状態判定部５４は、判定コマンドが送信されると、タイムアウト時刻をカウントするためのタイムカウントを開始し（ステップＳ１１０）、送信された判定コマンドに対する応答（以下、コマンド応答という。）の受信を待つ（ステップＳ１１２）。この受信待ち期間中にコマンド応答が、分散先プリンタの印刷ジョブ制御部６０からあった場合には、受信状態判定部５４の応答受信部５４２は、コマンド応答を受信する。
【００７２】
受信状態判定部５４は、所定のタイムアウト時刻になったか否かを確認（ステップＳ１１４）、タイムアウト時刻になっていない場合（ステップＳ１１４：ＮＯ）には、上述のコマンド応答の受信待ちを継続する。タイムアウト時刻になった場合（ステップＳ１１４：ＹＥＳ）には、応答受信部５４２が１以上のコマンド応答を受信したか否かを判断する（ステップＳ１１６）。受信状態判定部５４は、応答受信部５４２は未だ１つのコマンド応答も受信していないと判断すると（ステップＳ１１６：ＮＯ）、ステップＳ１１０に戻って、再びコマンド応答の受信待ちを行う。
【００７３】
受信状態判定部５４が、応答受信部５４２が１以上のコマンド応答を受信したと判断すると（ステップＳ１１６：ＹＥＳ）、分散制御部５０の印刷ジョブ送信部５６は、コマンド応答を送信してきた分散先プリンタの印刷ジョブ制御部６０に印刷ジョブを送信する（ステップＳ１１８）。上述したように、応答を返信してきた分散先プリンタの印刷ジョブ制御部６０は、即時受信可能状態にあると判定できるからである。具体的には、印刷ジョブ送信部５６は、コマンド応答が送信されてきたコネクションをそのまま用いて、そのコネクションの相手方として分散先プリンタで待機している印刷ジョブ制御部６０に印刷ジョブを送信する。２以上の分散先プリンタからコマンド応答を受信した場合には、コマンド応答を送信してきた全ての分散先プリンタに対して印刷ジョブを送信する。一方、タイムアウト時刻までにコマンド応答を送信してこなかった分散先プリンタには、印刷ジョブを送信しない。コマンド応答を直ちに送信してこない分散先プリンタの印刷ジョブ制御部６０は、即時受信可能状態にないと判定できるからである。
【００７４】
ここで、本ステップで分散先プリンタに送信される印刷ジョブは、印刷ジョブ制御部６０宛（ポート番号９１００宛）であるので通常印刷ジョブということになる。通常印刷ジョブを送信すべき（コマンド応答を送信してきた）分散先プリンタが２以上ある場合には、ステップＳ１０２において受信した分散印刷ジョブのジョブ言語記述部に記述された印刷部数を、２以上の分散先プリンタに送信する通常印刷ジョブにできる限り均等に配分する。具体的には、図５（ｂ）において、ジョブ制御言語部５０１に「ＱＴ」として記述されている値が印刷部数を表しており、この値を変更することによって通常印刷ジョブに配分される印刷部数を設定することができる。なお、本ステップにおいて、２以上の分散先プリンタへ印刷ジョブを送信する処理においては、さらに、後述する。
【００７５】
印刷ジョブの送信が終了されると、印刷ジョブを送信した分散先プリンタとのコネクションは終了される。終了要求を示すＴＣＰパケット（ＦＩＮパケット）と終了要求に対する受信確認を示すＴＣＰパケット（ＡＣＫパケット）とからなる要求／応答プロセスを、カスタムネットワークボード１００と分散先プリンタの２つのＴＣＰ／ＩＰ部１０間において、互いに実行することでコネクションが終了される。
【００７６】
分散制御部５０は、ステップＳ１０８においてコマンド送信部５４１が判定コマンドを送信したが、未だにコマンド応答を送信してきていない分散先プリンタがある場合には、そのコマンド応答が送信されてくるのを待ち（ステップＳ１２０）、全てのコマンド応答が送信されてきたら（ステップＳ１２２：ＹＥＳ）、本処理を終了する。ステップＳ１２０およびステップＳ１２２の処理は、EJL IDコマンドを送信した以上、その応答を受信する必要があるというソフトウエア上の仕様のために必要である処理であり、分散印刷処理において本質的に必要とされる処理ではない。
【００７７】
続いて、図７を参照して、上記の分割モードにおけるカスタムネットワークボード１００の分散制御部５０と分散先プリンタの印刷ジョブ制御部６０との間の通信シーケンスについて説明する。図７は、分割モードにおける分散制御部と印刷ジョブ制御部との間の通信シーケンスの一例を示す説明図である。図７では、上記ステップＳ１０６において、分散先プリンタとしてコネクションを確立されたプリンタが、プリンタＰＲＴ２およびプリンタＰＲＴ３である場合を例としている。
【００７８】
コネクションが確立される（図４：ステップＳ１０６）と、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の各印刷ジョブ制御部６０に、判定コマンドが送信される。図７の例では、プリンタＰＲＴ２の印刷ジョブ制御部６０は即時受信可能状態にあり、直ちにコマンド応答が返信されている。一方で、プリンタＰＲＴ３の印刷ジョブ制御部６０は即時受信可能状態にはなく、コマンド応答は直ちには返信されていない。判定コマンドの送信から所定のウエイト期間Ｗｔ（上述したタイムカウント開始からタイムアウト時刻までの期間に対応する）後に、それまでにコマンド応答を送信してきたプリンタＰＲＴ２の印刷ジョブ制御部６０に対して、分散制御部５０から印刷ジョブが送信される。印刷ジョブの送信が完了すると、分散制御部５０とプリンタＰＲＴ２の印刷ジョブ制御部６０とのコネクションは終了される。その後、プリンタＰＲＴ３の印刷ジョブ制御部６０が受信可能な状態になり、判定コマンドが受信され、プリンタＰＲＴ３の印刷ジョブ制御部６０から分散制御部５０にコマンド応答が返信されている。そして、分散制御部５０からプリンタＰＲＴ３の印刷ジョブ制御部６０に印刷ジョブが送信されることなく、分散制御部５０とプリンタＰＲＴ２の印刷ジョブ制御部６０とのコネクションは終了される。
【００７９】
次に、図８を参照して複製モードを実行する処理について説明する。図８は、分散印刷処理の処理ルーチンを示す第２のフローチャートである。複製モードを実行する処理が開始されると、分散制御部５０の分散先選択部５２は、分散先プリンタ選択処理を実行する（ステップＳ３０２）。複製モードにおける分散先プリンタ選択処理は、分割モードにおける分散先プリンタ選択処理（図４：ステップＳ１０４）とは、多少異なるが基本的なステップは同様であるので、分割モードと同様に図６を参照して説明する。
【００８０】
分散先プリンタ選択処理が開始されると、分散先選択部５２は、分割モードの場合と同様に、ネットワーク上に接続された機器のＩＰアドレスを取得する（ステップＳ２０２）。次に、分散先選択部５２は、取得されたＩＰアドレスを割り当てられた各機器に関する情報を取得する（ステップＳ２０４）。複製モードでは、ここで取得される情報は、分割モードと異なり、機種名だけである。
【００８１】
分散先選択部５２は、取得された情報に基づいて、ネットワーク上に接続された機器の中から所定の条件を満たすプリンタを検索し、検索されたプリンタを分散先プリンタとして選択する（ステップＳ２０６）。複製モードの場合における所定の条件は、分割モードの場合と異なり以下の２つだけである。
１．自己プリンタＰＲＴ１と同一の機種であること。
２・電源が投入されていること。
ステップＳ２０４において、ＳＮＭＰを用いて機種名を取得できた場合には、電源が投入されているので、結局は、１の条件のみを確認すれば良いことになる。
【００８２】
このように、分割モードより分散先プリンタとして選択するための条件が少ないのは、上述したように、複製モードでは、多くの分散先プリンタにおいて印刷することが重視されるからである。
【００８３】
分散先選択部５２は、分割モードの場合と同様の処理により、１台以上の分散先プリンタが確実に選択されるようにする（ステップＳ２０８、Ｓ２１０参照）。
【００８４】
図８に戻って説明を続ける。分散先プリンタが選択されると、分散制御部５０は、分割モードの場合と同様に、選択された各分散先プリンタとの間に、分散制御部５０から分散先プリンタの印刷ジョブ制御部６０に印刷ジョブを送信するためのコネクションを確立する（ステップＳ３０４）。ただし、複製モードでは、選択された全ての分散先プリンタとの間にコネクションが確立されるまで、コネクションの確立を繰り返す。これもまた、複製モードでは、多くの分散先プリンタにおいて印刷することが重視されるからである。
【００８５】
受信状態判定部５４のコマンド送信部５４１は、分割モードの場合と同様に、確立された各コネクションを介して、各分散先プリンタに判定コマンドを送信する（ステップＳ３０６）。受信状態判定部５４は、判定コマンドが送信されると、分割モードの場合と同様に、タイムカウントを開始し（ステップＳ３０８）、コマンド応答を待つ（ステップＳ３１０）。
【００８６】
受信状態判定部５４は、所定のタイムアウト時刻になったか否かを確認（ステップＳ３１２）し、タイムアウト時刻になっていない場合（ステップＳ３１２：ＮＯ）には、上述のコマンド応答の受信待ちを継続する。タイムアウト時刻になった場合（ステップＳ３１２：ＹＥＳ）には、応答受信部５４２が選択された全ての分散先プリンタからコマンド応答を受信したか否かを判断する（ステップＳ３１４）。受信状態判定部５４が未だコマンド応答を受信していない分散先プリンタがあると判断すると（ステップＳ３１４：ＮＯ）、一旦、分散制御部５０は、コマンド応答を送信してきた分散先プリンタとのコネクションを終了する（ステップＳ３１６）。分散制御部５０は、所定時間待機した後、ステップＳ３１６において、一旦終了させた分散先プリンタとのコネクションを、もう一度確立する（ステップＳ３１８）。本ステップで、待機する時間は、乱数を用いて常に一定の時間とならないようにされる。ステップＳ３１６およびＳ３１８を実行する理由については、後述する。
【００８７】
コネクションが再確立されると、分散制御部５０は、直前のコマンド応答の受信待ちの期間（ステップＳ３１０）において、コマンド応答を送信してきた分散先プリンタに対して、もう一度判定コマンドを送信する（ステップＳ３２０）。判定コマンドが再送信されると、分散制御部５０は、ステップＳ３０８に戻って、再び、所定時間に亘るコマンド待ちを行う（ステップＳ３０８〜Ｓ３１２）。
【００８８】
所定期間内に、受信状態判定部５４が、選択された全ての分散先プリンタからのコマンド応答が受信されたと判断すると（ステップＳ３１４：ＹＥＳ）、印刷ジョブ送信部５６は、選択された全ての分散先プリンタの印刷ジョブ制御部６０に印刷ジョブを送信する（ステップＳ３２２）。本ステップにおいても、全ての分散先プリンタからコマンド応答が受信された（全ての分散先プリンタが即時受信可能状態にある）ことを条件にするのは、上述したように複製モードでは、多くの分散先プリンタにおいて印刷することが重視されるからである。すなわち、分割モードの場合と同様に、印刷ジョブ送信部５６は、コマンド応答が送信されてきたコネクションをそのまま用いて、そのコネクションの相手方として分散先プリンタで待機している印刷ジョブ制御部６０に印刷ジョブを送信する。
【００８９】
続いて、図９を参照して、上記の複製モードにおけるカスタムネットワークボード１００の分散制御部５０と分散先プリンタの印刷ジョブ制御部６０との間の通信シーケンスについて説明する。図９は、複製モードにおける分散制御部と印刷ジョブ制御部との間の通信シーケンスの一例を示す説明図である。図９では、上記ステップＳ３０４において、分散先プリンタとしてコネクションを確立されたプリンタが、プリンタＰＲＴ２およびプリンタＰＲＴ３である場合を例としている。
【００９０】
コネクションが確立される（図８：ステップＳ３０４）と、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の各印刷ジョブ制御部６０に、判定コマンドが送信される。図９の例では、プリンタＰＲＴ２の印刷ジョブ制御部６０は即時受信可能状態にあり、直ちにコマンド応答が返信されている。一方で、プリンタＰＲＴ３の印刷ジョブ制御部６０は即時受信可能状態にはなく、コマンド応答は直ちには返信されていない。判定コマンドの送信から所定のウエイト期間Ｗｔの間に、プリンタＰＲＴ３からコマンド応答が送信されていないので、コマンド応答を送信してきたプリンタＰＲＴ２の印刷ジョブ制御部６０と分散制御部５０とのコネクションは、一旦終了される。そして、所定の待機時間Ｗｒの経過後に、プリンタＰＲＴ２の印刷ジョブ制御部６０と分散制御部５０とのコネクションが再確立される。そして、再確立されたコネクションを介して、分散制御部５０からプリンタＰＲＴ２の印刷ジョブ制御部６０へ、判定コマンドが再送信される。
【００９１】
判定コマンドの再送信後、２回目のウエイト期間Ｗｔの間に、プリンタＰＲＴ２とプリンタＰＲＴ３の両方からコマンド応答が送信されている。つまり、プリンタＰＲＴ２の印刷ジョブ制御部６０は、２回目の判定コマンドが送信された時点においても、即時受信可能状態にあり、プリンタＰＲＴ２の印刷ジョブ制御部６０から分散制御部５０に直ちにコマンド応答が返信されている。一方、プリンタＰＲＴ３の印刷ジョブ制御部６０が、ちょうど２回目のウエイト期間Ｗｔの間に、即時受信可能状態に移行して１回目の判定コマンドを受信したため、２回目のウエイト期間Ｗｔの間にプリンタＰＲＴ３の印刷ジョブ制御部６０から分散制御部５０にコマンド応答が返信されている。この結果、２回目のウエイト期間Ｗｔが終了した時に、プリンタＰＲＴ２とプリンタＰＲＴ３は両方とも即時受信可能状態にあると判定され、分散制御部５０からプリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ制御部６０にそれぞれ印刷ジョブが送信されている。
【００９２】
次に、図１０を参照して分散印刷処理における分散制御部５０から分散先プリンタの印刷ジョブ制御部６０への印刷ジョブの送信について、さらに説明する。図１０は、印刷ジョブが複数の印刷ジョブ制御部６０に送信される通信シーケンスの一例を示す説明図である。図１０では、クライアントＣＬａから送信された印刷ジョブを、プリンタＰＲＴ１の分散制御部５０が受信し、２つのプリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ制御部６０にそれぞれ受信した印刷ジョブを送信（分散）する様子を示している。
【００９３】
図５（ｃ）を参照して上述したように、印刷ジョブデータ５００は、バッファ３６より小さなパケットに分けてクライアントから取得される。したがって、上述の図７および図９では印刷ジョブの送信を一本の矢印で簡単に示しているが、実際には、分散制御部５０から分散先プリンタの印刷ジョブ制御部６０への印刷ジョブの送信は、パケット単位で複数回に分けて行う必要がある。図１０に示す例では、図５（ｃ）に示す８つのパケットＰ１〜Ｐ８に分けられた印刷ジョブデータ５００が送信される場合を示している。
【００９４】
分散制御部５０が印刷ジョブの送信（図４：ステップＳ１１８または図８：ステップＳ３２２）を開始すると、まず、最初にバッファ３６に格納されているパケットＰ１（ジョブ制御言語部５０１を含む印刷ジョブの最初のパケット）をプリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ制御部６０にそれぞれ送信する。以下、このようにパケットを複数の分散先プリンタの印刷ジョブ制御部６０にそれぞれ送信することをパケット分散という。図１０において、記号ＰＤで示す破線で囲まれた矢印の集合は、１回のパケット分散に対応している。
【００９５】
最初のパケットＰ１のパケット分散ＰＤの終了が確認されると、分散制御部５０は、図１０に示すようにクライアントＣＬａから次のパケットＰ２を受信する。パケット分散ＰＤの終了の確認は、ＴＣＰプロトコルにしたがって送信元と送信先のＴＣＰ／ＩＰ部１０が行う。分散制御部５０は、バッファ３６に格納されたパケットＰ１を消去して、新たに受信されたパケットＰ２をバッファ３６に格納する。分散制御部５０は、バッファ３６に格納されたパケットＰ２について、パケットＰ１と同様のパケット分散ＰＤを実行する。同様の処理を印刷ジョブデータ５００を構成する残りのパケットＰ３〜Ｐ８について繰り返し実行することにより、印刷ジョブデータ５００は、最終的に全てプリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ制御部６０にそれぞれ送信される。
【００９６】
以上説明した、本実施例における印刷制御装置としてのカスタムネットワークボード１００によれば、コネクションを介して印刷ジョブを送信した場合、送信先の印刷ジョブ制御部６０が送信された印刷ジョブを直ちに受信できる状態にあるかを判定してから、印刷ジョブを送信するので、速やかに分散印刷を実現することができる。つまり、カスタムネットワークボード１００が分散先プリンタに印刷ジョブを送信したときに、上述した待機状態にさせられ分散印刷の進行が妨げられることがない。
【００９７】
さらに、本実施例におけるカスタムネットワークボード１００によれば、デッドロックの発生を防止することができる。ここで、デッドロックとは、分散印刷処理が完全に停止してしまう不具合をいうものとする。例えば、２以上のカスタムネットワークボード１００と、２以上のカスタムネットワークボード１００のそれぞれが印刷ジョブの分散先として指定可能な２以上の分散先プリンタとを含む分散印刷システムがあるとする。このシステムにおいて、２以上のカスタムネットワークボード１００が、分散印刷処理によって、ほぼ同時に２以上の分散先プリンタに対して印刷ジョブを送信しようとした場合に、従来はデッドロックが発生する場合があった。
【００９８】
ここで、理解の容易のため、図１１および図１２を参照して、デッドロックが発生するメカニズムについて説明する。図１１はデッドロックの発生する場合の通信シーケンスを示す説明図である。図１２は、デッドロックが発生する場合を概念的に示す説明図である。図１２において実線は、コネクションを示している。図１１および図１２は、判定コマンドを用いた即時受信可能状態か否かの確認をしない場合、すなわち、上述した図４におけるステップＳ１０６〜Ｓ１１６あるいは図８におけるステップＳ３０６〜Ｓ３２０を実行せずに分散印刷処理を実行した場合に、デッドロックが起きる様子を示している。
【００９９】
例えば、プリンタＰＲＴ１の分散制御部５０とプリンタＰＲＴ４の分散制御部５０とが、プリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ制御部６０にそれぞれほぼ同時に印刷ジョブを送信しようとして、それぞれコネクションを確立したとする。上述したように、各プリンタのＴＣＰ／ＩＰ部１０は、複数のコネクションを同時に保持することができるので、各コネクションの確立は成功する。図１１において、白抜きの丸は、プリンタＰＲＴ１の分散制御部５０とプリンタＰＲＴ２およびプリンタＰＲＴ３の各印刷ジョブ制御部６０との間のコネクションが確立されたタイミングを示している。一方、黒塗りの丸は、プリンタＰＲＴ４の分散制御部５０とプリンタＰＲＴ２およびプリンタＰＲＴ３の各印刷ジョブ制御部６０との間のコネクションが確立されたタイミングを示している。
【０１００】
図１１に示すように、プリンタＰＲＴ２の印刷ジョブ制御部６０とのコネクションは、プリンタＰＲＴ１の分散制御部５０が先に確立している。従って、プリンタＰＲＴ２の印刷ジョブ制御部６０は、プリンタＰＲＴ１の分散制御部５０から送信されてくる印刷ジョブを優先的に受信し、この印刷ジョブの受信が全て終了するまで、プリンタＰＲＴ４の分散制御部５０は待機状態にされる。
【０１０１】
一方、図１１に示すように、プリンタＰＲＴ３の印刷ジョブ制御部６０とのコネクションは、プリンタＰＲＴ４の分散制御部５０が先に確立している。従って、プリンタＰＲＴ３の印刷ジョブ制御部６０は、プリンタＰＲＴ４の分散制御部５０から送信されてくる印刷ジョブを優先的に受信し、この印刷ジョブの受信が全て終了するまで、プリンタＰＲＴ１の分散制御部５０は待機状態にされる。図１１において、太い実線は、優先的に印刷ジョブを受信するコネクションＣＮ１２、ＣＮ４３を示し、細い実線は、待機状態にされているコネクションＣ４２、Ｃ１３を示している。
【０１０２】
このような状態から、プリンタＰＲＴ１の分散制御部５０は、確立されたコネクションＣ１２、Ｃ１３を介して、上述したパケット分散ＰＤ（図１０）を実行してプリンタＰＲＴ２、ＰＲＴ３の各印刷ジョブ制御部６０に印刷ジョブを送信しようとする。かかる場合には、プリンタＰＲＴ２の印刷ジョブ制御部６０に送信されるパケットＰ１は、直ちに受信されるが、プリンタＰＲＴ３の印刷ジョブ制御部６０に送信されるパケットＰ１は、コネクションＣＮ１３の優先順位が低いために受信されない。そのため、プリンタＰＲＴ１の分散制御部５０は、１回目のパケット分散ＰＤを終了することができず待機状態になる。
【０１０３】
同様にして、プリンタＰＲＴ４の分散制御部５０は、確立されたコネクションＣ４２、Ｃ４３を介して、プリンタＰＲＴ２、ＰＲＴ３の各印刷ジョブ制御部６０に印刷ジョブを送信しようとする。かかる場合には、プリンタＰＲＴ３の印刷ジョブ制御部６０に送信されるパケットＰ１は、直ちに受信されるが、プリンタＰＲＴ２の印刷ジョブ制御部６０に送信されるパケットＰ１は、コネクションＣＮ４２の優先順位が低いために受信されない。そのため、プリンタＰＲＴ１の分散制御部５０と同様に、プリンタＰＲＴ４の分散制御部５０は、１回目のパケット分散ＰＤを終了することができず待機状態になる。
【０１０４】
この結果、プリンタＰＲＴ１の分散制御部５０およびプリンタＰＲＴ４の分散制御部５０による分散印刷処理は、両方とも完全に停止状態に陥ってしまう。プリンタＰＲＴ１の分散制御部５０の待機状態は、プリンタＰＲＴ４の分散制御部５０による分散印刷処理が終了するまで解消されず、一方でプリンタＰＲＴ４の分散制御部５０の待機状態は、プリンタＰＲＴ１の分散制御部５０による分散印刷処理が終了するまで解消されないためである。
【０１０５】
図１１のようなデッドロックは、図１２に示すような場合に起こる。概念的に説明すると、印刷ジョブの送信側である複数の分散制御部と、受信側である複数の印刷制御部があり、分散制御部と印刷制御部間の通信のためのコネクションによって、分散制御部と印刷制御部とを交互に結ぶ閉じた環が形成され得るシステムにおいて、デッドロックが起き得る。上述したようにコネクションの環が確立され、環上にある全ての印刷制御部に少なくとも待機状態になるコネクションが１つ以上ある状態で、分散印刷処理が実行されるとデッドロック状態になる。図１２において、コネクションに付されている番号は、１が即時受信状態のコネクション、２が待機状態のコネクションを示している。
【０１０６】
本実施例に係るカスタムネットワークボード１００では、判定コマンドを用いた即時受信可能状態か否かの確認を実行しているので、待機状態の分散先プリンタに対して、印刷ジョブを送信することがない。従って、上述のデッドロックは確実に防止することができる。例えば、分割モードの場合において、図１１に示すようなタイミングでコネクションの確立がおこなわれたとしても、ＰＲＴ１の分散制御部５０は、判定コマンドにより即時受信可能状態にあると判定されるＰＲＴ２の印刷ジョブ制御部６０に対してのみ印刷ジョブを送信するので、上述のデッドロックは回避される。
【０１０７】
複製モードにおいて、コネクションを一旦終了する（図８：ステップＳ３１６）理由およびコネクションを再確立するまで待機する時間を乱数により決定する（図８：ステップＳ３１８）理由は、このようなデッドロックをうまく回避するためである。例えば、図１１に示すようなタイミングで、プリンタＰＲＴ１およびプリンタＰＲＴ２の各分散制御部５０が複製モードにおいて、コネクションを確立したとする。この場合、少なくともプリンタＰＲＴ１およびプリンタＰＲＴ２の各分散制御部５０の一方が、一旦即時受信状態にあるコネクションを終了しなければ、どちらか一方の分散制御部５０が即時受信可能状態にあるコネクションを独占することができない。このため、複製モードでは、図８のステップＳ３１６において、即時受信状態にあるコネクションを一旦終了する。さらに、一旦コネクションを終了させた後、プリンタＰＲＴ１およびプリンタＰＲＴ２の各分散制御部５０が同じ待機期間をおいて再び同じようなタイミングでコネクションを確立すると、また、各分散制御部５０がコネクションの確立を互いに競合しあうことになり、どちらか一方の分散制御部５０が即時受信可能状態にあるコネクションを独占することが困難になる。このため、図８のステップＳ３１６において、コネクションを再確立するまでの待機期間を乱数により決定している。こうすることによって、複製モードにおいても、デッドロックを速やかに回避して、分散印刷処理を円滑に進行させることができる。
【０１０８】
さらに、判定コマンドには、印刷ジョブの少なくとも一部を記述するための言語であるＥＪＬによって記述されたEJL IDコマンドを用いている。従って、ＥＪＬ言語を解釈可能な印刷装置であれば、EJL IDコマンドに対する応答を返すことができる。この結果、既存のＥＪＬ言語を解釈可能な印刷装置を分散先プリンタとしてそのまま使用できる。
【０１０９】
また、コマンド応答が送信されてきたコネクションをそのまま用いて印刷ジョブを投入するので、確実にそのコネクションの相手方である印刷ジョブ制御部６０が即時受信可能状態であることを確実に判定できる。例えば、ＵＤＰ層の上位層としてのＳＮＭＰ等のコネクションレス型の通信プロトコルを用いて確認するとすれば、確認後、コネクションを確立しようとした一瞬の間に、他の機器がコネクションを確立してしまうこともあり得るが、本実施例ではそのような不都合はない。
【０１１０】
さらに、印刷ジョブを複数のパケットに分けて、上述したようにパケット分散（図１０）により送信するので、カスタムネットワークボード１００に搭載されるバッファ３６の必要容量を小さくすることができる。この結果、カスタムネットワークボード１００の部品点数や製造コストの低減、および、小型化が図られる。また、分散先プリンタに搭載されたバッファ（例えば、プリンタＰＲＴ２のプリンタバッファ８２）の容量が小さい場合であっても、複数の分散先プリンタに並行して印刷ジョブを分散することができる。
【０１１１】
さらに、分散制御部５０はプリンタ（ＰＲＴ１またはＰＲＴ４）に内蔵されているので、専用サーバを用いることなく、簡易で小型の分散印刷システムを実現することができる。
【０１１２】
さらに、分散制御部５０は、分散制御部５０を含むカスタムネットワークボード１００が内蔵されているプリンタ自体も分散先として指定することができるので、分散先プリンタの選択範囲が広い。
【０１１３】
Ｂ．第２実施例：
・分散印刷システムの構成：
第２実施例における分散印刷システムの概略構成は、図１を参照して説明した第１実施例における構成と同一であるので、その説明を省略する。図１３は、第２実施例における分散印刷システムを構成する各機器の内部構成を示すブロック図である。
【０１１４】
第２実施例におけるプリンタＰＲＴ１は、第１実施例におけるＰＲＴ１と比較して、カスタムネットワークボード１００内の分散制御部５０と印刷ジョブ制御部６０の構成が異なっている。第２実施例における分散制御部５０は、第１実施例におけるコマンド送信部５４１に代えて占有要求部５４３を備え、応答受信部５４２に代えて通知受信部５４４を備えている。占有要求部５４３は、分散先プリンタの占有を求める占有要求に関連するコマンドを送信する。通知受信部５４４は、占有要求部が送信したコマンドに対する応答を受信する。
【０１１５】
また、第２実施例における印刷ジョブ制御部６０は、第１実施例における応答部６１に代えて、占有許可部６２を備えている。占有許可部６２は、プリンタＰＲＴ１に印刷ジョブを送信しようとする送信機器に対して、プリンタＰＲＴ１の占有を認めるための機能ブロックである。
【０１１６】
第２実施例におけるプリンタＰＲＴ１のその他の構成は、図２に示した第１実施例におけるプリンタＰＲＴ１と同一であるので、同一の構成要素については、図１３において図２と同一の符号を付し、その説明を省略する。
【０１１７】
第２実施例におけるプリンタＰＲＴ２は、第１実施例におけるＰＲＴ２と比較して、ネットワークボード２００内の印刷ジョブ制御部６０の構成が異なっている。すなわち、第２実施例における印刷ジョブ制御部６０は、上述したＰＲＴ１の印刷ジョブ制御部６０と同様に、第１実施例における応答部６１に代えて、上述した占有許可部６２を備えている。第２実施例におけるプリンタＰＲＴ２のその他の構成は、図２に示した第１実施例におけるプリンタＰＲＴ２と同一であるので、同一の構成要素については、図１３において図２と同一の符号を付し、その説明を省略する。なお、第２実施例においても、プリンタＰＲＴ４はプリンタＰＲＴ１と、プリンタＰＲＴ３はプリンタＰＲＴ２と、それぞれ同一の構成を備えているので、これらの説明は省略する。
【０１１８】
・分散先プリンタの占有許可部の処理：
本実施例における分散先プリンタとなるプリンタＰＲＴの印刷ジョブ制御部６０が備える占有許可部６２の行う処理について、さらに、説明する。先ず、図１４を参照して占有許可部６２が実行する占有予約処理について説明する。図１４は、占有予約処理の処理ルーチンを示すフローチャートである。占有許可部６２は、電源が投入されている場合には、常時この占有予約処理を実行している。占有予約処理が実行されている時、占有許可部６２は、常に占有ＩＤ要求の受信が有るか否かを監視している（ステップＳ４０２）。占有ＩＤ要求は、上述した占有要求に関連するコマンドの１つであり、プリンタＰＲＴに対して、プリンタＰＲＴの占有を予約するコマンドである。プリンタＰＲＴに印刷ジョブを送信しようとする機器（以下、送信機器という。）は、後述する占有要求を送信する前に、プリンタＰＲＴに対して、占有ＩＤ要求を送信する。送信機器は、例えば、ＬＡＮに接続された計算機やサーバーを含み、本実施例におけるカスタムネットワークボード１００の分散制御部５０を含む。
【０１１９】
占有ＩＤ要求を受信すると（ステップＳ４０２：ＹＥＳ）、占有許可部６２は、占有ＩＤ要求を送信してきた送信機器に対して、占有ＩＤを記述した応答を送信する。以下、この応答の送信を、占有ＩＤの発行ともいう。占有ＩＤは、占有許可部６２が、送信機器に対して占有を許可する順番を管理するために用いるものであり、占有ＩＤ要求ごとに異なる固有のＩＤである。
【０１２０】
占有許可部６２は、送信機器に対して発行した占有ＩＤを、記録しておく（ステップＳ４０６）。この際、占有ＩＤは、占有ＩＤが発行された順番が解るように記録しておく。または、占有ＩＤ自体を占有ＩＤが発行された順番そのものとしておく。以下、占有ＩＤが発行された順番が早いことを予約順位が高いともいい、占有ＩＤが発行された順番が遅いことを予約順位が低いともいう。占有許可部６２は、占有ＩＤを記録すると、ステップＳ４０２に戻って占有ＩＤ要求の受信を待つ状態に戻る。
【０１２１】
次に、図１５を参照して、占有許可部６２が実行する占有許可処理について説明する。図１５は、占有管理処理の処理ルーチンを示すフローチャートである。占有管理処理は、１つ以上の占有ＩＤが発行されている場合に、占有許可部６２によって、上述の占有予約処理と並行して常時実行されている。占有予約処理が実行されている時、占有許可部６２は、常に占有要求の受信が有るか否かを監視している（ステップＳ５０２）。占有要求は、上述した占有要求に関連するコマンドの１つであり、プリンタＰＲＴに対して、プリンタＰＲＴの占有を要求するコマンドである。送信機器は、印刷ジョブの送信しようとする際に、先に取得した占有ＩＤを占有要求に記述して、その占有要求を占有ＩＤを発行したプリンタＰＲＴに送信する。プリンタＰＲＴ側では、占有許可部６２が送信機器から送信された占有要求を受信する。
【０１２２】
占有許可部６２は、占有要求を受信すると（ステップＳ５０２：ＹＥＳ）、受信した占有要求に含まれる占有ＩＤを取得する（ステップＳ５０４）。占有許可部６２は、記録されている発行済みの占有ＩＤを参照して、占有要求に含まれる占有ＩＤの予約順位が最も高いか否かを判断する（ステップＳ５０６）。占有要求に含まれる占有ＩＤの予約順位が最も高くないと判断すると（ステップＳ５０６：ＮＯ）、占有許可部６２は、占有要求を送信してきた送信機器に対してプリンタＰＲＴの占有を許可しないと決定し、占有の不許可通知を占有要求に対する応答として送信する（ステップＳ５０８）。
【０１２３】
一方、占有要求に含まれる占有ＩＤの予約順位が最も高いと判断すると（ステップＳ５０６：ＹＥＳ）、占有許可部６２は、占有要求を送信してきた送信機器に対してプリンタＰＲＴの占有を許可すると決定し、占有の許可通知を占有要求に対する応答として送信する（ステップＳ５１０）。占有許可部６２は、プリンタＰＲＴを、許可通知を送信した送信機器による占有状態にする（ステップＳ５１２）。例えば、ＴＣＰ／ＩＰ部１０に、占有を許可した送信機器のＩＰアドレスを通知して、ＴＣＰ／ＩＰ部１０に通知されたＩＰアドレスを有する機器とだけコネクションの確立を行うように指示する。
【０１２４】
この結果、占有が許可された送信機器は、印刷ジョブを印刷ジョブ制御部６０に送信するためのコネクションを確立したとき、必ず印刷ジョブ制御部６０は上述した即時受信可能状態になる。すなわち、占有が許可された送信機器は、コネクションを確立後、待機状態にさせられることはなく、直ちに送信された印刷ジョブを印刷ジョブ制御部６０に受信させることができる。言い換えれば、送信機器は、コネクションの確立に先立って、占有許可部６２からプリンタＰＲＴの占有の許可を受ければ、その後にプリンタＰＲＴの印刷ジョブ制御部６０とコネクションを確立したとき、印刷ジョブ制御部６０は即時受信可能状態であると判定することができる。
【０１２５】
ステップＳ５１２またはステップＳ５０８を終了すると、占有許可部６２は、ステップＳ５０２に戻って、占有要求の受信を監視する状態に戻る。
【０１２６】
次に、図１６を参照して、占有許可部６２が実行する占有解放処理について説明する。図１６は、占有解放処理の処理ルーチンを示すフローチャートである。占有解放処理は、ある送信機器にプリンタＰＲＴの占有を許可している場合に、占有許可部６２によって、上述の占有予約処理および占有許可処理と並行して実行されている。占有許可部６２は、ある送信機器に占有を許可すると、占有解放通知の受信が有るか否かを監視している（ステップＳ６０２）。占有解放通知は、現在、プリンタＰＲＴを占有している送信機器が占有の解放を通知するためのコマンドである。占有を許可された送信機器は、印刷すべき印刷ジョブをプリンタＰＲＴに送信し終えると、占有解放通知をプリンタＰＲＴに送信してくる。
【０１２７】
占有許可部６２は、占有解放通知を受信すると、占有解放通知に対する応答として、占有の解放を了解する通知（解放了解通知という。）を返信する（ステップＳ６０４）。占有許可部６２は、占有解放通知を送信してきた送信機器による占有状態からプリンタＰＲＴを解放する（ステップＳ６０６）。例えば、ＴＣＰ／ＩＰ部１０に、全ての送信機器とコネクションの確立を行わないように指示する。占有許可部６２は、次に、占有を許可した占有要求に含まれていた占有ＩＤ、すなわち、予約順位が最も高い占有ＩＤの記録を削除する（ステップＳ６０８）。この結果、予約順位が２番目であった占有ＩＤが最も予約順位の高い占有ＩＤとして記録されることになる。以上のステップを終えると、占有許可部６２は、ステップＳ６０２に戻る。
【０１２８】
以上説明した占有許可部６２による処理において、送信機器との各種コマンドの送受信は、全てコネクションレス型の通信プロトコルであるＵＤＰの上位層としてのＳＮＭＰを用いて実行される。すなわち、送信機器は、ＳＮＭＰマネージャ（例えば、カスタムネットワークボード１００が送信機器である場合には、ＳＮＭＰマネージャ４０）を備えており、ＳＮＭＰマネージャを介して占有ＩＤ要求、占有要求、占有解放通知を送信する。占有許可部６２は、ＳＮＭＰエージェント７０を介して、これらのコマンドに対する応答として、占有ＩＤ、許可通知、不許可通知、解放了解通知を送信する。従って、これらのコマンド／応答の送受信は、コネクションを必要とせず、印刷ジョブを送信するためのコネクションとは無関係に、独立して、実行されることができる。
【０１２９】
・分散印刷処理：
以上のような処理を実行する占有許可部６２を備えるプリンタＰＲＴを分散先プリンタとする前提を踏まえて、第２実施例に係る分散印刷処理について説明する。
【０１３０】
図１７は、第２実施例における分散印刷処理の処理ルーチンを示す第１のフローチャートである。第２実施例に係る分散印刷処理において、ステップＳ７０２は、第１実施例におけるステップＳ１０２と同一であり、印刷ジョブが着信したポート番号に応じて、分割モードの処理に移行するか、複製モードの処理に移行するかを判断する処理である。第１実施例と同様にして、先ず、分割モードにおける処理（ステップＳ７０４〜）を説明する。ステップＳ７０４は、第１実施例におけるステップＳ１０４と同一であり、分散先プリンタを選択する処理である。分散先プリンタが選択されると、分散制御部５０の受信状態判定部５４は、選択された各分散先プリンタから占有ＩＤを取得する（ステップＳ７０６）。具体的には、受信状態判定部５４の占有要求部５４３が、上述した占有ＩＤ要求を、ＳＮＭＰマネージャ４０を介して、各分散先プリンタに送信する。その結果、受信状態判定部５４の通知受信部５４４は、占有ＩＤに対する応答として、各分散先プリンタの占有許可部６２から占有ＩＤを取得することができる。
【０１３１】
占有ＩＤが取得されると、受信状態判定部５４の占有要求部５４３は、取得された占有ＩＤを記述して、占有要求を、占有ＩＤを発行した分散先プリンタにそれぞれ送信する（ステップＳ７０８）。この結果、受信状態判定部５４の通知受信部５４４は、占有要求に対する応答として、各分散先プリンタの占有許可部６２から上述した許可通知または不許可通知を受信する（ステップＳ７１０）。
【０１３２】
受信状態判定部５４は、許可通知を送信してきた分散先プリンタについて、この後にその分散先プリンタの印刷ジョブ制御部６０とコネクションを確立したとき、印刷ジョブ制御部６０は即時受信可能状態にあると判定することができる。
【０１３３】
受信状態判定部５４は、通知受信部５４４が１以上の許可通知を受信したか否かを判断する（ステップＳ７１２）。言い換えれば、印刷ジョブ制御部６０が即時受信可能状態にある分散先プリンタが１以上あるかを判断することと等しい。受信状態判定部５４は、受信された通知が全て不許可通知である場合（ステップＳ７１２：ＮＯ）には、所定期間待機した（ステップＳ７１４）後、ステップＳ７０８に戻る。一方、受信状態判定部５４が１以上の許可通知を受信した場合（ステップＳ７１２：ＹＥＳ）には、分散制御部５０は、許可通知を送信してきた分散先プリンタとの間に、印刷ジョブを送信するためのコネクションを確立する（ステップＳ７１６）。分散制御部５０の印刷ジョブ送信部５６は、確立されたコネクションを介して、許可通知を送信してきた分散先プリンタに印刷ジョブを送信する（ステップＳ７１８）。印刷ジョブの送信は、第１実施例と同様、パケット分散ＰＤを繰り返すことによって実行される（図１０）。
【０１３４】
印刷ジョブの送信が完了されると、占有要求部５４３は、占有許可を送信してきた分散先プリンタに、上述した解放通知を送信する（ステップＳ７２０）。送信された解放通知に対する応答として、通知受信部５４４が上述した解放了解通知を受信する（ステップＳ７２２）と、分割モードの処理は終了される。
【０１３５】
続いて、図１８を参照して、分割モードにおけるカスタムネットワークボード１００の分散制御部５０と分散先プリンタとの間の通信シーケンスについて説明する。図１８は、分割モードにおける分散制御部と分散先プリンタとの間の通信シーケンスの一例を示す説明図である。図１８では、上記ステップＳ７０４において、分散先プリンタとして選択されたプリンタが、プリンタＰＲＴ２およびプリンタＰＲＴ３である場合を例としている。図１８において、プリンタＰＲＴ２およびプリンタＰＲＴ３を示す縦線のうち破線部分に発着する矢印は、ＳＮＭＰを用いて実行されるコネクションレス型の通信を示す。一方、実線部分に発着する矢印は、ＴＣＰを用いて実行されるコネクション型の通信を示す。
【０１３６】
まず、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２に占有ＩＤ要求が送信される。占有ＩＤ要求の送信は、上述のとおりＳＮＭＰを用いて実行されるコネクションレス型の通信であるので待機状態にされることはなく、占有許可部６２によって直ちに受信される。占有ＩＤ要求の送信後、直ちに応答として各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２から分散制御部５０に占有ＩＤが返信される。
【０１３７】
占有ＩＤが返信された後、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２に占有要求が送信される。占有要求の送信は、占有ＩＤ要求と同様にＳＮＭＰを用いて実行されるコネクションレス型の通信であるので待機状態にされることはなく、占有許可部６２によって直ちに受信される。占有要求の送信後、直ちに応答として各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２から分散制御部５０に許可通知または不許可通知が返信される。
【０１３８】
図１８に示す例では、プリンタＰＲＴ２からの応答が不許可通知であり、プリンタＰＲＴ３からの応答が許可通知である。従って、分散制御部５０は、許可通知を送信してきたプリンタＰＲＴ３との間にだけコネクションを確立し、確立されたコネクションを介してプリンタＰＲＴ３の印刷ジョブ制御部６０に印刷ジョブを送信している。
【０１３９】
印刷ジョブの送信が終了されると、コネクションが終了され、分散制御部５０からプリンタＰＲＴ３の占有許可部６２に占有解放通知が送信される。占有ＩＤ要求の送信後、直ちに応答としてプリンタＰＲＴ３の占有許可部６２から分散制御部５０に解放了解通知が返信され処理が終了する。
【０１４０】
次に、図１９を参照して複製モードを実行する処理について説明する。図１９は、第２実施例における分散印刷処理の処理ルーチンを示す第２のフローチャートである。ステップＳ８０２における処理は、分散先プリンタを選択する処理であり、第１実施例において説明した図８のステップＳ３０２と同一の処理である。分散先プリンタが選択されると、分散制御部５０の受信状態判定部５４は、分割モードのステップＳ７０６と同様の処理により選択された各分散先プリンタから占有ＩＤを取得する（ステップＳ８０４）。次に受信状態判定部５４は、分割モードのステップＳ７０８、Ｓ７１０と同様の処理により、選択された各分散先プリンタに占有要求を送信し（ステップＳ８０６）、占有要求に対する応答として許可通知または不許可通知を取得する（ステップＳ８０８）。
【０１４１】
受信状態判定部５４は、全ての分散先プリンタからの通知が許可通知であるか否かを判断する（ステップＳ８１０）。受信状態判定部５４は、受信された通知のうちに１つでも不許可通知がある場合には（ステップＳ８１０：ＮＯ）、許可通知を受信した分散先プリンタに占有の解放通知を送信して、一旦、分散先プリンタの占有を解放する（ステップＳ８１２）。この結果、受信状態判定部５４の通知受信部５４４は、解放通知の応答として分散先プリンタから解放了解通知を受信する（ステップＳ８１４）。ここで、ステップＳ８１２において、一旦、分散先プリンタの占有を解放するのは、第１実施例におけるステップＳ３１６において、一旦、分散先プリンタとのコネクションを終了するのと同様の理由による。
【０１４２】
その後、受信状態判定部５４は、所定時間待機し（ステップＳ８１６）、その後、占有を一旦解放した分散先プリンタから占有ＩＤを再取得する（ステップＳ８１８）。ここで、ステップＳ８１６において、待機する時間は、第１実施例におけるステップＳ３１８と同様に、乱数を用いて常に一定の時間とならないようにされる。ここで、ステップＳ８１６において、待機する時間を乱数により決定するのは、第１実施例におけるステップＳ３１８における待機の時間を乱数により決定するのと同様の理由による。待機時間の終了後、処理はステップＳ８０６にリターンされ、上述した処理が繰り返される。
【０１４３】
受信された通知の全てが許可通知である場合には（ステップＳ８１０：ＹＥＳ）、選択された全ての分散先プリンタの各印刷ジョブ制御部６０が即時受信可能状態にあると判定される。かかる場合には、分散制御部５０は、全ての分散先プリンタとの間に、印刷ジョブを送信するためのコネクションを確立（ステップＳ８２０）し、確立されてコネクションを介して全ての分散先プリンタに印刷ジョブを送信する（ステップＳ３２２）。印刷ジョブの送信は、第１実施例と同様、パケット分散ＰＤを繰り返すことによって実行される（図１０）。
【０１４４】
印刷ジョブの送信が完了されると、占有要求部５４３は、全ての分散先プリンタに、上述した解放通知を送信する（ステップＳ８２４）。解放通知に対する応答として分散先プリンタから送信された解放了解通知を受信される（ステップＳ８２６）と、複製モードの処理は終了される。
【０１４５】
続いて、図２０を参照して、複製モードにおけるカスタムネットワークボード１００の分散制御部５０と分散先プリンタとの間の通信シーケンスについて説明する。図２０は、複製モードにおける分散制御部と分散先プリンタとの間の通信シーケンスの一例を示す説明図である。図２０では、上記ステップＳ８０２において、分散先プリンタとして選択されたプリンタが、プリンタＰＲＴ２およびプリンタＰＲＴ３である場合を例としている。図２０においては、図１８と同様に、各プリンタＰＲＴ２、ＰＲＴ３を示す縦線のうち破線部分に発着する矢印は、コネクションレス型の通信を示し、実線部分に発着する矢印は、コネクション型の通信を示す。
【０１４６】
まず、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２に占有ＩＤ要求が送信される。占有ＩＤ要求の送信後、直ちに応答として各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２から分散制御部５０に占有ＩＤが返信される。占有ＩＤが返信された後、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２に占有要求が送信される。占有要求の送信後、直ちに応答として各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２から分散制御部５０に許可通知または不許可通知が返信される。
【０１４７】
図２０に示す例では、プリンタＰＲＴ２からの応答が許可通知であり、プリンタＰＲＴ３からの応答が不許可通知である。この場合、全ての分散先プリンタ（プリンタＰＲＴ２とプリンタＰＲＴ３）からの通知が許可通知ではないので、一旦、占有を許可されたプリンタＰＲＴ２を占有状態から解放するために、分散制御部５０からプリンタＰＲＴ２の占有許可部６２に占有の解放通知が送信される。そして、直ちに応答としてプリンタＰＲＴ２の占有許可部６２から分散制御部５０に解放了解通知が返信される。
【０１４８】
そして、所定の待機時間Ｗｒの経過後に、分散制御部５０からプリンタＰＲＴ２の占有許可部６２に占有ＩＤ要求が送信される。占有ＩＤ要求の送信後、直ちに応答としてプリンタＰＲＴ２の占有許可部６２から分散制御部５０に占有ＩＤが返信され、分散制御部５０は占有ＩＤを再取得する。そして、２回目の占有要求が、分散制御部５０から各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２に送信される。２回目の占有要求において、プリンタＰＲＴ２に送信される占有要求には再取得された占有ＩＤが記述され、プリンタＰＲＴ２に送信される占有要求には１回目の占有要求と同じ占有ＩＤが記述される。再び、応答として各プリンタＰＲＴ２、ＰＲＴ３の占有許可部６２から分散制御部５０に許可通知または不許可通知が返信される。図２０に示す例では、２回目の占有要求に対しては、プリンタＰＲＴ２およびプリンタＰＲＴ３からの応答が共に許可通知である。
【０１４９】
従って、プリンタＰＲＴ２およびプリンタＰＲＴ３の印刷ジョブ制御部６０は、共に、即時受信可能状態であると判定される。その結果、分散制御部５０とプリンタＰＲＴ２およびプリンタＰＲＴ３との間にそれぞれコネクションが確立され、確立されたコネクションを介して、分散制御部５０からプリンタＰＲＴ２およびプリンタＰＲＴ３の各印刷ジョブ制御部６０に対して印刷ジョブが送信されている。
【０１５０】
印刷ジョブの送信が終了されると、各コネクションが終了され、分散制御部５０からプリンタＰＲＴ２、ＰＲＴ３の各占有許可部６２に占有解放通知が送信される。占有ＩＤ要求の送信後、直ちに応答としてプリンタＰＲＴ２、ＰＲＴ３の各占有許可部６２から分散制御部５０に解放了解通知が返信され処理が終了する。
【０１５１】
以上説明した本実施例に係るカスタムネットワークボード１００によれば、占有の許可通知を取得して分散先プリンタを占有してから、分散先プリンタに印刷ジョブを送信するので、第１実施例と同様に、印刷ジョブを送信したときに、上述した待機状態にさせられ分散印刷の進行が妨げられることがない。
【０１５２】
さらに、第１実施例と同様に、本実施例に係るカスタムネットワークボード１００によれば、上述したデッドロックの発生を防止することができる。第１実施例と同様に、分割モード、複製モード共に、円滑な分散印刷処理を実現することができる。
【０１５３】
本実施例では、分散先プリンタが上述したようなプリンタの占有を管理する処理（図１４〜図１６）を実行する占有許可部６２を備えている必要があるが、コネクションレス型の高速な通信を用いて円滑な分散処理を実現することができる。
【０１５４】
Ｃ．変形例：
上記第１実施例において、判定コマンドとしてEJL IDコマンドを用いているが、他のコマンドを用いても良い。判定コマンドとしては、１．印刷ジョブが印刷ジョブ制御部６０によって受信される場合に同様に受信されるコマンドであり、かつ、２．印刷ジョブが受信されない場合には受信されないコマンドであり、かつ、３．受信された場合には、何等かの応答が返信されるコマンドであれば良い。例えば、印刷ジョブの送信に用いられるコネクションを介して送信されるコマンドであれば、１．２．の条件は満たされる。例えば、印刷ジョブデータの少なくとも一部を記述するための言語で記述されるコマンドであれば、印刷ジョブの送信に用いられるコネクションを介して送信された場合に、印刷ジョブと同様に解釈されることができるため好ましい。また、コマンドの応答は、コマンドが受信され処理された場合に直ちに返信されることが好ましい。具体的には、EJL IDコマンドと同様にＥＪＬ言語で記述されるEJL INQUIRE NEMEコマンドや、EJL VALUE PAGESIZEコマンドを判定コマンドとして用いても良い。EJL INQUIRE NEMEコマンドは、プリンタの機種名を問い合わせるコマンドであり、受信されると直ちに機種名を記述した応答が返信される。EJL VALUE PAGESIZEコマンドは、プリンタにおいて現在選択されている用紙のサイズを問い合わせるコマンドであり、受信されると直ちに用紙のサイズが記述された応答が返される。
【０１５５】
上記第１および第２実施例では、プリンタコントローラ８０は、並行して複数の印刷ジョブを処理することができないが、プリンタコントローラ８０が２以上の印刷ジョブを並行して処理することができることとしても良い。例えば、プリンタコントローラ８０が並行して２つの印刷ジョブを処理して、各印刷ジョブに係る印刷を１枚ずつ交互にプリンタエンジン９０に実行させることができる構成としても良い。係る場合には印刷ジョブ制御部６０は、２つのコネクションを介して、並行して２つの印刷ジョブを受信することができるように構成される。そして、印刷ジョブ制御部６０は、３以上のコネクションが保持されている場合は、最も先に確立されたコネクションと２番目に確立されたコネクションから送信される印刷ジョブを優先して受信し、３番目以降に確立されてコネクションを介して印刷ジョブを送信しようとする送信機器については待機状態にさせれば良い。すなわち、ＴＣＰ／ＩＰ部１０が同時に保持できるコネクションの数より、印刷ジョブ制御部６０が並行して受信できる印刷ジョブの数が少ない場合には、送信機器が待機状態にさせられる場合があるので、本実施例のように印刷ジョブ制御部６０が即時受信可能状態であるか否かを判定する仕組みを設けることが有効である。
【０１５６】
上記第１および第２実施例において説明した分割モードおよび複製モードは、分散印刷の態様の一例であり、他の態様の分散印刷処理であっても良い。例えば、分散先プリンタの選択条件等は、適宜変更しても良い。具体的には、第１実施例において、分割モードにおいて分散先プリンタを選択する（ステップＳ２０６）際に、印刷中でないことを、選択条件からはずしても良い。こうすれば、例えば、選択された全ての分散先プリンタが印刷中であった場合、印刷が終了した分散先プリンタから順次、判定コマンドに対する応答が送信されてくるので、早く印刷が終了した分散先プリンタを用いて印刷を実行することができる。すなわち、判定コマンドを用いて印刷中のプリンタの予約をすることができる。
【０１５７】
上記第２実施例において、プリンタＰＲＴが備える占有許可部６２によって、プリンタＰＲＴの占有を管理する手法は、種々の変形が可能である。例えば、占有要求部５４３は、占有ＩＤ要求に代えて、自身のＩＰアドレスを送信することとし、占有要求には、占有ＩＤに代えて自身のＩＰアドレスを記述しても良い。かかる場合には、占有許可部６２は、送信されたＩＰアドレスを記録しておき、占有要求に対する許可通知および不許可通知の判断を、占有要求に記述されたＩＰアドレスに基づいて実行することとすれば良い。
【０１５８】
以上、本発明の実施例および変形例について説明したが、本発明はこれらの実施例および変形例になんら限定されるものではなく、その要旨を逸脱しない範囲内において種々の態様での実施が可能である。
【図面の簡単な説明】
【０１５９】
【図１】分散印刷システムの概略構成を示す説明図。
【図２】第１実施例に係る分散印刷システムの各機器の内部構成を示すブロック図。
【図３】通常印刷ジョブの受信について説明する説明図。
【図４】第１実施例に係る分散印刷処理の処理ルーチンを示す第１のフローチャート。
【図５】印刷ジョブデータについて説明する説明図。
【図６】分散先プリンタ選択処理の処理ルーチンを示すフローチャート。
【図７】第１実施例に係る分割モードにおける通信シーケンスの一例を示す説明図。
【図８】第１実施例に係る分散印刷処理の処理ルーチンを示す第２のフローチャート。
【図９】第１実施例に係る複製モードにおける通信シーケンスの一例を示す説明図。
【図１０】印刷ジョブが送信される通信シーケンスの一例を示す説明図。
【図１１】デッドロックの発生する場合の通信シーケンスを示す。
【図１２】デッドロックが発生する場合を概念的に示す説明図。
【図１３】第２実施例に係る分散印刷システムの各機器の内部構成を示すブロック図。
【図１４】占有予約処理の処理ルーチンを示すフローチャート。
【図１５】占有管理処理の処理ルーチンを示すフローチャート。
【図１６】占有解放処理の処理ルーチンを示すフローチャート。
【図１７】第２実施例に係る分散印刷処理ルーチンを示す第１のフローチャート。
【図１８】第２実施例に係る分割モードにおける通信シーケンスの一例を示す説明図。
【図１９】第２実施例に係る分散印刷処理ルーチンを示す第２のフローチャート。
【図２０】第２実施例に係る複製モードにおける通信シーケンスの一例を示す説明図。
【符号の説明】
【０１６０】
１０...ＴＣＰ／ＩＰ部
１１...アプリケーション
１２...印刷ジョブ送信部
１３...ＴＣＰ／ＩＰ部
２０...ＣＰＵ
３０...メモリ
３２...ＯＩＤ格納部
３４...分散先指定ファイル格納部
３６...バッファ
４０...ＳＮＭＰマネージャ
５０...分散制御部
５２...分散先選択部
５４...受信状態判定部
５６...印刷ジョブ送信部
６０...印刷ジョブ制御部
６１...応答部
６２...占有許可部
７０...ＳＮＭＰエージェント
８０...プリンタコントローラ
８２...プリンタバッファ
９０...プリンタエンジン
１００...カスタムネットワークボード
２００...ネットワークボード
４００...ヘッダ
４５０...データ部
５００...印刷ジョブデータ
５０１...ジョブ制御言語部
５０２...ページ記述言語部
５４１...コマンド送信部
５４２...応答受信部
５４３...占有要求部
５４４...通知受信部
ＰＲＴ１〜ＰＲＴ４...プリンタ
ＰＲＢ１、ＰＲＴ２...プリンタ本体
Ｐ１〜Ｐ８...パケット
ＣＬａ〜ＣＬｃ...クライアント
【図１】
2006338446.tif 000003
【図２】
2006338446.tif 000004
【図３】
2006338446.tif 000005
【図４】
2006338446.tif 000006
【図５】
2006338446.tif 000007
【図６】
2006338446.tif 000008
【図７】
2006338446.tif 000009
【図８】
2006338446.tif 000010
【図９】
2006338446.tif 000011
【図１０】
2006338446.tif 000012
【図１１】
2006338446.tif 000013
【図１２】
2006338446.tif 000014
【図１３】
2006338446.tif 000015
【図１４】
2006338446.tif 000016
【図１５】
2006338446.tif 000017
【図１６】
2006338446.tif 000018
【図１７】
2006338446.tif 000019
【図１８】
2006338446.tif 000020
【図１９】
2006338446.tif 000021
【図２０】
2006338446.tif 000022