画像形成装置
【課題】 ホストから受信したデータを複数のバッファブロックに格納して処理する画像形成装置において、ブロック型の転送方式を採用した場合、ホストから印刷ジョブが最後まで連続して送信されてこない場合に、受信済みのデータが後段に転送されず、これに含まれる印字データが即座に印刷されないという問題が生じていた。
【解決手段】 ジョブ識別部201で、受信した印刷ジョブがパケット化されているジョブか否かを判別し、パケット化されていない印刷ジョブの場合は、受信データ転送手段を非ブロック型で動作させる。
【解決手段】 ジョブ識別部201で、受信した印刷ジョブがパケット化されているジョブか否かを判別し、パケット化されていない印刷ジョブの場合は、受信データ転送手段を非ブロック型で動作させる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ホストから受信した印字データを複数のバッファブロックに格納して処理する画像形成装置において、バッファブロックに格納した印字データを後段に転送する際のデータ転送方式に関するものである。
【背景技術】
【0002】
従来、ホストから受信した印刷ジョブを画像形成出力する装置において、受信データを複数のバッファブロックに格納して処理することで、データ処理効率を高めるようにした装置が考案されている(例えば、特許文献1、特許文献2参照)。
【特許文献1】特開2001-109596号公報
【特許文献2】特開2001-184191号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
このように、受信データをバッファブロックに格納して処理する画像形成装置では、一般的に、受信データが1ブロック分溜まった時点で後段にデータを転送している(これをブロック型の転送方式と呼ぶ)。
【0004】
なぜなら、バッファブロックを用いるのに非ブロック型で転送した場合、データ転送効率を高めることができないからである。
【0005】
ここで、その具体例を説明する。
【0006】
図3に示すように、ホストから4KB×4回=計16KBのPDLデータ301を受信し、これを16KBのバッファブロック302で処理したとする。
【0007】
図4は、ブロック型の転送方式で処理した場合の例を示し、図示した通り、使用するバッファブロックは1つ(ブロックA)、PDLインタプリタへの転送回数も1回で済む。
【0008】
図5は、非ブロック型の転送方式で処理した場合の例を示し、図示した通り、使用する受信バッファブロックは4つ(ブロックA〜D)、転送回数も4回必要となる。
【0009】
このように、受信データをバッファブロックに格納して処理する場合、ブロック型の転送方式を採用した方が、メモリ使用効率もデータ転送効率も高い。
【0010】
しかしながら、ブロック型の転送方式の場合、以下のようなケースで問題が生じる。
【0011】
図6に示すとおり、ホストからのデータ送信が途中(4KB×2回=計8KB受信した時点)で途絶えたとする。
【0012】
この場合、ブロック型の転送方式では、受信したデータが1ブロック分のサイズ(16KB)に満たないので、この時点では未だPDLインタプリタにデータが転送されない。
【0013】
したがって、受信済みの8KBに1ページ分の印字データが含まれていたとしても、この時点では未だ印刷されない。
【0014】
これに対し、非ブロック型の転送方式の場合、受信済みの8KBのデータは、この時点で既にPDLインタプリタに転送されているので、1ページ分即座に印刷される。
【0015】
このように、ブロック型の転送方式では、印刷ジョブが最後まで連続して送信されてくる場合には、データ処理効率が高いというメリットが得られる一方で、印刷ジョブが最後まで連続して送信されてこない場合に、上述の問題が生じていた。
【課題を解決するための手段】
【0016】
上述した課題を解決するために、請求項1記載の発明は、ホストから受信した印刷ジョブを画像形成出力する画像形成装置であって、印刷ジョブを受信する受信手段と、前記受信した印刷ジョブかパケット化された印刷ジョブであるか否かを識別するジョブ識別手段と、前記受信した印刷ジョブに含まれる印字データを格納する複数の受信バッファブロックと、前記受信バッファブロックに格納した印字データを、ブロック型、または、非ブロック型で後段に転送する受信データ転送手段とを備え、前記ジョブ識別手段は、前記受信した印刷ジョブがパケット化された印刷ジョブであるか否かに基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする。
【0017】
また、請求項2に記載の発明は、請求項1に記載の画像形成装置において、ホストとの接続が断絶した場合に、受信中の印刷ジョブを終了させるか否かを択一的に選択する選択手段をさらに備え、前記ジョブ識別手段は、前記選択手段の選択結果に基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする。
【発明の効果】
【0018】
本発明によれば、受信データをバッファブロックに格納して処理する画像形成装置において、データ処理効率を高めるという効果を保ちつつ、ブロック型の転送方式で発生する課題を解決することができる。
【発明を実施するための最良の形態】
【0019】
次に、本発明の詳細を実施例の記述に従って説明する。
【実施例1】
【0020】
<ハード構成>
図1は、本発明が適用される画像形成装置のハード構成の概要を示すブロック図である。
【0021】
図示するように、画像形成装置1は、全体の制御を司るプリンタ・コントローラ(コントローラ)10、ユーザからの指示を受け付けたり表示を行うパネル20、印刷を行うプリンタ・エンジン30、からなる。
【0022】
コントローラ10は、CPU101のCPUバス102に、ローカル・インターフェース(ローカルI/F)103、ネットワーク・インターフェース(Network I/F)104、画像生成器105、プリンタ・エンジン・インターフェース(プリンタI/F)106、パネル・インターフェース(パネルI/F)107、RAM108、ROM109、NVRAM110が接続されている。
【0023】
ローカルI/F103は、USB等のインターフェースで接続するホスト2aから印刷ジョブを受信する。
【0024】
Network I/F104は、ネットワーク3に接続する複数のホスト(2b、2c)から印刷ジョブを受信する。
【0025】
画像生成器105は、受信した印刷ジョブを解釈して得られたDisplay Listからビットマップ画像を生成する。
【0026】
プリンタI/F106は、画像生成器105で生成されたビットマップ画像をプリンタ・エンジン40に出力する。
【0027】
パネルI/F107は、パネル20に接続し、パネル20より入力されたユーザの指示をCPU101に通知したり、ROM109、RAM108に格納されている画面情報や設定情報をパネル20に表示する。
【0028】
RAM108は、受信した印刷ジョブを格納したり、CPU101の作業領域として使用されるメモリである。
【0029】
ROM109は、制御プログラムやパネル20に表示する画面情報が格納されたメモリである。
【0030】
NVRAM110は、各種設定情報を保持する不揮発性のメモリである。
【0031】
CPU101は、ROM109に格納された制御プログラムに従って、コントローラ10の各部を制御する。
【0032】
<ソフト構成>
図2は、本実施例におけるコントローラ10の機能ブロック図である。
【0033】
ジョブ識別部201は、ホストI/F(103、104)で受信した印刷ジョブを解析し、印刷ジョブに含まれるPDLデータを受信データ転送部202に渡す。
【0034】
また、印刷ジョブを受信するとPDLインタプリタ205を起動する。
【0035】
受信データ転送部202は、ジョブ識別部201から渡されたPDLデータを、受信バッファブロック204に格納し、これを、ブロック型、または、非ブロック型でPDLインタプリタ205に転送する。
【0036】
受信データ管理テーブル203は、受信データ転送部202が、受信したPDLデータをジョブ毎に管理するためのテーブルである。
【0037】
受信バッファブロック204は、受信したPDLデータを格納するメモリブロックで、RAM108上に確保される。
【0038】
なお、受信データ管理テーブル203、受信バッファブロック204の詳細については、後述する。
【0039】
PDLインタプリタ205は、受信データ転送部202から転送されたPDLデータを解釈し、Display List206を生成して、RAM108に格納する。
【0040】
画像形成出力部207は、Display List206を画像生成器105でページ画像208に展開し、展開したページ画像208をプリンタI/F106を介してプリンタ・エンジン30に出力する。
【0041】
<印刷ジョブの構成>
図7は、画像形成装置1が受信する印刷ジョブの構成を示す図である。
【0042】
画像形成装置1は、パケット化されていない印刷ジョブ701や、パケット化された印刷ジョブ702を受信する。
【0043】
図7の701は、パケット化されていない印刷ジョブの例を示す。
【0044】
パケット化されていない印刷ジョブ701は、PDLデータそのもので、便宜上、A、B、Cの3つのパートに分かれているとする。
【0045】
図7の702は、パケット化されていない印刷ジョブ701をパケット化した例を示し、ジョブ開始パケット7021、PDL送信パケット7022A、7022B、7022C、ジョブ終了パケット7023から構成されている。
【0046】
図7の703は、パケットの構成を示す図である。
【0047】
パケット703は、6バイトのヘッダ部7031とデータ部7032から構成される。
【0048】
ヘッダ部7031の第0〜1バイト目には、パケットであることを示す識別文字(本実施例では0xCDCAとする)が入る。
【0049】
ヘッダ部7031の第2〜3バイト目には、パケットの役割を示すオペレーションコードが入る。
【0050】
例えば、ジョブ開始を示すオペレーションコード(0x0001)、PDLデータの送信を示すオペレーションコード(0x0002)、ジョブ終了を示すオペレーションコード(0x0003)などが入る。
【0051】
ヘッダ部7031の第4〜5バイト目には、次に続くデータ部7032のサイズが入る。
【0052】
データ部7032は、PDL送信パケットの場合、PDLデータが入る。
【0053】
例えば、PDL送信パケット7022A、7022B、7022Cのデータ部7032には、それぞれパケット化されていない印刷ジョブ701のパートA、B、Cが入る。
【0054】
このように、パケット化された印刷ジョブ702は、ジョブ終了が明示的であるのに対し、パケット化されていない印刷ジョブ701は、ジョブ終了が明示的ではないという違いがある。
【0055】
<ジョブ識別部の処理>
図8〜図10は、ジョブ識別部201において、ホストI/F(103、104)から印刷ジョブを受信した時の処理を示すフローチャートである。
【0056】
以下、これらのフローチャートを用いて、ジョブ識別部201の処理を説明する。
【0057】
ジョブ識別部201は、ホストI/Fから印刷ジョブを受信すると、まず、データの先頭の2バイトが、パケットを示す識別文字(0xCDCA)と一致するか否かを調べる(S801)。
【0058】
一致する場合は、パケット化された印刷ジョブ用の処理を起動し(S802)、一致しない場合は、パケット化されていない印刷ジョブ用の処理を起動する(S803)。
【0059】
図9は、パケット化された印刷ジョブ用の処理を示すフローチャートである。
【0060】
ジョブ識別部201は、ホストI/Fからパケットを受信し(S901)、パケットのオペレーションコードを解析する(S902)。
【0061】
オペレーションコードが「ジョブ開始命令」の場合(S903)、ジョブ識別部201は、受信データ転送部202に書き込み開始通知を行い(S904)、PDLインタプリタ205を起動する(S905)。
【0062】
なお、書き込み開始通知で指定するデータ転送モード(Mode)には、ブロックモードをセットする。
【0063】
オペレーションコードが「PDL送信命令」の場合(S906)、ジョブ識別部201は、パケットに含まれるPDLデータを、受信データ転送部202に書き込む(S907)。
【0064】
オペレーションコードが「ジョブ終了命令」の場合(S908)、ジョブ識別部201は、受信データ転送部202に書き込み終了通知を行って(S909)、一連の処理を終える。
【0065】
図10は、パケット化されていない印刷ジョブ用の処理を示すフローチャートである。
【0066】
ジョブ識別部201は、まず、受信データ転送部202に書き込み開始通知を行い(S1001)、PDLインタプリタを起動する(S1002)。
【0067】
なお、書き込み開始通知で指定するデータ転送モード(Mode)には、非ブロックモードをセットする。
【0068】
続いて、ジョブ識別部201は、ホストI/Fからデータを受信し(S1003)、受信したデータを受信データ転送部202に書き込む(S1004)。
【0069】
次に、ジョブ識別部201は、「ジョブタイムアウト」が有効か否かを判断し(S1005)、有効な場合は、引き続き「タイムアウト時間」が経過したか否かを判断する(S1007)。
【0070】
ここで、「ジョブタイムアウト」について説明する。
【0071】
パケット化されていない印刷ジョブの場合、先述のとおり、ジョブ終了が明示的でないので、いつまでもジョブが終了しない可能性がある。
【0072】
そこで、ホストからのデータ受信が一定期間途絶えた場合に、その時点でジョブを終了するという機能が「ジョブタイムアウト」であって、「タイムアウト時間」とは、タイムアウトまでの時間を示す。
【0073】
なお、「ジョブタイムアウト」および「タイムアウト時間」の設定情報は、予めユーザがパネル20から設定し、NVRAM110に保持されている。
【0074】
ステップS1007で、「タイムアウト期間」が経過していた場合、ジョブ識別部201は、受信データ転送部202に書き込み終了通知を行って(S1008)、一連の処理を終える。
【0075】
ステップS1005で、「ジョブタイムアウト」が無効の場合、また、ステップS1007で「タイムアウト時間」経過していない場合、ジョブ識別部201は、ホストI/Fからのデータ受信を待機する(S1006)。
【0076】
ホストI/Fからデータを受信すると、再びステップS1003に移行して、次の受信データを処理する。
【0077】
図11は、ジョブ識別部201と受信データ転送部202間のインターフェースを示す図である。
【0078】
「WriteStart」は、書き込み開始通知を示し、ジョブの識別番号を示す「JobID」、受信データ転送部202からPDLインタプリタ205へのデータ転送モードを指定する「Mode」がセットされる。
【0079】
「Write」は、書き込み通知を示し、「JobID」、書き込むデータの格納元アドレスを示す「*Ptr」、書き込むデータのサイズを示す「Size」がセットされる。
【0080】
「WriteEnd」は、書き込み終了通知を示し、「JobID」がセットされる。
【0081】
<受信データ転送部のPDLデータ書き込み時の処理>
図12〜図14は、受信データ転送部202において、ジョブ識別部201から、各種通知(「WriteStart」「Write」「WriteEnd」)を受信したときの処理を示すフローチャートである。
【0082】
以下、これらのフローチャートを用いて、受信データ転送部202におけるPDLデータ書き込み時の処理を説明する。
【0083】
図12は、受信データ転送部202において、ジョブ識別部201から書き込み開始通知(WriteStart)を受信したときの処理を示すフローチャートである。
【0084】
受信データ転送部202は、「WriteStart」を受信すると、受信データ管理テーブル203を初期化する(S1201)。
【0085】
図15に、受信データ管理テーブル203の構成を示す。
【0086】
受信データ管理テーブル203は、先述の「JobID」「Mode」と、現在(カレント)の書き込みブロックを示す「CurWriteBlock」、現在(カレント)の読み出しブロックを示す「CurReadBlock」から構成される。
【0087】
ステップS1201の初期化では、「JobID」「Mode」に、それぞれジョブ識別部201から「WriteStart」で通知された値をセットし、「CurWriteBlock」「CurReadBlock」にNULLをセットする。
【0088】
図13は、受信データ転送部202において、ジョブ識別部201から書き込み通知(Write)を受信したときの処理を示すフローチャートである。
【0089】
受信データ転送部202は、「Write」を受信すると、まず、受信データ管理テーブル203のカレント書き込みブロック(CurWriteBlock)を参照し、NULLか否かを調べる(S1301)。
【0090】
「CurWriteBlock」がNULLの場合、受信データ転送部202は、RAM108からフリーの受信バッファブロックを1つ獲得する(S1302)。
【0091】
ここで、受信バッファブロック204について説明する。
【0092】
図16に受信バッファブロック204の構成を示す。
【0093】
受信バッファブロック204は、受信データを格納するデータ部1602と管理情報部1601から構成される。
【0094】
管理情報部1601は、さらに、「PrevBlock」「NextBlock」「DataSize」「Flag」というメンバから構成される。
【0095】
「PrevBlock」は、受信バッファブロックのリンクの前のブロックを示す。
【0096】
「NextBlock」は、受信バッファブロックのリンクの次のブロックを示す。
【0097】
「DataSize」は、データ部1602に格納しているデータのサイズを示す。
【0098】
「Flag」は、当該ブロックへの書き込みが終了しているか否かを示すフラグで、「TURE」の場合、書き込みが終了していることを示す。
【0099】
受信バッファブロック204は、電源起動時に、RAM108上に所定個数フリーのブロックとして確保される。
【0100】
また、受信データ転送部202が、フリーのブロックを獲得して受信したデータを書き込み、これを次々にリンクしていくことにより、受信バッファブロックのリンクが形成されていく。
【0101】
再び図13のフローチャートに戻って説明する。
【0102】
受信データ転送部202は、受信データ管理テーブル203の「CurWriteBlock」に獲得したブロックを示す値をセットし(S1303)、獲得したブロックをリンクに繋げる(S1304)。
【0103】
なお、リンクの形成については後述する。
【0104】
続いて、受信データ転送部202は、カレント書き込みブロックに、ジョブ識別部201から受信したデータを格納する(S1305)。
【0105】
具体的には、書き込み通知(Write)の「*Ptr」で示されるアドレスから、「Size」分のデータを、カレント書き込みブロックのデータ部にコピーする。
【0106】
ステップS1305の結果、カレント書き込みブロックのデータ部に空きがなくなった場合(S1306)、受信データ転送部202は、当該ブロックへの書き込みを終了と判断する。
【0107】
また、ブロックのデータ部に空きがあっても、データ転送モード(Mode)が非ブロックモードの場合(S1307)、受信データ転送部202は、当該ブロックへの書き込みを終了と判断する。
【0108】
受信データ転送部202は、当該ブロックへの書き込みを終了と判断すると、当該ブロックの書き込み済みフラグ(Flag)にTRUEをセットし、受信データ管理テーブル203の「CurWriteBlock」にNULLをセットする(S1308)。
【0109】
続いて、受信データ転送部202は、ジョブ識別部201から通知された受信データを全て格納し終えたか否かを判断する(S1309)。
【0110】
全データを格納し終えていない場合は、再びステップS1301に移行し、全データを格納し終えた場合は、この時点で一連の処理を終了する。
【0111】
図14は、受信データ転送部202において、ジョブ識別部201から書き込み終了通知(WriteEnd)を受信したときの処理を示すフローチャートである。
【0112】
受信データ転送部202は、「WriteEnd」を受信すると、リンクをターミネートする(S1401)。
【0113】
具体的には、リンクの最後のブロックの「NextBlock」にリンクの終端であることを示す所定の値(TERM)をセットし、「Flag」にTRUEをセットする。
【0114】
<受信データ転送部のPDLデータ読み出し時の処理>
図17は、受信データ転送部202とPDLインタプリタ205間のインターフェースを示す図である。
【0115】
PDLインタプリタ205は、ジョブ識別部201から起動されると、受信データ転送部202に、受信データの読み出し要求(Raed)を通知する。
【0116】
「Read」は、この読み出し要求を示し、ジョブの識別番号を示す「JobID」、データの格納先アドレスを示す「*Ptr」、読み出し要求サイズを示す「Size」がセットされる。
【0117】
図18から図19は、受信データ転送部202において、PDLインタプリタ205から、読み出し要求の通知「Read」を受信したときの処理を示すフローチャートである。
【0118】
受信データ転送部202は、「Read」を受信すると、まず、内部変数「ReqSize(読み出し要求の残りサイズ)」に、「Read」の「Size」で指定された読み出し要求サイズをセットする(S1801)。
【0119】
続いて、受信データ転送部202は、受信データ管理テーブル203のカレント読み出しブロック(CurReadBlock)を参照し、NULLか否かを調べる(S1802)。
【0120】
「CurReadBlock」がNULLの場合、受信データ転送部202は、「CurReadBlock」に、リンクの最初のブロックを示す値をセットする(S1803)。
【0121】
続いて、受信データ転送部202は、カレント読み出しブロックの「Flag」を参照し、当該ブロックへの書き込みが終了しているか否かを調べる(S1804)。
【0122】
「Flag」が「TRUE」でない場合、当該ブロックは未だ書き込み中で読み出せないので、「TRUE」になるまで待機する。
【0123】
「Flag」が「TRUE」の場合、受信データ転送部202は、内部変数「ReadSize(読み出し済みサイズ)」に、カレント読み出しブロックの格納データサイズ「DataSize」をセットする(S1805)。
【0124】
続いて、受信データ転送部202は、カレント読み出しブロックがリンクの終端のブロックか否かを調べる(S1806)。
【0125】
具体的には、カレント読み出しブロックの「NextBlock」を参照し、「TERM」がセットされていた場合に、終端のブロックと判断する。
【0126】
終端のブロックではなかった場合、受信データ転送部202は、内部変数の「ReqSize」と「ReadSize」とを比較する(S1807)。
【0127】
「ReqSize」が「ReadSize」以上の場合は、内部変数「CopySize(コピーするサイズ)」に「ReadSize」をセットする(S1808)。
【0128】
「ReqSize」が「ReadSize」より小さい場合は、内部変数「CopySize」に「ReqSize」をセットする(S1809)。
【0129】
続いて、受信データ転送部202は、カレント読み出しブロックに格納している受信データを、PDLインタプリタ205に転送する(S1810)。
【0130】
具体的には、カレント読み出しブロックのデータ部に格納しているデータを、PDLインタプリタ205からの読み出し要求(Read)の「*Ptr」で示されるアドレスに、「CopySize」分コピーする。
【0131】
続いて、受信データ転送部202は、内部変数「ReqSize」「ReadSize」それぞれから「CopySize」を差し引く(S1811)。
【0132】
次に、受信データ転送部202は、「ReadSize」が0、すなわち、カレント読み出しブロックに格納しているデータを全てPDLインタプリタ205に渡し終えたか否かを判別する(S1812)。
【0133】
「ReadSize」が0の場合、受信データ転送部202は、受信データ管理テーブル203のカレント読み出しブロック(CurReadBlock)に、リンクの次のブロック(NextBlock)を示す値をセットする(S1813)。
【0134】
続いて、受信データ転送部202は、当該ブロックを解放する(S1814)。
【0135】
具体的には、当該ブロックの全データを初期化することにより、当該ブロックはフリーの受信バッファブロックとして解放される。
【0136】
続いて、受信データ転送部202は、「ReqSize」が0、すなわち、PDLインタプリタ205から要求されたサイズ分のデータを全て転送し終えたか否かを判別する(S1815)。
【0137】
「ReqSize」が0でない場合、再びステップS1806に移行して、PDLインタプリタ205にデータを転送する。
【0138】
「ReqSize」が0の場合、この時点で処理を終える。
【0139】
なお、ステップS1812で、「ReadSize」が0でない場合、まだカレント読み出しブロックに未転送のデータが残っている状態なので、カレント読み出しブロック(CurReadBlock)は解放せずに、そのまま処理を終える。
【0140】
図19は、図18のステップS1806で、カレント読み出しブロックが、リンクの終端のブロックであった場合の処理を示すフローチャートである。
【0141】
受信データ転送部202は、まず、「ReqSize」が0、すなわち、PDLインタプリタ205へのデータ転送を全て転送し終えたか否かを判別する(S1816)。
【0142】
「ReqSize」が0の場合、受信データ転送部202は、PDLインタプリタ205に一連のデータの最後であることを示す「EOF」を渡す(S1817)。
【0143】
具体的には、PDLインタプリタ205からの「Read」に対して、「EOF」を表す値(例えば-1)を返す。
【0144】
なお、PDLインタプリタ205は、この「EOF」をもって、一連のデータの最後であることを認識する。
【0145】
続いて、受信データ転送部202は、当該ブロックを解放し(S1818)、受信データ管理テーブル203を初期化して(S1819)、一連の処理を終える。
【0146】
なお、ステップS1816で、「ReqSize」が0でなかった場合、受信データ転送部202は、カレント読み出しブロックに格納しているデータをPDLインタプリタ205に転送して(S1820〜S1824)、処理を終える。
【0147】
<受信バッファブロックのリンクの推移>
図20は、上述した受信データ転送部202の処理により、受信バッファブロックのリンクがどのように推移していくかを具体的に示した図である。
【0148】
例では、受信データ転送部202が、ジョブ識別部201から24KBのデータを受信し(1回目=16KB、2回目=8KB)、これを、1ブロックのデータ格納サイズが16KBの受信バッファブロックで処理したとする。
【0149】
ステップS2001は、受信データ転送部202が、ジョブ識別部201から1回目の「Write」を受信し、図13のステップS1302でフリーの受信バッファブロックB1を獲得した時点を示す。
【0150】
ステップS2002は、受信データ転送部202が、図13のステップS1305で、カレント書き込みブロックB1に、ジョブ識別部201から受信した1回目の受信データ(16KB分)を書き込み終えた時点を示す。
【0151】
図示する通り、1ブロックのデータ格納サイズ(16KB)分のデータを書き込み終えたので、受信バッファブロックB1の「Flag」には「TRUE」がセットされている。
【0152】
また、「Flag」が「TRUE」なので、当該ブロックのデータは、PDLインタプリタ205が読み出し可能な状態となっている。
【0153】
ステップS2003は、受信データ転送部202が、ジョブ識別部202から2回目の「Write」を受信し、図13のステップS1302でフリーの受信バッファブロックB2を獲得し、さらに、ステップS1304でリンクに繋ぎ終えた時点を示す。
【0154】
図示する通り、リンクの前のブロック(B1)の「NextBlock」にカレント書き込みブロックB2をセットし、また、カレント書き込みブロックB2の「PrevBlock」に前のブロックB1をセットすることにより、リンクが形成される。
【0155】
ステップS2004は、受信データ転送部202が、図13のステップS1305で、カレント書き込みブロックB2に、ジョブ識別部201から受信した2回目の受信データ(8KB)を書き込み終えた時点を示す。
【0156】
ここで、データ転送モード(Mode)が、ブロックモードの場合と、非ブロックモードの場合とで、違いが出てくる。
【0157】
ブロックモードの場合、この時点でカレント書き込みブロックB2のデータ部には、未だ空きがあるので、「Flag」に「TRUE」はセットされない(「FALSE」のまま)。
【0158】
したがって、当該ブロックのデータは、未だPDLインタプリタ205が読み出し不可能な状態である。
【0159】
これに対し、非ブロックモードの場合、この時点で「Flag」に「TRUE」がセットされるので、当該ブロックのデータは、PDLインタプリタ205が読み出し可能な状態となっている。
【0160】
ステップS2005は、受信データ転送部202が、ジョブ識別部201から「WriteEnd」を受信した時点を示す。
【0161】
図示する通り、ブロックモードの場合は、この時点で「Flag」に「TRUE」がセットされ、当該ブロックのデータは、PDLインタプリタ205が読み出し可能な状態となる。
【0162】
パケット化された印刷ジョブの場合、ジョブ識別部201でジョブ終了のパケットを受信した時点で「WriteEnd」が通知されるので、ブロックモードで動作させても、ステップS2004からS2005にすぐに移行する。
【0163】
すなわち、最後のブロックに格納されたデータは、即座にPDLインタプリタ205に転送される。
【0164】
これに対し、パケット化されていない印刷ジョブの場合、「ジョブタイムアウト」が有効な場合は「タイムアウト時間」が経過するまで「WriteEnd」は通知されない。
【0165】
また、「ジョブタイムアウト」が無効な場合は、永遠に「WriteEnd」は通知されない。
【0166】
したがって、パケット化されていない印刷ジョブの場合、もしブロックモードで動作させると、最後のブロックに格納されたデータは、即座にPDLインタプリタに転送されない可能性がある。
【0167】
そこで、パケット化されていない印刷ジョブの場合、非ブロックモードで動作させることにより、ステップS2004の時点で、PDLインタプリタ205が、最後のブロックに格納されたデータを即座に読み出せるようにしている。
【実施例2】
【0168】
実施例1では、受信した印刷ジョブがパケット化された印刷ジョブの場合、ブロックモードで、パケット化されていない印刷ジョブの場合、非ブロックモードで動作させるようにした。
【0169】
しかし、パケット化されていない印刷ジョブであっても、ホストとのコネクション断をもってジョブ終了とする場合は、ブロックモードで動作させるようにしても良い
図21は、実施例2におけるジョブ識別部201の処理を示すフローチャートである。
【0170】
実施例1の処理(図8のフローチャート)に対して、ステップS2101〜S2104を追加している。
【0171】
ジョブ識別部201は、ホストI/F(103、104)から印刷ジョブを受信すると、まず、どのI/Fから受信したかを判別する(S2101)。
【0172】
NetworkI/F104からの受信の場合、次に、「コネクション認識」が有効か否かを判別する(S2102)。
【0173】
ここで、「コネクション認識」について説明する。
【0174】
コネクションとは、ネットワーク上の一つのホストとの接続のことを指す。
【0175】
「コネクション認識」とは、当該ホストとのコネクションが断絶した場合に、これをもって受信中の印刷ジョブを終了させるか否かを指定する設定のことである。
【0176】
「コネクション認識」が有効な場合、ホストとのコネクションが断絶した時点で、ジョブを終了させる。
【0177】
なお、「コネクション認識」の設定情報は、予めユーザがパネル20から設定し、NVRAM110に保持されている。
【0178】
ステップS2102で、「コネクション認識」が有効な場合、ジョブ識別制御部201は、内部変数Mode(データ転送モード)に「ブロックモード」をセットする(S2104)。
【0179】
ステップS2101で、LocalI/F103からの受信の場合、また、ステップS2103で「コネクション認識」が無効な場合、ジョブ識別制御部201は、内部変数Mode(データ転送モード)に「非ブロックモード」をセットする(S2103)。
【0180】
なお、ステップS2103、S2104で設定した内部変数Modeの値は、後続のパケット化されていない印刷ジョブ用の処理において用いられる。
【0181】
ステップS2105〜S2107は、実施例1の図8のステップS801〜S803と同様であるため、説明を割愛する。
【0182】
図22は、本実施例における、パケット化されていない印刷ジョブ用の処理を示すフローチャートである。
【0183】
ジョブ識別部201は、まず、受信データ転送部202に書き込み開始通知を行う(S2201)。
【0184】
この際、書き込み開始通知で指定するデータ転送モード(Mode)には、先の図21のステップS2103、S2104で設定された内部変数Modeの値をセットする。
【0185】
続いて、ジョブ識別部201は、PDLインタプリタ205を起動し(S2202)、順次ホストI/Fから受信したデータを受信データ転送部2022に書き込む(ステップS2203〜S2207)。
【0186】
NetworkI/F104からの受信の場合、途中でホストとのコネクションが断絶した場合、且つ、「コネクション認識」が有効な場合(S2205)、ジョブ識別部201は、この時点で受信データ転送部202に書き込み終了通知を行う(S2209)。
【0187】
以上説明したように、パケット化されていない印刷ジョブであっても、ホストとのコネクション断をもってジョブ終了とする場合には、この時点で「WriteEnd」が通知されるので、ブロックモードで動作させるようにした。
【図面の簡単な説明】
【0188】
【図1】画像形成装置のハード構成図。
【図2】コントローラ10の機能ブロック図。
【図3】ブロック型と非ブロック型の転送方式の動作を説明する第1の図。
【図4】ブロック型と非ブロック型の転送方式の動作を説明する第2の図。
【図5】ブロック型と非ブロック型の転送方式の動作を説明する第3の図。
【図6】ブロック型と非ブロック型の転送方式の動作を説明する第4の図。
【図7】印刷ジョブの構成例を示す図。
【図8】ジョブ識別部201の処理を示す第1のフローチャート。
【図9】ジョブ識別部201の処理を示す第2のフローチャート。
【図10】ジョブ識別部201の処理を示す第3のフローチャート。
【図11】ジョブ識別部201と受信データ転送部202間のインターフェースを示す図。
【図12】受信データ転送部202のPDLデータ書き込み処理を示す第1のフローチャート。
【図13】受信データ転送部202のPDLデータ書き込み処理を示す第2のフローチャート。
【図14】受信データ転送部202のPDLデータ書き込み処理を示す第3のフローチャート。
【図15】受信データ管理テーブル203の構成を示す図。
【図16】受信バッファブロック204の構成を示す図。
【図17】受信データ転送部202とPDLインタプリタ205間のインターフェースを示す図。
【図18】受信データ転送部202のPDLデータ読み出し処理を示す第1のフローチャート。
【図19】受信データ転送部202のPDLデータ読み出し処理を示す第2のフローチャート。
【図20】受信バッファブロックのリンクの推移を示した図。
【図21】実施例2におけるジョブ識別部201の処理を示す第1のフローチャート。
【図22】実施例2におけるジョブ識別部201の処理を示す第2のフローチャート。
【符号の説明】
【0189】
1 画像形成装置
2a、2b、2c ホスト
3 ネットワーク
10 プリンタ・コントローラ
20 パネル
30 プリンタ・エンジン
101 CPU
102 CPUバス
103 ローカルI/F
104 Network I/F
105 画像生成器
106 プリンタI/F
107 パネルI/F
108 RAM
109 ROM
110 NVRAM
201 ジョブ識別部
202 受信データ転送部
203 受信データ管理テーブル
204 受信バッファブロック
205 PDLインタプリタ
206 Display List
207 画像形成出力部
208 ページ画像
【技術分野】
【0001】
本発明は、ホストから受信した印字データを複数のバッファブロックに格納して処理する画像形成装置において、バッファブロックに格納した印字データを後段に転送する際のデータ転送方式に関するものである。
【背景技術】
【0002】
従来、ホストから受信した印刷ジョブを画像形成出力する装置において、受信データを複数のバッファブロックに格納して処理することで、データ処理効率を高めるようにした装置が考案されている(例えば、特許文献1、特許文献2参照)。
【特許文献1】特開2001-109596号公報
【特許文献2】特開2001-184191号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
このように、受信データをバッファブロックに格納して処理する画像形成装置では、一般的に、受信データが1ブロック分溜まった時点で後段にデータを転送している(これをブロック型の転送方式と呼ぶ)。
【0004】
なぜなら、バッファブロックを用いるのに非ブロック型で転送した場合、データ転送効率を高めることができないからである。
【0005】
ここで、その具体例を説明する。
【0006】
図3に示すように、ホストから4KB×4回=計16KBのPDLデータ301を受信し、これを16KBのバッファブロック302で処理したとする。
【0007】
図4は、ブロック型の転送方式で処理した場合の例を示し、図示した通り、使用するバッファブロックは1つ(ブロックA)、PDLインタプリタへの転送回数も1回で済む。
【0008】
図5は、非ブロック型の転送方式で処理した場合の例を示し、図示した通り、使用する受信バッファブロックは4つ(ブロックA〜D)、転送回数も4回必要となる。
【0009】
このように、受信データをバッファブロックに格納して処理する場合、ブロック型の転送方式を採用した方が、メモリ使用効率もデータ転送効率も高い。
【0010】
しかしながら、ブロック型の転送方式の場合、以下のようなケースで問題が生じる。
【0011】
図6に示すとおり、ホストからのデータ送信が途中(4KB×2回=計8KB受信した時点)で途絶えたとする。
【0012】
この場合、ブロック型の転送方式では、受信したデータが1ブロック分のサイズ(16KB)に満たないので、この時点では未だPDLインタプリタにデータが転送されない。
【0013】
したがって、受信済みの8KBに1ページ分の印字データが含まれていたとしても、この時点では未だ印刷されない。
【0014】
これに対し、非ブロック型の転送方式の場合、受信済みの8KBのデータは、この時点で既にPDLインタプリタに転送されているので、1ページ分即座に印刷される。
【0015】
このように、ブロック型の転送方式では、印刷ジョブが最後まで連続して送信されてくる場合には、データ処理効率が高いというメリットが得られる一方で、印刷ジョブが最後まで連続して送信されてこない場合に、上述の問題が生じていた。
【課題を解決するための手段】
【0016】
上述した課題を解決するために、請求項1記載の発明は、ホストから受信した印刷ジョブを画像形成出力する画像形成装置であって、印刷ジョブを受信する受信手段と、前記受信した印刷ジョブかパケット化された印刷ジョブであるか否かを識別するジョブ識別手段と、前記受信した印刷ジョブに含まれる印字データを格納する複数の受信バッファブロックと、前記受信バッファブロックに格納した印字データを、ブロック型、または、非ブロック型で後段に転送する受信データ転送手段とを備え、前記ジョブ識別手段は、前記受信した印刷ジョブがパケット化された印刷ジョブであるか否かに基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする。
【0017】
また、請求項2に記載の発明は、請求項1に記載の画像形成装置において、ホストとの接続が断絶した場合に、受信中の印刷ジョブを終了させるか否かを択一的に選択する選択手段をさらに備え、前記ジョブ識別手段は、前記選択手段の選択結果に基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする。
【発明の効果】
【0018】
本発明によれば、受信データをバッファブロックに格納して処理する画像形成装置において、データ処理効率を高めるという効果を保ちつつ、ブロック型の転送方式で発生する課題を解決することができる。
【発明を実施するための最良の形態】
【0019】
次に、本発明の詳細を実施例の記述に従って説明する。
【実施例1】
【0020】
<ハード構成>
図1は、本発明が適用される画像形成装置のハード構成の概要を示すブロック図である。
【0021】
図示するように、画像形成装置1は、全体の制御を司るプリンタ・コントローラ(コントローラ)10、ユーザからの指示を受け付けたり表示を行うパネル20、印刷を行うプリンタ・エンジン30、からなる。
【0022】
コントローラ10は、CPU101のCPUバス102に、ローカル・インターフェース(ローカルI/F)103、ネットワーク・インターフェース(Network I/F)104、画像生成器105、プリンタ・エンジン・インターフェース(プリンタI/F)106、パネル・インターフェース(パネルI/F)107、RAM108、ROM109、NVRAM110が接続されている。
【0023】
ローカルI/F103は、USB等のインターフェースで接続するホスト2aから印刷ジョブを受信する。
【0024】
Network I/F104は、ネットワーク3に接続する複数のホスト(2b、2c)から印刷ジョブを受信する。
【0025】
画像生成器105は、受信した印刷ジョブを解釈して得られたDisplay Listからビットマップ画像を生成する。
【0026】
プリンタI/F106は、画像生成器105で生成されたビットマップ画像をプリンタ・エンジン40に出力する。
【0027】
パネルI/F107は、パネル20に接続し、パネル20より入力されたユーザの指示をCPU101に通知したり、ROM109、RAM108に格納されている画面情報や設定情報をパネル20に表示する。
【0028】
RAM108は、受信した印刷ジョブを格納したり、CPU101の作業領域として使用されるメモリである。
【0029】
ROM109は、制御プログラムやパネル20に表示する画面情報が格納されたメモリである。
【0030】
NVRAM110は、各種設定情報を保持する不揮発性のメモリである。
【0031】
CPU101は、ROM109に格納された制御プログラムに従って、コントローラ10の各部を制御する。
【0032】
<ソフト構成>
図2は、本実施例におけるコントローラ10の機能ブロック図である。
【0033】
ジョブ識別部201は、ホストI/F(103、104)で受信した印刷ジョブを解析し、印刷ジョブに含まれるPDLデータを受信データ転送部202に渡す。
【0034】
また、印刷ジョブを受信するとPDLインタプリタ205を起動する。
【0035】
受信データ転送部202は、ジョブ識別部201から渡されたPDLデータを、受信バッファブロック204に格納し、これを、ブロック型、または、非ブロック型でPDLインタプリタ205に転送する。
【0036】
受信データ管理テーブル203は、受信データ転送部202が、受信したPDLデータをジョブ毎に管理するためのテーブルである。
【0037】
受信バッファブロック204は、受信したPDLデータを格納するメモリブロックで、RAM108上に確保される。
【0038】
なお、受信データ管理テーブル203、受信バッファブロック204の詳細については、後述する。
【0039】
PDLインタプリタ205は、受信データ転送部202から転送されたPDLデータを解釈し、Display List206を生成して、RAM108に格納する。
【0040】
画像形成出力部207は、Display List206を画像生成器105でページ画像208に展開し、展開したページ画像208をプリンタI/F106を介してプリンタ・エンジン30に出力する。
【0041】
<印刷ジョブの構成>
図7は、画像形成装置1が受信する印刷ジョブの構成を示す図である。
【0042】
画像形成装置1は、パケット化されていない印刷ジョブ701や、パケット化された印刷ジョブ702を受信する。
【0043】
図7の701は、パケット化されていない印刷ジョブの例を示す。
【0044】
パケット化されていない印刷ジョブ701は、PDLデータそのもので、便宜上、A、B、Cの3つのパートに分かれているとする。
【0045】
図7の702は、パケット化されていない印刷ジョブ701をパケット化した例を示し、ジョブ開始パケット7021、PDL送信パケット7022A、7022B、7022C、ジョブ終了パケット7023から構成されている。
【0046】
図7の703は、パケットの構成を示す図である。
【0047】
パケット703は、6バイトのヘッダ部7031とデータ部7032から構成される。
【0048】
ヘッダ部7031の第0〜1バイト目には、パケットであることを示す識別文字(本実施例では0xCDCAとする)が入る。
【0049】
ヘッダ部7031の第2〜3バイト目には、パケットの役割を示すオペレーションコードが入る。
【0050】
例えば、ジョブ開始を示すオペレーションコード(0x0001)、PDLデータの送信を示すオペレーションコード(0x0002)、ジョブ終了を示すオペレーションコード(0x0003)などが入る。
【0051】
ヘッダ部7031の第4〜5バイト目には、次に続くデータ部7032のサイズが入る。
【0052】
データ部7032は、PDL送信パケットの場合、PDLデータが入る。
【0053】
例えば、PDL送信パケット7022A、7022B、7022Cのデータ部7032には、それぞれパケット化されていない印刷ジョブ701のパートA、B、Cが入る。
【0054】
このように、パケット化された印刷ジョブ702は、ジョブ終了が明示的であるのに対し、パケット化されていない印刷ジョブ701は、ジョブ終了が明示的ではないという違いがある。
【0055】
<ジョブ識別部の処理>
図8〜図10は、ジョブ識別部201において、ホストI/F(103、104)から印刷ジョブを受信した時の処理を示すフローチャートである。
【0056】
以下、これらのフローチャートを用いて、ジョブ識別部201の処理を説明する。
【0057】
ジョブ識別部201は、ホストI/Fから印刷ジョブを受信すると、まず、データの先頭の2バイトが、パケットを示す識別文字(0xCDCA)と一致するか否かを調べる(S801)。
【0058】
一致する場合は、パケット化された印刷ジョブ用の処理を起動し(S802)、一致しない場合は、パケット化されていない印刷ジョブ用の処理を起動する(S803)。
【0059】
図9は、パケット化された印刷ジョブ用の処理を示すフローチャートである。
【0060】
ジョブ識別部201は、ホストI/Fからパケットを受信し(S901)、パケットのオペレーションコードを解析する(S902)。
【0061】
オペレーションコードが「ジョブ開始命令」の場合(S903)、ジョブ識別部201は、受信データ転送部202に書き込み開始通知を行い(S904)、PDLインタプリタ205を起動する(S905)。
【0062】
なお、書き込み開始通知で指定するデータ転送モード(Mode)には、ブロックモードをセットする。
【0063】
オペレーションコードが「PDL送信命令」の場合(S906)、ジョブ識別部201は、パケットに含まれるPDLデータを、受信データ転送部202に書き込む(S907)。
【0064】
オペレーションコードが「ジョブ終了命令」の場合(S908)、ジョブ識別部201は、受信データ転送部202に書き込み終了通知を行って(S909)、一連の処理を終える。
【0065】
図10は、パケット化されていない印刷ジョブ用の処理を示すフローチャートである。
【0066】
ジョブ識別部201は、まず、受信データ転送部202に書き込み開始通知を行い(S1001)、PDLインタプリタを起動する(S1002)。
【0067】
なお、書き込み開始通知で指定するデータ転送モード(Mode)には、非ブロックモードをセットする。
【0068】
続いて、ジョブ識別部201は、ホストI/Fからデータを受信し(S1003)、受信したデータを受信データ転送部202に書き込む(S1004)。
【0069】
次に、ジョブ識別部201は、「ジョブタイムアウト」が有効か否かを判断し(S1005)、有効な場合は、引き続き「タイムアウト時間」が経過したか否かを判断する(S1007)。
【0070】
ここで、「ジョブタイムアウト」について説明する。
【0071】
パケット化されていない印刷ジョブの場合、先述のとおり、ジョブ終了が明示的でないので、いつまでもジョブが終了しない可能性がある。
【0072】
そこで、ホストからのデータ受信が一定期間途絶えた場合に、その時点でジョブを終了するという機能が「ジョブタイムアウト」であって、「タイムアウト時間」とは、タイムアウトまでの時間を示す。
【0073】
なお、「ジョブタイムアウト」および「タイムアウト時間」の設定情報は、予めユーザがパネル20から設定し、NVRAM110に保持されている。
【0074】
ステップS1007で、「タイムアウト期間」が経過していた場合、ジョブ識別部201は、受信データ転送部202に書き込み終了通知を行って(S1008)、一連の処理を終える。
【0075】
ステップS1005で、「ジョブタイムアウト」が無効の場合、また、ステップS1007で「タイムアウト時間」経過していない場合、ジョブ識別部201は、ホストI/Fからのデータ受信を待機する(S1006)。
【0076】
ホストI/Fからデータを受信すると、再びステップS1003に移行して、次の受信データを処理する。
【0077】
図11は、ジョブ識別部201と受信データ転送部202間のインターフェースを示す図である。
【0078】
「WriteStart」は、書き込み開始通知を示し、ジョブの識別番号を示す「JobID」、受信データ転送部202からPDLインタプリタ205へのデータ転送モードを指定する「Mode」がセットされる。
【0079】
「Write」は、書き込み通知を示し、「JobID」、書き込むデータの格納元アドレスを示す「*Ptr」、書き込むデータのサイズを示す「Size」がセットされる。
【0080】
「WriteEnd」は、書き込み終了通知を示し、「JobID」がセットされる。
【0081】
<受信データ転送部のPDLデータ書き込み時の処理>
図12〜図14は、受信データ転送部202において、ジョブ識別部201から、各種通知(「WriteStart」「Write」「WriteEnd」)を受信したときの処理を示すフローチャートである。
【0082】
以下、これらのフローチャートを用いて、受信データ転送部202におけるPDLデータ書き込み時の処理を説明する。
【0083】
図12は、受信データ転送部202において、ジョブ識別部201から書き込み開始通知(WriteStart)を受信したときの処理を示すフローチャートである。
【0084】
受信データ転送部202は、「WriteStart」を受信すると、受信データ管理テーブル203を初期化する(S1201)。
【0085】
図15に、受信データ管理テーブル203の構成を示す。
【0086】
受信データ管理テーブル203は、先述の「JobID」「Mode」と、現在(カレント)の書き込みブロックを示す「CurWriteBlock」、現在(カレント)の読み出しブロックを示す「CurReadBlock」から構成される。
【0087】
ステップS1201の初期化では、「JobID」「Mode」に、それぞれジョブ識別部201から「WriteStart」で通知された値をセットし、「CurWriteBlock」「CurReadBlock」にNULLをセットする。
【0088】
図13は、受信データ転送部202において、ジョブ識別部201から書き込み通知(Write)を受信したときの処理を示すフローチャートである。
【0089】
受信データ転送部202は、「Write」を受信すると、まず、受信データ管理テーブル203のカレント書き込みブロック(CurWriteBlock)を参照し、NULLか否かを調べる(S1301)。
【0090】
「CurWriteBlock」がNULLの場合、受信データ転送部202は、RAM108からフリーの受信バッファブロックを1つ獲得する(S1302)。
【0091】
ここで、受信バッファブロック204について説明する。
【0092】
図16に受信バッファブロック204の構成を示す。
【0093】
受信バッファブロック204は、受信データを格納するデータ部1602と管理情報部1601から構成される。
【0094】
管理情報部1601は、さらに、「PrevBlock」「NextBlock」「DataSize」「Flag」というメンバから構成される。
【0095】
「PrevBlock」は、受信バッファブロックのリンクの前のブロックを示す。
【0096】
「NextBlock」は、受信バッファブロックのリンクの次のブロックを示す。
【0097】
「DataSize」は、データ部1602に格納しているデータのサイズを示す。
【0098】
「Flag」は、当該ブロックへの書き込みが終了しているか否かを示すフラグで、「TURE」の場合、書き込みが終了していることを示す。
【0099】
受信バッファブロック204は、電源起動時に、RAM108上に所定個数フリーのブロックとして確保される。
【0100】
また、受信データ転送部202が、フリーのブロックを獲得して受信したデータを書き込み、これを次々にリンクしていくことにより、受信バッファブロックのリンクが形成されていく。
【0101】
再び図13のフローチャートに戻って説明する。
【0102】
受信データ転送部202は、受信データ管理テーブル203の「CurWriteBlock」に獲得したブロックを示す値をセットし(S1303)、獲得したブロックをリンクに繋げる(S1304)。
【0103】
なお、リンクの形成については後述する。
【0104】
続いて、受信データ転送部202は、カレント書き込みブロックに、ジョブ識別部201から受信したデータを格納する(S1305)。
【0105】
具体的には、書き込み通知(Write)の「*Ptr」で示されるアドレスから、「Size」分のデータを、カレント書き込みブロックのデータ部にコピーする。
【0106】
ステップS1305の結果、カレント書き込みブロックのデータ部に空きがなくなった場合(S1306)、受信データ転送部202は、当該ブロックへの書き込みを終了と判断する。
【0107】
また、ブロックのデータ部に空きがあっても、データ転送モード(Mode)が非ブロックモードの場合(S1307)、受信データ転送部202は、当該ブロックへの書き込みを終了と判断する。
【0108】
受信データ転送部202は、当該ブロックへの書き込みを終了と判断すると、当該ブロックの書き込み済みフラグ(Flag)にTRUEをセットし、受信データ管理テーブル203の「CurWriteBlock」にNULLをセットする(S1308)。
【0109】
続いて、受信データ転送部202は、ジョブ識別部201から通知された受信データを全て格納し終えたか否かを判断する(S1309)。
【0110】
全データを格納し終えていない場合は、再びステップS1301に移行し、全データを格納し終えた場合は、この時点で一連の処理を終了する。
【0111】
図14は、受信データ転送部202において、ジョブ識別部201から書き込み終了通知(WriteEnd)を受信したときの処理を示すフローチャートである。
【0112】
受信データ転送部202は、「WriteEnd」を受信すると、リンクをターミネートする(S1401)。
【0113】
具体的には、リンクの最後のブロックの「NextBlock」にリンクの終端であることを示す所定の値(TERM)をセットし、「Flag」にTRUEをセットする。
【0114】
<受信データ転送部のPDLデータ読み出し時の処理>
図17は、受信データ転送部202とPDLインタプリタ205間のインターフェースを示す図である。
【0115】
PDLインタプリタ205は、ジョブ識別部201から起動されると、受信データ転送部202に、受信データの読み出し要求(Raed)を通知する。
【0116】
「Read」は、この読み出し要求を示し、ジョブの識別番号を示す「JobID」、データの格納先アドレスを示す「*Ptr」、読み出し要求サイズを示す「Size」がセットされる。
【0117】
図18から図19は、受信データ転送部202において、PDLインタプリタ205から、読み出し要求の通知「Read」を受信したときの処理を示すフローチャートである。
【0118】
受信データ転送部202は、「Read」を受信すると、まず、内部変数「ReqSize(読み出し要求の残りサイズ)」に、「Read」の「Size」で指定された読み出し要求サイズをセットする(S1801)。
【0119】
続いて、受信データ転送部202は、受信データ管理テーブル203のカレント読み出しブロック(CurReadBlock)を参照し、NULLか否かを調べる(S1802)。
【0120】
「CurReadBlock」がNULLの場合、受信データ転送部202は、「CurReadBlock」に、リンクの最初のブロックを示す値をセットする(S1803)。
【0121】
続いて、受信データ転送部202は、カレント読み出しブロックの「Flag」を参照し、当該ブロックへの書き込みが終了しているか否かを調べる(S1804)。
【0122】
「Flag」が「TRUE」でない場合、当該ブロックは未だ書き込み中で読み出せないので、「TRUE」になるまで待機する。
【0123】
「Flag」が「TRUE」の場合、受信データ転送部202は、内部変数「ReadSize(読み出し済みサイズ)」に、カレント読み出しブロックの格納データサイズ「DataSize」をセットする(S1805)。
【0124】
続いて、受信データ転送部202は、カレント読み出しブロックがリンクの終端のブロックか否かを調べる(S1806)。
【0125】
具体的には、カレント読み出しブロックの「NextBlock」を参照し、「TERM」がセットされていた場合に、終端のブロックと判断する。
【0126】
終端のブロックではなかった場合、受信データ転送部202は、内部変数の「ReqSize」と「ReadSize」とを比較する(S1807)。
【0127】
「ReqSize」が「ReadSize」以上の場合は、内部変数「CopySize(コピーするサイズ)」に「ReadSize」をセットする(S1808)。
【0128】
「ReqSize」が「ReadSize」より小さい場合は、内部変数「CopySize」に「ReqSize」をセットする(S1809)。
【0129】
続いて、受信データ転送部202は、カレント読み出しブロックに格納している受信データを、PDLインタプリタ205に転送する(S1810)。
【0130】
具体的には、カレント読み出しブロックのデータ部に格納しているデータを、PDLインタプリタ205からの読み出し要求(Read)の「*Ptr」で示されるアドレスに、「CopySize」分コピーする。
【0131】
続いて、受信データ転送部202は、内部変数「ReqSize」「ReadSize」それぞれから「CopySize」を差し引く(S1811)。
【0132】
次に、受信データ転送部202は、「ReadSize」が0、すなわち、カレント読み出しブロックに格納しているデータを全てPDLインタプリタ205に渡し終えたか否かを判別する(S1812)。
【0133】
「ReadSize」が0の場合、受信データ転送部202は、受信データ管理テーブル203のカレント読み出しブロック(CurReadBlock)に、リンクの次のブロック(NextBlock)を示す値をセットする(S1813)。
【0134】
続いて、受信データ転送部202は、当該ブロックを解放する(S1814)。
【0135】
具体的には、当該ブロックの全データを初期化することにより、当該ブロックはフリーの受信バッファブロックとして解放される。
【0136】
続いて、受信データ転送部202は、「ReqSize」が0、すなわち、PDLインタプリタ205から要求されたサイズ分のデータを全て転送し終えたか否かを判別する(S1815)。
【0137】
「ReqSize」が0でない場合、再びステップS1806に移行して、PDLインタプリタ205にデータを転送する。
【0138】
「ReqSize」が0の場合、この時点で処理を終える。
【0139】
なお、ステップS1812で、「ReadSize」が0でない場合、まだカレント読み出しブロックに未転送のデータが残っている状態なので、カレント読み出しブロック(CurReadBlock)は解放せずに、そのまま処理を終える。
【0140】
図19は、図18のステップS1806で、カレント読み出しブロックが、リンクの終端のブロックであった場合の処理を示すフローチャートである。
【0141】
受信データ転送部202は、まず、「ReqSize」が0、すなわち、PDLインタプリタ205へのデータ転送を全て転送し終えたか否かを判別する(S1816)。
【0142】
「ReqSize」が0の場合、受信データ転送部202は、PDLインタプリタ205に一連のデータの最後であることを示す「EOF」を渡す(S1817)。
【0143】
具体的には、PDLインタプリタ205からの「Read」に対して、「EOF」を表す値(例えば-1)を返す。
【0144】
なお、PDLインタプリタ205は、この「EOF」をもって、一連のデータの最後であることを認識する。
【0145】
続いて、受信データ転送部202は、当該ブロックを解放し(S1818)、受信データ管理テーブル203を初期化して(S1819)、一連の処理を終える。
【0146】
なお、ステップS1816で、「ReqSize」が0でなかった場合、受信データ転送部202は、カレント読み出しブロックに格納しているデータをPDLインタプリタ205に転送して(S1820〜S1824)、処理を終える。
【0147】
<受信バッファブロックのリンクの推移>
図20は、上述した受信データ転送部202の処理により、受信バッファブロックのリンクがどのように推移していくかを具体的に示した図である。
【0148】
例では、受信データ転送部202が、ジョブ識別部201から24KBのデータを受信し(1回目=16KB、2回目=8KB)、これを、1ブロックのデータ格納サイズが16KBの受信バッファブロックで処理したとする。
【0149】
ステップS2001は、受信データ転送部202が、ジョブ識別部201から1回目の「Write」を受信し、図13のステップS1302でフリーの受信バッファブロックB1を獲得した時点を示す。
【0150】
ステップS2002は、受信データ転送部202が、図13のステップS1305で、カレント書き込みブロックB1に、ジョブ識別部201から受信した1回目の受信データ(16KB分)を書き込み終えた時点を示す。
【0151】
図示する通り、1ブロックのデータ格納サイズ(16KB)分のデータを書き込み終えたので、受信バッファブロックB1の「Flag」には「TRUE」がセットされている。
【0152】
また、「Flag」が「TRUE」なので、当該ブロックのデータは、PDLインタプリタ205が読み出し可能な状態となっている。
【0153】
ステップS2003は、受信データ転送部202が、ジョブ識別部202から2回目の「Write」を受信し、図13のステップS1302でフリーの受信バッファブロックB2を獲得し、さらに、ステップS1304でリンクに繋ぎ終えた時点を示す。
【0154】
図示する通り、リンクの前のブロック(B1)の「NextBlock」にカレント書き込みブロックB2をセットし、また、カレント書き込みブロックB2の「PrevBlock」に前のブロックB1をセットすることにより、リンクが形成される。
【0155】
ステップS2004は、受信データ転送部202が、図13のステップS1305で、カレント書き込みブロックB2に、ジョブ識別部201から受信した2回目の受信データ(8KB)を書き込み終えた時点を示す。
【0156】
ここで、データ転送モード(Mode)が、ブロックモードの場合と、非ブロックモードの場合とで、違いが出てくる。
【0157】
ブロックモードの場合、この時点でカレント書き込みブロックB2のデータ部には、未だ空きがあるので、「Flag」に「TRUE」はセットされない(「FALSE」のまま)。
【0158】
したがって、当該ブロックのデータは、未だPDLインタプリタ205が読み出し不可能な状態である。
【0159】
これに対し、非ブロックモードの場合、この時点で「Flag」に「TRUE」がセットされるので、当該ブロックのデータは、PDLインタプリタ205が読み出し可能な状態となっている。
【0160】
ステップS2005は、受信データ転送部202が、ジョブ識別部201から「WriteEnd」を受信した時点を示す。
【0161】
図示する通り、ブロックモードの場合は、この時点で「Flag」に「TRUE」がセットされ、当該ブロックのデータは、PDLインタプリタ205が読み出し可能な状態となる。
【0162】
パケット化された印刷ジョブの場合、ジョブ識別部201でジョブ終了のパケットを受信した時点で「WriteEnd」が通知されるので、ブロックモードで動作させても、ステップS2004からS2005にすぐに移行する。
【0163】
すなわち、最後のブロックに格納されたデータは、即座にPDLインタプリタ205に転送される。
【0164】
これに対し、パケット化されていない印刷ジョブの場合、「ジョブタイムアウト」が有効な場合は「タイムアウト時間」が経過するまで「WriteEnd」は通知されない。
【0165】
また、「ジョブタイムアウト」が無効な場合は、永遠に「WriteEnd」は通知されない。
【0166】
したがって、パケット化されていない印刷ジョブの場合、もしブロックモードで動作させると、最後のブロックに格納されたデータは、即座にPDLインタプリタに転送されない可能性がある。
【0167】
そこで、パケット化されていない印刷ジョブの場合、非ブロックモードで動作させることにより、ステップS2004の時点で、PDLインタプリタ205が、最後のブロックに格納されたデータを即座に読み出せるようにしている。
【実施例2】
【0168】
実施例1では、受信した印刷ジョブがパケット化された印刷ジョブの場合、ブロックモードで、パケット化されていない印刷ジョブの場合、非ブロックモードで動作させるようにした。
【0169】
しかし、パケット化されていない印刷ジョブであっても、ホストとのコネクション断をもってジョブ終了とする場合は、ブロックモードで動作させるようにしても良い
図21は、実施例2におけるジョブ識別部201の処理を示すフローチャートである。
【0170】
実施例1の処理(図8のフローチャート)に対して、ステップS2101〜S2104を追加している。
【0171】
ジョブ識別部201は、ホストI/F(103、104)から印刷ジョブを受信すると、まず、どのI/Fから受信したかを判別する(S2101)。
【0172】
NetworkI/F104からの受信の場合、次に、「コネクション認識」が有効か否かを判別する(S2102)。
【0173】
ここで、「コネクション認識」について説明する。
【0174】
コネクションとは、ネットワーク上の一つのホストとの接続のことを指す。
【0175】
「コネクション認識」とは、当該ホストとのコネクションが断絶した場合に、これをもって受信中の印刷ジョブを終了させるか否かを指定する設定のことである。
【0176】
「コネクション認識」が有効な場合、ホストとのコネクションが断絶した時点で、ジョブを終了させる。
【0177】
なお、「コネクション認識」の設定情報は、予めユーザがパネル20から設定し、NVRAM110に保持されている。
【0178】
ステップS2102で、「コネクション認識」が有効な場合、ジョブ識別制御部201は、内部変数Mode(データ転送モード)に「ブロックモード」をセットする(S2104)。
【0179】
ステップS2101で、LocalI/F103からの受信の場合、また、ステップS2103で「コネクション認識」が無効な場合、ジョブ識別制御部201は、内部変数Mode(データ転送モード)に「非ブロックモード」をセットする(S2103)。
【0180】
なお、ステップS2103、S2104で設定した内部変数Modeの値は、後続のパケット化されていない印刷ジョブ用の処理において用いられる。
【0181】
ステップS2105〜S2107は、実施例1の図8のステップS801〜S803と同様であるため、説明を割愛する。
【0182】
図22は、本実施例における、パケット化されていない印刷ジョブ用の処理を示すフローチャートである。
【0183】
ジョブ識別部201は、まず、受信データ転送部202に書き込み開始通知を行う(S2201)。
【0184】
この際、書き込み開始通知で指定するデータ転送モード(Mode)には、先の図21のステップS2103、S2104で設定された内部変数Modeの値をセットする。
【0185】
続いて、ジョブ識別部201は、PDLインタプリタ205を起動し(S2202)、順次ホストI/Fから受信したデータを受信データ転送部2022に書き込む(ステップS2203〜S2207)。
【0186】
NetworkI/F104からの受信の場合、途中でホストとのコネクションが断絶した場合、且つ、「コネクション認識」が有効な場合(S2205)、ジョブ識別部201は、この時点で受信データ転送部202に書き込み終了通知を行う(S2209)。
【0187】
以上説明したように、パケット化されていない印刷ジョブであっても、ホストとのコネクション断をもってジョブ終了とする場合には、この時点で「WriteEnd」が通知されるので、ブロックモードで動作させるようにした。
【図面の簡単な説明】
【0188】
【図1】画像形成装置のハード構成図。
【図2】コントローラ10の機能ブロック図。
【図3】ブロック型と非ブロック型の転送方式の動作を説明する第1の図。
【図4】ブロック型と非ブロック型の転送方式の動作を説明する第2の図。
【図5】ブロック型と非ブロック型の転送方式の動作を説明する第3の図。
【図6】ブロック型と非ブロック型の転送方式の動作を説明する第4の図。
【図7】印刷ジョブの構成例を示す図。
【図8】ジョブ識別部201の処理を示す第1のフローチャート。
【図9】ジョブ識別部201の処理を示す第2のフローチャート。
【図10】ジョブ識別部201の処理を示す第3のフローチャート。
【図11】ジョブ識別部201と受信データ転送部202間のインターフェースを示す図。
【図12】受信データ転送部202のPDLデータ書き込み処理を示す第1のフローチャート。
【図13】受信データ転送部202のPDLデータ書き込み処理を示す第2のフローチャート。
【図14】受信データ転送部202のPDLデータ書き込み処理を示す第3のフローチャート。
【図15】受信データ管理テーブル203の構成を示す図。
【図16】受信バッファブロック204の構成を示す図。
【図17】受信データ転送部202とPDLインタプリタ205間のインターフェースを示す図。
【図18】受信データ転送部202のPDLデータ読み出し処理を示す第1のフローチャート。
【図19】受信データ転送部202のPDLデータ読み出し処理を示す第2のフローチャート。
【図20】受信バッファブロックのリンクの推移を示した図。
【図21】実施例2におけるジョブ識別部201の処理を示す第1のフローチャート。
【図22】実施例2におけるジョブ識別部201の処理を示す第2のフローチャート。
【符号の説明】
【0189】
1 画像形成装置
2a、2b、2c ホスト
3 ネットワーク
10 プリンタ・コントローラ
20 パネル
30 プリンタ・エンジン
101 CPU
102 CPUバス
103 ローカルI/F
104 Network I/F
105 画像生成器
106 プリンタI/F
107 パネルI/F
108 RAM
109 ROM
110 NVRAM
201 ジョブ識別部
202 受信データ転送部
203 受信データ管理テーブル
204 受信バッファブロック
205 PDLインタプリタ
206 Display List
207 画像形成出力部
208 ページ画像
【特許請求の範囲】
【請求項1】
ホストから受信した印刷ジョブを画像形成出力する画像形成装置であって、
印刷ジョブを受信する受信手段と、
前記受信した印刷ジョブかパケット化された印刷ジョブであるか否かを識別するジョブ識別手段と、
前記受信した印刷ジョブに含まれる印字データを格納する複数の受信バッファブロックと、
前記受信バッファブロックに格納した印字データを、ブロック型、または、非ブロック型で後段に転送する受信データ転送手段とを備え、
前記ジョブ識別手段は、前記受信した印刷ジョブがパケット化された印刷ジョブであるか否かに基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする画像形成装置。
【請求項2】
ホストとの接続が断絶した場合に、受信中の印刷ジョブを終了させるか否かを択一的に選択する選択手段をさらに備え、
前記ジョブ識別手段は、前記選択手段の選択結果に基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする請求項1に記載の画像形成装置。
【請求項1】
ホストから受信した印刷ジョブを画像形成出力する画像形成装置であって、
印刷ジョブを受信する受信手段と、
前記受信した印刷ジョブかパケット化された印刷ジョブであるか否かを識別するジョブ識別手段と、
前記受信した印刷ジョブに含まれる印字データを格納する複数の受信バッファブロックと、
前記受信バッファブロックに格納した印字データを、ブロック型、または、非ブロック型で後段に転送する受信データ転送手段とを備え、
前記ジョブ識別手段は、前記受信した印刷ジョブがパケット化された印刷ジョブであるか否かに基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする画像形成装置。
【請求項2】
ホストとの接続が断絶した場合に、受信中の印刷ジョブを終了させるか否かを択一的に選択する選択手段をさらに備え、
前記ジョブ識別手段は、前記選択手段の選択結果に基づいて、前記受信データ転送手段をブロック型、または、非ブロック型で動作させることを特徴とする請求項1に記載の画像形成装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【公開番号】特開2009−220497(P2009−220497A)
【公開日】平成21年10月1日(2009.10.1)
【国際特許分類】
【出願番号】特願2008−69443(P2008−69443)
【出願日】平成20年3月18日(2008.3.18)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
【公開日】平成21年10月1日(2009.10.1)
【国際特許分類】
【出願日】平成20年3月18日(2008.3.18)
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】
[ Back to top ]