以下、本発明の実施の形態について図面を参照して説明する。以下の説明では同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
図1は、本発明の実施の形態の一つにおけるプログラム更新システムの全体概要を示す図である。図1を参照して、プログラム更新システム1は、ネットワーク2にそれぞれ接続されたMFP(Multi Function Peripheral)100,100A,100B,100Cと、サーバ200と、を含む。
MFP100,100A,100B,100Cは、画像形成装置の一例である。それらのハード構成および機能は同じなので、ここではMFP100を例に説明する。サーバ200は、一般的なコンピュータであり、例えば、MFP100,100A,100B,100Cのメーカが提供する。サーバ200は、MFP100,100A,100B,100Cそれぞれが実行するためのプログラムを記憶しており、MFP100,100A,100B,100Cのいずれかからのダウンロード要求に応じて、要求されたプログラムを送信する。また、サーバ200は、プログラムが更新される毎に、その時点のプログラムを前のバージョンのプログラムから変更された情報を含む更新情報と対応付けて記憶する。
ネットワーク2は、ローカルエリアネットワーク(LAN)であり、有線または無線を問わない。またネットワーク2は、LANに限らず、インターネットなどのワイドエリアネットワーク(WAN)、一般公衆回線を用いたネットワーク等であってもよい。
なお、ここでは、プログラム更新システム1が、サーバ200と、4台のMFP100,100A,100B,100Cを含む場合を例に説明するが、台数を限定するものではなく、1台のサーバ200と、1台以上のMFPを含んでいればよい。
図2は、サーバのハード構成の一例を示す図である。図2を参照して、サーバ200は、それぞれがバス209に接続された中央演算装置(CPU)201と、CPU201の作業領域として用いられるRAM(Random Access Memory)205と、CPU201が実行するプログラムを記憶するROM(Read Only Memory)206と、ハードディスクドライブ(HDD)207と、サーバ200をネットワーク2に接続するための通信I/F202と、キーボードおよびマウス等を備えた入力部204と、情報を表示するためのモニタ203と、を含む。
図3は、MFPの外観を示す斜視図である。図3を参照して、MFP100は、自動原稿搬送装置(ADF)10と、画像読取部20と、画像形成部30と、給紙部40と、後処理部50と、を含む。
ADF10は、原稿給紙トレイ11上にセットされた複数枚の原稿を1枚ずつ自動的に画像読取部20のプラテンガラス上に設定された所定の原稿読み取り位置まで搬送し、画像読取部20により原稿画像が読み取られた原稿を原稿排紙トレイ12上に排出する。画像読取部20は、原稿読取位置に搬送されてきた原稿に光を照射する光源と、原稿で反射した光を受光する光電変換素子とを含み、原稿のサイズに応じた原稿画像を走査する。光電変換素子は、受光した光を電気信号である画像データに変換して、画像形成部30に出力する。給紙部40は、給紙トレイに収納された用紙を画像形成部30に搬送する。
画像形成部30は、周知の電子写真方式により画像を形成するものであって、画像読取部20から入力される画像データにシェーディング補正などの各種のデータ処理を施し、データ処理後の画像データに基づいて、給紙部40により搬送される用紙に画像を形成する。
後処理部50は、画像が形成された記録シートを排紙する。後処理部50は、複数の排紙トレイを有し、画像が形成された用紙をソートして排紙することが可能である。また、後処理部50は、パンチ穴加工部、ステープル加工部を備えており、排紙された用紙にパンチ穴加工、またはステープル加工することが可能である。また、MFP100は、その上面にユーザとのユーザインターフェースとしての操作パネル9を備えている。
なお、本実施の形態においては画像形成装置の一例としてMFP100,100A,100B,100Cを例に説明するが、MFP100,100A,100B,100Cに代えて、たとえば、スキャナ、プリンタ、ファクシミリ、パーソナルコンピュータ等であってもよい。
図4は、MFPの回路構成の一例を示すブロック図である。図4を参照して、MFP100は、メイン回路101と、ファクシミリ部122と、通信制御部123と、を含む。メイン回路101は、自動原稿搬送装置(ADF)10と、画像読取部20と、画像形成部30と、給紙部40と、後処理部50とに接続されている。
メイン回路101は、CPU111と、CPU111の作業領域として使用されるRAM112と、CPU111が実行するプログラム等を記憶するためのEEPROM113と、表示部114と、操作部115と、大容量記憶装置としてのハードディスクドライブ(HDD)116と、データ通信制御部117と、を含む。
CPU111は、フラッシュメモリ113に記憶された実行プログラムを実行して、機能を実行する。フラッシュメモリ113は、EEPROM(Electronically Erasable Programmable ROM)である。
CPU111は、表示部114、操作部115、HDD116およびデータ通信制御部117と、それぞれ接続され、メイン回路101の全体を制御する。また、CPU111は、ファクシミリ部122、通信制御部123、ADF10、画像読取部20、画像形成部30、給紙部40、後処理部50と接続され、MFP100の全体を制御する。
表示部114は、液晶表示装置(LCD)、有機ELD(Electro Luminescence Display)等の表示装置であり、ユーザに対する指示メニューや取得した画像データに関する情報等を表示する。操作部115は、複数のキーを備え、キーに対応するユーザの操作による各種の指示、文字、数字などのデータの入力を受付ける。操作部115は、表示部114上に設けられたタッチパネルを含む。表示部114と、操作部115とで、MFP100の上面に設けられる操作パネル9が構成される。
データ通信制御部117は、TCP(Transmission Control Protocol)またはUDP(User Datagram Protocol)等の通信プロトコルで通信するためのインターフェースであるLAN端子118と、シリアル通信のためのシリアル通信インターフェース端子119とを有する。データ通信制御部117は、CPU111からの指示に従って、LAN端子118またはシリアル通信インターフェース端子119に接続された外部の機器との間でデータを送受信する。
LAN端子118に、ネットワーク2に接続するためのLANケーブルが接続される場合、データ通信制御部117は、LAN端子118を介して接続された他のMFP100A,100B,100Cまたはサーバ200と通信する。さらに、データ通信制御部117は、インターネットに接続された他のコンピュータと通信する。CPU111は、データ通信制御部117を制御して、サーバ200からプログラムをダウンロードし、フラッシュメモリ113に記憶することにより、プログラムを更新することが可能である。プログラムは、後述する実行プログラムを含む。
シリアル通信インターフェース端子119に機器が接続された場合、データ通信制御部117は、シリアル通信インターフェース端子119に接続された機器、例えば、デジタルカメラ、デジタルビデオカメラまたは携帯情報端末との間で通信して画像データを入出力する。また、シリアル通信インターフェース端子119には、フラッシュメモリを内蔵したメモリカード119Aが接続可能である。CPU111は、データ通信制御部117を制御して、メモリカード119AからCPU111が実行するためのプログラムを読出し、フラッシュメモリ113に記憶することにより、プログラムを更新することが可能である。
なお、CPU111が実行するためのプログラムを記憶する記録媒体としては、メモリカード119Aに限られず、フレキシブルディスク、カセットテープ、光ディスク(CD−ROM(Compact Disc−Read Only Memory)/MO(Magnetic Optical Disc)/MD(Mini Disc)/DVD(Digital Versatile Disc))、ICカード(メモリカードを含む)、光カード、マスクROM、EPROM(Erasable Programmable ROM)、EEPROM(Electronically EPROM)などの半導体メモリ等の媒体でもよい。さらに、CPU111がサーバ200からプログラムをダウンロードしてフラッシュメモリ113に記憶する、または、サーバ200がプログラムをフラッシュメモリ113に書込みするようにして、フラッシュメモリ113に記憶されたプログラムをRAM112にロードしてCPU111で実行するようにしてもよい。ここでいうプログラムは、CPU111により直接実行可能なプログラムだけでなく、ソースプログラム、圧縮処理されたプログラム、暗号化されたプログラム等を含む。
通信制御部123は、CPU111を公衆交換電話網(PSTN)7に接続するためのモデムである。MFP100には、PSTN7における電話番号が予め割り当てられており、PSTN7に接続されたファクシミリ装置からMFP100に割り当てられた電話番号に発呼があると、通信制御部123がその発呼を検出する。通信制御部123は、発呼を検出すると通話を確立し、ファクシミリ部122に通信させる。
ファクシミリ部122は、PSTN7に接続され、PSTN7にファクシミリデータを送信する、またはPSTN7からファクシミリデータを受信する。
図5は、サーバが備えるCPU201の機能の一例を、HDD207に記憶されるデータとともに示す機能ブロック図である。図5を参照して、HDD207は、MFP100,100A,100B,100Cそれぞれが実行するプログラムを、モジュールに分割して記憶する。また、各モジュールに分割されたプログラムは、少なくとも1つの機能部分にさらに分割されて記憶される。ここでは、HDD116は、モジュールAのプログラム221、モジュールBのプログラム225、モジュールCのプログラム227を記憶する。
ここでモジュールは、MFP100,100A,100B,100Cが実行可能な複数の機能の大分類を示し、MFPを起動するためのBoot機能、操作パネル9の入出力を制御するためのパネル機能、データを受信するためのデータ受信機能、コピー機能、スキャン機能、HDD116に記憶するデータを管理するためのBOX機能、ファクシミリ部122の送受信を制御するためのFAX機能、ADF10を制御するためのADF機能、後処理部50を制御するためのフィニッシャ機能、ユーザ認証するための認証機能、データのファイル形式を変換するためのファイル変換機能、画像データを処理するための画像処理機能、データ通信制御部117を制御するためのネットワーク機能を含む。Boot機能のモジュールには、MFP100を起動させる機能と、プログラムを更新する機能とが含まれる。例えば、パネル機能のモジュールには、パネルに入力される操作を受け付けるためのパネル受付処理機能と、パネルに情報を表示するパネル表示機能とを含む。データ受信機能のモジュールには、データを受信するためのデータ受信処理機能が含まれる。
モジュールAのプログラム221は、機能A1の部分223Aと、機能A2の部分223Bとを含む。モジュールBのプログラム225は、機能B1の部分と、機能B2の部分とを含む。モジュールCのプログラム227は、機能C1の部分と、機能C2の部分とを含む。また、HDD116は、各モジュールのプログラムを、それがバージョンアップされて変更されるが、それらすべてのプログラムを記憶する。例えば、モジュールAのプログラム221を例に説明すると、機能A1の部分223Aが、バージョン1.0から4回更新された場合、HDD116は、機能A1の部分223Aのプログラムとして、バージョン1.0のプログラム、バージョン1.1のプログラム、バージョン1.2のプログラム、バージョン1.3のプログラム、バージョン1.4のプログラムを記憶する。
図6は、更新情報の一例を示す図である。上述したようにHDD116は、モジュールA〜Cのプログラムを記憶し、各モジュールに含まれる少なくとも1つの機能の部分毎に複数のバージョンのプログラムが記憶される。更新情報231は、複数の機能の部分毎に、複数のバージョンのプログラムを関連付けるとともに、バージョン毎に更新内容と、緊急度とを定義する。図6を参照して、ここでは、モジュールAの機能A1の部分のプログラムについて説明する。バージョン1.0のプログラムが、最も古いプログラムであり、バージョン1.1、バージョン1.2、バージョン1.3、バージョン1.4の順に新しいプログラムである。更新内容は、そのバージョンのプログラムが前のバージョンのプログラムから新たに変更された内容である。
バージョン1.1のプログラムは、バージョン1.0のプログラムに対して、バグが修正されたことを示す。バージョン1.2のプログラムは、バージョン1.1のプログラム221に対して、一部の機能が削除されたことを示す。バージョン1.3のプログラムは、バージョン1.2のプログラムに対して、一部の機能が変更されたことを示す。バージョン1.4のプログラムは、バージョン1.3のプログラムに対して、一部の機能が追加されたことを示す。
また、更新情報231は、プログラム毎に緊急度を定義する。緊急度は、プログラムのバージョンを管理する管理者により付与され、緊急度A、BおよびCのいずれかである。緊急度は、そのプログラムを更新するための重要度を示し、緊急度Aが最も重要度が高く、緊急度Cが最も重要度が低い。ここでは、バージョン1.1のプログラムに対して緊急度Aが、バージョン1.2のプログラムに対して緊急度Bが、バージョン1.3およびバージョン1.4のプログラムに対して緊急度Cがそれぞれ付与されている。
図5に戻って、CPU201は、プログラム223A,223B,227A,227B,229A,229Bのいずれかを送信するプログラム送信部211と、更新情報231を送信する更新情報送信部213とを含む。サーバ200は、通信I/F202を介して、MFP100,100A,100B,100Cと通信可能であり、通信I/F202がMFP100,100A,100B,100Cのいずれかから更新情報の送信要求またはプログラムの送信要求を受信すると、通信I/F202は、CPU201に更新情報の送信要求またはプログラムの送信要求を出力する。プログラムの送信要求は、プログラムを識別するための識別情報を含む。識別情報は、機能を特定するための機能特定情報と、バージョン情報とを含む。
更新情報送信部213は、通信I/F202から更新情報の送信要求が入力されると、更新情報231を読み出し、通信I/F202を制御して、MFP100,100A,100B,100Cのうち更新情報の送信要求を送信してきたMFPに対して更新情報231を送信する。プログラム送信部211は、プログラムの送信要求が通信I/F202から入力されると、プログラム223A,223B,227A,227B,229A,229Bのうち機能特定情報で特定される機能に対応するプログラムであって、バージョン情報で特定されるバージョンのプログラムを読出す。そして、通信I/F202を制御して、MFP100,100A,100B,100Cのうちプログラムの送信要求を送信してきたMFPに対して読み出したバージョンのプログラムを送信する。
図7は、MFP100が備えるCPU111の機能の概要を、フラッシュメモリ113に記憶されるデータとともに示す機能ブロック図である。図7を参照して、フラッシュメモリ113は、実行プログラム71と、実績情報73と、不具合発生情報リスト75とを記憶する。CPU111は、実行プログラム71を実行し、機能を実行する機能実行部51と、サーバ200からプログラムをダウンロードするためのダウンロード部53と、ダウンロードされたプログラムで実行プログラム71を更新するための更新部55と、サーバ200から更新情報を取得するための更新情報取得部57と、実行プログラム71を更新するか否かを判断するための判断部59と、実績情報73および不具合発生情報リスト75を更新するための履歴更新部63と、警告を発する警告部61とを含む。
機能実行部51は、フラッシュメモリ113に記憶されている実行プログラム71をRAM112にロードし、実行プログラム71を実行する。実行プログラム71は、Boot部分と、機能A1、機能A2、機能B1、機能B2、機能C1、機能C2それぞれの部分とからなる。ここでは、実行プログラム71として、それぞれバージョン1.0のプログラム223A,223B,227A,227B,229A,229Bが記憶されている場合を例に説明する。
図8(A)は、フラッシュメモリ113の実行プログラム記憶領域の一例を示す図である。図8(A)を参照して、実行プログラム71のBoot部分はBoot領域91に記憶され、機能A1、機能A2、機能B1、機能B2、機能C1、機能C2の部分は領域82A,83A,85A,86A,88A,89Aそれぞれに記憶される。Boot領域91と機能A1の部分が記憶される領域82Aとの間の領域93にアドレスリストが記憶される。さらに、機能A1の部分が記憶される領域82Aと機能A2の部分が記憶される領域83Aとの間に機能A1の部分に対応する予備領域82Bが確保される。機能A2の部分が記憶される領域83Aと機能B1の部分が記憶される領域85Aとの間に機能A2の部分に対応する予備領域83BおよびモジュールAに対応する予備領域81Aが確保される。機能B1の部分が記憶される領域85Aと機能B2の部分が記憶される領域86Aとの間に機能B1の部分に対応する予備領域85Bが確保される。機能B2の部分が記憶される領域86Aと機能C1の部分が記憶される領域88Aとの間に機能B2の部分に対応する予備領域86BおよびモジュールBに対応する予備領域84Aが確保される。機能C1の部分が記憶される領域88Aと機能C2の部分が記憶される領域89Aとの間に機能C1の部分に対応する予備領域88Bが確保される。機能C2の部分が記憶される領域89Aの次のアドレスに、機能C2の部分に対応する予備領域89B、それに続いてモジュールCに対応する予備領域87Aおよび実行プログラム71全体に対応する予備領域95が確保される。
アドレスリストは、各プログラムと、そのプログラムが記憶されているアドレスおよび領域のサイズとの対応付けを定義する。Boot領域には、実行プログラム71のうち起動プログラムおよびプログラム更新プログラムが記録されている。起動プログラムは、パネル機能およびデータ受信機能の各モジュールのプログラムを読み出すコマンドを含む。
図7に戻って、機能実行部51は、電源が投入されると、Boot領域に記憶されている起動プログラムをRAM112に読出し、実行する。機能実行部51は、起動プログラムを実行すると、領域93に記憶されているアドレスリストを読出す。そして、アドレスリストを参照して、パネル機能のプログラムが記憶されている領域を特定し、その領域からパネル機能のプログラムを読出し実行する。さらに、アドレスリストを参照して、データ受信機能のプログラムが記憶されている領域を特定し、その領域からデータ受信機能のプログラムを読出し実行する。
また、機能実行部51がパネル機能のプログラムを実行すると、機能実行部51は、ユーザにより操作部115に入力される操作を受け付ける。機能実行部51は、操作を受付けると、アドレスリストを参照し、操作に対応する機能のプログラムが記憶されている領域を特定し、特定した領域に記憶されているプログラムを読出し、実行する。また、機能実行部51がデータ受信機能のプログラムを実行すると、データ通信制御部117がネットワーク2に接続された他のMFP100A,100B,100Cまたはパーソナルコンピュータ(PC)から受信する操作が入力される。機能実行部51は、操作が入力されると、アドレスリストを参照し、操作に対応する機能のプログラムが記憶されている領域を特定し、特定した領域に記憶されているプログラムを読出し、実行する。
機能実行部51は、機能を実行すると機能毎に実績を実績情報としてフラッシュメモリ113に記憶する。また、機能実行部51は、機能を実行する際に、エラー等の不具合が発生した場合には不具合発生情報をフラッシュメモリ113に記憶する。
図9は、実績情報の一例を示す図である。図9を参照して、実績情報は、機能毎に使用回数と、頻度と、を記録する。使用回数は、その機能が機能実行部51により実行された回数であり、頻度は、機能実行部51が機能を実行した総回数に対するその機能が実行された回数の割合である。機能実行部51は、同時に複数の機能を実行する場合がある。例えば、コピー機能とフィニッシャ機能とを同時に実行する等の場合である。この場合は、全体として1回で全回数をカウントする。
図10は、不具合発生情報リストの一例を示す図である。図10を参照して、不具合発生情報リスト75は、機能と不具合コードとの組と、不具合ランクと、発生頻度とを含む不具合情報を記憶する。不具合コードは、不具合の種類毎に予め定められたコードである。不具合ランクは、機能と不具合コードとの組に対して予め定められる。異なる機能で同じ不具合が発生する場合があるが、不具合ランクが異なる場合がある。図10において、モジュールAの機能A2を実行する際に発生する不具合コードC−0011の不具合に対する不具合ランクがAであるのに対して、モジュールBの機能B2を実行する際に発生する不具合コードC−0011の不具合に対する不具合ランクはBである。発生頻度は、機能が実行された全回数に占める不具合コードで特定される不具合の発生した回数の割合である。
図7に戻って、更新情報取得部57は、サーバ200に更新情報の送信要求を送信し、サーバ200から更新情報231を受信する。具体的には、データ通信制御部117を制御して、更新情報の送信要求を送信し、データ通信制御部117がサーバ200から更新情報231を受信すると、データ通信制御部117から更新情報231が入力される。更新情報取得部57は、データ通信制御部117から入力される更新情報231を判断部59および警告部61に出力する。
判断部59は、フラッシュメモリ113に記憶されている実績情報73に基づいて、実行プログラム71を更新するか否かを判断する。更新すると判断する場合には、更新するためのプログラム(以下「対象プログラム」という)を決定する。具体的には、更新情報231に基づいて、フラッシュメモリ113に記憶されている実行プログラム71の各機能の部分のバージョンよりも新しいバージョンのプログラムを有する機能を特定する。そして、特定された機能が実行されていることが実績情報に記録されている場合に、実行プログラム71を更新すると判断する。この際、特定した機能の新しいバージョンのプログラムを、対象プログラムに決定する。対象プログラムは、機能と、プログラムのバージョンで特定される。なお、特定された機能が実行されていることが実績情報に記録されていることを条件とするのに代えて、特定された機能が所定の頻度を越えて実行されていることが実績情報に記録されていることを条件とするようにしてもよい。
さらに、判断部59は、不具合発生情報リスト75に基づいて、実行プログラム71を更新するか否かを判断する。具体的には、フラッシュメモリ113に記憶されている不具合発生情報リスト75を読出し、不具合発生情報リスト75に記録されている不具合発生情報に含まれる機能(不具合の発生した機能)を特定する。そして、不具合発生情報に含まれる不具合ランクと発生頻度とが予め定められた不具合条件に合致するか否かを判断する。不具合条件に合致する場合、更新情報231で定義され、特定された機能(不具合の発生した機能)に関するプログラムのうちに、フラッシュメモリ113に記憶されている実行プログラム71において特定された機能の部分のバージョンよりも新しいバージョンのプログラムが存在すれば、実行プログラム71を更新すると判断する。この際、特定された機能(不具合の発生した機能)に関するプログラムであって、フラッシュメモリ113に記憶されている実行プログラム71のその機能の部分のバージョンよりも新しいバージョンのプログラムを、対象プログラムに決定する。
図11は、不具合条件テーブルの一例を示す図である。不具合条件テーブルは、不具合条件を定義し、MFP100の管理者により設定され、予めフラッシュメモリ113に記憶される。図11を参照して、不具合条件テーブルは、更新が必要な不具合ランクを定義する。例えば、番号1の不具合条件は、不具合ランクがAであれば、更新が必要であることを定義する。また、更新が必要な不具合ランク、発生回数および/または発生頻度の組を定義する。例えば、番号2の不具合条件は、不具合ランクがBであって、かつ発生回数が2回以上かつ発生頻度が50%以上であれば、更新が必要であることを定義する。さらに、不具合条件テーブルは、更新が必要な不具合ランクと機能との組を定義する。例えば、番号3の不具合条件は、機能A2について、不具合ランクがB以上、具体的には、AまたはBの場合に更新が必要であることを定義する。さらに、不具合条件テーブルは、更新が必要な機能と不具合コードとの組を定義する。例えば、番号4の不具合条件は、機能B1と不具合コードC−003の組に対して、更新が必要であることを定義する。
図7に戻って、判断部59は、更新情報231の緊急度を参照し、緊急度に基づいて実行プログラム71を更新するか否かを判断する。具体的には、更新情報231によってプログラムに割り当てられた緊急度が予め定められた緊急度条件に一致すれば、そのプログラムを対象プログラムとし、実行プログラム71を更新すると判断する。また、判断部59は、更新情報231の緊急度および実績情報に基づいて実行プログラム71を更新するか否かを判断する。具体的には、プログラムに割り当てられた緊急度およびそのプログラムの機能の使用回数または使用頻度が緊急度条件に一致すれば、そのプログラムを対象プログラムとし、実行プログラム71を更新すると判断する。
図12は、緊急度条件テーブルの一例を示す図である。図12を参照して、緊急度条件テーブルは、緊急度条件を定義し、MFP100の管理者により設定され、予めフラッシュメモリ113に記憶される。緊急度条件テーブルは、更新が必要な緊急度を定義する緊急度条件を含む。例えば、番号1の緊急度条件は、更新が必要な緊急度にAを定義する。また、緊急度条件テーブルは、更新が必要な緊急度と使用実績との組みを含む緊急度条件を含む。例えば、番号2の緊急度条件は、更新が必要な条件として、緊急度がB以上、具体的には緊急度がBで、かつ使用暦がある条件を定義する。使用歴の有無は、実績情報73におけるプログラムの機能に対応する使用回数に基づいて判断される。使用回数が1以上であれば使用歴ありと判断する。また、番号3の緊急度条件は、更新が必要な条件として、緊急度がCで、かつ使用歴があり、かつ使用頻度が20%以上の条件を定義する。使用頻度は、実績情報73におけるプログラムの機能に対応する使用頻度に基づいて判断される。
図7に戻って、判断部59は、実行プログラム71を更新すると判断した場合、対象プログラムを特定するための識別情報を、更新部55に通知する。識別情報は、機能を特定するための機能特定情報と、プログラムのバージョン情報とを含む。対象プログラムが複数決定された場合には、複数の対象プログラムをそれぞれ特定するための複数の識別情報を更新部55に通知する。
更新部55は、判断部59から対象プログラムの識別情報が通知されると、ダウンロード部53にその対象プログラムをサーバ200からダウンロードさせる。ダウンロード部53は、データ通信制御部117を制御して、更新部55から入力される通知に含まれる識別情報をサーバ200に送信し、サーバ200から送信される対象プログラムを受信する。ダウンロード部53は、受信した対象プログラムを、更新部55に出力する。更新部55は、ダウンロード部53から対象プログラムが入力されると、その対象プログラムでフラッシュメモリ113に記憶されている実行プログラム71を部分的に更新する。具体的には、サーバ200から受信した対象プログラムで実行プログラム71の一部を書き換える。また、更新部55は、必要に応じて、CPU111をリブートする。
ここで、実行プログラムの部分的な更新について説明する。ここでは、機能B2のプログラムを更新元の新しい機能B2’のプログラム(対象プログラム)で更新する場合を例に説明する。まず、図8(A)を参照して、更新は、機能B2のプログラムが記憶されている領域86Aに機能B2’のプログラムを書き込む。この場合、機能B2’のプログラムのサイズが、領域86Aの容量よりも大きい場合、予備領域86Bにも書き込まれる。さらに、機能B2’のプログラムのサイズが、領域86Aの容量と予備領域86Bの容量とを合わせた容量よりも大きい場合、予備領域84Aにも書き込まれる。
図8(B)は、機能B2のプログラムを更新した後のフラッシュメモリの実行プログラム記憶領域の一例を示す図である。図8(A)および図8(B)を参照して、機能B2のプログラムが記憶されていた領域86Aと、予備領域86Bと、予備領域84Aの一部とからなる新たな領域86Cに、機能B2’のプログラムが記憶される。予備領域84Aのうち残りの領域84Bが新たな予備領域として残される。また、領域93に記憶されているアドレスリストが更新される。具体的には、機能B2のプログラムと、領域86Aとを対応付ける情報が、機能B2’と領域86Cとを対応付ける情報に変更される。
このように、機能B2のプログラムを更新する際に、他の機能A1,A2、機能B1、および機能C1,C2それぞれを書き換える必要がない。このため、実行プログラム71の全体を書き換える必要がなく、部分的に書き換えることができる。従って、実行プログラム71の全体を書き換えるのに比べ、更新作業の時間を短縮することができる。なお、機能B2’のプログラムのサイズが、領域86Aの容量と予備領域86Bの容量と予備領域84Aの容量とを合わせた容量よりも大きい場合、予備領域84A以降に記憶されている機能C1のプログラムおよび機能C2のプログラムをともに書き換える。この場合、実行プログラム71の全体に対応する予備領域95が用いられる。この場合であっても、機能B2が記憶されている領域86Aより前のアドレスに記憶されている機能A1,A2および機能B1を書き換える必要はない。従って、実行プログラム71を部分的に更新することができる。
図7に戻って、更新部55は、予め定められたタイミングで、フラッシュメモリ113に記憶されている実行プログラム71を、サーバ200から受信した対象プログラムで部分的に更新する。予め定められたタイミングは、MFP100の電源をOFFにする指示が入力された後、MFP100の電源がONになった後、ユーザにより予め定められた時刻等である。予め定められた時刻は、例えば、夜間など、MFP100を使用する頻度の少ない時間帯に設定するのが望ましい。実行プログラムを書き換える、さらに場合によってはリブートすることにより、その間MFP100が使用できない状態になるが、電源をONまたはOFFにする指示が入力された後、予め定められた時刻は、MFP100が使用される可能性がないか、または使用される確率が低い。このため、ユーザがMFP100の使用を試みるときに、MFP100を直ちに使用できる状態にすることができる。また、MFP100,100A,100B,100Cが同時に実行プログラムを更新しないように、予め定められた時刻を異ならせるのが望ましい。MFP100,100A,100B,100Cの複数を同時に使用できなくなるのを回避するためである。
履歴更新部63は、他のMFP100A,100B,100Cそれぞれが記憶する実績情報を取得し、取得した実績情報で、フラッシュメモリ113に記憶されている実績情報73を更新する。したがって、MFP100,100A,100B,100Cそれぞれが実行した機能に基づく実績情報がMFP100のフラッシュメモリ113に記憶される。このため、MFP100A,100B,100Cの使用状態をMFP100に反映することができるので、実行プログラム71を更新するためのプログラムを適切に定めることができる。また、他のMFP100A,100B,100Cのいずれかを主に使用するユーザが、MFP100を使用する場合でも、主に使用していたMFPにインストールされているプログラムと同じプログラムが実行されるので、主に使用していたMFPが実行するのと同じ機能をMFP100に実行させることができる。
また、履歴更新部63は、他のMFP100A,100B,100Cそれぞれが記憶する不具合発生情報リストを取得し、取得した不具合発生情報リストに含まれる不具合発生情報で、フラッシュメモリ113に記憶されている不具合発生情報リスト75を更新する。このため、MFP100A,100B,100Cにおける不具合の発生状態をMFP100に反映することができるので、実行プログラムを更新するためのプログラムを適切に定めることができる。また、他のMFP100A,100B,100Cのいずれかで発生した不具合が、MFP100において発生していない場合であっても、その不具合が発生するのを事前に防止することができる。
警告部61は、更新情報取得部57から更新情報231が入力される。警告部61は、機能実行部51が機能を実行する前に、実行プログラム71を更新する必要があるか否かを判断する。ここでは、機能実行部51が実行しようとする機能を対象機能という。警告部61は、更新情報231を参照して、実行プログラム71の対象機能に対応する部分を更新するためのプログラムが存在するか否かを判断する。実行プログラム71の対象機能に対応する部分を更新するためのプログラムが存在するか否かは、実行プログラム71の対象機能に対応する部分のプログラムのバージョンと、更新情報231で定義されている対象機能のプログラムのバージョンとを比較する。実行プログラムの対象機能に対応する部分のプログラムのバージョンよりも新しいバージョンのプログラムが、更新情報231で定義されていれば、実行プログラム71の対象機能に対応する部分を更新するためのプログラムが存在すると判断する。
警告部61は、実行プログラム71の対象機能に対応する部分を更新するためのプログラムが存在と判断した場合、警告を発する。警告は、例えば、表示部114に警告メッセージを出力する、または、警告音をスピーカから出力する等である。ユーザが実行プログラムを更新する指示を操作部115に入力すると、警告部61は、その更新指示を受け付け、更新部55に更新指示を出力する。更新指示は、実行プログラム71の対象機能に対応する部分を更新するための対象プログラムを特定するための識別情報を含む。識別情報は、機能を特定するための機能特定情報と、バージョン情報とを含む。更新部55は、更新指示を受け付けると、ダウンロード部53に識別情報で特定されるプログラムをサーバ200からダウンロードさせ、ダウンロードされたプログラムで実行プログラムを更新する。
ユーザが実行プログラムを更新する指示を操作部115に入力しない場合には、警告部61は、更新部55に更新指示を出力することなく、機能実行部51に実行許可を出力する。機能実行部51は、実行許可が入力されると、先に入力された操作に従って機能を実行する。
ユーザがこれまで使用していない機能、または使用する頻度の少ない機能に対応する部分を更新するためのプログラムがサーバ200に記憶されている場合であっても、そのプログラムで実行プログラム71が更新されない場合がある。ユーザが実際にMFP100に機能を実行させる際に、実行プログラム71のその機能に関する部分を更新するためのプログラムが存在することをユーザに警告するので、ユーザは、その時点で、プログラムを更新し、更新した後のプログラムで機能を実行させるのか、更新させることなく古いバージョンのプログラムで機能を実行させるのかを選択することができる。
図13は、プログラム更新処理の流れの一例を示すフローチャートである。プログラム更新処理は、フラッシュメモリ113に記憶されている実行プログラム71を実行することにより、CPU111により実行される処理である。CPU111は、MFP100に電源が投入された後、フラッシュメモリ113に記憶されている実行プログラム71をRAM112にロードし、実行プログラム71のブート部分を実行する。実行プログラム71のブート部分は、プログラム更新プログラムを含む。
図13を参照して、まず、CPU111は、サーバ200から更新情報を取得する(ステップS01)。サーバ200に更新情報の送信要求を送信し、サーバ200が送信する更新情報を受信する。そして、操作を受け付けたか否かを判断する(ステップS02)。操作を受け付けた場合は処理をステップS03に進め、そうでなければ処理をステップS04に進める。ユーザが操作部115に操作を入力すると、入力された操作を操作部115から受け付ける。また、MFP100がネットワーク2に接続された他のMFP100A,100B,100CまたはPCから遠隔操作される場合、データ通信制御部117が遠隔操作元の装置から操作を受信すると、データ通信制御部117から操作を受け付ける。
次のステップS03においては、ステップS02で受け付けた操作に従って機能を実行するための機能実行処理を実行する。機能実行処理についての詳細は後述する。次のステップS04においては、所定のタイミングか否かを判断する。所定のタイミングであれば処理をステップS05に進めるが、そうでなければ処理をステップS02に戻す。所定のタイミングは、予め定められており、例えば、MFP100の電源をOFFにする指示が入力された後、MFP100の電源がONになった後、ユーザにより予め定められた時刻である。所定のタイミングは、MFP100を使用する頻度の少ない時に設定するのが望ましい。後述する処理で実行プログラム71が更新された場合、またはリブートが実行された場合に、実行プログラム71を更新している間、またはリブートしている間はMFP100を使用することができなくなるからである。
ステップS05においては、履歴更新処理を実行する。履歴更新処理についての詳細は後述するが、他のMFP100A,100B,100Cから実績情報および不具合発生情報を収集し、MFP100のフラッシュメモリ113に記憶されている実績情報73および不具合発生情報リスト75を更新する処理である。
ステップS06においては、対象プログラム決定処理を実行する。対象プログラム決定処理についての詳細は後述するが、実行プログラム71を更新するための対象プログラムを決定する処理である。ステップS05において履歴更新処理が実行されるので、MFP100、100A,100B,100C間で実績情報73および不具合発生情報リスト75が共有されている。このため、適切な機能およびバージョンのプログラムを対象プログラムに決定することができる。また、他のMFPで発生した不具合に対応した機能およびバージョンのプログラムを対象プログラムに決定することができる。その結果、他のMFPで発生した不具合が発生するのを事前に回避することができる。
ステップS07においては、対象プログラム決定処理により対象プログラムが決定されたか否かを判断する。対象プログラムが決定されたならば処理をステップS08に進め、そうでなければ処理をステップS02に戻す。実行プログラム71を更新するための対象プログラムが存在しなければ、実行プログラム71を更新できないからである。
ステップS08においては、サーバ200から対象プログラムを取得する。具体的には、対象プログラムを特定するための識別情報を含む送信要求をサーバ200に送信し、サーバ200が送信する対象プログラムを受信する。識別情報は、機能と、バージョン情報とを含む。そして、サーバ200から受信した対象プログラムをフラッシュメモリ113に保存し(ステップS09)、実行プログラム71を対象プログラムで更新する(ステップS10)。具体的には、実行プログラム71の機能に関する部分を対象プログラムで書き換える。
次のステップS11においては、リブートが必要か否かを判断する。リブートが必要ならば処理をステップS12に進め、そうでなければ対象プログラムで更新された実行プログラム71を実行し、処理をステップS02に戻す。ステップS12においては、リブートし、処理を終了する。
図14は、機能実行処理の流れの一例を示すフローチャートである。機能実行処理は、図13に示したプログラム更新処理のステップS03において実行される処理である。図14を参照して、実行プログラム71を更新するための対象プログラムがあるか否かを判断する(ステップS21)。具体的には、更新情報を参照して、図12のステップS02で受け付けられた操作に対応する機能(対象機能という)のプログラムに、実行プログラム71の対象機能に関連する部分のプログラムのバージョンよりも新しいバージョンのプログラムが存在するか否かを判断する。そのようなプログラムがあれば、そのプログラムを対象プログラムに決定する。対象プログラムがあれば処理をステップS22に進め、なければ処理をステップS24に進める。ステップS22においては、警告を出力する。ここでは、表示部114に機能を更新するプログラムが存在することを通知し、プログラムを更新するか否かを問い合わせるメッセージを表示する。また、ブザーを鳴らすようにしてもよい。
ステップS23においては、ユーザによる更新指示を受け付けたか否かを判断する。ユーザにより操作部115に予め設けられた更新指示を入力するためのキーが押下されると、操作部115から更新指示を受け付ける。更新指示を受け付けたならば処理を、図13に示したプログラム更新処理のステップS08に進めるが、更新指示を受け付けなければ処理をステップS24に進める。更新指示を受け付けた場合、ステップS21において存在することが確認された対象プログラムが、サーバ200から受信され、実行プログラム71がサーバから受信されたプログラムで部分的に更新される。したがって、ユーザが操作を入力した場合に、その操作に対応する機能が、更新された新たな実行プログラム71に基づき実行される。このため、適切なタイミングで実行プログラムを新しいバージョンに更新することができる。また、不具合が発生するのを回避することができる。
ステップS24においては、実行プログラム71のうち操作に対応する機能の部分が実行される。CPU111は、図13に示したプログラム更新処理のステップS02において受け付けられる操作により複数の機能のいずれかを特定し、実行プログラム71の特定された機能に対応する部分を実行する。これにより、操作に対応する機能が実行プログラム71に基づき実行される。機能は、上述したモジュールで分類される複数の機能のいずれかであり、例えば、Boot機能、パネル機能、データ受信機能、コピー機能、スキャン機能、BOX機能、FAX機能、ADF機能、フィニッシャ機能、認証機能、ファイル変換機能、画像処理機能、ネットワーク機能である。操作は、複数の機能を特定する場合もあり得、複数の機能が特定される場合には、実行プログラム71のうち特定された複数の機能それぞれに対応する部分が実行される。
次のステップS25においては、ステップS24において機能を実行した結果に基づき、フラッシュメモリ113に記憶されている実績情報73を更新する。具体的には、実績情報73における実行した機能に対応する使用回数を1増加し、頻度を更新する。そして、不具合が発生したか否かを判断する(ステップS26)。機能を実行した結果、不具合が発生したならば処理をステップS27に進め、そうでなければステップS27をスキップして処理をプログラム更新処理に戻す。ステップS27においては、ステップS24において機能を実行した結果に基づきフラッシュメモリ113に記憶されている不具合発生情報リスト75を更新する。具体的には、実行した機能を特定する情報と発生した不具合に対応する不具合コードとを含む不具合発生情報の発生頻度を更新する。
図15は、履歴更新処理の流れの一例を示すフローチャートである。履歴更新処理は、図13に示したプログラム更新処理のステップS05において実行される処理である。図15を参照して、他のMFP100A,100B,100Cから実績情報を収集する(ステップS31)。具体的には、他のMFP100A,100B,100Cそれぞれに実績情報の送信要求を送信し、それぞれから実績情報を受信する。そして、受信した実績情報でフラッシュメモリ113に記憶されている実績情報73を更新する(ステップS32)。これにより、MFP100,100A,100B,100Cそれぞれが実行した機能に基づく実績情報がMFP100のフラッシュメモリ113に記憶される。
次に、他のMFP100A,100B,100Cから不具合発生情報を収集する(ステップS33)。具体的には、他のMFP100A,100B,100Cそれぞれに不具合発生情報リストの送信要求を送信し、それぞれから不具合発生情報リストを受信する。そして、受信した不具合発生情報リストに含まれる不具合発生情報でフラッシュメモリ113に記憶されている不具合発生情報リスト75を更新する(ステップS34)。これにより、他のMFP100A,100B,100Cのいずれかにおいて発生した不具合発生情報をMFP100が記憶することができる。このため、不具合が発生する対策が施された新たなバージョンのプログラムで実行プログラム71を部分的に更新することができる。
図16は、対象プログラム決定処理の流れの一例を示す図である。対象プログラム決定処理は、図13に示したプログラム更新処理のステップS06において実行される処理である。図16を参照して、まず、サーバ200から更新情報231を取得する(ステップS41)。サーバ200に更新情報の送信要求を送信し、サーバ200が送信する更新情報231を受信する。そして、緊急度に基づく対象プログラム決定処理を実行する。
次に、不具合発生情報が存在するか否かを判断する(ステップS43)。具体的には、不具合発生情報リスト75に不具合発生情報が記憶されているか否かを判断する。不具合発生情報が存在すれば処理をステップS44に進めるが、そうでなければステップS44をスキップして処理をステップS45に進める。ステップS44においては、不具合発生情報に基づく対象プログラム決定処理を実行し、処理をステップS45に進める。ステップS45においては、履歴情報に基づく対象プログラム決定処理を実行し、処理をプログラム更新処理に戻す。
図17は、緊急度に基づく対象プログラム決定処理の流れの一例を示すフローチャートである。緊急度に基づく対象プログラム決定処理は、図16のステップS42において実行される処理である。図17を参照して、CPU111は、更新情報231を参照して、緊急度がAのプログラムがあるか否かを判断する(ステップS51)。緊急度Aのプログラムが存在すれば処理をステップS52に進めるが、存在しなければ処理をステップS54に進める。ステップS52においては、緊急度Aのプログラムを抽出する。緊急度Aのプログラムが複数あれば複数のプログラムすべてを抽出する。そして、抽出したプログラムのうちから最新のバージョンのプログラムを対象プログラムとするためのプログラムに決定し(ステップS53)、処理をステップS54に進める。図6に示した更新情報231をサーバ200から受信した場合、モジュールAの機能A1のバージョンが1.1のプログラムが対象プログラムとして決定される。
ステップS54においては、緊急度Bのプログラムがあるか否かを判断する。緊急度Bのプログラムが存在すればそのプログラムを抽出し、処理をステップS55に進めるが、存在しなければ処理をステップS59に進める。ステップS55においては、フラッシュメモリ113から実績情報73を読み出す。そして、ステップS54で抽出された緊急度Bのプログラムの機能に利用歴があるか否かを判断する(ステップS56)。その機能が1回以上実行されている場合に利用歴ありと判断する。利用暦があれば処理をステップS57に進め、なければ処理をステップS59に進める。
図6に示した更新情報がサーバ200から受信された場合、緊急度Bのプログラムは、モジュールAの機能A1のバージョン1.2のプログラム、モジュールCの機能C1のバージョン1.1のプログラム、機能C2のバージョン1.1のプログラムである。次に、図9に示す実績情報73を参照して、モジュールAの機能A1は、使用回数が10回なので、利用歴があると判断するが、モジュールCの機能C1および機能C2は、使用回数が0回なので利用できがないと判断する。
ステップS57においては、ステップS56で利用暦があるとされた緊急度Bのプログラム、ここでは機能A1のバージョン1.2のプログラムは、そのとき対象プログラムに設定されているプログラムよりもバージョンが新しいか否かを判断する。バージョンが新しければ処理をステップS58に進め、そうでなければ処理をステップS59に進める。ここでは、モジュールAの機能A1のプログラムに関しては、対象プログラムにバージョンが1.1のプログラムが設定されているので、バージョンが新しいと判断する。ステップS58においては、ステップS56で利用暦があるとされたプログラムを、ステップS53において対象プログラムとされていたプログラムに代えて対象プログラムとするためのプログラムに決定する。ここでは、モジュールAの機能A1のバージョン1.2のプログラムを対象プログラムに決定する。より新しいバージョンのプログラムを対象プログラムとするためである。ステップS53において対象プログラムとするためのプログラムが決定されていない場合には、ステップS56で利用暦があるとされたプログラムを対象プログラムとするためのプログラムに決定する。
ステップS59においては、緊急度Cのプログラムがあるか否かを判断する。緊急度Cのプログラムが存在すれば処理をステップS60に進めるが、存在しなければ処理を対象プログラム決定処理に戻す。ステップS60においては、フラッシュメモリ113から実績情報73を読み出す。そして、ステップS59で存在が確認された緊急度Cのプログラムが更新された部分に対応する機能の使用頻度が20%以上か否かを判断する(ステップS61)。使用頻度が20%以上ならばそのプログラムを選択し、処理をステップS62に進め、そうでなければ処理を対象プログラム決定処理に戻す。
図6に示した更新情報がサーバ200から受信された場合、図9に示す実績情報73を参照して、緊急度Cのプログラムで、その機能の使用頻度が20%以上なのは、モジュールAの機能A1のバージョン1.3およびバージョン1.4、機能A2のバージョン1.1およびバージョン1.2である。同一の機能で複数のバージョンのプログラムが存在する場合は、より新しいバージョンが選択される。したがって、機能A1のバージョン1.4のプログラムと、機能A2のバージョン1.2のプログラムが選択される。
ステップS62においては、ステップS61で選択されたプログラム、ここでは機能A1のバージョン1.4のプログラムと、機能A2のバージョン1.2のプログラムが、そのとき対象プログラムに設定されているプログラムよりもバージョンが新しいか否かを判断する。バージョンが新しければ処理をステップS63に進め、そうでなければ処理を対象プログラム決定処理に戻す。ステップS63においては、ステップS59で選択されたプログラムを、ステップS53またはステップS58において対象プログラムとされていたプログラムに代えて対象プログラムとするためのプログラムに決定する。より新しいバージョンのプログラムを対象プログラムとするためである。ステップS53またはステップS58において対象プログラムとするためのプログラムが決定されていない場合には、ステップS59で選択されたプログラムを対象プログラムにするためのプログラムに決定する。ここでは、ここでは、モジュールAの機能A1のバージョン1.2のプログラムが対象プログラムに決定されているので、機能A1のバージョン1.4のプログラムと、機能A2のバージョン1.2のプログラムとが、それぞれ対象プログラムに決定される。
図18は、不具合発生情報に基づく対象プログラム決定処理の流れの一例を示すフローチャートである。不具合発生情報に基づく対象プログラム決定処理は、図16のステップS44において実行される処理である。図18を参照して、CPU111は、フラッシュメモリ113に記憶されている不具合発生情報リスト75から不具合発生情報を読み出し(ステップS71)、不具合発生条件を読み出す(ステップS72)。ここでは、図9に示した不具合発生情報リスト75に含まれる不具合発生情報を読出し、図10に示した不具合条件を読み出した場合を例に説明する。以下のステップでは、不具合条件に適合する不具合発生情報を抽出し、対象プログラムとするためのプログラムを決定する。
ステップS73においては、不具合ランクがAの不具合発生情報が存在するか否かを判断する。不具合ランクがAの不具合発生情報が存在するならば処理をステップS74に進め、そうでなければ処理をステップS77に進める。ステップS74においては、実行プログラム71の機能を更新するプログラムが存在するか否かを判断する。具体的には、不具合ランクがAの不具合発生情報に含まれる機能のプログラムであって、実行プログラム71のその機能の部分のプログラムのバージョンよりも新しいプログラムが、更新情報に存在するか否かを判断する。そのようなプログラムが存在すれば処理をステップS75に進め、存在しなければ処理をステップS77に進める。図9に示した不具合発生情報リストにおいては、番号3の不具合発生情報の不具合ランクがAである。そして、その機能は、モジュールAの機能A2である。サーバ200から図6に示した更新情報231が受信された場合、モジュールAの機能A2の部分が更新されたバージョン1.2のプログラムが存在する。したがって、この場合には処理をステップS75に進める。
ステップS75においては、ステップS74で存在が確認された不具合ランクがAの不具合発生情報に含まれる機能の部分が更新されたプログラム、ここではバージョン1.2のプログラムは、そのとき対象プログラムに設定されているプログラムよりもバージョンが新しいか否かを判断する。バージョンが新しければ処理をステップS76に進め、そうでなければ処理をステップS77に進める。ここでは、機能Aのバージョン1.4のプログラムが対象プログラムとされているので、処理をステップS77に進める。
ステップS76においては、不具合ランクがAの不具合発生情報に含まれる機能の部分が更新されたプログラムを、それまでに対象プログラムに設定されているプログラムに代えて対象プログラムとするためのプログラムに決定する。より新しいバージョンのプログラムを対象プログラムとするためである。
ステップS77においては、不具合ランクがBの不具合発生情報が存在するか否かを判断する。不具合ランクがBの不具合発生情報が存在するならば処理をステップS78に進め、そうでなければ処理をステップS82に進める。ステップS78においては、不具合ランクがBの不具合発生情報に含まれる機能が発生回数2回以上で、かつ、発生頻度が50%以上か否かを判断する。この条件を満たしていれば処理をステップS79に進め、そうでなければ処理をステップS82に進める。
ステップS79においては、不具合ランクがBの不具合発生情報に含まれる機能のプログラムであって、実行プログラム71の機能の部分を更新するプログラムが、更新情報に存在するか否かを判断する。そのようなプログラムが存在すればそのプログラムを選択し、処理をステップS80に進め、存在しなければ処理をステップS82に進める。図9に示した不具合発生情報リスト75においては、番号1と番号5の不具合発生情報の不具合ランクがBである。番号1の不具合発生情報の発生回数は1回、発生頻度は、10%なので、条件を満たさない。また、番号5の不具合発生情報の発生回数は4回、発生頻度は57%なので、条件を満たす。そして、番号5の不具合発生情報の機能は、モジュールBの機能B2である。ここで、図6に示した更新情報を参照して、モジュールBの機能B2のプログラムであって、実行プログラム71の機能B2の部分のプログラムのバージョン1.0より新しいプログラムは、機能B2のバージョン1.2のプログラムである。したがって、この例の場合は、機能B2のバージョン1.2のプログラムが選択されて処理をステップS80に進める。
ステップS80においては、ステップS79で選択されたプログラム、ここでは機能Bのバージョン1.2のプログラムは、そのとき対象プログラムに設定されているプログラムよりもバージョンが新しいか否かを判断する。バージョンが新しければ処理をステップS81に進め、そうでなければ処理をステップS82に進める。ステップS79で選択された実行プログラム71を更新するプログラムを、それまでに対象プログラムに設定されているプログラムに代えて対象プログラムとするためのプログラムに決定する。より新しいバージョンのプログラムを対象プログラムとするためである。ここでは、機能Bのバージョン1.2のプログラムが新たに対象プログラムに決定される。
ステップS82においては、他の不具合条件に適合する不具合発生情報が存在するか否かを判断する。そのような不具合情報が存在すればその不具合発生情報を抽出し、処理をステップS83に進めるが、そうでなければ処理をステップS86に進める。ステップS83においては、抽出された不具合発生情報に含まれる機能のプログラムであって、実行プログラム71の機能の部分を更新するプログラムが、更新情報に存在するか否かを判断する。そのようなプログラムが存在すればそのプログラムを選択し、処理をステップS84に進め、存在しなければ処理をステップS86に進める。図10に示した不具合条件テーブルにおいては、残りの不具合条件は、番号3と番号4の不具合条件である。番号3の不具合条件は、機能A2で不具合ランクがB以上であり、番号4の不具合条件は、機能B1で不具合コードC003である。図9に示す不具合発生情報リスト75においては、番号3の不具合条件に一致する不具合発生情報は、番号3の不具合発生情報であるが、番号4の不具合条件に一致する不具合発生情報は存在しない。したがって、番号3の不具合発生情報が抽出される。番号3の不具合発生情報に含まれる機能は、機能A2ある。機能A2のプログラムであって、実行プログラム71の機能A2の部分のプログラムのバージョン1.0より新しいプログラムは、機能A2のバージョン1.2のプログラムである。したがって、この例の場合には、処理をステップS84に進める。
ステップS84においては、ステップS83において選択されたプログラムのバージョンが、そのとき対象プログラムに設定されているプログラムよりもバージョンが新しいか否かを判断する。バージョンが新しければ処理をステップS85に進め、そうでなければ処理をステップS86に進める。ここでは、機能A2のバージョン1.2のプログラムが対象プログラムに設定されているので、処理をステップS86に進める。ステップS85においては、ステップS83において選択されたプログラムを、それまでに対象プログラムに設定されているプログラムに代えて、対象プログラムとするためのプログラムに決定する。より新しいバージョンのプログラムを対象プログラムとするためである。
ステップS86においては、不具合発生情報を消去し、処理を対象プログラム決定処理に戻す。不具合発生情報に基づき実行プログラムを更新するためのプログラムを決定する処理を終了したので、同じ不具合発生情報を用いて上述した処理を実行しても同じ結果となるからである。
図19は、履歴情報に基づく対象プログラム決定処理の流れの一例を示すフローチャートである。履歴情報に基づく対象プログラム決定処理は、図16のステップS45において実行される処理である。図19を参照して、フラッシュメモリ113に記憶されている実績情報を読み出す(ステップS91)。そして、更新情報で定義されているプログラムのうちから処理対象とするプログラムを1つ選択し(ステップS92)、処理対象のプログラムの機能の使用回数がしきい値Tを越えるか否かを判断する(ステップS93)。使用回数がしきい値Tを越えるならば処理をステップS94に進め、そうでなければ処理をステップS96に進める。しきい値Tは、MFP100の管理者により予め設定されるか、メーカにより予め設定された値である。例えば、図6に示した更新情報のバージョン1.1のプログラムが処理対象に設定されたとすると、機能はモジュールCの機能C1である。ここで、図9に示した実績情報を参照して、モジュールCの機能C1の使用回数は、0回である。この場合には、処理をステップS96に進める。
ステップS94においては、処理対象のプログラムのバージョンが、そのとき対象プログラムに設定されているプログラムよりもバージョンが新しいか否かを判断する。バージョンが新しければ処理をステップS95に進め、そうでなければ処理をステップS96に進める。ステップS95においては、処理対象のプログラムを、それまでに対象プログラムに設定されているプログラムに代えて、対象プログラムとするためのプログラムに決定する。より新しいバージョンのプログラムを対象プログラムとするためである。
ステップS96においては、次に処理対象とするべきプログラムが存在するか否かを判断する。処理対象とするべきプログラムが存在すれば処理をステップS92に戻し、存在しなければ処理を対象プログラム決定処理に戻す。
しきい値Tを50回とした場合、図9に示した実績情報73によれば、モジュールAの機能A1の使用回数がしきい値T以上である。このため、モジュールAの機能A1のうち最も新しいバージョン1.0〜1.4について、ステップS94の処理が実行されるが、対象プログラムに機能A1のバージョン1.4のプログラムが既に設定されているので、いずれについてもステップS95が実行されることはない。
図16に示した対象プログラム決定処理によって、機能A1のバージョン1.4のプログラムと、機能A2のバージョン1.2のプログラムとが対象プログラムに設定されるので、実行プログラム71の機能A1の部分がバージョン1.4のプログラムに部分的に更新され、機能A2の部分がバージョン1.2のプログラムに部分的に更新される。その他の機能B1、機能B2、機能C1および機能C2の部分は、更新されることなくバージョン1.0のままとなる。
以上説明したように本実施の形態におけるMFP100は、フラッシュメモリ113に記憶された実行プログラム71を実行し、複数種類の機能の少なくとも1つが実行されると、実行された機能毎に該機能が実行されたことを示す実績情報73を更新する。そして、実績情報73とサーバ200に記憶されている更新情報231とに基づいて、実行プログラム71のうちで更新する機能を決定するとともに、サーバに記憶された複数のバージョンのプログラム223A,223B,227A,227B,229A,229Bのうちで実行プログラム17を更新するためのバージョンのプログラムを対象プログラムに決定し、対象プログラムをダウンロードし、対象プログラムで実行プログラム71を更新する。
このため、サーバ200に記憶された複数のバージョンのプログラム223A,223B,227A,227B,229A,229Bのうちで、必ずしも最新のバージョンのプログラム223A,223B,227A,227B,229A,229Bで実行プログラムを更新することがない。実行プログラム71のうち実行された機能の部分、不具合の発生した機能の部分、緊急度が高く設定された機能の部分等についてのみ部分的に更新するので、実行プログラムを更新する回数を少なくすることができる。
また、より新しいバージョンのプログラムがサーバ200に記憶されているにも係わらず実行プログラム71が更新されていない場合であっても、そのバージョンのプログラムにより更新される機能を実行する指示が受け付けられたときに警告が出力されるので、機能の実行を指示した時点で実行プログラム71を更新することができる。
また、所定のタイミングに、実行プログラム71を更新するので、MFP100が使用される確率の低い時間帯に実行プログラムを更新することができる。
さらに、他のMFP100A,100B,100Cから実績情報および不具合発生情報を収集し、それらで自装置に記憶する実績情報73および不具合発生情報リスト75をそれぞれ更新するので、他のMFP100A,100B,100Cの使用実績を反映して更新するプログラムを決定することができるとともに、他のMFP100A,100B,100Cで発生した不具合が自装置で発生するのを未然に防止することができる。
<変形例>
上述した実施の形態においては、MFP100,100A,100B,100Cが、実行プログラム71を更新するか否かを判断するようにした。変形例においては、サーバ200が、MFP100,100A,100B,100Cそれぞれに記憶された実行プログラム71を更新するか否かを判断するようにしたものである。
図20は、変形例におけるサーバが備えるCPU201Aの機能の一例を、HDD207に記憶されるデータとともに示す機能ブロック図である。図20を参照して、図5に示した機能ブロック図と異なる点は、履歴受信部215と、比較判断部217とが追加された点である。履歴受信部215は、MFP100,100A,100B,100Cのいずれかから履歴を受信する。ここでは、MFP100から履歴を受信する場合を説明する。履歴は、実績情報73と、不具合発生情報リスト75と、MFP100が記憶する実行プログラム71の各機能のプログラムのバージョンとを含む。履歴受信部215は、受信した履歴と、その履歴を送信してきたMFPを特定するための装置識別情報と、実行プログラム71の各機能のプログラムのバージョンとを比較判断部217に出力する。
比較判断部217は、履歴受信部215から入力される履歴の実績情報に基づいて、実行プログラム71を更新するか否かを判断する。更新すると判断する場合には、更新するためのプログラム(以下「対象プログラム」という)を決定する。具体的には、HDD207に記憶している更新情報231に基づいて、MFP100の実行プログラム71の各機能の部分のバージョンよりも新しいバージョンのプログラムを有する機能を特定する。そして、特定された機能が実行されていることが実績情報に記録されている場合に、実行プログラム71を更新すると判断する。この際、特定した機能の新しいバージョンのプログラムを、対象プログラムに決定する。対象プログラムは、機能と、プログラムのバージョンで特定される。なお、特定された機能が実行されていることが実績情報に記録されていることを条件とするのに代えて、特定された機能が所定の頻度を越えて実行されていることが実績情報に記録されていることを条件とするようにしてもよい。
さらに、比較判断部217は、履歴受信部215から入力される履歴の不具合発生情報リスト75に基づいて、実行プログラム71を更新するか否かを判断する。具体的には、不具合発生情報リスト75に記録されている不具合発生情報に含まれる機能(不具合の発生した機能)を特定する。そして、不具合発生情報に含まれる不具合ランクと発生頻度とが予め定められた不具合条件に合致するか否かを判断する。不具合条件に合致する場合、更新情報231で定義され、特定された機能(不具合の発生した機能)に関するプログラムのうちに、実行プログラム71の特定された機能の部分のバージョンよりも新しいバージョンのプログラムが存在すれば、実行プログラム71を更新すると判断する。この際、特定された機能(不具合の発生した機能)に関するプログラムであって、フラッシュメモリ113に記憶されている実行プログラム71のその機能の部分のバージョンよりも新しいバージョンのプログラムを、対象プログラムに決定する。サーバ200は、HDD207に、図11に示した不具合条件テーブルを記憶している。
比較判断部217は、更新情報231の緊急度を参照し、緊急度に基づいて実行プログラム71を更新するか否かを判断する。具体的には、更新情報231によってプログラムに割り当てられた緊急度が予め定められた緊急度条件に一致すれば、そのプログラムを対象プログラムとし、実行プログラム71を更新すると判断する。また、比較判断部217は、更新情報231の緊急度および実績情報に基づいて実行プログラム71を更新するか否かを判断する。具体的には、プログラムに割り当てられた緊急度およびそのプログラムの機能の使用回数または使用頻度が緊急度条件に一致すれば、そのプログラムを対象プログラムとし、実行プログラム71を更新すると判断する。サーバ200は、HDD207に、図12に示した緊急度条件テーブルを記憶している。
比較判断部217は、実行プログラム71を更新すると判断した場合、実行プログラム71を更新するための対象プログラムを特定するための識別情報を、プログラム送信部211に出力する。プログラム送信部211は、比較判断部217から入力される識別情報で特定される対象プログラムをHDD207のうちから読み出して、読み出した対象プログラムを、MFP100,100A,100B,100Cのうち履歴を送信してきたMFPに送信する。
図21は、変形例におけるMFP100が備えるCPU111Aの機能の概要を、フラッシュメモリ113に記憶されるデータとともに示す機能ブロック図である。図21を参照して、図7に示した機能ブロック図と異なる点は、判断部59が削除された点、履歴送信部65が追加された点、更新部55Aが変更された点である。
図21を参照して、履歴送信部65は、フラッシュメモリ113に記憶されている実績情報73と不具合発生情報リスト75と、実行プログラム71の各機能のバージョンとを含む履歴を、サーバ200に送信する。ダウンロード部53は、履歴送信部65が履歴を送信することに応じて、サーバ200が送信する対象プログラムを受信し、受信した対象プログラムを更新部55に出力する。更新部55Aは、ダウンロード部53が対象プログラムを受信すると、その対象プログラムでフラッシュメモリ113に記憶されている実行プログラム71の対象プログラムで特定される部分を部分的に更新する。
変形例におけるプログラム更新システムにおいては、MFP100,100A,100B,100Cそれぞれは、上述したのと同様の効果を奏することができる。また、サーバ200においてMFP100に記憶された実行プログラム71を更新するか否かを決定するので、MFP100,100A,100B,100Cの負荷を低減させることができる。
なお、上述した実施の形態においては、プログラム更新システム1について説明したが、図13〜図19に示した処理を含むプログラム更新方法、またはそれらの処理をコンピュータに実行させるためのプログラム更新プログラムとして発明を捉えることができるのは言うまでもない。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
<付記>
(1) 前記履歴情報は、前記機能が実行されたことを示す実績情報を含む、請求項1に記載の画像形成装置。
(2) 前記決定手段は、前記実行プログラムのうち前記履歴情報に含まれる前記機能に関する部分を前記更新対象部分に決定し、複数種類の前記更新プログラムのうち前記履歴情報に含まれる前記機能に関する部分が更新されている前記更新プログラムを前記対象プログラムに決定する、請求項13に記載のプログラム更新システム。
(3) 前記履歴情報は、前記機能が実行された頻度を含み、
前記決定手段は、前記実行プログラムのうち前記履歴情報において前記頻度が所定値以上の前記機能に関する部分を前記更新対象部分に決定し、複数種類の前記更新プログラムのうち前記実績情報に含まれる前記機能に関する部分が更新されている前記更新プログラムを前記対象プログラムに決定する、請求項13に記載のプログラム更新システム。
(4) 前記履歴情報は、前記機能が実行されて発生した不具合を特定する不具合識別情報を該機能と関連付けた不具合情報を含み、
前記決定手段は、前記実行プログラムのうち前記不具合情報に含まれる前記機能に関する部分を前記更新対象部分に決定し、複数種類の前記更新プログラムのうち前記不具合情報に含まれる前記機能に関する部分が更新されている前記更新プログラムを前記対象プログラムに決定する、請求項13に記載のプログラム更新システム。
(5) 前記更新情報は、複数種類の前記更新プログラム毎に、複数種類の前記機能それぞれに対応する更新の緊急度合いを示す緊急情報を含み、
前記決定手段は、前記実行プログラムのうち所定の緊急度合いを示す前記緊急情報に対応する前記機能に関する部分を前記更新対象部分に決定し、複数種類の前記更新プログラムのうち前記更新対象部分が更新されている前記更新プログラムを、前記履歴情報に係わらず、前記対象プログラムに決定する、請求項13に記載のプログラム更新システム。
1 プログラム更新システム、2 ネットワーク、9 操作パネル、10 ADF、20 画像読取部、30 画像形成部、40 給紙部、50 後処理部、51 機能実行部、53 ダウンロード部、55,55A 更新部、57 更新情報取得部、59 判断部、61 警告部、63 履歴更新部、65 履歴送信部、71 実行プログラム、73 実績情報、75 不具合発生情報リスト、100,100A,100B,100C MFP、101 メイン回路、111 CPU、112 RAM、113 フラッシュメモリ、114 表示部、115 操作部、116 HDD、117 データ通信制御部、118 端子、119 シリアル通信インターフェース端子、119A メモリカード、122 ファクシミリ部、123 通信制御部、200 サーバ、201 CPU、202 通信I/F、203 モニタ、204 入力部、205 RAM、206 ROM、207 HDD116、209 バス、211 プログラム送信部、213 更新情報送信部、215 履歴受信部、217 比較判断部、220〜223 プログラム、231 更新情報。