図1は、本発明による融合機の一実施例の構成図を示す。融合機1は、ソフトウェア群2と、融合機起動部3と、ハードウェア資源4とを含むように構成される。
融合機起動部3は融合機1の電源投入時に最初に実行され、アプリケーション層5およびプラットホーム層6を起動する。例えば融合機起動部3は、アプリケーション層5およびプラットホーム層6のプログラムを、ハードディスク装置(以下、HDDという)などから読み出し、読み出した各プログラムをメモリ領域に転送して起動する。ハードウェア資源4は、スキャナ25と、プロッタ26と、ADF(Auto Document Feeder)などのハードウェアリソース24とを含む。
また、ソフトウェア群2は、UNIX(登録商標)などのオペレーティングシステム(以下、OSという)上に起動されているアプリケーション層5とプラットホーム層6とを含む。アプリケーション層5は、プリンタ、コピー、ファックスおよびスキャナなどの画像形成にかかるユーザサービスにそれぞれ固有の処理を行うプログラムを含む。
アプリケーション層5は、プリンタ用のアプリケーションであるプリンタアプリ9と、コピー用アプリケーションであるコピーアプリ10と、ファックス用アプリケーションであるファックスアプリ11と、スキャナ用アプリケーションであるスキャナアプリ12とを含む。
また、プラットホーム層6は、アプリケーション層5からの処理要求を解釈してハードウェア資源4の獲得要求を発生するコントロールサービス層7と、1つ以上のハードウェア資源4の管理を行ってコントロールサービス層7からの獲得要求を調停するシステムリソースマネージャ(以下、SRMという)21と、SRM21からの獲得要求に応じてハードウェア資源4の管理を行うハンドラ層8とを含む。
コントロールサービス層7は、ネットワークコントロールサービス(以下、NCSという)13、リモートサービス(以下、RSという)14、オペレーションパネルコントロールサービス(以下、OCSという)15、ファックスコントロールサービス(以下、FCSという)16、エンジンコントロールサービス(以下、ECSという)17、メモリコントロールサービス(以下、MCSという)18、オンデマンドアップデートサービス(以下、OUSという)19、システムコントロールサービス(以下、SCSという)20など、一つ以上のサービスモジュールを含むように構成されている。
なお、プラットホーム層6は予め定義されている関数により、アプリケーション層5からの処理要求を受信可能とするAPI28を有するように構成されている。OSは、アプリケーション層5およびプラットホーム層6の各ソフトウェアをプロセスとして並列実行する。
通信部に対応するNCS13のプロセスは、ネットワークI/Oを必要とするアプリケーションに対して共通に利用できるサービスを提供するものであり、ネットワーク側から各プロトコルによって受信したデータを各アプリケーションに振り分けたり、各アプリケーションからのデータをネットワーク側に送信する際の仲介を行う。
例えばNCS13は、ネットワークを介して接続されるネットワーク機器とのデータ通信をhttpd(HyperText Transfer Protocol Daemon)により、HTTP(HyperText Transfer Protocol)で制御する。
RS14のプロセスは、インターネットなどのネットワークを用いたサービスを行う。OCS33のプロセスは、オペレータと本体制御との間の情報伝達手段となるオペレーションパネルの制御を行う。FCS16のプロセスは、アプリケーション層5からPSTNまたはISDN網を利用したファックス送受信、バックアップ用のメモリで管理されている各種ファックスデータの登録/引用、ファックス読み取り、ファックス受信印刷などを行うためのAPIを提供する。
ECS17のプロセスは、スキャナ25、プロッタ26、その他のハードウェアリソース24などのエンジン部の制御を行う。MCS18のプロセスは、メモリの取得および解放、HDDの利用などのメモリ制御を行う。更新プログラム取得部に対応するOUS19は、ネットワークからの通知により、プログラムをダウンロードし、メモリに格納する。
プログラム更新部、更新結果情報生成部、更新結果出力部、再起動部に対応するSCS20のプロセスは、アプリケーション管理、操作部制御、システム画面表示、LED表示、ハードウェア資源管理、割り込みアプリケーション制御などの処理を行う。
SRM21のプロセスは、SCS20と共にシステムの制御およびハードウェア資源4の管理を行うものである。例えばSRM21のプロセスは、スキャナ25やプロッタ26などのハードウェア資源4を利用する上位層からの獲得要求に従って調停を行い、実行制御する。
具体的に、SRM21のプロセスは獲得要求されたハードウェア資源4が利用可能であるか(他の獲得要求により利用されていないかどうか)を判定し、利用可能であれば獲得要求されたハードウェア資源4が利用可能である旨を上位層に通知する。また、SRM21のプロセスは上位層からの獲得要求に対してハードウェア資源4を利用するためのスケジューリングを行い、要求内容(例えば、プリンタエンジンによる紙搬送と作像動作、メモリ確保、ファイル生成など)を直接実施している。
また、ハンドラ層8は後述するファックスコントロールユニット(以下、FCUという)の管理を行うファックスコントロールユニットハンドラ(以下、FCUHという)22と、プロセスに対するメモリの割り振り及びプロセスに割り振ったメモリの管理を行うイメージメモリハンドラ(以下、IMHという)23を含む。SRM39およびFCUH22は、予め定義されている関数によりハードウェア資源4に対する処理要求を送信可能とするエンジンI/F27を利用して、ハードウェア資源4に対する処理要求を行う。
融合機1は、各アプリケーションで共通的に必要な処理をプラットホーム層6で一元的に処理することができる。次に、融合機1のハードウェア構成について説明する。
図2は、融合機1の一実施例のハードウェア構成図を示している。融合機1は、コントローラボード50と、オペレーションパネル39と、FCU40と、エンジン43とを含む。また、FCU40は、G3規格対応ユニット103と、G4規格対応ユニット104とを有する。
また、コントローラボード50は、CPU31と、ASIC36と、HDD38と、システムメモリ(MEM−P)32と、ローカルメモリ(MEM−C)37と、ノースブリッジ(以下、NBと記す)33と、サウスブリッジ(以下、SBと記す)34と、NIC101(Network Interface Card)と、USBデバイス41と、IEEE1394デバイス42と、セントロニクスデバイス102と、MLB45とを含む。
オペレーションパネル39は、コントローラボード50のASIC36に接続されている。また、SB34と、NIC101と、USBデバイス41と、IEEE1394デバイス42と、セントロニクスデバイス102と、NB33にPCIバスで接続されている。
MLB45は、融合機1にPCIバスを介して接続する基板である。また、MLB45は、融合機1から入力された画像データを変換し、変換された画像データあるいは符号化された画像データを融合機1に出力するものである。
また、FCU40と、エンジン43は、コントローラボード50のASIC36にPCIバスで接続されている。
なお、コントローラボード50は、ASIC36にローカルメモリ37、HDD38などが接続されると共に、CPU31とASIC36とがCPUチップセットのNB33を介して接続されている。このように、NB33を介してCPU31とASIC36とを接続すれば、CPU31のインタフェースが公開されていない場合に対応できる。
また、ASIC36とNB33とはPCIバスを介して接続されているのでなく、AGP(Accelerated Graphics Port)67を介して接続されている。このように、図2のアプリケーション層5やプラットホーム層6を形成する一つ以上のプロセスを実行制御するため、ASIC36とNB33とを低速のPCIバスでなくAGP35を介して接続し、パフォーマンスの低下を防いでいる。
CPU31は、融合機1の全体制御を行うものである。CPU31は、NCS13、RS14、OCS15、FCS16、ECS17、MCS18、OUS19、SCS20、SRM21、FCUH22、IMH23、MEU44をOS上にそれぞれプロセスとして起動して実行させると共に、アプリケーション層5を形成するプリンタアプリ9、コピーアプリ10、ファックスアプリ11、スキャナアプリ12を起動して実行させる。
NB33は、CPU31、システムメモリ32、SB34およびASIC36を接続するためのブリッジである。システムメモリ32は、融合機1の描画用メモリなどとして用いるメモリである。SB34は、NB33とPCIバス、周辺デバイスとを接続するためのブリッジである。また、ローカルメモリ37はコピー用画像バッファ、符号バッファとして用いるメモリである。
ASIC36は、画像処理用のハードウェア要素を有する画像処理用途向けのICである。HDD38は、画像の蓄積、プログラムの蓄積、フォントデータの蓄積、フォームの蓄積などを行うためのストレージである。また、オペレーションパネル39は、ユーザからの入力操作を受け付けると共に、ユーザに向けた表示を行う操作部である。
次に、図3を用いて、各処理部とプログラムの融合機1における位置づけを説明する。図3は、各処理部と、プログラムであるファームウェアの位置づけを示す図である。図3には、制御部であるコントローラボード50と、処理部である操作パネルボード55、FCUボード51、エンジンボード52、フィニッシャ53、ADF54とが示されている。また、制御部のファームウェアであるソフトウェア群2と、操作パネルボード55のファームウェアである操作パネルファーム61と、FCUボード51のファームウェアであるFCUファーム56と、エンジンボード52のファームウェアであるプロッタファーム57とスキャナファーム58と、フィニッシャ53のファームウェアであるフィニッシャファーム59と、ADF54のファームウェアであるADFファーム60とが示されている。
まずコントローラボード50について説明する。コントローラボード50は、図1に示したソフトウェア群2が実行されるボードで、融合機1を制御する。このコントローラボード50から、以下に説明するボードが接続される。
操作パネルボード55は、オペレーションパネル39の制御を行うボードであり、融合機1に関する情報を、融合機1を操作するオペレータに対して表示する処理を行う。この操作パネルボード55とコントローラボード50とは、通信をするために同期シリアル回線64で接続されている。
次に、FCUボード51について説明する。このボードは、上述したファックスコントロールユニットである。また、FCUボード51とコントローラボード50とは、通信をするためにPCIバス62で接続される。
次に、エンジンボード52について説明する。エンジンボード52は、プロッタファー57やスキャナファーム58などのエンジン部のファームが搭載される。このエンジンボード52もコントローラボード50と通信をするためにPCIバス62で接続される。
以上説明した操作パネルボード55と、FCUボード51と、エンジンボード52とは、それぞれコントローラボード50と直接通信するボードである。
次に説明するフィニッシャ53とADFは、エンジンボード52とシリアル回線で通信することにより、エンジンボード52を介してコントローラボード50と通信するボードである。
フィニッシャ53は、印刷用紙をステープラでとじるための装置であり、フィニッシャファーム59により動作する。ADF54は、自動で原稿を送る装置であり、ADFファーム60により動作する。
以上説明した操作パネルボード55と、FCUボード51と、エンジンボード52と、フィニッシャ53と、ADF54は、いずれのボードもそれぞれCPUを有する。
このように融合機1は、画像形成に係る処理を行う1つ以上の処理部と、処理部と直接または他の処理部を介して通信する制御部と、処理部と制御部とを動作させるプログラムとを有する。
次に、各ボードの立ち上げ時の処理を、図4を用いて説明する。図4は、コントローラボード50と、エンジンボード52と、FCUH22と、OCS19との間のシーケンス図を示している。なお、FCUH22は、FCUボード62の立ち上げを管理し、OCS19は、操作パネルボード55の立ち上げを管理している。
まず、ステップS1とステップS2で、コントローラボード50及びエンジンボード52は、互いに通信可能なことを確認する。そして、コントローラボード50は、ステップS3で、エンジンボード52に対し、コントローラと接続されたことを通知する。エンジンボード52も同様に、ステップS3で、コントローラボードに対し、エンジンが接続したことを通知する。このとき、エンジンボード52は、搭載されているプログラムに関する情報も同時に送信する。
FCUH22は、ステップS5で、FCUボード51が起動したことを確認すると、FCUボード51が起動したことと、FCUボード51に搭載されているプログラムに関する情報をコントローラボード50に送信する。また、OCS19も同様に、操作パネルボード55が起動すると、OCSが起動したことと、操作パネルボード55に搭載されているプログラムに関する情報を送信する。
次に、プログラムを更新するときの処理について説明する。
上記処理部のプログラムの更新は、コントローラボード50のSCS20の指示により行われる。まず、このSCS20が含まれるコントローラボード50に搭載されているプログラムの更新について説明する。
コントローラボード50に搭載されている各アプリ9、10、11、12のプログラムと、コントローラ6のプログラム(図1参照)であるが、それらは、個々に更新を行えるようになっている。
また、コントローラ6の各プログラムは、通常の処理をしている場合、NV−RAM47に書き込まれたプログラムで動作している。したがって、プログラムの更新をする場合は、NV−RAM47上のプログラムを書き換えることはできないため、実行しているプログラムをローカルメモリ37あるいはシステムメモリ32などのRAMに展開し、その展開したプログラムで処理を実行するようになる。
しかし、RAMは、多くの容量を持たないため、コントローラボード50は、通常の動作を実行するためのプログラムとは別に、プログラムを更新するための更新用プログラムを用意しておき、その更新用プログラムをRAMに展開してプログラムの更新を行う。図5は、NV−RAMからRAMへの更新用プログラムの展開を示す図である。図5に示されるように、NV−RAMに書き込まれている更新用プログラム201が、RAMに更新用プログラム202として展開される。
この更新用プログラムと通常の動作を実行するためのプログラムの違いについて説明する。
コントローラ6のプログラムは、多くの処理部と通信を行い、融合機1の制御を行うため、通信を行うためのプログラムを含んでいる。図6は、コントローラプログラム203と、周辺ソフトプログラム204とが通信可能な様子を示すものである。なお、図6における周辺ソフトプログラムとは、図3に示されるFCUファーム56など直接に通信を行うソフトでもよいし、エンジンボード52に搭載されているファームでもよい。
このようにコントローラボード50は、他の処理部の制御を行うため、送受信する内容を実行するためのプログラムは、サイズが大きいプログラムである。
更新用プログラムは、上記通信を行うためのプログラムを除くことにより、サイズの小さいプログラムとなったプログラムに、更新する処理を加えたプログラムであるので、通常の処理を実行するためのプログラムと比較して小さなサイズのプログラムである。
この更新用プログラムによって、周辺ソフトとの通信は行えなくなるが、RAMを占有する領域を減らすことが可能となる。図7は、更新用プログラム203の実行中の状態における通信の様子を示すもので、コントローラボード50と周辺ソフトプログラム204とが通信を行えなくなった様子を示す
このように、コントローラボード50に搭載されたコントローラ6のプログラムを更新すると、各処理部との通信が行えなくなる。したがって、この場合、コントローラ6のプログラムは、他の処理部のプログラムの更新を行えないことになる。
このことは、フィニッシャ53あるいはADF54と通信するエンジンボード52についても言えることである。フィニッシャ53あるいはADF54は、エンジンボード52からプログラムの更新を指示されることになるため、エンジンボード52のプログラムを更新すると、エンジンボード52は、コントローラボード50と同様にフィニッシャ53あるいはADF54との通信が行えなくなり、フィニッシャ53あるいはADF54のプログラムの更新を行えないことになる。
すなわち、コントローラボード50と通信するために経由する処理部の数が多いものほど、先にプログラムの更新を行わなければならない。
そこで次に、プログラムを更新する順番を定めるための優先度情報について図8を用いて説明する。図8に示される優先度情報は、プログラム種類とそのプログラムの優先度を示すテーブルである。プログラム種類とは、FCUファームやフィニッシャファーム、プリンタアプリなどを表す。
また、優先度であるが、例えば、プログラムCの優先度は2であり、プログラムEの優先度は10である。この優先度の値が小さい方が更新する順番が先になる。したがって、プログラムDよりもプログラムAの方が更新する順番が先になる。また、同じ順位の場合は、その順位のいずれのプログラムから更新しても良い。
この優先度情報は、各処理部とコントローラボード50との通信をするために経由する処理部の数に応じて定まる。したがって、図3に示されるような処理部の配置であれば、エンジンボード52を経由してコントローラボード50と通信を行うフィニッシャファーム59とADFファーム60の優先度が1となる。
次に、この優先度情報に応じて取得した更新プログラムで更新する順番を定める更新順番情報と、その生成する過程について説明する。
図9は、更新順番情報を生成する過程を示した図である。更新プログラムをプログラムE、F、D、Aとし、この順序でダウンロードされたとする。
コントローラ6は、優先度情報から取得した更新プログラムの優先度を参照し、取得した更新プログラムとその優先度の組で構成される優先度表70を生成する。そして、この優先度表70を優先度で昇順にソートし、更新順番情報71を生成する。また、更新順番情報71は、順番と取得した更新プログラムにより更新されるプログラムの種類とを対応付けた情報を有している。
このように、更新順番情報71を生成した後、更新順番情報71を拡張しても良い。図10は、更新順番情報71を拡張したもので、図に示されるようにバージョンや、実行状態を加えたものである。なお、図10の実行状態には、「未実行」、「実行中」、「実行済み」が示される。「未実行」は、プログラムの更新を行なっていない状態を示す。「実行中」は、プログラムの更新を実行中である状態を示す、また、「実行済み」は、プログラムの更新の実行が済んだ状態を示す。以上のように、実行状態は、更新プログラムにより更新されるプログラムの更新状況を示す情報である。
なお、図10において、コントローラ6のプログラムの更新より操作パネルファームの更新の方が、後に行われるようになっている。その理由は、操作パネルファームがオペレータに対して進捗状況を描画するためである。そのため、操作パネルファームを更新する順番が最後となる。図11は、操作パネルファーム205が書き込まれたNV−RAMからRAM上に展開された更新プログラム206を示すものである。
操作パネルファームの更新をコントローラ6のプログラムの更新の後に行う場合、コントローラ6の更新用プログラムは、操作パネルボードとの通信を行う処理を含む。なお、進捗状況を描画する必要が無ければ、操作パネルファームを更新する順番も、他の処理部のプログラムの更新と同様に定める。
以上説明した更新順番情報は、コントローラ6のSCS20が保有する。図12は、更新順番情報のコントローラ6における位置を示す図である。図に示されるように更新順番情報207は、コントローラ6が保有する。
次に、融合機1におけるプログラムの更新処理を図13のフローチャートを用いて説明する。
更新プログラム取得段階に対応するステップS101で、コントローラ6のSCS20は、ネットワークを介して更新プログラムを取得したOUS19からプログラム更新開始要求を受信する。次のステップS102で、コントローラ6は、優先情報とRAMに展開された更新プログラムに応じて、更新順番情報を生成する。
次に、コントローラ6は、プログラム更新段階に対応するステップS103で、更新順番情報に示される更新未実行状態のプログラムのうち、最優先のプログラムの更新を実行する。そして、コントローラ6は、ステップS104で更新を実行しているプログラムの更新順番情報の状態を実行中に変更し、変更終了後実行済みに変更する。
次に、コントローラ6は、ステップS105で、更新順番情報に登録されている全プログラムの更新が実行完了したかどうか判断し、完了していない場合は、再びステップS103の処理を実行する。完了した場合、コントローラ6は、ステップS106で更新したプログラムが搭載されるボードのリブートを実行し、処理を終了する。
次に、リブート処理について説明する。まず、ボードの種類について説明する。ボードには、コントローラ6が直接リブート可能なものと、コントローラ6がリブート実行要求をすることにより、ボードが自らリブートするものの2種類ある。これらのボードのリブート処理について説明する。
最初に、コントローラ6が直接にリブート可能なボードのリブート処理について、図14を用いて説明する。コントローラ6は、ステップS201で、全ての更新対象プログラムの更新処理が完了すると、ステップS202で、エンジンファームに対し、リブートしても不具合が起きないように、処理の実行を制限させる動作停止要求を通知する。
ステップS203は、動作停止要求に対するエンジンファームからの動作停止完了待ちである。このステップで、動作停止完了を受信すると、コントローラ6はステップS204で、操作パネルファームに動作停止要求を通知する。そして、ステップS205で、コントローラ6は、再び動作停止要求対する操作パネルファームからの動作停止完了待ちとなる。
このステップで動作停止完了を受信すると、コントローラ6はステップS206で、リブートを実行する。
このように、コントローラ6が直接にリブート可能なボードの場合、コントローラ6は、リブートする前に動作停止要求を行う。
次に、コントローラ6がリブート実行要求をすることにより、ボードが自らリブートするボードのリブート処理について、図15を用いて説明する。コントローラ6は、ステップS301で、全ての更新対象プログラムの更新処理が完了すると、ステップS302で、エンジンファームに対し、リブート実行要求を通知する。次に、コントローラ6は、ステップS303で、操作パネルファームにリブート実行要求を通知する。その一定時間後に、コントローラ6は、ステップS304で、自らのリブートを実行する。そして、再起動後、コントローラ6は、ステップS305で各処理部と通信を再開する。
このように、コントローラ6がリブート実行要求をすることにより、ボードが自らリブートするボードの場合、コントローラ6は、リブート実行要求を通知し、一定時間後に自らをリブートする。
上述したフローチャートの処理を、図7のシーケンス図を用いて説明する。このシーケンス図は、OUS19と、SCS20と、操作パネルファーム61と、システムソフト72と、エンジンファーム73との間で行われるやり取りを示すものである。なお、システムソフト72は、図1に示されるコントローラ6とアプリケーション層5のプログラムを表す。エンジンファーム73は、エンジンボードに搭載されているプロッタファーム57あるいはスキャナファーム58を表す。
更新プログラム取得段階に対応するステップS401で、コントローラ6のOUS19は、同じコントローラ6のSCS20に対し、更新プログラムをダウンロードしたことを通知する。この通知により、SCS20は、モジュール判定処理を行い、後述する更新管理テーブルを生成する。更新管理テーブルを生成したSCS20は、プログラム更新段階に対応するステップS402でエンジンファーム73に更新プログラムを送信する。エンジンファーム73は、プログラムの更新が完了するとステップS403で、SCS20に更新結果応答を通知する。
次に、SCS20は、ステップS404で、コントローラ6のプログラムを更新するために、SCS20を除くシステムソフト72にリブート準備要求を通知する。システムソフト72は、リブートの準備が完了すると、ステップS405で、リブート準備完了を通知する。
次に、SCS20は、揮発性記憶部であるRAM実行へ切り替える(図5参照)。RAM実行に切り替わったSCS20は、ステップS406でシステムソフト72のプログラムの更新処理を行う。次に、SCS20は、ステップS407で、操作パネルファーム61に対し、更新プログラムを送信する。操作パネルファーム61は、ステップS408で、SCS20に対しプログラムを更新した結果を通知する。
SCS20は、全てのプログラムの更新が完了したため、再起動段階に対応するステップS409でエンジンファーム73と、操作パネルファーム71とをステップS409でリブートする。そして、SCS20は、t秒後にシステムソフト72をリブートする。
上述した更新管理テーブルの生成について、図17を用いて説明する。この更新管理テーブルは、テーブルの項目として、プログラム種類と、そのプログラムのバージョンと、受信プログラムデータのモジュールIDと、更新の実行状態とを有する。
受信プログラムデータのモジュールIDとは、プログラムデータを一意的に特定するものである。また、実行状態は、図10で説明した実行状態と同じものである。
この更新実行用データテーブルにおいて、例えばスキャナエンジンプログラムは、バージョンが1.22で、モジュールIDがJP2CFa_escanで、実行状態は未実行である。
この更新管理テーブルの生成を説明するため、まず、図18に示されるテーブルについて説明する。図18に示されるテーブルは、融合機1に搭載されているモジュールIDの構成を示すものである。
このテーブルは、項目として、融合機1のプログラムのプログラム種類と、そのプログラムのバージョンと、モジュールIDとを有する。融合機1の構成が、図18に示される構成であるとする。また、ダウンロードした更新プログラムが、プロッタエンジンプログラム、スキャナエンジンプログラム、コントローラプログラム、プリンタアプリプログラム、FAXアプリプログラム、操作部プログラムの6つであるとする。
このときSCS20は、当該機種のプログラム構成情報に含まれないプログラムを外し、図19に示される更新管理テーブルを生成する。今の場合、融合機1の構成にFAXアプリプログラムが搭載されていないため、図19に示されるように、FAXアプリプログラムを除いた更新管理テーブルが生成される。
次に、SCS2がプログラムを更新した順にリブートさせる処理について、図20のフローチャートを用いて説明する。
プログラム更新段階に対応するステップS501で、SCS20は、エンジンファーム73のプログラム更新処理を実行する。次のステップS502で、SCS20は、エンジンファーム73に動作停止要求を通知する。
ステップS503は、エンジンファーム73から送信される動作停止完了の受信待ちである。この動作停止完了をSCS20が受信すると、再起動段階に対応するステップS504で、SCS20は、エンジンファーム73のリブートを実行し、ステップS512へ処理を進める。
ステップS502の処理に戻る。ステップS502で、エンジンファーム73に動作停止要求を通知したSCS20は、ステップS505で、システムソフト72のプログラム更新処理を実行する。次のステップS506で、SCS20は、SCS20以外のシステムソフト72に動作停止要求を通知する。
ステップS507は、システムソフト72から送信される動作停止完了の受信待ちである。この動作停止完了をSCS20が受信すると、SCS20は、ステップS512へ処理を進める。
ステップS506の処理に戻る。ステップS506で、システムソフト72に動作停止要求を通知したSCS20は、ステップS508で、操作パネルファーム61のプログラム更新処理を実行する。次のステップS509で、SCS20は、操作パネルファーム61に動作停止要求を通知する。
ステップS510は、操作パネルファーム61から送信される動作停止完了の受信待ちである。この動作停止完了をSCS20が受信すると、SCS20は、再起動段階に対応するステップS511で操作パネルファーム61のリブートを実行する。
SCS20は、ステップS512で、エンジンファーム73と操作パネルファーム61のリブートが完了したと判断すると、ステップS513でシステムソフト72のリブートを実行し処理を終了する。
次に、上述した処理を、図21のシーケンス図を用いて説明する。このシーケンス図は、先ほどのシーケンス図と同様に、OUS19と、SCS20と、操作パネルファーム61と、システムソフト72と、エンジンファーム73との間で行われるやり取りを示すものである。
更新プログラム取得段階に対応するステップS601で、OUS19は、SCS20に対し、更新プログラムをダウンロードしたことを通知する。この通知により、SCS20は、上述したモジュール判定処理を行い、更新管理テーブルを生成する。
次に、SCS20は、プログラム更新段階に対応するステップS602でエンジンファーム73に更新プログラムを送信する。エンジンファーム73は、プログラムの更新が完了すると、ステップS603で、SCS20に更新結果応答を通知する。更新結果応答を通知されたSCS20は、再起動段階に対応するステップS604で、エンジンファーム73に対し、リブート実行要求を行い、エンジンファーム73は、リブートを実行する。
次に、SCS20は、ステップS605で、コントローラ6のプログラムを更新するために、SCS20を除くシステムソフト72にリブート準備要求を通知する。システムソフト72は、リブートの準備が完了すると、ステップS606で、リブート準備完了を通知する。そして、SCS20は、上述したRAM実行へ切り替える。
RAM実行に切り替わったSCS20は、ステップS607でシステムソフトのプログラムの更新処理を行う。次に、SCS20は、ステップS608で、操作パネルファーム61に対し、更新プログラムを送信する。操作パネルファーム61は、ステップS609で、SCS20に対しプログラムを更新した結果を通知する。
次に、SCS20は、再起動段階に対応するステップS610で、操作パネルファームに対し、リブート実行要求を行い、操作パネルファーム61は、リブートを実行する。
そして、SCS20は、全てのプログラムの更新が完了したため、t秒後にシステムソフト72をリブートする。
次に、SCS20が、操作パネルファーム61やエンジンファーム73との通信回線が切断されたことを検出することで、SCS20が自らのリブートを実行する処理について説明する。
通信回線が切断されることは、通信相手がリブートしたことを意味する。したがって、この処理は、SCS20の通信相手が確実にリブートを実行したかどうか確認した後に、SCS20が自らのリブートを実行する処理である。
この処理を、図22を用いて説明する。更新プログラム取得段階に対応するステップS701で、OUS19は、SCS20に対し、更新プログラムをダウンロードしたことを通知する。この通知により、SCS20は、モジュール判定処理を行い、上述した更新管理テーブルを生成する。
更新管理テーブルを生成したSCS20は、プログラム更新段階に対応するステップS702でエンジンファーム73に更新プログラムを送信する。エンジンファーム73は、プログラムの更新が完了するとステップS703で、SCS20に更新結果応答を通知する。
次に、SCS20は、ステップS704で、コントローラ6のプログラムを更新するために、SCS20を除くシステムソフト72にリブート準備要求を通知する。システムソフト72は、リブートの準備が完了すると、ステップS705で、リブート準備完了を通知する。
次に、SCS20は、RAM実行へ切り替える。RAM実行に切り替わったSCS20は、ステップS706でシステムソフト72のプログラムの更新処理を行う。次に、SCS20は、ステップS707で、操作パネルファーム61に対し、更新プログラムを送信する。操作パネルファーム61は、ステップS708で、SCS20に対しプログラムを更新した結果を通知する。
そして、SCS20は、全てのプログラムの更新が完了したため、再起動段階に対応するステップS709でエンジンファーム73にリブート実行要求を行う。これにより、ステップS710で、エンジンファーム73との通信回線が切断されたことが確認される。
次に、SCS20は、再起動段階に対応するステップS711で操作パネルファーム61にリブート実行要求を行う。これにより、ステップS712で、操作パネルファーム61との通信回線が切断されたことが確認される。
次に、SCS20は、エンジンファーム73と操作パネル61がリブートを実行したことが確認できたので、SCS20は、システムソフト72をリブートする。
以上、リブートする方法として、全てのプログラムの更新が完了してからリブートする方法と、プログラムの更新が完了した順にリブートする方法の2つの方法について説明した。
これら2つの方法は、融合機1がリブートするまでの時間が異なっている。図23は、全ての処理部のプログラムの更新が終了した後に、リブートする場合に要する時間を示すものである。
図23には、プログラムの更新をFCUファームから行い、そのFCUファームのプログラムの更新が終了した時刻aに、エンジンファームのプログラムの更新を開始していることが示されている。また、エンジンファームのプログラムの更新処理が終了した時刻bに操作パネルファームの更新が開始することが示されている。そして、操作パネルファームのプログラムの更新が終了した時刻cにリブートを実行し、時刻dにリブートが終了したことが示されている。
次の図24は、プログラムの更新が完了した順にリブートする方法で行った場合に要する時間を示したものである。
図24には、プログラムの更新がFCUファームから行われ、そのFCUファームのプログラムの更新が終了した時刻aに、エンジンファームのプログラムの更新とFCUファームのリブート処理とが開始されていることが示されている。また、エンジンファームのプログラムの更新処理が終了した時刻bに操作パネルファームの更新とエンジンファームのリブート処理とを開始していることが示されている。そして、操作パネルファームのプログラムの更新が終了した時間cに操作パネルファームのリブートを実行し、時間dにリブートが終了したことが示されている。
このように、プログラムの更新とリブートを平行して行うと、処理時間が短縮することができる。また、平行して処理を行う場合は、リブートする時間が長くかかるプログラムの更新を早く行うほど時間を短縮することが可能となる。
次に、図25を用いて、表示部であるオペレーションパネル39の表示処理について説明する。
更新プログラム取得段階に対応するステップS801で、SCS20は、OUS19から更新プログラムをダウンロードしたことを通知される。次のステップS802で、SCS20は、更新管理テーブルを生成する。そして、SCS20は、ステップS803で、更新未実行状態のプログラムのうち、テーブルの最上位のもののプログラムの更新を実行する。
次に、SCS20は、ステップS804で、省エネモードかどうか判断し、省エネモードでなければ、ステップS807へ処理を進める。省エネモードの場合、SCS20は操作パネルファーム61に対してパネルを非表示にさせる。この間、SCS20は、ステップS806で、省エネモードを解除するイベントが起きているかどうか判断する。
ここで、省エネモードの解除するイベントとは、例えば、タッチセンサを有するオペレーションパネル39が触れられたなどのイベントをいう。
省エネモードが解除されると、ステップS807で、SCS20は、更新の進捗状況を表示し、処理を終了する。
上述した省エネモードについて説明する。省エネモードには、待機状態、予熱状態、低電力状態、静音状態、エンジンオフ状態の5種類のモードが存在する。
待機状態とは、印刷可能な状態である。予熱状態と低電力状態とは、定着温度を下げた状態で、低電力状態はエネルギースターに対応している。なお、定着温度を何度まで下げるか、あるいは下げないかは、機種や設定により異なる。静音状態とは、定着温度に係る電源の供給をやめ、周辺機器が静音起動し、HDDのアクセスが可能な状態であり、ファックスの着信やデータの入力に対応しているものである。エンジンオフ状態とは、エンジンを停止させた状態であり、例えばエンジンのCPUがスリープしている、もしくは電気的に遮断されている状態である。
次に、図26を用いて、融合機1の状態を保持し、プログラム更新後に融合記1を更新前の状態に移行させる処理について説明する。
更新プログラム取得段階に対応するステップS901で、SCS20は、OUS19から更新プログラムをダウンロードしたことを通知される。次に、SCS20は、現在の融合機1の状態を不揮発性記憶部であるNV−RAM47に記憶する。
なお、融合機1の状態とは、例えば先ほど省エネ状態などであり、オペレーションパネル39の画面を暗くしている状態、予熱状態、定着温度を抑える、エンジンを停止しているなどの状態が挙げられる。
ステップS903で、プログラムの更新実行が完了すると、SCS20は、ステップS904でリブートを実行する。
そして、再起動後のステップS904でSCS20は、NV−RAM47に記憶していた融合機1の状態に融合機を移行する。
以下、利用者や管理者などからなるオペレータにプログラムの更新をしたことを通知する処理について説明する。図27に示されるフローチャートは、プログラム更新後、印刷用紙に更新結果を印刷することによりオペレータに通知するSCS20の処理を示している。
このフローチャートの説明をする。更新プログラム取得段階に対応するステップS1001でSCS20は、OUS19からプログラム更新開始要求を受信する。次に、SCS20は、通知された更新プログラムから、更新管理テーブルを生成する。
更新管理テーブルを生成したSCS20は、プログラム更新段階に対応するステップS1003で、更新管理テーブルの実行状態が未実行状態のプログラムのうち、最上位のもののプログラムの更新を実行する。
ステップS1004で、SCS20は、更新を実行したプログラムの更新管理テーブルにおける実行状態を実行中に変更する。次に、SCS20は、更新結果情報生成段階に対応するステップS1005で、NV−RAM47に記憶される更新フラグを更新したプログラムごとに書き込む。この書き込み内容については後述する。
SCS20は、ステップS1006で更新実行用テーブルに登録されている全プログラムの更新が実行完了したかどうか判断し、完了していなければ、再びステップS1003の処理を行い、完了していればステップS1007へ処理を進める。
ステップS1007で、SCS20は、後述する更新日時情報に更新日時を書き込み、リブートを実行する。そして、ステップS1008でリブート実行が完了、すなわち再起動後、SCS20は、ステップS1009で、NV−RAM47に更新されたプログラムの情報があるかどうか判断する。
NV−RAM47に更新されたプログラムの情報がない場合、SCS20は、ステップS1010でオペレーションパネル39に通常の画面を表示し、処理を終了する。
NV−RAM47に更新されたプログラムの情報がある場合、SCS20は、更新結果出力段階に対応するステップS1011で、更新結果情報に基づいた更新結果をプリントし、排出する。このプリント内容については、後に説明する。
このように、プリントし、排出した後、SCS20は、ステップS1012で、NV−RAM47に記憶していた更新結果情報を消去し処理を終了する。
以上説明したフローチャートにおけるステップS1005で、NV−RAM47に書き込まれる内容について、図28を用いて説明する。
図28に示される表は、NV−RAM47に書き込まれるデータ構造を示すものである。このデータ構造は、項目として、プログラム名と、更新前のバージョンと、更新後のバージョンと、更新結果を有する。
このうち、プログラム名は、エンジンプログラムのように、プログラムの名前を表し、例えば、文字コードまたは予め割り振られたコードで表すことができる。更新前のバージョンは、そのプログラムの更新する前のバージョンを表し、同様に文字コードで表すことができる。更新後のバージョンは、そのプログラムを更新した後のバージョンを表し、同様に文字コードで表すことができる。プログラムの更新の成否を示す更新結果は、プログラムの更新が成功したかどうかを表すデータであり、このデータは、1ビット以上のデータであれば表すことができる。
なお、図中のプリンタアプリプログラムの更新後と更新結果に示されている「NULL」は、そのデータが「0」で表されており、そのデータの内容がないことを示す。したがって、プリンタアプリプログラムは、更新されなかったことが示されている。
次に、図29を用いて、NV−RAM47に書き込まれる更新日時情報について説明する。図29に示されるように、更新日時情報は、西暦、月、日、時、分で書き込まれる。
図28、図29に示したデータが更新結果情報であるが、オペレータに提供する更新結果に応じ、更新結果情報の内容を適宜変更しても良い。例えば単にプログラムの更新の成否だけ提供するのであれば、1ビット以上の情報があれば十分である。
次に、ステップS1011でプリントされる内容について、図30を用いて説明する。プリントした内容は、更新結果情報が有するプログラム名211と、更新前のバージョン212と更新後のバージョン213と、更新結果214と、更新日時215と、その他の定型文216、217になっている。
このように、プリントされる内容には、更新結果情報が有する情報がプリントされ、オペレータなどにとっては、必要な情報が揃ったものとなっている。
次に、更新結果をオペレータに電子メールで送信する処理について、図31のフローチャートを用いて説明する。なお、図31のフローチャートのステップS1101からステップS1108までは、図27のフローチャートのステップS1001からステップS1008と同じ処理のため、説明を省略し、ステップS1109以降の処理について説明する。
リブート実行完了後、SCS20は、ステップS1109で、NV−RAM47に更新されたプログラムの情報があるかどうか判断する。
NV−RAM47に更新されたプログラムの情報がない場合、SCS20は、ステップS1110でオペレーションパネル39に通常の画面を表示し、処理を終了する。
NV−RAM47に更新されたプログラムの情報がある場合、SCS20は、ステップS1111で、管理者のメールアドレスが設定されているかどうか判断する。管理者のメールアドレスが設定されていない場合、SCS20は、ステップS1113へ処理を進める。
管理者のメールアドレスが設定されている場合、ステップS1112で、SCS20は、管理者宛に更新結果情報に基づいた更新結果が記された電子メールを送信する。電子メールを送信した後、SCS20は、ステップS213で、NV−RAM47に記憶していた更新結果情報を消去し処理を終了する。
送信した電子メールの内容を、図32を用いて説明する。図32に示されるように、更新結果情報が有するプログラム名211と、更新前のバージョン212と更新後のバージョン213と、更新結果214と、更新日時215と、その他の定型文216、217になっている。電子メールで送信される内容も、プリントされる内容と同様のものとなる。
次に、表示部であるオペレーションパネル39に表示することによってオペレータに通知する処理について、図33のフローチャートを用いて説明する。なお、図33のフローチャートのステップS1201からステップS1208までは、図27のフローチャートのステップS1001からステップS1008と同じ処理のため、説明を省略し、ステップS1209以降の処理について説明する。
リブート実行完了後、SCS20は、ステップS1209で、NV−RAM47に更新されたプログラムの情報があるかどうか判断する。
NV−RAM47に更新されたプログラムの情報がない場合、SCS20は、ステップS1210でオペレーションパネル39に通常の画面を表示し、処理を終了する。
NV−RAM47に更新されたプログラムの情報がある場合、SCS20は、ステップS1211で、記憶した更新結果情報に基づいた更新結果をオペレーションパネル39に表示する。
このように、オペレーションパネル39に表示した後、SCS20は、ステップS1212で、NV−RAM47に記憶していた更新結果情報を消去し処理を終了する。
オペレーションパネル39の表示内容を、図34を用いて説明する。図34には、各種キー221、223、224、225、226と、表示画面222が示されている。表示画面222には、更新結果情報が有するプログラム名228と、更新前のバージョン229と更新後のバージョン230と、更新結果231と、更新日時232と、その他の定型文233と、OKボタン227が表示される。
各種キー221、223、224、225、226は、融合機1の操作をするためのキーである。表示画面222は、オペレータに向け情報を表示するものである。OKボタン227は、表示されている内容を閉じる際にオペレータが押下するものである。オペレーションパネルに表示される内容も、プリントされる内容と同様のものとなる。
次に、オペレータが閲覧できるように、NV−RAM47に更新履歴を記憶する処理について、図35のフローチャートを用いて説明する。なお、図35のフローチャートのステップS1301からステップS1308までは、図27のフローチャートのステップS1001からステップS1008と同じ処理のため、説明を省略し、ステップS1309以降の処理について説明する。
リブート実行完了後、SCS20は、ステップS1309で、NV−RAM47に更新されたプログラムの情報があるかどうか判断する。
NV−RAM47に更新されたプログラムの情報がない場合、SCS20は、ステップS1310でオペレーションパネル39に通常の画面を表示し、処理を終了する。
NV−RAM47に更新されたプログラムの情報がある場合、SCS20は、ステップS1311で、記憶した更新結果情報を更新履歴情報に追記する。更新履歴情報に更新結果情報を追記した後、SCS20は、ステップS1312で、NV−RAM47に記憶していた更新結果情報を消去し処理を終了する。
更新履歴情報を、図36を用いて説明する。更新履歴情報は、図36に示されるように、更新日時ごとに更新結果情報が有するプログラム名と、更新前のバージョンと更新後のバージョンと、更新結果と、更新日時とを有する。
このように、更新するごとに、その結果が記憶される。例えば、図36の更新履歴情報には、2001年の12月15日午前4時0分に行われた更新から、2002年11月1日午前2時0分に行われた更新までの更新履歴が記憶されている。
以上が本発明の実施例であるが、この実施例において、更新プログラムを格納する不揮発性メモリは、コストのかからないフラッシュメモリを用いるようにしても良い。