(57)【特許請求の範囲】
【請求項１】
受信した印刷データを中間コード生成手段により中間コードデータに変換し、１ページ画像を複数の画像バンドに分割した構成を有する中間コード格納手段の対応するバンドに前記中間コードデータを格納していき、
１ページ分の前記中間コードデータが前記中間コード格納手段の各バンドに格納された後に、印刷実行手段が、前記中間コードデータを順次ビットマップデータに展開して、ビットマップデータ格納手段に格納し、前記ビットマップデータを印刷信号に変換した上で印刷エンジンに転送して、前記印刷エンジンを駆動した印刷を行う、プリンタであって、
各ページ毎に、前記印刷信号を前記印刷エンジンに転送する処理時間が、前記中間コードデータを順次ビットマップデータに展開してビットマップデータ格納手段に格納する処理時間を下回って、アンダーランエラーが生じるか否かを、前記印刷エンジンを駆動した印刷を開始する前に検証する、検証手段を備え、
前記検証手段は、１ページ分の前記中間コード格納手段のバンド本数をＮとし、ｉバンドの推測展開時間をＴＲ（ｉ）とし、ビットマップデータ格納手段のバンド本数をＮＵＭとし、印刷実行手段における１バンド分の前記印刷信号の印刷エンジンへの転送時間をＴＤＭＡとした場合に、
【数１】
0004144169.tif 000007
の関係を満たす場合にアンダーランエラーが発生しないと推定し、この関係を満たさない場合にアンダーランエラーが発生すると推定するとともに、
前記印刷エンジンを駆動した印刷を開始する前に、所定数のバンド数分だけ前記中間コードデータを前記ビットマップデータに展開して、前記ビットマップデータ格納手段に格納しておく、初期展開手段をさらに備え、
前記検証手段が事前に検証した結果、アンダーランエラーが発生すると推定した場合には、前記初期展開手段で展開しておくバンド数を増やす、ことを特徴とするプリンタ。
【請求項２】
前記推測展開時間ＴＲ（ｉ）は、中間コードデータの種類毎に展開時間を推測した値をテーブルとして保持する、ルックアップテーブルを検索することにより、定められる、ことを特徴とする請求項１に記載のプリンタ。
【請求項３】
前記ビットマップデータ格納手段のバンドの高さは、前記１画像バンドのバンドの高さと同じであり、
前記ビットマップデータ格納手段のバンド数は、前記中間コード格納手段のバンド数よりも、少ない数であり、
前記ビットマップデータ格納手段の各バンドを順番に使い回して、前記ビットマップデータを順次格納していく、
ことを特徴とする請求項１又は請求項２に記載のプリンタ。
【請求項４】
前記初期展開手段が初期展開するバンド数は、各ページ毎にその都度確保される数である、ことを特徴とする請求項１乃至請求項３のいずれかに記載のプリンタ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プリンタ、プリンタの制御方法、及び、そのためのプログラムを記録した記録媒体に関し、特に、実際に印刷エンジンを駆動した印刷を行う前に、アンダーランエラーが発生するか否かを検証するプリンタ、プリンタの制御方法、及び、そのためのプログラムを記録した記録媒体に関する。
【０００２】
【従来の技術】
一般に、プリンタは、パーソナルコンピュータ等のホストコンピュータから受信した印刷データ（Printer Description Language）を、例えば、複数のバンドに区分して、１バンド毎に中間コードデータに変換し圧縮した上で、一旦、中間コードバッファに格納する。そして、この中間コードバッファから１バンド毎に中間コードデータを読み出して、バンドバッファにビットマップデータとして展開した上で、印刷エンジンに転送することにより印刷を行う。
【０００３】
すなわち、プリンタの備えるメモリを効率的に使用するために印刷データを、１バンド毎に中間コードデータに変換した上で中間コードバッファに格納し、印刷を開始したのに応じて、バンド毎にバンドバッファにビットマップデータとして展開した上で、印刷エンジンに転送する。
【０００４】
このような方式のプリンタのうち、レーザプリンタのような電子写真プロセスを用いたプリンタでは、通常、光書き込み系や感光体（ドラム）等から構成される印刷エンジンの印刷スピードは一定である。したがって、印刷を開始した後に、中間コードデータからビットマップデータへの展開が遅れてしまうと、印刷エンジン側のスピードに間に合わなくなる。このような状態をアンダーランエラー（オーバランエラーともいう）という。アンダーランエラーが生じると正常な印刷結果が得られなくなる。
【０００５】
ここで、中間コードデータは、例えば、テキストデータの場合、各文字のビットマップデータとページ内の位置情報により、図形データの場合、その図形を規定したパスデータにより、イメージデータの場合、そのビットマップデータとページ内の位置情報により、構成される。このため、展開処理に長い時間が必要となる複雑な中間コードデータについては、中間コードの形式で印刷用のデータを保持するのではなく、事前にビットマップデータに展開してビットマップデータとして保持しておくことにより、上述のアンダーランエラーが発生しないようにしている。このような処理を事前展開処理という。
【０００６】
【発明が解決しようとする課題】
しかしながら、中間コードデータがどの程度の複雑度を有する場合に、事前展開処理をすればよいのかを、正確に判断することは困難であり、そのしきい値を適切に設定することは難しかった。
【０００７】
このため、ある程度の大きさのしきい値を設定し、実際に印刷を行い、アンダーランエラーが発生した場合には、複雑度のしきい値の設定を下げることにより、事前展開する中間コードデータの量を増やして、再度印刷を試みるしかなかった。このようにトライ・アンド・エラーにより印刷するため、複雑な印刷を行う場合には、同じ印刷を何度も繰り返さなければならず、正常な印刷結果を得るのに時間がかかってしまうという問題があった。
【０００８】
そこで本発明は、前記課題に鑑みてなされたものであり、印刷エンジンを駆動した印刷を開始する前に、アンダーランエラーが発生するか否かを推定し、アンダーランエラーが発生しない条件に変更した上で、印刷を開始するようにしたプリンタを提供することを目的とする。
【０００９】
【課題を解決するための手段】
上記課題を解決するため、本発明に係るプリンタは、受信した印刷データを中間コード生成手段により中間コードデータに変換し、１ページ画像を複数の画像バンドに分割した構成を有する中間コード格納手段の対応するバンドに前記中間コードデータを格納していき、１ページ分の前記中間コードデータが前記中間コード格納手段の各バンドに格納された後に、印刷実行手段が、前記中間コードデータを順次ビットマップデータに展開して、ビットマップデータ格納手段に格納し、前記ビットマップデータを印刷信号に変換した上で印刷エンジンに転送して、前記印刷エンジンを駆動した印刷を行う、プリンタであって、各ページ毎に、前記印刷信号を前記印刷エンジンに転送する処理時間が、前記中間コードデータを順次ビットマップデータに展開してビットマップデータ格納手段に格納する処理時間を下回って、アンダーランエラーが生じるか否かを、前記印刷エンジンを駆動した印刷を開始する前に検証する、検証手段を備え、
前記検証手段は、１ページ分の前記中間コード格納手段のバンド本数をＮとし、ｉバンドの推測展開時間をＴＲ（ｉ）とし、ビットマップデータ格納手段のバンド本数をＮＵＭとし、印刷実行手段における１バンド分の前記印刷信号の印刷エンジンへの転送時間をＴＤＭＡとした場合に、
【数２】
0004144169.tif 000002
の関係を満たす場合にアンダーランエラーが発生しないと推定し、この関係を満たさない場合にアンダーランエラーが発生すると推定するとともに、
前記印刷エンジンを駆動した印刷を開始する前に、所定数のバンド数分だけ前記中間コードデータを前記ビットマップデータに展開して、前記ビットマップデータ格納手段に格納しておく、初期展開手段をさらに備え、
前記検証手段が事前に検証した結果、アンダーランエラーが発生すると推定した場合には、前記初期展開手段で展開しておくバンド数を増やす、ことを特徴とする。
これにより、印刷エンジンを駆動した印刷を開始する前に、印刷するための各種の設定を、検証手段の検証結果に基づいて、変更することができ、アンダーランエラーが発生する可能性を可及的に低くすることができる。また、このように定量化してアンダーランエラーが発生するか否かを判断することにより、的確な推定判断をすることができる。さらに、初期展開手段で初期展開をすることにより、印刷信号を印刷エンジンに転送する処理時間が、中間コードデータを順次ビットマップデータに展開してビットマップデータ格納手段に格納する処理時間を下回りにくくなり、アンダーランエラーを発生しにくくできる。また、検証手段が事前に検証した結果、アンダーランエラーが発生すると推定した場合には、初期展開手段で展開しておくバンド数を増やすことにより、より一層、アンダーランエラーを発生しにくくできる。
【００１１】
さらに、前記推測展開時間ＴＲ（ｉ）は、中間コードデータの種類毎に展開時間を推測した値をテーブルとして保持する、ルックアップテーブルを検索することにより、定められるようにしてもよい。これにより、推測展開時間ＴＲ（ｉ）を、容易に定めることができる。
【００１２】
また、前記ビットマップデータ格納手段のバンドの高さは、前記１画像バンドのバンドの高さと同じであり、前記ビットマップデータ格納手段のバンド数は、前記中間コード格納手段のバンド数よりも、少ない数であり、前記ビットマップデータ格納手段の各バンドを順番に使い回して、前記ビットマップデータを順次格納していくようにしてもよい。これによりビットマップデータ格納手段の容量をできるだけ小さくすることができる。
【００１５】
また、前記初期展開手段が初期展開するバンド数は、各ページ毎にその都度確保される数であるようにしてもよい。これにより、各ページ毎に初期展開するバンド数を変えることができる。
【００１６】
一方、前記印刷エンジンを駆動した印刷を開始する前に、前記検証手段が事前に検証した結果に基づいて、所定数のバンド数分だけ前記中間コードデータを前記ビットマップデータに展開して、前記中間コード格納手段に格納しておく、事前展開手段をさらに備えるようにしてもよい。これにより、実際に印刷エンジンを駆動した印刷を開始した後の中間コードデータからビットマップデータに展開する時間をほとんどなくすことができ、アンダーランエラーを発生しにくくできる。
【００１７】
また、前記事前展開手段は、前記検証手段が事前に検証した結果、アンダーランエラーが発生すると推定したタイミングにあるバンドの中間コードデータを、事前に展開しておくようにしてもよい。これにより、極めて効果的に事前展開するバンドを選択することができる。
【００１８】
なお、本発明は上述した内容を実現するためのプリンタの制御方法としてとらえることもでき、また、そのためのプログラムを記録した記録媒体としてとらえることもできる。
【００１９】
【発明の実施の形態】
〔第１実施形態〕
本発明の第１実施形態に係るプリンタは、実際に印刷エンジンを駆動した印刷を開始する前に、予めアンダーランエラーが生じないと推定できるだけのバンドバッファのバンド本数を算出し、この算出された本数分のバンドをバンドバッファとして確保した後に印刷エンジンを駆動した印刷を開始することにより、アンダーランエラーが発生する可能性を可及的に少なくしたものである。より詳しくを以下に説明する。
【００２０】
図１は、本実施形態に係るプリンタ１０の内部構成を示すブロック図である。この図１に示すように、プリンタ１０には、ホストコンピュータ１５から印刷データが送信され、この印刷データに基づいた印刷が行われる。
【００２１】
プリンタ１０は、主として、ＣＰＵ（Central Processing Unit）２０と、ＲＯＭ（Read Only Memory）３０と、ＲＡＭ（Random Access memory）４０と、印刷エンジン５０とを備えて構成されている。
【００２２】
詳しくは後述するが、ＲＯＭ３０には、受信処理プログラム３１と、中間コード生成処理プログラム３２と、印刷処理プログラム３３と、中間コード展開処理プログラム３４と、ルックアップテーブル３５とが、不揮発的に格納されている。ＲＡＭ４０には、受信バッファ４１と、中間コードバッファ４２と、展開時間格納テーブル４３と、印刷ステータスフラグ格納領域４４と、バンドバッファ４５と、印刷キュー４６と、印刷情報格納領域４７と、バンド本数格納領域４８とが、揮発的に形成される。これらのＲＯＭ３０及びＲＡＭ４０については、ＣＰＵ２０が内部バスを介して任意にアクセスすることが可能である。なお、この図１においては、本実施形態の説明に必要なプログラムやテーブル等のみをＲＯＭ３０やＲＡＭ４０に開示してあるが、ここに示したもの以外のプログラムやテーブル等を備えていてもよい。
【００２３】
概略的なプリンタ１０の動作としては、ホストコンピュータ１５から受信した印刷データは、受信バッファ４１に格納される。そして、後述する印刷のための所定の処理がなされた後、バンドバッファ４５から印刷エンジン５０にビットマップデータがビデオ信号に変換されて送信され、印刷エンジン５０にて印刷が行われる。
【００２４】
本実施形態に係るプリンタ１０は、いわゆるレーザプリンタであり、印刷エンジン５０は、所定のエンジンスピードにて動作可能な電子写真式の画像形成プロセスエンジンである。すなわち、印刷エンジン５０は、感光体（ドラム）や、上記ビデオ信号に基づいて感光体（ドラム）上に露光する光書き込み系や、ロータリー現像器や、転写ドラムや、定着器や、給紙機構等から構成されている。一様に帯電させた感光体（ドラム）表面に、光書き込み系によって光を照射して静電潜像を形成し、逆極性に帯電させたトナーを付着させ、このトナー像をロータリー現像器及び転写ドラムにより、給紙機構から供給される印刷用紙に電気的な力で転写した後、定着器によって定着させることにより、印刷が行われる。
【００２５】
次に、図２に基づいて、本実施形態に係るプリンタ１０が備えるタスクについて説明する。この図２に示すように、このプリンタ１０は、受信タスクＴＫ３１と、中間コード生成タスクＴＫ３２と、印刷処理タスクＴＫ３３と、中間コード展開タスクＴＫ３４とを備えている。
【００２６】
受信タスクＴＫ３１は、上述したＣＰＵ２０がＲＯＭ３０から受信処理プログラム３１を読み込んで、所定の優先順位で実行することにより実現される。中間コード生成タスクＴＫ３２は、上述したＣＰＵ２０がＲＯＭ３０から中間コード生成処理プログラム３２を読み込んで、所定の優先順位で実行することにより実現される。印刷処理タスクＴＫ３３は、上述したＣＰＵ２０がＲＯＭ３０から印刷処理プログラム３３を読み込んで、所定の優先順位で実行することにより実現される。中間コード展開タスクＴＫ３４は、上述したＣＰＵ２０がＲＯＭ３０から中間コード展開処理プログラム３４を読み込んで、所定の優先順位で実行することにより実現される。なお、この図２においては、本実施形態の説明に必要なタスクのみを開示してあるが、プリンタ１０は、ここに示したもの以外のタスクを備えていてもよい。
【００２７】
図２に示す各タスクの処理内容を簡単に説明すると、受信タスクＴＫ３１は、ホストコンピュータ１５から印刷データを受信し、ＲＡＭ４０内に確保された受信バッファ４１に、この印刷データを格納する。中間コード生成タスクＴＫ３２は、受信バッファ４１に格納されている印刷データを読み出して、言語解釈を行って中間コードデータを生成し、これを中間コードバッファ４２に格納する。印刷処理タスクＴＫ３３は、予めアンダーランエラーが発生しない程度のバンド本数を算出し、この算出したバンド本数を有するバンドバッファ４５を用いて、印刷エンジン５０へビットマップイメージを転送する。この間、中間コード展開タスクＴＫ３４は、バンドバッファ４５のうち空いているバンドを見つけて、中間コードデータを展開したビットマップイメージを格納する。したがって、印刷処理タスクＴＫ３３と中間コード展開タスクＴＫ３４が協調して動作することにより、中間コードバッファ４２に格納された中間コードデータが、ビットマップデータに展開されて、印刷エンジン５０に送出されることとなる。各タスク間の同期処理及び排他制御等に関しては、リアルタイムマルチタスクオペレーティングシステムの機能（セマフォ）を用いて実現されるが、ここではその詳細な説明は省略する。また、ビットマップイメージの印刷エンジン５０への転送自体は、ＡＳＩＣ等のＤＭＡ転送機能を用いて行われるので、その間、ＣＰＵは他の処理をすることが可能である。
【００２８】
次に、上述した受信タスクＴＫ３１と、中間コード生成タスクＴＫ３２と、印刷処理タスクＴＫ３３と、中間コード展開タスクＴＫ３４の各処理内容について詳しく説明する。
【００２９】
まず、図３に示す受信処理プログラム３１の処理内容を示すフローチャートに基づいて、受信タスクＴＫ３１の処理内容を説明する。すなわち、受信タスクＴＫ３１は、図３に示す受信処理プログラム３１を実行することにより実現される。
【００３０】
図３に示すように、受信タスクＴＫ３１は、まずホストコンピュータ１５から印刷データを受信したかどうかを判断する（ステップＳ１０）。印刷データを受信していない場合（ステップＳ１０：Ｎｏ）には、このステップＳ１０の処理を繰り返して待機する。
【００３１】
一方、ホストコンピュータ１５から印刷データを受信した場合（ステップＳ１０：Ｙｅｓ）には、その受信した印刷データを、受信バッファ４１に格納する（ステップＳ１１）。そして、上述したステップＳ１０の処理に戻る。
【００３２】
次に、図４に示す中間コード生成処理プログラム３２の内容を示すフローチャートに基づいて、中間コード生成タスクＴＫ３２の処理内容を説明する。すなわち、中間コード生成タスクＴＫ３２は、図４に示す中間コード生成処理プログラム３２を実行することにより実現される。
【００３３】
図４に示すように、まず中間コード生成タスクＴＫ３２は、変数ｉに０を代入する（ステップＳ２０）。この変数ｉは、１ページ分の印刷データを複数のバンドに分割して区分した際の、各バンドを指定するための変数である。
【００３４】
次に、中間コード生成タスクＴＫ３２は、受信バッファ４１から印刷データを取得する（ステップＳ２１）。続いて、この取得した印刷データについて言語解釈を行い（ステップＳ２２）、１バンド分の中間コードデータを生成する（ステップＳ２３）。例えば、図５に示すような＃０〜＃Ｎ−１のＮ本の画像バンドに区分できる印刷データが、ホストコンピュータ１５からプリンタ１０に送信されてきたとする。また、図５の例では、印刷データの横幅が１２００ドットであり、１画像バンド分の高さが６４ラスタであるとする。但し、ホストコンピュータ１５からの印刷データは、先頭のデータから順番に送られてくるのではなく、その描画等がなされた順番に送られてくる。ホストコンピュータ１５は、ホストコンピュータ１５からの印刷データを受信バッファ４１に受信した順に格納していく。中間コード生成タスクＴＫ３２は、受信バッファに格納されている１ページ分の印刷データを格納された順に読み出して、言語解釈を行い、その解釈に基づいて、対応する画像バンドの中間コードデータを生成する。
【００３５】
次に、図４に示すように、中間コード生成タスクＴＫ３２は、この生成した中間コードデータを、中間コードデータＤＬ（ｉ）として、ＲＡＭ４０の中間コードバッファ４２に格納する（ステップＳ２４）。図６は、この中間コードバッファ４２の構成と、後述する展開時間格納テーブル４３の構成とを、示す図である。上記図５の例に示す印刷データにおいては、この図６に示す中間コードバッファ４２の中間コードデータＤＬ（０）に、印刷データなしを示す中間コードデータを格納する。なお、この図６からわかるように、中間コードデータは可変長データであり、各バンドのデータ量に応じて中間コードバッファ４２に格納される。中間コードデータには、文字へのポインタや、圧縮イメージへのポインタや、グラフィックオペレーション等が格納されている。
【００３６】
次に、図４に示すように、中間コード生成タスクＴＫ３２は、１バンド分の展開時間を推測する（ステップＳ２５）。本実施形態においては、図７に示すように、中間コードデータの種類毎に展開時間を格納したルックアップテーブル３５を用いて、展開時間の推測をする。すなわち、中間コード生成タスクＴＫ３２は、ＲＯＭ３０に格納されているルックアップテーブル３５を検索し、ステップＳ２３で生成した中間コードデータの種類に合致する種類の中間コードを見つけだし、対応する展開時間を取得する。図５の印刷データの例では、バンド＃０の中間コードデータは何も印刷しないことを示しているので、展開時間は０である。
【００３７】
次に、図４に示すように、中間コード生成タスクＴＫ３２は、この推測した展開時間を、推測展開時間ＴＲ（ｉ）として展開時間格納テーブル４３に格納する（ステップＳ２６）。図６に示すように、この展開時間格納テーブル４３は、中間コードバッファ４２の各バンドに対応して、各バンド毎に格納フィールドが設けられている。図５の印刷データの例では、展開時間格納テーブル４３における推測展開時間ＴＲ（０）に、０が格納される。
【００３８】
次に、図４に示すように、中間コード生成タスクＴＫ３２は、１ページ分の中間コードデータを生成し終えたかどうかを判断する（ステップＳ２７）。１ページ分の中間コードデータを生成し終えていない場合（ステップＳ２７：Ｎｏ）には、変数ｉに１を加える（ステップＳ２８）。そして、上述したステップＳ２１からの処理を繰り返す。
【００３９】
これらステップＳ２１〜ステップＳ２８の処理を繰り返すことにより、図５に示すように、印刷データのバンド＃１〜バンド＃Ｎ−１の中間コードデータＤＬ（１）〜ＤＬ（Ｎ−１）を生成して、中間コードバッファ４２に格納し、推測展開時間ＴＲ（１）〜ＴＲ（Ｎ−１）を求めて、展開時間格納テーブル４３に格納する。
【００４０】
一方、図４に示すステップＳ２７において、１ページ分の中間コードデータを生成し終えた場合（ステップＳ２７：Ｙｅｓ）には、印刷キュー４６へのキューイングを行う（ステップＳ２９）。図８は、本実施形態に係る印刷キュー４６の構成を示す図である。この図８に示すように、１ページ毎に印刷要求を印刷キュー４６に格納することにより、キューイングが行われる。印刷キュー４６に格納された各印刷要求は、それぞれ、中間コードバッファ４２の中間コードデータＤＬ（０）を指し示すポインタと、展開時間格納テーブル４３の推測展開時間ＴＲ（０）を指し示すポインタとを、保持している。また、本実施形態においては、印刷用紙のサイズやトレイの指定などの印刷情報は、印刷情報格納領域４７に格納されているので、各印刷要求は、その印刷情報を格納した位置を指し示すポインタも保持している。
【００４１】
図４に示すステップＳ２９のキューイングが終了することにより、１ページ分の中間コードデータ生成のための処理が完了したことになるので、中間コード生成タスクＴＫ３２は上述したステップＳ２０の処理に戻ることとなる。
【００４２】
次に、図９及び図１０に示す印刷処理プログラム３３の処理内容を示すフローチャートに基づいて、印刷処理タスクＴＫ３３の処理内容を説明する。すなわち、印刷処理タスクＴＫ３３は、図９及び図１０に示す印刷処理プログラム３３を実行することにより実現される。
【００４３】
まず、図９に示すように、印刷処理タスクＴＫ３３は、印刷キュー４６が空であるかどうかを判断する（ステップＳ４０）。印刷キュー４６が空である場合（ステップＳ４０：Ｙｅｓ）には、このステップＳ４０の処理を繰り返して待機する。
【００４４】
一方、印刷キュー４６が空でない場合（ステップＳ４０：Ｎｏ）には、初期展開するバンドの本数のデフォルト値である３を、変数ＮＵＭに代入する（ステップＳ４１）。つまり、この変数ＮＵＭは、バンドバッファ４５に形成されるバンドの本数を示しており、後述するように、アンダーランエラーが発生すると推定される場合には順次増えていく正の整数である。また、本実施形態においては、このバンド本数ＮＵＭは、バンド本数格納領域４８に格納される。
【００４５】
次に、印刷処理タスクＴＫ３３は、１バンド分のビットマップデータを印刷エンジン５０へＤＭＡ転送するのに要する時間を、固定値として、変数ＴＤＭＡに代入する（ステップＳ４２）。ここで、ＤＭＡ転送時間ＴＤＭＡには、ＣＰＵがＤＭＡ転送をする際にＤＭＡ設定等を行う時間も含まれているが、その時間は微少であるので、本実施形態ではＣＰＵで消費する時間は無視できるものとしている。続いて、変数Ｓと変数ｉとに０を代入する（ステップＳ４３）。変数Ｓは、各バンド＃０〜＃Ｎ−１の中間コードデータＤＬ（０）〜ＤＬ（Ｎ−１）を、順次、ビットマップデータに展開して印刷エンジン５０に送信する場合における、推測展開時間ＴＲとＤＭＡ転送時間ＴＤＡＭとの差分が累積されていく変数である（但し、Ｓ≧０）。変数ｉは、各バンド＃０〜＃Ｎ−１を指定するための変数である。
【００４６】
次に、印刷処理タスクＴＫ３３は、変数ｉが１ページ分のバンド数よりも大きいかどうかを判断する（ステップＳ４４）。変数ｉが１ページ分のバンド数よりも大きくない場合（ステップＳ４４：Ｎｏ）、つまり、変数ｉが１ページ分のバンド数以下である場合には、Ｓ＋ＴＲ（ｉ）−ＴＤＭＡを、Ｓに代入する（ステップＳ４５）。
【００４７】
具体的には、印刷処理タスクＴＫ３３は、展開時間格納テーブル４３を検索して展開時間ＴＲ（ｉ）を取得する。また、推測展開時間ＴＲ（ｉ）からＤＭＡ転送時間ＴＤＭＡを差し引いた時間というのは、ＤＭＡ転送されるタイミングに対する、展開処理されている中間コードデータの時間的余裕度を示している。これをステップＳ４５では変数Ｓとして累積加算していくのである。変数Ｓが小さい状態というのは、推測展開時間−ＤＭＡ転送時間の累積が小さく、ＤＭＡ転送のタイミングよりも展開処理が先行しており、時間的余裕のある状態を示している。変数Ｓが大きい状態というのは、推測展開時間−ＤＭＡ転送時間の累積が大きく、ＤＭＡ転送のタイミングと展開処理とが近接しており、時間的余裕のない状態を示している。
【００４８】
次に、印刷処理タスクＴＫ３３は、変数Ｓが０より小さいかどうかを判断する（ステップＳ４６）。変数Ｓが０より小さくない場合（ステップＳ４６：Ｎｏ）、つまり、変数Ｓが０以上の場合には、バンド本数ＮＵＭ＞変数Ｓ／ＤＭＡ転送時間ＴＤＭＡの関係が成立するかどうかを判断する（ステップＳ４７）。
【００４９】
ここで、アンダーランエラーが発生しないようにするための条件を検討する。
【００５０】
【数３】
0004144169.tif 000003
の関係が成立する場合には、アンダーランエラーが発生しないことがわかる。この式（１）の左辺は、変数Ｓに相当するので、
変数Ｓ＜バンド本数ＮＵＭ×ＤＭＡ転送時間ＴＤＭＡ        …（２）
の関係が成立する場合には、アンダーランエラーが発生しないことがわかる。式（２）の右辺は、印刷エンジン５０を駆動した印刷を開始する前にバンドバッファ４５に初期展開しておくバンド本数ＮＵＭ分だけＤＭＡ転送するのに要する時間を示している。この予め設定された余裕時間よりも、「推測展開時間」と「１本のバンドをＤＭＡ転送するのに要する時間」との差分の累積である変数Ｓの方が、小さければ、アンダーランエラーは発生しない状態であると推定判断することができる。この式（２）を変形すると、バンド本数ＮＵＭ＞変数Ｓ／ＤＭＡ転送時間ＴＤＭＡとなり、このステップＳ４７の条件となる。
【００５１】
バンド本数ＮＵＭ＞変数Ｓ／ＤＭＡ転送時間ＴＤＭＡの関係が成立する場合（ステップＳ４７：Ｙｅｓ）には、アンダーランエラーが発生しないと推定できるので、変数ｉに１を加えて（ステップＳ４８）、上述したステップＳ４４からの処理を繰り返す。
【００５２】
一方、バンド本数ＮＵＭ＞変数Ｓ／ＤＭＡ転送時間ＴＤＭＡの関係が成立しない場合（ステップＳ４７：Ｎｏ）には、アンダーランエラーが発生するおそれがあると推定判断できるので、初期展開するバンド本数ＮＵＭに１を加える（ステップＳ４９）。すなわち、初期展開するバンド本数ＮＵＭを増やせば、予め設定された余裕時間であるＮＵＭ×ＴＤＭＡが増えることとなる。このため、アンダーランエラーを発生しない方向に、もっていくことができる。このステップＳ４９の後、上述したようにステップＳ４８で変数ｉに１を加えて、ステップＳ４４からの処理を繰り返す。
【００５３】
これに対して、上述したステップＳ４６において、変数Ｓが０より小さいと判断した場合（ステップＳ４６：Ｙｅｓ）には、変数Ｓを０にし（ステップＳ５０）、上述同様に変数ｉに１を加えて（ステップＳ４８）、ステップＳ４４からの処理を繰り返す。ここで、変数Ｓが０より小さくならないようにするのは、次のような理由によるものである。例えば、図１１に示すように、３本のバンドＢ１〜Ｂ３を有するバンドバッファ４５の場合を想定すると、これら３本のバンドＢ１〜Ｂ３のすべてに中間コードデータを展開したビットマップデータが格納され、且つ、これらのビットマップデータがまだ印刷エンジン５０に送信されていない状態も生じ得る。このような状態においては、それ以上中間コードデータを展開しても格納するバンドがない。この図１１の状態が、変数Ｓが０の状態であるため、変数Ｓが０未満になることがあり得ないのである。
【００５４】
図９に戻り、上述したステップＳ４４において、変数ｉ＞１ページ分のバンド数であると判断した場合（ステップＳ４４：Ｙｅｓ）には、１ページ分のバンドの変数Ｓの累積加算処理が終了したことになり、初期展開するバンド本数ＮＵＭが算出されたことになる。このため、図１０に示すように、印刷処理タスクＴＫ３３は、ＮＵＭ本分のバンドを有するバンドバッファ４５の領域を、ＲＡＭ４０に確保する（ステップＳ６０）。
【００５５】
次に、中間コードバッファ４２からＮＵＭ本分の中間コードデータを読み出して、ビットマップデータに展開し、バンドバッファ４５に格納する（ステップＳ６１）。つまり、初期展開を行う。続いて、ＮＵＭ本分のバンドに対応する印刷ステータスフラグ格納領域４４の印刷ステータスフラグを、展開済みにする（ステップＳ６２）。
【００５６】
図１２は、バンド本数ＮＵＭが３本の場合における、印刷ステータスフラグ格納領域４４とバンドバッファ４５の構成を示す図である。この図１２からわかるように、バンドバッファ４５の各バンドＢ１〜Ｂ３に対応して、印刷ステータスフラグ格納領域４４の印刷ステータスフラグＦ１〜Ｆ３が設けられている。つまり、印刷ステータスフラグの数は、バンド本数ＮＵＭと同じになる。本実施形態においては、例えば、各印刷ステータスフラグＦ１〜Ｆ３が、０の場合には、ビットマップデータが展開済みであることを表しており、１の場合には、後述するように、ビットマップデータが転送済みであることを表している。したがって、ステップＳ６２においては、印刷ステータスフラグＦ１〜Ｆ３を、それぞれ０にする。なお、この図１２に示すバンドバッファ４５の横幅は１２００ドットであり、１バンド分の高さは６４ラスタである。つまり、バンドバッファ４５の１バンド分の高さ及び横幅は、図５に示した印刷データの１画像バンド分の高さ及び横幅と、同じである。
【００５７】
次に、図１０に示すように、印刷処理タスクＴＫ３３は、印刷エンジン５０へのビットマップデータの転送を開始する（ステップＳ６３）。すなわち、図１２に示すように、バンドバッファ４５の各バンドＢ１〜Ｂ３に展開されたビットマップデータを、輪番に印刷エンジン５０にビデオ信号（印刷信号）として送信する。つまり、バンドＢ１→バンドＢ２→バンドＢ３→バンドＢ１…、というように、順番にサイクリックにビットマップデータを印刷エンジン５０に送信する。具体的には、バンドバッファ４５からＤＭＡ転送により、ビットマップデータをＡＳＩＣ（Application Specific IC）５２に送信する。このＡＳＩＣ５２においては、ビットマップデータに基づいて、輪郭平滑化や補正などが行われる。続いて、ＰＷＭ（Pulse Width Modulation）５４でパルス幅変調が行われ、ビデオ信号として印刷エンジン５０に送信される。そして、このビデオ信号を受信した印刷エンジン５０で、実際の印刷用紙への印刷が一定のエンジンスピードで行われる。
【００５８】
再び図１０に示すように、印刷エンジン５０への転送が完了したバンドに対応する印刷ステータスフラグを、転送済みにする（ステップＳ６４）。すなわち、例えば図１２において、バンドＢ１の転送が完了した場合には、印刷ステータスフラグＦ１を０から１に変更して、転送済みであることを表すようにする。
【００５９】
次に、図１０に示すように、印刷処理タスクＴＫ３３は、１ページ分の中間コードデータについての印刷エンジン５０への転送が、終了したかどうかを判断する（ステップＳ６５）。１ページの転送が終了していない場合（ステップＳ６５：Ｎｏ）には、上述したステップＳ６３からを繰り返す。一方、１ページ分の転送が終了した場合（ステップＳ６５：Ｙｅｓ）には、次のページの処理をすべく、ステップＳ４０に戻る。
【００６０】
次に、図１３に示す中間コード展開処理プログラム３４の処理内容を示すフローチャートに基づいて、中間コード展開タスクＴＫ３４の処理内容を説明する。すなわち、中間コード展開タスクＴＫ３４は、図１３に示す中間コード展開処理プログラム３４を実行することにより実現される。
【００６１】
図１３に示すように、中間コード展開タスクＴＫ３４は、中間コードバッファ４２に、中間コードデータがあるかどうかを判断する（ステップＳ７０）。中間コードバッファ４２に中間コードデータがない場合（ステップＳ７０：Ｎｏ）には、このステップＳ７０の処理を繰り返して待機する。
【００６２】
中間コードバッファ４２に中間コードデータがある場合（ステップＳ７０：Ｙｅｓ）には、図１２に示す印刷ステータスフラグ格納領域４４の印刷ステータスフラグを検索し、転送済みのステータスのものが存在するかどうかを判断する（ステップＳ７１）。転送済みのステータスのものが存在しない場合には、このステップＳ７１の処理を繰り返して待機する。
【００６３】
一方、転送済みのステータスのものが存在する場合には、その転送済みの印刷ステータスフラグに対応するバンドバッファ４５のバンドに、中間コードデータをビットマップデータとして展開する（ステップＳ７２）。続いて、その印刷ステータスフラグを０にして、展開済みであることを表すようにする（ステップＳ４３）。そして、上述したステップＳ７０の処理に戻る。
【００６４】
以上のように、本実施形態に係るプリンタ１０によれば、実際に印刷エンジン５０を駆動した印刷を開始する前に、アンダーランエラーが発生するかどうかを事前検証し、アンダーランエラーが発生すると推定判断した場合には、プリンタ１０の印刷のための設定をアンダーランエラーが発生しないように変更することとしたので、実際に印刷エンジン５０を駆動した印刷が開始された際に、アンダーランエラーが発生する可能性を可及的に低くすることができる。
【００６５】
具体的には、実際に印刷エンジン５０を駆動した印刷を開始する前に、アンダーランエラーが発生しないと推定できる程度の本数のバンドをバンドバッファ４５に確保してから、実際に印刷エンジン５０を駆動した印刷を開始することとしたので、印刷エンジン５０を駆動した印刷の際にアンダーランエラーが発生する可能性を可及的に少なくすることができる。
【００６６】
さらに、アンダーランエラーが発生しないと推定できる程度のバンド本数ＮＵＭの算出にあたっては、上述した、
【数４】
0004144169.tif 000004
の関係が成立する場合にはアンダーランエラーが発生しないと推定し、この関係が成立しない場合には、アンダーランエラーが発生すると推定することとした。この式（１）の関係を用いることにより、的確にアンダーランエラーの発生を予測することができ、適切なバンド本数ＮＵＭを算出することができるようになる。
【００６７】
また、本実施形態においては、バンド本数ＮＵＭを式（１）の条件を満たす最小の整数に設定することとしたので、中間コードデータの展開に要する時間を可及的に短くしつつ、アンダーランエラーが発生しないようにすることができる。すなわち、バンド本数ＮＵＭを増やせば増やすほど、アンダーランエラーが発生しにくくなるが、そのバンド本数ＮＵＭ分の展開が終了してからでないと印刷エンジン５０を駆動した印刷を行うことができず、印刷開始までの待ち時間が多くなってしまう。このため、本実施形態では、式（１）の条件を満たすバンド本数ＮＵＭのうち最小のものを用いることとしたので、印刷開始までの待ち時間を可能な限り短くしつつ、アンダーランエラーが発生しないようにすることができる。
【００６８】
〔第２実施形態〕
上述した第１実施形態においては、印刷前の事前検証によりアンダーランエラーが発生する予測された場合には、初期展開するバンドバッファのバンド本数ＮＵＭを増やすことにより、このアンダーランエラーの発生を回避しようとしたが、本発明の第２実施形態においては、印刷前の事前検証によりアンダーランエラーが発生すると予測されるタイミングにある中間コードデータＤＬ（ｉ）を事前展開するこにより、このアンダーランエラーの発生を回避しようとするものである。より詳しくを、以下に説明する。
【００６９】
なお、本実施形態においては、上述した第１実施形態と異なる部分のみを説明するものとする。
【００７０】
図１４は、本実施形態に係る印刷処理プログラム３３の処理内容を示すフローチャートの一部である。すなわち、この図１４は上述した第１実施形態における図９に示した処理に相当するフローチャートであり、図１０に示した処理については、第１実施形態と同様である。
【００７１】
図１４に示すように、ステップＳ４７において、バンド本数ＮＵＭ＞変数Ｓ／ＤＭＡ転送時間ＴＤＭＡの関係が成立しないと判断した場合（ステップＳ４７：Ｎｏ）には、アンダーランエラーが発生するおそれがあると推定判断できるので、中間コードデータＤＬ（ｉ）を中間コードバッファ４２にビットイメージデータとして事前に展開しておく（ステップＳ５１）。つまり、中間コードデータＤＬ（ｉ）の事前展開を行う。
【００７２】
次に、変数Ｓから推定展開時間ＴＲ（ｉ）を差し引いておく（ステップＳ５２９）。これは、先のステップＳ４５において、変数Ｓに推定展開時間ＴＲ（ｉ）を累積的に加えているが、ステップＳ５１において中間コードデータＤＬ（ｉ）については事前展開したので、印刷エンジン５０を駆動した印刷を開始した後にさらなる展開時間は発生しない。このため、ステップＳ５２において、一度加算した推定展開時間ＴＲ（ｉ）を、減算しておくのである。そして、先に説明したステップＳ４８の処理にて変数ｉに１を加えて、ステップＳ４４に戻る。
【００７３】
以上のように、本実施形態に係るプリンタ１０によれば、実際に印刷エンジン５０を駆動した印刷を開始する前に、アンダーランエラーが発生するかどうかを事前検証し、アンダーランエラーが発生すると推定判断した場合には、プリンタ１０の印刷のための設定をアンダーランエラーが発生しないように変更することとしたので、実際に印刷エンジン５０を駆動した印刷が開始された際に、アンダーランエラーが発生する可能性を可及的に低くすることができる。
【００７４】
具体的には、実際に印刷エンジン５０を駆動した印刷を行う前に、アンダーランエラーが発生しないかどうかを事前検証し、アンダーランエラーが発生するおそれがあると推定判断した中間コードデータＤＬ（ｉ）については、印刷エンジン５０を駆動を駆動した印刷を開始する前に中間コードバッファ４２にビットイメージデータとして事前展開をしておくこととしたので、実際に印刷エンジン５０を駆動した印刷を行う際にアンダーランエラーが発生する可能性を可及的に少なくすることができる。
【００７５】
これは、アンダーランエラーが発生すると予測されるタイミングの中間コードデータをビットイメージデータに事前展開しておけば、印刷エンジン５０を駆動した印刷を行う際に、もはや展開処理をする必要がないためである。
【００７６】
さらに、アンダーランエラーが発生するタイミングにある中間コードデータＤＬ（ｉ）であるかどうかを、上述した
【数５】
0004144169.tif 000005
の関係が成立するかどうかで判断することとした。このため、的確にアンダーランエラーの発生するタイミングを予測することができ、適切な中間コードデータＤＬ（ｉ）を事前展開することができるようになる。
【００７７】
なお、本発明は上記実施形態に限定されず種々に変形可能である。例えば、上述した第１実施形態においては、算出されたバンド本数ＮＵＭのすべてにビットマップデータの初期展開を行うこととしたが、算出されたバンド本数ＮＵＭ−１だけのバンドにビットマップデータの初期展開を行うようにしてもよい。算出されたバンド本数ＮＵＭのすべてにビットマップデータの初期展開を行う方が、算出されたバンド本数ＮＵＭ−１だけのバンドにビットマップデータの初期展開を行うよりも、アンダーランエラーが発生する可能性は低くなる。しかし、印刷エンジン５０を駆動した印刷を開始するまでの時間は、長くなってしまう。
【００７８】
これに対して、算出されたバンド本数ＮＵＭ−１だけのバンドにビットマップデータの初期展開を行う方が、算出されたバンド本数ＮＵＭのすべてにビットマップデータの初期展開を行うよりも、印刷エンジン５０を駆動した印刷を開始するまでの待ち時間を短くすることができる。しかし、アンダーランエラーが発生する可能性は高くなってしまう。
【００７９】
このことは、上記第２実施形態においても、同様である。すなわち、第２実施形態においては、初期展開するバンド本数を３本に固定しているが、これを２本にしてもよい。
【００８０】
なお、バンドバッファのバンド本数ＮＵＭが、印刷データのバンド数Ｎと同じ場合は、すべての中間コードデータを初期展開することを意味する。このような印刷を、特に、ページプロテクト印刷という。
【００８１】
また、上述した第１実施形態においては、バンドバッファ４５のバンド本数ＮＵＭのデフォルト値を３とし、第２実施形態においてもバンドバッファ４５のバンド本数を３としたが、この値に限るものではない。
【００８２】
さらに、上述した第１及び第２実施形態における式（１）を、次の式（３）のように変形してもよい。
【００８３】
【数６】
0004144169.tif 000006
この式（３）においては、バンドバッファ４５のバンド本数ＮＵＭについて、よりアンダーランエラーが発生しないようにするために、余裕変数αを加算している。例えば、α＝０．５や、α＝１．５とすることにより、バンド本数ＮＵＭの本数について余裕を持った本数を設定することができる。すなわち、式（３）関係を満たす正の整数であるＮＵＭをバンド本数として用いることにより、よりアンダーランエラーを発生しにくいようにできる。
【００８４】
さらに、上述した第２実施形態においては、ステップＳ５１で事前展開をした後に、ステップＳ６１で初期展開することとしたが、この順序は逆でもよく、さらには事前展開と初期展開とを並行して行うようにしてもよい。
【００８５】
また、上述の実施形態で説明した各処理については、これら各処理を実行するためのプログラムをフロッピーディスク、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＲＯＭ、メモリカード等の記録媒体に記録して、記録媒体の形で頒布することが可能である。この場合、このプログラムが記録された記録媒体をプリンタ１０に読み込ませ、実行させることにより、上述した実施形態を実現することができる。
【００８６】
また、プリンタ１０は、オペレーティングシステムや別のアプリケーションプログラム等の他のプログラムを備える場合がある。この場合、プリンタ１０の備える他のプログラムを活用すべく、記録媒体にはそのプリンタ１０が備えるプログラムの中から、本実施形態と同等の処理を実現するプログラムを呼び出すような命令を記録するようにしてもよい。
【００８７】
さらに、このようなプログラムは、記録媒体の形ではなく、ネットワークを通じて搬送波として頒布することも可能である。ネットワーク上を搬送波の形で伝送されたプログラムは、最終的にプリンタ１０に取り込まれて、このプログラムをプリンタ１０が実行することにより上述した実施形態を実現することができる。
【００８８】
また、記録媒体にプログラムを記録する際や、ネットワーク上を搬送波として伝送される際に、プログラムの暗号化や圧縮化がなされている場合がある。この場合には、これら記録媒体や搬送波からプログラムを読み込んだプリンタ１０は、そのプログラムの復号化や伸張化を行った上で、実行する必要がある。
【００８９】
【発明の効果】
以上説明したように、本発明によれば、実際に印刷エンジンを駆動した印刷を開始する前に、検証手段でアンダーランエラーが発生するかどうかを推定判断することとしたので、アンダーランエラーが発生する可能性を可及的に低くすることができる。
【図面の簡単な説明】
【図１】本発明の１つの実施形態に係るプリンタのハードウェア構成の一例を示す図。
【図２】本実施形態に係るプリンタが備えるタスク構成の一例を示す図。
【図３】受信処理タスクの処理内容を説明するフローチャートを示す図。
【図４】中間コード生成タスクの処理内容を説明するフローチャートを示す図。
【図５】印刷データを複数のバンドに区分した場合の１つの実例を示す図。
【図６】本実施形態に係る中間コードバッファと展開時間格納テーブルとの構成の一例を示す図。
【図７】本実施形態に係るルックアップテーブルの構成の一例を示す図。
【図８】本実施形態に係る印刷キューの構成の一例を示す図。
【図９】本実施形態に係る印刷処理タスクの処理内容を説明するフローチャートを示す図（その１）。
【図１０】本実施形態に係る印刷処理タスクの処理内容を説明するフローチャートを示す図（その２）。
【図１１】バンドバッファのすべてのバンドにビットマップデータが展開され、且つ、印刷エンジンへ転送されていない状態を示す図。
【図１２】本実施形態に係る印刷ステータスフラグ格納領域とバンドバッファの構成の一例を示す図。
【図１３】中間コード展開タスクの処理内容を説明するフローチャートを示す図。
【図１４】本発明の別の変形例における印刷処理タスクの処理内容の一部を説明するフローチャートを示す図。
【符号の説明】
１０  プリンタ
１５  ホストコンピュータ
２０  ＣＰＵ
３０  ＲＯＭ
３１  受信処理プログラム
３２  中間コード生成処理プログラム
３３  印刷処理プログラム
３４  中間コード展開処理プログラム
３５  ルックアップテーブル
４０  ＲＡＭ
４１  受信バッファ
４２  中間コードバッファ
４３  展開時間格納テーブル
４４  印刷ステータスフラグ格納領域
４５  バンドバッファ
４６  印刷キュー
４７  印刷情報格納領域
４８  バンド本数
５０  印刷エンジン
【図１】
0004144169.tif 000008
【図２】
0004144169.tif 000009
【図３】
0004144169.tif 000010
【図４】
0004144169.tif 000011
【図５】
0004144169.tif 000012
【図６】
0004144169.tif 000013
【図７】
0004144169.tif 000014
【図８】
0004144169.tif 000015
【図９】
0004144169.tif 000016
【図１０】
0004144169.tif 000017
【図１１】
0004144169.tif 000018
【図１２】
0004144169.tif 000019
【図１３】
0004144169.tif 000020
【図１４】
0004144169.tif 000021