データカウント方法および画像形成装置
【課題】複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できるデータカウント方法および画像形成装置を提供する。
【解決手段】本データカウント方法では、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、連続カウントアドレス群内のいずれかのカウントアドレスを基準として、連続カウントアドレス群以外のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとが実行される。
【解決手段】本データカウント方法では、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、連続カウントアドレス群内のいずれかのカウントアドレスを基準として、連続カウントアドレス群以外のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとが実行される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、書き換え回数の制限のあるメモリを用いたデータカウント方法およびその方法を提供する画像形成装置に関する。
【背景技術】
【0002】
従来から不揮発性の記憶媒体として、EEPROM(Electrically Erasable and Programmable Read Only Memory)などの半導体デバイスが使用されている。このような半導体記憶デバイスは、その電気的な状態を利用してデータを保持する。典型的には、1ビットのデータを保持する単位素子について、その電荷の有無などに対応付けて、“0”値または“1”値を記憶する。
【0003】
したがって、データを書き換える際には、内部的な電荷の移動が生じることになる。その結果、このような半導体記憶では電気的な寿命が存在することになる。たとえば、一般的なEEPROMは、データ書き換え可能な回数(制限値)は、最大で約100万回とされている。
【0004】
そのため、100万回以上の値をカウントする必要がある用途では、これらの書き換え回数の制限値を超えないように、複数の記憶領域(カウントアドレス)を利用する構成が知られている。また、万が一、データの破壊が生じた場合であっても、その破壊を修復する技術も知られている。
【0005】
たとえば、特開平7−78232号公報(特許文献1)には、誤カウントを検出し、これを正しい値に補正するカウンタが開示されている。このカウンタは、互いに連続する値の初期値が設定された複数のサブカウンタと、カウントアップ時に、上記複数のサブカウンタの持つ値のうち、最大の値と、2番目に大きな値とが連続しているか否かを判断する判断手段と、上記判断手段により、最大の値と、2番目に大きな値とが連続していないと判断された場合、最小の値を持つサブカウンタの値を、2番目に大きな値に2を加えた値に書き換え、書き換えられた値をカウント値とし、また、最大の値と、2番目に大きな値とが連続していると判断された場合、最小の値を持つサブカウンタの値を、最大の値に1を加えた値に書き換え、書き換えられた値をカウント値とする制御手段とを有する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平7−78232号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述の特開平7−78232号公報(特許文献1)では、サブカウンタにおいて規則性が成立しているかを判断することで誤カウントを検出しているが、より多くの記憶領域(カウントアドレス)を用いてカウントを行なうようにした場合に、複数のカウントアドレスの値が飛び飛びに破壊されてしまうと、誤カウントを適切に検出できないという課題があった。また、このような場合には、その破壊を修復することもできない。
【0008】
本発明は、上記のような問題を解決するためになされたものであって、複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できるデータカウント方法および画像形成装置を提供することである。
【課題を解決するための手段】
【0009】
この発明のある局面に従えば、書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なうためのデータカウント方法を提供する。カウント動作においては、連続的なアドレス番号が割当てられている3個以上のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上のカウントアドレスに対して循環的に書き込む。本データカウント方法は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとを含む。
【0010】
好ましくは、連続カウントアドレス群を特定するステップは、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定するステップを含む。
【0011】
さらに好ましくは、連続カウントアドレス群を特定するステップは、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、カウントデータをカウント単位ずつ増加させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定するステップと、カウントデータをカウント単位ずつ減少させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定するステップとをさらに含む。
【0012】
好ましくは、異常カウントアドレスを特定するステップは、基準とされたカウントアドレスが有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレスが有するカウントデータとの間の差分の絶対値が、(a)両カウントアドレスの間のアドレス番号についての差分の絶対値にカウント単位を乗じた値、または、(b)管理カウントアドレス群に含まれるカウントアドレスの総数から両カウントアドレスの間のアドレス番号についての差分の絶対値を減算して得られた値にカウント単位を乗じた値、のいずれかの値と一致するか否かを判断するステップを含む。異常カウントアドレスを特定するステップは、さらに、いずれの値とも一致しない場合に、当該判断対象となるカウントアドレスを異常カウントアドレスとして特定するステップと含む。
【0013】
好ましくは、本データカウント方法は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復するステップをさらに含む。
【0014】
さらに好ましくは、本データカウント方法は、さらに、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出するステップと、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが過半数未満であるか否かを判断するステップを含む。修復するステップは、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に実行される。
【0015】
さらに好ましくは、本データカウント方法は、さらに、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断するステップと、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを特定するステップを再度実行させるステップとを含む。
【0016】
好ましくは、修復するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定するステップと、基準値カウントアドレスと異常カウントアドレスとの関係に基づいて、異常カウントアドレスの有するカウントデータを修復するステップとを含む。
【0017】
さらに好ましくは、基準値カウントアドレスに設定するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定するステップを含む。
【0018】
あるいは、さらに好ましくは、基準値カウントアドレスに設定するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定するステップを含む。
【0019】
好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更する。ここで、基準値カウントアドレスのカウントデータをDとし、管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、カウント単位をαとしている。
【0020】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更する。
【0021】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更する。
【0022】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更する。
【0023】
この発明の別の局面に従えば、書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なう画像形成装置を提供する。本画像形成装置は、連続的なアドレス番号が割当てられている3個以上のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上のカウントアドレスに対して循環的に書き込む手段と、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する手段と、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する手段と、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する手段とを含む。
【0024】
好ましくは、連続カウントアドレス群を特定する手段は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定する。
【0025】
さらに好ましくは、連続カウントアドレス群を特定する手段は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、書き込む手段がカウントデータをカウント単位ずつ増加させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定し、書き込む手段がカウントデータをカウント単位ずつ減少させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定する。
【0026】
好ましくは、本画像形成装置は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復する手段をさらに含む。
【0027】
さらに好ましくは、本画像形成装置は、さらに、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する手段と、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが過半数未満であるか否かを判断する手段とを含む。修復する手段は、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に処理を実行する。
【0028】
さらに好ましくは、本画像形成装置は、さらに、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する手段と、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを特定する手段に再度処理を実行させる手段とを含む。
【発明の効果】
【0029】
本発明によれば、複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できる。
【図面の簡単な説明】
【0030】
【図1】この発明の実施の形態に従う画像形成装置の外観を示す図である。
【図2】この発明の実施の形態に従う画像形成装置の電気的構成の概要を示す図である。
【図3】この発明に関連するデータカウント方法におけるメモリマップの一例を示す図である。
【図4】この発明に関連するデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【図5】この発明の実施の形態に従うデータカウント方法におけるメモリマップの一例を示す図である。
【図6】この発明の実施の形態に従うデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【図7】図1に示す制御部における制御構造を示す模式図である。
【図8】この発明の実施の形態に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図9】図8に示すカウント動作サブルーチンの処理手順を示すフローチャートである。
【図10】図8に示す連続カウントアドレス算出サブルーチンの処理手順を示すフローチャートである。
【図11】図8に示す異常判定サブルーチンの処理手順を示すフローチャートである。
【図12】図8に示す過半数算出サブルーチンの処理手順を示すフローチャートである。
【図13】図8に示す異常特定サブルーチンの処理手順を示すフローチャートである。
【図14】図8に示す修復サブルーチンの処理手順を示すフローチャートである。
【図15】図14に示す第1異常修復サブルーチンの処理手順を示すフローチャートである。
【図16】図14に示す第2異常修復サブルーチンの処理手順を示すフローチャートである。
【図17】図14に示す第3異常修復サブルーチンの処理手順を示すフローチャートである。
【図18】図14に示す第4異常修復サブルーチンの処理手順を示すフローチャートである。
【図19】この発明の実施の形態の変形例1に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図20】この発明の実施の形態の変形例2に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図21】この発明の実施の形態に従うデータカウント方法の適用例1を説明するための図である。
【図22】この発明の実施の形態に従うデータカウント方法の適用例2を説明するための図である。
【図23】この発明の実施の形態に従うデータカウント方法の適用例3を説明するための図である。
【図24】この発明の実施の形態に従うデータカウント方法の適用例4を説明するための図である。
【発明を実施するための形態】
【0031】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【0032】
本発明に係るデータカウント方法は、種々の装置などに適用可能であるが、以下では、電子写真方式の画像形成装置(典型的には、複写機、コピー機、レーザプリンタなど)に装着される、感光体や現像機などのユニットの動作回数をカウントする例について説明する。
【0033】
<装置構成>
図1は、この発明の実施の形態に従う画像形成装置MFPの外観を示す図である。図2は、この発明の実施の形態に従う画像形成装置MFPの電気的構成の概要を示す図である。
【0034】
図1を参照して、本実施の形態に従う画像形成装置MFPの本体には、電子写真方式で像を生成するための感光体ユニット40と、感光体ユニット40にトナーを供給するためのトナーユニット50と、印刷媒体である用紙を保持するためのカセット60とが装着可能に構成される。すなわち、画像形成装置MFPの下部に装着されたカセット60内に収納された用紙(記録紙)が搬送されるに伴って、感光体ユニット40によって出力すべき画像に対応する潜像が形成され、この潜像に対応するトナー像が用紙に転写される。そして、トナー像が転写された用紙は、定着装置を通じた後にプリント出力される。
【0035】
本実施の形態に従う画像形成装置MFPは、感光体ユニット40の動作回数、トナーユニット50の動作回数、カセット60からの給紙回数などをカウントする。
【0036】
たとえば、感光体ユニット40は、画像形成装置MFPの内部に架設される転写ベルトの幅方向に延びる感光体42と、トナーユニット50からトナーの供給を受けるためのトナー供給孔44と、記憶モジュール46とを含む。記憶モジュール46は、画像形成装置MFP本体と電気的に接続するためのコネクタと、感光体ユニット40の動作回数のカウンタ値を記憶するためのメモリを含む。
【0037】
図2を参照して、画像形成装置MFPは、プリントエンジン70と、制御部100とをさらに含む。プリントエンジン70は、画像形成動作を行なうために必要な各種の機構からなる。制御部100は、プリントエンジン70における画像形成動作を司る。
【0038】
制御部100は、CPU(Central Processing Unit)10と、ROM(Read Only Memory)12と、RAM(Random Access Memory)14と、通信I/F(インターフェイス:Interface)18と、入出力I/O(Input/Output)20とを含む。これらの各部は、内部バス16を介して互いに接続される。
【0039】
制御部100では、CPU10が、ROM12などに予め格納されている各種処理を実行するためのプログラムをRAM14などに展開して実行することで、後述するカウント処理を含む各種制御が提供される。RAM14は、揮発性メモリであり、ワークメモリとして使用される。より具体的には、RAM14には、実行されるプログラム自体に加えて、処理対象の画像データや各種変数データが一時的に格納される。
【0040】
通信I/F18は、図示しない操作パネル、ならびに、感光体ユニット40およびトナーユニット50のような画像形成装置MFPに装着される消耗品などとの間でデータを遣り取りする。この通信I/F18は、複数のコネクタ31,32,…,3Nが接続されており、コネクタ31,32,…,3Nの各々は、感光体ユニット40またはトナーユニット50と電気的に接続される。そして、通信I/F18は、感光体ユニット40およびトナーユニット50に内蔵されているメモリ48(58)に対してデータの書き込み、および、当該メモリからのデータの読み出しを行なう。
【0041】
入出力I/O20は、プリントエンジン70との間で、画像形成動作に必要な検出値や制御指令を遣り取りする。
【0042】
以下の説明では、理解を容易にするために、ある1つのユニット(感光体ユニットまたはトナーユニット)との間で動作回数をカウントする場合の処理について説明する。
【0043】
<関連技術>
まず、本実施の形態に従うカウント処理について説明する前に、本発明に関連するカウント処理について説明する。
【0044】
図3は、この発明に関連するデータカウント方法におけるメモリマップの一例を示す図である。図4は、この発明に関連するデータカウント方法の実行に伴うメモリ内容の変化を示す図である。なお、図3および図4には、特開平7−78232号公報(特許文献1)と同様に、メモリに含まれる3個のカウントアドレスを用いて、データカウントを行なう場合の例を示す。また、図3には、感光体の動作回数(感光体カウンタ)を記憶する領域と、現像回数(現像カウンタ)を記憶する領域とが用意される。
【0045】
なお、本明細書において「カウントアドレス」とは、メモリ内に所定単位の記憶領域の各々を総称する。すなわち、各カウントアドレスは、メモリを所定単位で分割した各々に相当する。たとえば、メモリを16ビット(1ワード)または32ビット(2ワード)の単位で分割し、各分割された後のメモリ単位、すなわち1ワードまたは2ワードの各々を識別するためのアドレス番号をアドレス[1],[2],…といった具合に示す。したがって、たとえば、2ワード(32ビット)の単位でカウントアドレスを定義した場合には、各カウントアドレスには、“0”〜“4294967295”までの値を記憶することが可能となる。また、各カウントアドレスが保持するデータを「カウントデータ」と称する。
【0046】
図3を参照して、本発明の関連技術に係るデータカウント方法では、感光体の動作回数を保持する領域として、絶対アドレス[3],[5],[7]にそれぞれ対応付けられる感光体カウンタ1,2,3と、絶対アドレス[57],[59],[61]にそれぞれ対応付けられる感光体カウンタ1,2,3(移動後)とが用意される。感光体カウンタ1,2,3は、メモリの書き換え回数がその制限値に到達するまで利用される記憶領域であり、感光体カウンタ1,2,3(移動後)は、感光体カウンタ1,2,3での書き換え回数がその制限値に到達した後に連続性を維持したまま利用される記憶領域である。
【0047】
そして、メモリの書き換え回数がその制限値に到達したか否かを判断するために、絶対アドレス[21],[23],[25]にそれぞれ対応付けられる感光体カウンタ1,2,3書き込み回数が用意される。また、感光体カウンタ1,2,3と、感光体カウンタ1,2,3(移動後)とのうち、いずれが有効となっているかを記憶するために、絶対アドレス[63]に対応付けられる感光体カウンタ管理状態が用意される。
【0048】
現像カウンタについても同様に、絶対アドレス[4],[6],[8]にそれぞれ対応付けられる現像カウンタ1,2,3と、絶対アドレス[58],[60],[62]にそれぞれ対応付けられる現像カウンタ1,2,3(移動後)とが用意される。現像カウンタ1,2,3は、メモリの書き換え回数がその制限値に到達するまで利用される記憶領域であり、現像カウンタ1,2,3(移動後)は、現像カウンタ1,2,3での書き換え回数がその制限値に到達した後に連続性を維持したまま利用される記憶領域である。
【0049】
そして、メモリの書き換え回数がその制限値に到達したか否かを判断するために、絶対アドレス[22],[24],[26]にそれぞれ対応付けられる現像カウンタ1,2,3書き込み回数が用意される。また、現像カウンタ1,2,3と、現像カウンタ1,2,3(移動後)とのうち、いずれが有効となっているかを記憶するために、絶対アドレス[64]に対応付けられる現像カウンタ管理状態が用意される。
【0050】
図4を参照して、感光体ユニット40の動作に伴うカウント処理について説明する。なお、図4に示す「カウント数」は、本来カウントしたい値を示し、たとえば、感光体ユニット40が動作するたびに1つずつ加算されるとする。
【0051】
まず、カウント数が“0”である初期状態においては、感光体カウンタ1,2,3にそれぞれ互いに連続する初期値がセットされている。図4に示す例では、“−2”,“−1”,“0”である。
【0052】
続いて、感光体ユニット40が1回動作すると、本来のカウント数は“1”となる。これに対応して、感光体カウンタ1の値が“−2”から“1”へ書き換えられる。続いて、感光体ユニット40がさらに1回動作して本来のカウント数が“2”となると、感光体カウンタ1の次に位置する感光体カウンタ2の値が“−1”から“2”へ書き換えられる。さらに、感光体ユニット40がさらに1回動作して本来のカウント数が“3”となると、感光体カウンタ2の次に位置する感光体カウンタ3の値が“0”から“3”へ書き換えられる。
【0053】
その後、感光体ユニット40がさらに1回動作して本来のカウント数が“4”となると、感光体カウンタ1の値が“1”から“4”へ再度書き換えられる。
【0054】
このように、感光体カウンタ1,2,3の書き替え回数が制限値に到達するまでは、感光体カウンタ1→2→3→1→2→…といった順序で、循環的に、カウントデータが書き込まれる。
【0055】
上述のような3個のアドレスに対して循環的にカウントデータを書き込むことで、常に、3個のカウントアドレスの間では、互いに連続した値(カウントデータ)が本来的に保持されるので、何らかの理由によって、カウントデータが破壊された場合であっても、破壊されていないデータを基準にして、連続性を保つように加減算を行なうことでデータ修復を行なっていた。
【0056】
上述のような感光体カウンタ1,2,3へのデータ書き込みに連動して、感光体カウンタ1,2,3へのデータ書き込みが行われた回数が、それぞれ感光体カウンタ1,2,3書き込み回数へ順次書き込まれる。
【0057】
その後、カウント処理が継続して、感光体カウンタ1,2,3のいずれかへのデータ書き換え回数が制限値(図4に示す例では、100万回)を超えた場合に、感光体カウンタ1,2,3への新たなデータ書き込みは行なわれず、それに代えて、感光体カウンタ1,2,3が保持していたカウントデータは、それぞれ感光体カウンタ1,2,3(移動後)へそれぞれ移行される。すなわち、感光体カウンタ1が記憶していたカウントデータは、感光体カウンタ1(移動後)へ複写され、感光体カウンタ2が記憶していたカウントデータは、感光体カウンタ2(移動後)へ複写され、感光体カウンタ3が記憶していたカウントデータは、感光体カウンタ3(移動後)へ複写される。
【0058】
このデータ移行と同時に、感光体カウンタ管理状態の値が“0”から“1”へ書き換えられる。この感光体カウンタ管理状態の値が“1”にセットされると、感光体カウンタ1,2,3(移動後)が有効化されたことを意味する。
【0059】
そして、以後のカウント処理においては、感光体カウンタ1,2,3(移動後)に対して、循環的にカウントデータが書き込まれる。すなわち、感光体カウンタ1,2,3に対するデータ書き込みと同様に、感光体カウンタ1(移動後)→感光体カウンタ2(移動後)→感光体カウンタ3(移動後)→感光体カウンタ1(移動後)→…といった順序で、循環的に、カウントデータが書き込まれる。
【0060】
上述のような構成を採用した場合には、最終的には、“5999997”までカウントすることが可能である。すなわち、3カウントアドレスを用いてカウント処理を行なう場合には、書き換え回数の制限値についての3倍の単位(上述の例では、“300万回”)でカウントの上限値を変更することができる。
【0061】
言い換えれば、感光体ユニット40の機械的に使用可能な動作回数が“350万回”であった場合、すなわち、カウンタデータの最大値が“350万回”で十分であるが、上述の方法によれば、10個のカウントアドレスを用意する必要がある。別の例としては、カウントデータの最大値が“700万回”でよい場合であっても、上述の方法によれば、16個のカウントアドレスを用意する必要がある。
【0062】
ここで、各カウントアドレスについての書き換え回数の制限値が“100万回”であるのであれば、“350万回”までカウント動作を行なうためには、論理的には4個のカウントアドレスを使用できれば十分なはずである。同様に、“700万回”までカウント動作を行なうためには、論理的には7個のカウントアドレスを使用できれば十分なはずである。
【0063】
しかしながら、本発明の関連技術に係るデータカウント方法では、論理的なカウントアドレスの最小使用数が4個である場合であっても、現実には10個のカウントアドレスを使用しており、また、論理的なカウントアドレスの最小使用数が7個である場合であっても、現実には16個のカウントアドレスを使用することになっていた。
【0064】
このように、本発明の関連技術に係るデータカウント方法では、メモリの利用効率が低いという課題があった。
【0065】
<本実施の形態に従うカウント方法の概要>
本実施の形態に従うデータカウント方法においては、連続的なアドレス番号が割当てられている3個以上のカウントアドレスからなる管理カウントアドレス群に対してカウントデータを循環的に書き込む。この「管理カウントアドレス群」は、本実施の形態に従うデータカウント方法に利用されるカウントアドレスの組を意味する。
【0066】
このとき、管理カウントアドレス群に「連続カウントアドレス群」が存在するか否かが判断され、「連続カウントアドレス群」が存在する場合には、それに含まれるカウントアドレスを特定する。この「連続カウントアドレス群」は、管理カウントアドレス群に含まれるカウントアドレスが有するカウントデータについて循環的な書き込みに応じた規則性が成立している組を意味する。
【0067】
この「循環的な書き込みに応じた規則性」あるいは「規則性」とは、管理カウントアドレス群に対してカウントデータを循環的に書き込む際の周期性を意味する。より具体的には、各カウントアドレスについて見れば、管理カウントアドレス群に含まれるカウントアドレスの総数が書き込み周期となり、その書き込まれる値は、書き込み周期と各カウント動作において変化する単位(以下「カウント単位」とも称す。)との積に相当する値ずつ変化することになる。また、各カウントアドレスに書き込まれる値と隣接するカウントアドレスに書き込まれる値との間には、周期に応じた特定の関係が成立する。このような、管理カウントアドレス群に含まれる各カウントアドレスと隣接するカウントアドレスとの間で、それぞれが保持するカウントデータについての関係を調査することで、データ破壊の発生の有無などを判断する。
【0068】
なお、上述したように、本実施の形態に従うデータカウント方法では、複数のカウントアドレスに対して循環的なカウントデータの書き込みを行なうので、管理カウントアドレス群の最後に位置するカウントアドレスと先頭に位置するカウントアドレスとは、実質的に「隣接」することになる。
【0069】
本実施の形態に従うデータカウント方法においては、上述のように特定した連続カウントアドレス群を「データ破壊」がされていないカウントアドレスであるとみなして、管理カウントアドレス群に含まれるカウントアドレスに異常が発生しているか否かを判断するとともに、異常が発生している場合には、その異常が発生しているカウントアドレスを特定する。すなわち、規則性が成立している複数のカウントアドレスを正常なカウントアドレスとみなして、他のカウントアドレスにおける異常の有無や異常の修復を行なう。
【0070】
このように、連続カウントアドレス群を利用して評価するので、連続カウントアドレス群が存在しさえすれば、管理カウントアドレス群に含まれるカウントアドレスに飛び飛びに異常が発生したとしても、これらの異常を適切に検出および修復することができる。
【0071】
<メモリマップ>
図5は、この発明の実施の形態に従うデータカウント方法におけるメモリマップの一例を示す図である。図6は、この発明の実施の形態に従うデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【0072】
図5を参照して、本実施の形態に従うデータカウント方法では、感光体の動作回数を保持する領域として、絶対アドレス[3],[7],[21],[27],[57],[63],[68]にそれぞれ対応付けられる感光体カウンタ1,2,3,4,5,6,7が用意される。同様に、絶対アドレス[4],[8],[22],[28],[58],[64],[69]にそれぞれ対応付けられる現像カウンタ1,2,3,4,5,6,7が用意される。
【0073】
上述の図3に示すメモリマップとは異なり、利用されるすべてのカウントアドレスが制限値内の範囲で利用される。すなわち、本実施の形態に従うデータカウント方法では、各カウントアドレスに対する書き換え回数の制限値の単位(上述の例では、“100万回”)で、カウンタ値の上限を自在に変更することが可能である。したがって、図5に示す例では、7個のカウントアドレスを利用して、“700万回”までのカウントを可能する構成を示すが、さらに大きな値までカウントするためには、利用するカウントアドレスを追加すればよい。
【0074】
図6を参照して、感光体ユニット40の動作に伴うカウント処理について説明する。
まず、カウンタ数が“0”である初期状態においては、感光体カウンタ1,2,3,4,5,6,7にそれぞれ互いに連続する初期値がセットされている。図6に示す例では、“−6”,“−5”,“−4”,“−3”,“−2”,“−1”,“0”である。この初期値は、カウントデータの規則性に応じて定められる値であり、何らのカウント動作が行なわれていない状態であっても、各カウントデータは、規則性を維持したカウントデータを保持することになる。
【0075】
続いて、感光体ユニット40が1回動作すると、本来のカウント数は“1”となる。これに対応して、感光体カウンタ1の値が“−6”から“1”へ書き換えられる。続いて、感光体ユニット40がさらに1回動作して本来のカウント数が“2”となると、感光体カウンタ1に隣接する感光体カウンタ2の値が“−5”から“2”へ書き換えられる。さらに、感光体ユニット40がさらに1回動作して本来のカウント数が“3”となると、感光体カウンタ2に隣接する感光体カウンタ3の値が“−4”から“3”へ書き換えられる。
【0076】
以下同様にして、本来のカウント数が“7”となると、感光体カウンタ7の値が“0”から“7”へ書き換えられる。
【0077】
その後、感光体ユニット40がさらに1回動作して本来のカウント数が“8”となると、感光体カウンタ1の値が“1”から“8”へ再度書き換えられる。
【0078】
このように、感光体カウンタ1→2→3→4→5→7→6→1→2→…といった順序で、循環的に、カウントデータが書き込まれる。すなわち、図6に示す例では、感光体カウンタ1〜7が「管理カウントアドレス群」に相当し、この感光体カウンタ1〜7に対して、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータが循環的に書き込まれる。
【0079】
なお、感光体カウンタ1〜7には、上記の絶対アドレスとは異なり、相対的なアドレス番号が連続的に割当てられているとする。すなわち、以下の説明では、感光体カウンタ1〜7には、アドレス番号[1]〜[7]がそれぞれ割当てられているものとする。
【0080】
なお、各感光体カウンタに着目すれば、データ書き換えによって、その保持する値は、カウント処理に使用されている感光体カウンタの数(図5および図6の例では、“7”個)と同じ数ずつ増加することになる。
【0081】
さらに、上述の例では、“1”ずつカウントアップするデータカウント方法の例を示したが、任意の数ずつカウントアップするようにしてもよい。たとえば、“2”ずつカウントアップする場合には、各カウントアドレスには、“2”の倍数のカウントデータが書き込まれる。
【0082】
さらに、本実施の形態に従うデータカウント方法は、所定のカウント単位だけ順次減じるようなカウントダウンにも適用することができる。たとえば、“1”ずつカウントダウンすることは、“−1”ずつカウントアップことと等価となる。
【0083】
そこで、以下の説明では、1回のカウント動作においてカウントアップ/ダウンされる値をカウント単位αとも称す。
【0084】
本実施の形態に従うデータカウント方法においては、予めカウントデータの最大値が想定された上で、利用されるカウントアドレスの数(管理カウントアドレス群)が決定される。すなわち、各カウントアドレスについての書き換え回数がその制限値に到達しない範囲で使用されるように、その利用数が決定される。したがって、上述の図4に示すようなデータ移行などの処理は不要となる。
【0085】
さらに、後述するように、何らかの理由によって、カウントデータが破壊された場合であっても、適切に破壊されたカウントデータを検出し、その検出したデータ破壊を修復する機能を有している。また、当該修復機能によれば、カウントデータが飛び飛びで破壊されたとしても、データ修復が可能である。
【0086】
<制御部における制御構造>
図7は、図1に示す制御部100における制御構造を示す模式図である。図7を参照して、制御部100は、その制御構造として、カウントモジュール102と、連続カウントアドレス特定モジュール104と、異常検出モジュール106と、異常特定モジュール108と、修復モジュール110と、入出力モジュール112とを含む。
【0087】
カウントモジュール102は、プリントエンジン70(図2)などからカウントイベントを受けると、入出力モジュール112を介して、感光体ユニット40に内蔵されている記憶モジュールにアクセスして、現在のカウントデータを読み出すとともに、新たなカウントデータを適切なカウントアドレスに書き込む。すなわち、カウントモジュール102は、連続的なアドレス番号が割当てられている3個以上(図6の例では、7個)のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上(図6の例では、7個)のカウントアドレスに対して循環的に書き込む。
【0088】
連続カウントアドレス特定モジュール104は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する。
【0089】
異常検出モジュール106は、カウントモジュール102の動作に応答して、入出力モジュール112を介して、感光体ユニット40に内蔵されている記憶モジュールにアクセスして、現在のカウントデータを読み出すとともに、それぞれのカウントアドレスに記憶されているカウントデータに異常があるか否かを判断する。すなわち、異常検出モジュール106は、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する。
【0090】
異常特定モジュール108は、異常検出モジュール106において異常があると判断された場合には、異常となっているカウントデータを特定する。すなわち、異常特定モジュール108は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する。
【0091】
修復モジュール110は、異常特定モジュール108により特定された異常カウントデータを修復する。すなわち、修復モジュール110は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復する。
【0092】
入出力モジュール112は、通信I/F18(図2)などの間で情報を遣り取りすることで、感光体ユニット40に内蔵されている記憶モジュール内の各カウントアドレスに記憶されているカウントデータの読み出し、および、各カウントアドレスへのカウントデータの書き込みを行なう。
【0093】
<全体処理フロー>
図8は、この発明の実施の形態に従うデータカウント方法の全体処理手順を示すフローチャートである。図8に示す全体処理手順は、典型的には、CPU10がROM12などに格納されているプログラムをRAM14などに展開して実行することで提供される。なお、処理の全体または一部を専用のハードウェアなどとして実装してもよい。
【0094】
図8を参照して、まず、CPU10は、カウント対象のイベントが発生したか否かを判断する(ステップS2)。すなわち、CPU10は、画像形成動作の実行といった、感光体ユニット40などが動作したか否かを判断する。
【0095】
カウントすべきイベントが発生していない場合(ステップS2においてNOの場合)には、ステップS2の処理が繰返される。
【0096】
カウントすべきイベントが発生した場合(ステップS2においてYESの場合)には、CPU10は、対象のカウントデータをカウントするために、カウント動作サブルーチンを実行する(ステップS4)。このカウント動作サブルーチンの詳細については、図9を参照して後述する。
【0097】
カウント動作サブルーチンの実行後、CPU10は、連続カウントアドレス算出サブルーチンを実行する(ステップS6)。すなわち、CPU10は、対象のカウントデータを保持する複数のカウントアドレス(管理カウントアドレス群)のうち、規則性が連続的に成立しているカウントアドレスの組(以下「連続カウントアドレス群」とも称す。)を特定する。なお、図6に示す例では、感光体カウンタ1〜7が「管理カウントアドレス群」に相当する。また、管理カウントアドレス群に含まれるカウントアドレスの総数を“管理カウントアドレス数N”とする。
【0098】
この連続カウントアドレス算出サブルーチンの詳細については、図10を参照して後述する。
【0099】
続いて、CPU10は、異常判定サブルーチンを実行する(ステップS8)。すなわち、CPU10は、連続カウントアドレス算出サブルーチンの実行結果に基づいて、対象のカウントデータに異常があるか否かを判断する。この異常判定サブルーチンの詳細については、図11を参照して後述する。
【0100】
そして、CPU10は、異常判定サブルーチンの実行結果に基づいて、対象のカウントデータに異常が発生しているか否かを判断する(ステップS10)。対象のカウントデータに異常が発生していない場合(ステップS10においてNOの場合)には、処理は終了する。
【0101】
これに対して、対象のカウントデータに異常が発生している場合(ステップS10においてYESの場合)には、ステップS12以下の修復処理が実行される。すなわち、まず、CPU10は、ステップS6において実行された連続カウントアドレス算出サブルーチンによって、管理カウントアドレス群から規則性が連続的に成立している2個以上のカウントアドレスである、連続カウントアドレス群が抽出されたか否かを判断する(ステップS12)。
【0102】
連続カウントアドレス群が抽出された場合(ステップS12においてYESの場合)には、CPU10は、過半数算出サブルーチンを実行し、管理カウントアドレス数についての過半数の値を算出する(ステップS14)。この過半数算出サブルーチンの詳細については、図12を参照して後述する。
【0103】
続いて、CPU10は、異常特定サブルーチンを実行して、管理カウントアドレス群で異常になっているカウントアドレスを特定する(ステップS16)。この異常特定サブルーチンの詳細については、図13を参照して後述する。
【0104】
続いて、CPU10は、ステップS14において実行された過半数算出サブルーチンによって算出された管理カウントアドレス数についての過半数の値と、ステップS16において実行された異常特定サブルーチンによって特定された異常になっているカウントアドレスの数とを比較する。そして、CPU10は、異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっているか否かを判断する(ステップS18)。すなわち、CPU10は、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが管理カウントアドレス数の過半数未満であるか否かを判断する。このステップS18においては、管理カウントアドレス群に含まれるカウントアドレスの過半数以上において異常が発生している場合には、異常が発生していない、すなわち正常なカウントアドレスとの判断についての信頼性が低いと考えられるので、別の処理で再度評価するか、あるいは、修復処理を断念するかを判断する。
【0105】
異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっていない場合(ステップS18においてNOの場合)には、CPU10は、修復サブルーチンを実行し、異常となっているカウントアドレスに記憶されているカウントデータを修復する(ステップS20)。すなわち、CPU10は、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に、カウントデータを修復する。
【0106】
これに対して、異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっている場合(ステップS18においてYESの場合)には、CPU10は、ステップS6において実行された連続カウントアドレス算出サブルーチンによって、別の連続カウントアドレス群が抽出されているか否かを判断する(ステップS22)。
【0107】
別の連続カウントアドレス群が抽出されている場合(ステップS22においてYESの場合)には、ステップS16以下の処理が再度実行される。すなわち、CPU10は、別の連続カウントアドレス群を基準にして、管理カウントアドレス群に含まれる各カウントアドレスを再評価する。
【0108】
すなわち、CPU10は、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する。そして、CPU10は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを再度特定する。
【0109】
これに対して、連続カウントアドレス群が抽出されていない場合(ステップS12においてNOの場合)、または、別の連続カウントアドレス群が抽出されていない場合(ステップS22においてNOの場合)には、CPU10は、異常となっているカウントデータの修復が不可能と判断する。そのため、CPU10は、エラー通知を行なった上で、処理を終了する(ステップS24)。
【0110】
なお、図8に示すステップS2およびS4に示すカウント動作と、ステップS6〜S24に示す異常検出および修復動作とは、互いに独立したタイミングで実行してもよい。
【0111】
<カウント動作サブルーチン>
図9は、図8に示すカウント動作サブルーチン(ステップS4)の処理手順を示すフローチャートである。図9を参照して、CPU10は、まず、管理カウントアドレス群の各カウントアドレスに保持されているカウントデータを読み出す(ステップS100)。続いて、CPU10は、読み出したカウントデータのうち、最もその値が大きいものおよび最もその値が小さいものを特定する(ステップS102)。さらに、CPU10は、カウント動作が「カウントアップ」および「カウントダウン」のいずれであるかを判断する(ステップS104)。
【0112】
カウント動作が「カウントアップ」である場合(ステップS104において「カウントアップ」の場合)には、最も値が小さいカウントデータを保持するカウントアドレスを、最も大きなカウントデータの値に“カウント単位α”を加算した値に書き換える(ステップS106)。そして、処理はリターンする。
【0113】
一方、カウント動作が「カウントダウン」である場合(ステップS104において「カウントダウン」の場合)には、最も値が大きいカウントデータを保持するカウントアドレスを、最も小さなカウントデータの値に“カウント単位α”を減算した値に書き換える(ステップS108)。そして、処理はリターンする。
【0114】
すなわち、CPU10は、連続的なアドレス番号が割当てられている複数のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位αずつ書き込み毎に変化するカウントデータを、当該複数のカウントアドレスに対して循環的に書き込む。
【0115】
<連続カウントアドレス算出サブルーチン>
図10は、図8に示す連続カウントアドレス算出サブルーチン(ステップS6)の処理手順を示すフローチャートである。図10を参照して、CPU10は、管理カウントアドレス群のうち、1番目のカウントアドレスを注目カウントアドレスに設定する(ステップS200)。より具体的には、図5および図6に示すメモリマップにおける「感光体カウンタ1」を注目カウントアドレスに設定する。
【0116】
このとき、CPU10は、規則性チェック回数をゼロクリアする。そして、CPU10は、設定した注目カウントアドレスのカウントデータを読み出す(ステップS202)。
【0117】
続いて、CPU10は、以下に示すステップS204〜S224の処理を実行することで、管理カウントアドレス群の各カウントアドレスに保持されているカウントデータの規則性を評価する。
【0118】
より具体的には、まず、CPU10は、現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されているか否かを判断する(ステップS204)。すなわち、管理カウントアドレス群のうち、N番目のカウントアドレスが注目カウントアドレスに設定されているか否かを判断する。
【0119】
現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されている場合(ステップS204においてYESの場合)には、CPU10は、注目カウントアドレスを“−(N−1)”だけシフトする(ステップS206)。すなわち、CPU10は、現在の注目カウントアドレスが管理カウントアドレス群のN番目のカウントアドレスである場合には、当該注目カウントアドレスを管理カウントアドレス群の1番目のアドレス番号に変更する。これは、カウントデータを循環的に書き込むことに起因して、管理カウントアドレス群においては、最後のカウントアドレスに最初のカウントアドレスが隣接していることとみなすことができるからである。そして、処理はステップS210へ進む。
【0120】
これに対して、現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されていない場合(ステップS204においてNOの場合)には、CPU10は、注目カウントアドレスを“1”だけシフトする(ステップS208)。すなわち、CPU10は、現在の注目カウントアドレスを次に位置するカウントアドレスに変更する。そして、処理はステップS210へ進む。
【0121】
続いて、CPU10は、注目カウントアドレスに保持されているカウントデータを読み出す(ステップS210)。そして、CPU10は、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)を算出する(ステップS212)。すなわち、CPU10は、上述のステップS206またはS208におけるシフト処理によって、注目カウントアドレスが変更されたことに伴って、発生したカウントデータの差を取得する。
【0122】
そして、CPU10は、ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致するか否かを判断する(ステップS214)。
【0123】
さらに、ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致しない場合(ステップS214においてNOの場合)には、CPU10は、ステップS212において算出したカウントデータの差分がカウント単位αと一致するか否かを判断する(ステップS216)。
【0124】
ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致する場合(ステップS214においてYESの場合)、または、ステップS212において算出したカウントデータの差分がカウント単位αと一致する場合(ステップS216においてYESの場合)には、「規則性あり」と判断する(ステップS218)。
【0125】
これに対して、ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致しない場合(ステップS214においてNOの場合)で、かつステップS212において算出したカウントデータの差分がカウント単位αと一致しない場合(ステップS216においてNOの場合)には、「規則性なし」と判断する(ステップS220)。
【0126】
ステップS218またはステップS220の実行後、CPU10は、規則性チェック回数をインクリメントする(ステップS222)。そして、CPU10は、ステップS218において「規則性あり」と判断されたか否かを判断する(ステップS224)。
【0127】
ステップS218において「規則性あり」と判断された場合(ステップS224においてYESの場合)には、ステップS204以下の処理が再度実行される。
【0128】
これに対して、ステップS218において「規則性あり」と判断されなかった場合、すなわち、ステップS220において「規則性なし」と判断された場合(ステップS224においてNOの場合)には、CPU10は、ステップS222においてインクリメントされた後の規則性チェック回数が管理カウントアドレス数Nを超えているか否かを判断する(ステップS226)。すなわち、CPU10は、管理カウントアドレス群のすべてについて規則性の評価を行なったか否かを判断する。
【0129】
規則性チェック回数が管理カウントアドレス数Nを超えていない場合(ステップS226においてNOの場合)には、ステップS204以下の処理が再度実行される。すなわち、管理カウントアドレス群に含まれるカウントアドレスのうち、規則性の評価が行なわれていないカウントアドレスが存在する場合には、ステップS204以下の処理が繰返される。
【0130】
これに対して、規則性チェック回数が管理カウントアドレス数Nを超えている場合(ステップS226においてYESの場合)には、CPU10は、管理カウントアドレス群のうち、2個以上の連続したカウントアドレスについて「規則性あり」と判断されたか否かを判断する(ステップS228)。
【0131】
2個以上の連続したカウントアドレスについて「規則性あり」と判断されたものがなかった場合(ステップS228においてNOの場合)には、管理カウントアドレス群に連続カウントアドレス群が存在しないと判断する(ステップS230)。そして、図8のステップS8へリターンする。
【0132】
これに対して、2個以上の連続したカウントアドレスについて「規則性あり」と判断された場合(ステップS228においてYESの場合)には、「規則性あり」と判断された2個以上の連続したカウントアドレスが2組以上存在するか否かを判断する(ステップS232)。
【0133】
「規則性あり」と判断された2個以上の連続したカウントアドレスが1組だけしか存在しない場合(ステップS232においてNOの場合)には、以後の処理は実行されず、図8のステップS8へリターンする。
【0134】
これに対して、「規則性あり」と判断された2個以上の連続したカウントアドレスが2組以上存在すると判断された場合(ステップS232においてYESの場合)には、CPU10は、「規則性あり」と判断された2個以上の連続したカウントアドレスの各組について、その中に含まれるカウントアドレスの数を取得する(ステップS234)。そして、CPU10は、連続したカウントアドレスの最長値を算出するとともに、当該連続したカウントアドレスの最長値を有する組が複数存在するか否かを判断する(ステップS236)。
【0135】
連続したカウントアドレスの最長値を有する組が1つしか存在しない場合(ステップS236においてNOの場合)には、CPU10は、当該連続したカウントアドレスの最長値を有する組に含まれるカウントアドレスを、連続カウントアドレス群に決定する(ステップS238)。
【0136】
これに対して、連続したカウントアドレスの最長値を有する組が複数存在する場合(ステップS236においてYESの場合)には、CPU10は、以下に示すような方法で、連続カウントアドレス群を決定する(ステップS240)。すなわち、CPU10は、(a)適用先のカウント動作が「カウントアップ」である場合には、当該連続したカウントアドレスの最長値を有する各組に含まれるカウントアドレスのうち、そのカウントアドレスの最大値が最も大きい組を連続カウントアドレス群に決定し、(b)適用先のカウント動作が「カウントダウン」である場合には、当該連続したカウントアドレスの最長値を有する各組に含まれるカウントアドレスのうち、そのカウントアドレスの最小値が最も小さい組を連続カウントアドレス群に決定する。そして、図8のステップS8へリターンする。
【0137】
上述のように決定された「連続カウントアドレス群」は、管理カウントアドレス群に含まれるカウントアドレスにおける異常の有無を判断するための基準となるものである。これは、管理カウントアドレス群において生じるデータ破壊が「局所的」に発生すると想定し、管理カウントアドレス群の多くは正常にデータを保持しているとする技術思想に基づくものである。また、複数の連続カウントアドレス群の候補となる組が複数抽出された場合には、ステップS234〜S240に示すような処理を行なうことで、より信頼性の高い組を抽出する。
【0138】
すなわち、CPU10は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する。
【0139】
このとき、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、CPU10は、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定する。
【0140】
さらに、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときには、以下のような処理によって連続カウントアドレス群を特定する。すなわち、CPU10は、カウントデータをカウント単位αずつ増加させる書き込み(カウントアップ動作)が行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定する。また、CPU10は、カウントデータをカウント単位αずつ減少させる書き込み(カウントダウン動作)が行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定する。
【0141】
<異常判定サブルーチン>
図11は、図8に示す異常判定サブルーチンの処理手順を示すフローチャートである。図11を参照して、CPU10は、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性あり」と判断されたか否かを判断する(ステップS300)。
【0142】
管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性あり」と判断された場合(ステップS300においてYESの場合)には、CPU10は、対象の管理カウントアドレス群について「異常なし」と判断する(ステップS302)。
【0143】
これに対して、管理カウントアドレス群に含まれるいずれかのカウントアドレスにおいて「規則性なし」と判断された場合(ステップS300においてNOの場合)には、CPU10は、対象の管理カウントアドレス群について「異常あり」と判断する(ステップS304)。
【0144】
そして、図8のステップS10へリターンする。
すなわち、CPU10は、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する。言い換えれば、CPU10は、連続カウントアドレス群に含まれるカウントアドレスの数と管理カウントアドレス群に含まれるカウントアドレスの数とが同一でなければ、カウントデータに異常が発生していると判断する。
【0145】
<過半数算出サブルーチン>
図12は、図8に示す過半数算出サブルーチンの処理手順を示すフローチャートである。図12を参照して、CPU10は、管理カウントアドレス数Nを取得する(ステップS400)。続いて、CPU10は、“N/2+1”(小数切捨て)を過半数(整数値)として算出する(S402)。そして、図8のステップS12へリターンする。
【0146】
このように、CPU10は、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する。
【0147】
<異常特定サブルーチン>
図13は、図8に示す異常特定サブルーチンの処理手順を示すフローチャートである。図13を参照して、CPU10は、(管理カウントアドレス数N)−(連続カウントアドレス群に含まれるカウントアドレスの総数)を比較回数Iとして算出する(ステップS500)。そして、CPU10は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを比較元カウントアドレスとして設定するとともに、比較元カウントアドレスを初期の比較先カウントアドレスとして設定する(ステップS502)。
【0148】
続いて、CPU10は、比較先カウントアドレスが管理カウントアドレス群のうち最後のアドレス番号が設定されているか否かを判断する(ステップS504)。すなわち、管理カウントアドレス群のうち、N番目のカウントアドレスが比較先カウントアドレスに設定されているか否かを判断する。
【0149】
比較先カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されている場合(ステップS504においてYESの場合)には、CPU10は、比較先カウントアドレスを“−(N−1)”だけシフトする(ステップS506)。すなわち、CPU10は、比較先カウントアドレスが管理カウントアドレス群のN番目のカウントアドレスである場合には、当該比較先カウントアドレスを管理カウントアドレス群の1番目のカウントアドレスに変更する。これは、カウントデータを循環的に書き込むことに起因して、管理カウントアドレス群においては、最後のカウントアドレスに最初のカウントアドレスが隣接していることとみなすことができるからである。そして、処理はステップS510へ進む。
【0150】
これに対して、比較先カウントアドレスとして管理カウントアドレス群のうち最後のカウントアドレスが設定されていない場合(ステップS504においてNOの場合)には、CPU10は、比較先カウントアドレスを“1”だけシフトする(ステップ508)。すなわち、CPU10は、現在の比較先カウントアドレスを次に位置するカウントアドレスに変更する。そして、処理はステップS510へ進む。
【0151】
続いて、CPU10は、比較先カウントアドレスのアドレス番号と比較元カウントアドレスのアドレス番号との間の絶対値差分AG、ならびに、比較先カウントアドレスに保持されているカウントデータと比較元カウントアドレスに保持されているカウントデータとの間の絶対値差分DGを算出する(ステップS510)。
【0152】
その後、CPU10は、絶対値差分DG=カウント単位α×絶対値差分AGが成立するか否かを判断する(ステップS512)。
【0153】
絶対値差分DG=カウント単位α×絶対値差分AGが成立しない場合(ステップS512においてNOの場合)には、CPU10は、絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)が成立するか否かを判断する(ステップS514)。
【0154】
すなわち、ステップS512およびS514において、CPU10は、隣接するカウントアドレスが保持するカウントデータの間にカウントデータの循環的な書き込みに伴う規則性が存在するか否かが判断される。
【0155】
絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)が成立しない場合(ステップS514においてNOの場合)には、CPU10は、現在の比較先カウントアドレスを異常カウントアドレスとして記憶する(ステップS516)。
【0156】
ステップS516の実行後、または、絶対値差分DG=カウント単位α×絶対値差分AGが成立する場合(ステップS512においてYESの場合)、あるいは、絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)が成立する場合(ステップS514においてYESの場合)には、CPU10は、比較元カウントアドレスと比較先カウントアドレスとの間の比較が比較回数I回だけ実行済であるか否かを判断する(ステップS518)。すなわち、管理カウントアドレス群のうち、連続カウントアドレス群には含まれないカウントアドレスのすべてについて比較が完了しているか否かが判断される。
【0157】
比較元カウントアドレスと比較先カウントアドレスとの間の比較の実行済回数が比較回数I回まで到達していない場合(ステップS518においてNOの場合)には、ステップS504以下の処理が再度実行される。
【0158】
これに対して、比較元カウントアドレスと比較先カウントアドレスとの間の比較が比較回数I回だけ実行済である場合(ステップS518においてNOの場合)には、処理は、図8のステップS12へリターンする。
【0159】
上述のように、CPU10は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する。すなわち、CPU10は、基準とされたカウントアドレス(比較元カウントアドレス)が有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレス(比較先カウントアドレス)が有するカウントデータとの間の差分の絶対値(絶対値差分DG)が以下のいずれかの値と一致するか否かを判断する。
【0160】
(a)両カウントアドレスの間のアドレス番号についての差分の絶対値(絶対値差分AG)にカウント単位αを乗じた値
(b)管理カウントアドレス群に含まれるカウントアドレスの総数(管理カウントアドレス数N)から両カウントアドレスの間のアドレス番号についての差分の絶対値(絶対値差分AG)を減算して得られた値にカウント単位αを乗じた値
そして、CPU10は、絶対値差分DGがいずれの値とも一致しない場合に、比較先カウントアドレスを異常カウントアドレスとして特定する。
【0161】
<修復サブルーチン>
図14は、図8に示す修復サブルーチンの処理手順を示すフローチャートである。図14を参照して、本実施の形態に従うデータカウント方法においては、管理カウントアドレス群のうち異常カウントアドレス以外のカウントアドレスから選択される基準値カウントアドレス(最大値もしくは最小値)、および、カウント動作(カウントダウンもしくはカウントアップ)に応じて、4通りの異常修復処理が選択的に実行される。
【0162】
より具体的には、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントアップであるか否かを判断する(ステップS600)。
【0163】
ステップS600においてYESの場合には、CPU10は、第1異常修復処理サブルーチンを実行する(ステップS602)。
【0164】
ステップS600においてNOの場合には、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントダウンであるか否かを判断する(ステップS604)。
【0165】
ステップS604においてYESの場合には、CPU10は、第2異常修復処理サブルーチンを実行する(ステップS606)。
【0166】
ステップS604においてNOの場合には、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントアップであるか否かを判断する(ステップS608)。
【0167】
ステップS608においてYESの場合には、CPU10は、第3異常修復処理サブルーチンを実行する(ステップS610)。
【0168】
ステップS608においてNOの場合には、CPU10は、第4異常修復処理サブルーチンを実行する(ステップS612)。
【0169】
以上のように、CPU10は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを規則性に基づいて修復する。
【0170】
<第1異常修復サブルーチン>
図15は、図14に示す第1異常修復サブルーチンの処理手順を示すフローチャートである。図15を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700A)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0171】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0172】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最大値−絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS706A)。
【0173】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS708A)。
【0174】
ステップS706AまたはS708Aの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0175】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0176】
<第2異常修復サブルーチン>
図16は、図14に示す第2異常修復サブルーチンの処理手順を示すフローチャートである。図16を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700A)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0177】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0178】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS706B)。
【0179】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS708B)。
【0180】
ステップS706BまたはS708Bの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0181】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0182】
<第3異常修復サブルーチン>
図17は、図14に示す第3異常修復サブルーチンの処理手順を示すフローチャートである。図17を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700B)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0183】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0184】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最小値+(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS706C)。
【0185】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最小値+絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS708C)。
【0186】
ステップS706CまたはS708Cの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0187】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0188】
<第4異常修復サブルーチン>
図18は、図14に示す第4異常修復サブルーチンの処理手順を示すフローチャートである。図18を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700B)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0189】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0190】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントカウントアドレスのカウントデータを(管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最小値+絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS706D)。
【0191】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最小値+(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS708D)。
【0192】
ステップS706DまたはS708Dの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0193】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0194】
<修復サブルーチンについてのまとめ>
上述の図15〜図18に示すように、CPU10は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定し(ステップS700A,S700B)、基準値カウントアドレスと異常カウントアドレスとの関係に基づいて、異常カウントアドレスの有するカウントデータを修復する(ステップS706A,S708A,S706B,S708B,S706C,S708C,S706D,S708D)。
【0195】
より具体的には、図15および図16のステップS700Aとして示すように、CPU10は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定する。
【0196】
代替的に、図17および図18のステップS700Bとして示すように、CPU10は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定する。
【0197】
さらに、カウントデータの修復の具体的な処理内容としては、状況に応じて、以下に示す4つの方法のうち、いずれかが採用される。
【0198】
第1の方法は、カウントデータをカウント単位ずつ増加させる書き込み(カウントアップ動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更する。
【0199】
ここで、Dは、基準値カウントアドレスのカウントデータであり、Nは、管理カウントアドレス群に含まれるカウントアドレスの総数であり、RAGは、基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値であり、αは、カウント単位である。
【0200】
第2の方法は、カウントデータをカウント単位ずつ減少させる書き込み(カウントダウン動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更する。
【0201】
第3の方法は、カウントデータをカウント単位ずつ増加させる書き込み(カウントアップ動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更する。
【0202】
第4の方法は、カウントデータをカウント単位ずつ減少させる書き込み(カウントダウン動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更する。
【0203】
<変形例>
図19は、この発明の実施の形態の変形例1に従うデータカウント方法の全体処理手順を示すフローチャートである。図20は、この発明の実施の形態の変形例2に従うデータカウント方法の全体処理手順を示すフローチャートである。
【0204】
上述の実施の形態においては、カウントイベントが発生すると、その都度、記憶モジュールにアクセスして現在のカウントデータを読み出し、読み出されたカウントデータに対してカウントアップまたはカウントダウンを行ない、それとともに、異常判定および必要な修復を行なう処理例を例示した(図8におけるステップS2〜S8)。
【0205】
このような処理例に代えて、カウントイベントの発生とは独立したタイミングで、異常判定および必要な修復を行なうようにしてもよい。
【0206】
たとえば、図19に示すように、画像形成装置の電源をオンにしたタイミングで図8のステップS8以下と同様の処理を実行するようにしてもよい。カウントデータの異常は、記憶モジュール46へのカウントデータの書き込み動作中に画像形成装置の電源がオフされた場合に発生し易いので、電源をオンにしたときに異常判定を行なうことで、効率的に異常を発見して修復することができる。
【0207】
なお、図8のフローチャートに示す処理および図19のフローチャートに示す処理の両方を並列的に実行するようにしてもよい。
【0208】
さらに別の形態として、画像形成装置の電源をオンにしたタイミングで、記憶モジュール46からカウントデータを読み出してRAM14へ書き込み、それ以降はRAM14に保持されているカウントデータを用いるようにしてもよい。この場合には、図20に示すように、記憶モジュール46からカウントデータを読み出してRAM14へ書き込んだ場合(ステップS30)に、図8のステップS8以下と同様の処理を実行するようにしてもよい。
【0209】
その後、カウントデータが発生する都度、すなわち、カウントアップまたはカウントダウンが行なわれる都度、カウント値が記憶モジュール46へ書き込まれる。
【0210】
なお、カウント値の記憶モジュール46への書き込みは、カウント動作が所定回数実行される毎、所定数のジョブが実行される毎、電源をオフにするための操作が行われたとき、などの適切なタイミングで行なうことができる。
【0211】
<適用例1>
以下、本実施の形態に従うデータカウント方法を具体的な事例に適用した場合の動作について例示する。
【0212】
図21は、この発明の実施の形態に従うデータカウント方法の適用例1を説明するための図である。
【0213】
適用例1に係るメモリに格納されているカウントデータ例を図21(a)に示す。この図21(a)には、管理カウントアドレス数N=7、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図21(a)に示す例では、アドレス[3],[5],[7]の3つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0214】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図21(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS218などの処理に従って、アドレス[1]および[2]の2つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス[1]のカウントデータおよびアドレス[2]の計2つのカウントアドレスのみについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0215】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0216】
さらに、アドレス[1]および[2]の2つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0217】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図21(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図21(c)には、連続カウントアドレス群であるアドレス[1]および[2]の2つのカウントアドレスのうち、アドレス[2]を比較元カウントアドレスに設定した場合の例を示す。この図21(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[3],[5],[7]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0218】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“3”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0219】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例1では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0220】
このとき、基準値カウントアドレスは、アドレス[6]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図21(d)に示すようになる。
【0221】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[3]については、図15のステップS706Aの処理が実行され、カウントデータ“14”が“26”へ修復される。また、アドレス[5]については、図15のステップS706Aの処理が実行され、カウントデータ“16”が“28”へ修復される。また、アドレス[7]については、図15のステップS708Aの処理が実行され、カウントデータ“18”が“23”へ修復される。
【0222】
<適用例2>
図22は、この発明の実施の形態に従うデータカウント方法の適用例2を説明するための図である。
【0223】
適用例2に係るメモリに格納されているカウントデータ例を図22(a)に示す。この図22(a)には、管理カウントアドレス数N=7、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図22(a)に示す例では、アドレス[2],[4],[6]の3つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0224】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図22(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS216などの処理に従って、アドレス[1]および[7]の2つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス[1]のカウントデータおよびアドレス[7]の計2つのカウントアドレスのみについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0225】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0226】
さらに、アドレス[1]および[7]の2つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0227】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図22(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図22(c)には、連続カウントアドレス群であるアドレス[1]および[7]の2つのカウントアドレスのうち、アドレス[1]を比較元カウントアドレスに設定した場合の例を示す。この図22(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[2],[4],[6]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0228】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“3”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0229】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例2では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0230】
このとき、基準値カウントアドレスは、アドレス[7]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図22(d)に示すようになる。
【0231】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[2]については、図15のステップS706Aの処理が実行され、カウントデータ“15”が“38”へ修復される。また、アドレス[4]については、図15のステップS706Aの処理が実行され、カウントデータ“17”が“40”へ修復される。また、アドレス[6]については、図15のステップS706Aの処理が実行され、カウントデータ“19”が“42”へ修復される。
【0232】
<適用例3>
図23は、この発明の実施の形態に従うデータカウント方法の適用例3を説明するための図である。
【0233】
適用例3に係るメモリに格納されているカウントデータ例を図23(a)に示す。この図23(a)には、管理カウントアドレス数N=7、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図23(a)に示す例では、アドレス[1],[2],[4]の3つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0234】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図23(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS216などの処理に従って、アドレス[1]および[2]の2つのカウントアドレス、ならびに、アドレス[5],[6]および[7]の3つのカウントアドレスがそれぞれ「連続カウントアドレス群」として決定される。言い換えれば、アドレス[1],[2],[5],[6],[7]のカウントデータの計5つのカウントアドレスについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0235】
さらに、図10のステップS238に示す処理によって、連続したアドレスの最長値を有する組に含まれるカウントアドレスが連続カウントアドレス群に決定される。この場合には、より長く連続している、アドレス[5],[6]および[7]の3つのカウントアドレスが「連続カウントアドレス群」として採用される。
【0236】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0237】
さらに、アドレス[5],[6]および[7]の3つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0238】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図23(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図23(c)には、連続カウントアドレス群であるアドレス[5],[6]および[7]の3つのカウントアドレスのうち、アドレス[7]を比較元カウントアドレスに設定した場合の例を示す。この図23(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[1],[2],[4]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0239】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“3”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0240】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例3では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0241】
このとき、基準値カウントアドレスは、アドレス[3]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図23(d)に示すようになる。
【0242】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[1]については、図15のステップS706Aの処理が実行され、カウントデータ“41”が“49”へ修復される。また、アドレス[2]については、図15のステップS706Aの処理が実行され、カウントデータ“42”が“50”へ修復される。また、アドレス[4]については、図15のステップS708Aの処理が実行され、カウントデータ“44”が“45”へ修復される。
【0243】
<適用例4>
図24は、この発明の実施の形態に従うデータカウント方法の適用例4を説明するための図である。
【0244】
適用例4に係るメモリに格納されているカウントデータ例を図24(a)に示す。この図24(a)には、管理カウントアドレス数N=6、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図24(a)に示す例では、アドレス[2]および[6]の2つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0245】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図24(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS216などの処理に従って、アドレス[3],[4]および[5]の3つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス[3],[4]および[5]のカウントデータについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0246】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0247】
さらに、アドレス[3],[4]および[5]の3つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0248】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図24(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図24(c)には、連続カウントアドレス群であるアドレス[3],[4]および[5]の3つのカウントアドレスのうち、アドレス[5]を比較元カウントアドレスに設定した場合の例を示す。この図24(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[2]および[6]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0249】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“2”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0250】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例4では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0251】
このとき、基準値カウントアドレスは、アドレス[5]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図24(d)に示すようになる。
【0252】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[2]については、図15のステップS706Aの処理が実行され、カウントデータ“31”が“16”へ修復される。また、アドレス[6]については、図15のステップS708Aの処理が実行され、カウントデータ“356”が“14”へ修復される。
【0253】
<作用効果>
本実施の形態によれば、カウントアドレスの単位でカウント可能な範囲を自在に設定できるので、自由度が高く、かつ、メモリの使用効率を高めることができる。さらに、2つ以上のカウントアドレスにデータ破壊などが生じた場合であっても、より効率的にデータ破壊が生じているカウントアドレスを特定し、さらに、それらを修復することができる。そのため、より信頼性の高いカウント動作を提供できる。
【0254】
[その他の実施の形態]
上述の実施の形態において説明したような制御を実行させるプログラムを任意の方法で提供することもできる。このようなプログラムは、フレキシブルディスク、CD−ROM(Compact Disk-Read Only Memory)、ROM(Read Only Memory)、RAM(Random Access Memory)およびメモリカードなどのコンピュータ読取り可能な記録媒体に記録させた状態で提供することもできる。あるいは、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【0255】
このようなプログラムは、コンピュータのオペレーティングシステム(OS)の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずOSと協働して処理が実行される。このようなモジュールを含まないプログラムも、本実施の形態に従うプログラムに含まれ得る。
【0256】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0257】
10 CPU、12 ROM、14 RAM、16 内部バス、18 通信I/F、20 入出力I/O、31,32,…,3N, コネクタ、40 感光体ユニット、42 感光体、44 トナー供給孔、46 記憶モジュール、48 メモリ、50 トナーユニット、60 カセット、70 プリントエンジン、100 制御部、102 カウントモジュール、104 連続カウントアドレス特定モジュール、106 異常検出モジュール、108 異常特定モジュール、110 修復モジュール、112 入出力モジュール、AG 絶対値差分、DG 絶対値差分、MFP 画像形成装置、RAG 絶対値差分、α カウント単位。
【技術分野】
【0001】
本発明は、書き換え回数の制限のあるメモリを用いたデータカウント方法およびその方法を提供する画像形成装置に関する。
【背景技術】
【0002】
従来から不揮発性の記憶媒体として、EEPROM(Electrically Erasable and Programmable Read Only Memory)などの半導体デバイスが使用されている。このような半導体記憶デバイスは、その電気的な状態を利用してデータを保持する。典型的には、1ビットのデータを保持する単位素子について、その電荷の有無などに対応付けて、“0”値または“1”値を記憶する。
【0003】
したがって、データを書き換える際には、内部的な電荷の移動が生じることになる。その結果、このような半導体記憶では電気的な寿命が存在することになる。たとえば、一般的なEEPROMは、データ書き換え可能な回数(制限値)は、最大で約100万回とされている。
【0004】
そのため、100万回以上の値をカウントする必要がある用途では、これらの書き換え回数の制限値を超えないように、複数の記憶領域(カウントアドレス)を利用する構成が知られている。また、万が一、データの破壊が生じた場合であっても、その破壊を修復する技術も知られている。
【0005】
たとえば、特開平7−78232号公報(特許文献1)には、誤カウントを検出し、これを正しい値に補正するカウンタが開示されている。このカウンタは、互いに連続する値の初期値が設定された複数のサブカウンタと、カウントアップ時に、上記複数のサブカウンタの持つ値のうち、最大の値と、2番目に大きな値とが連続しているか否かを判断する判断手段と、上記判断手段により、最大の値と、2番目に大きな値とが連続していないと判断された場合、最小の値を持つサブカウンタの値を、2番目に大きな値に2を加えた値に書き換え、書き換えられた値をカウント値とし、また、最大の値と、2番目に大きな値とが連続していると判断された場合、最小の値を持つサブカウンタの値を、最大の値に1を加えた値に書き換え、書き換えられた値をカウント値とする制御手段とを有する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開平7−78232号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、上述の特開平7−78232号公報(特許文献1)では、サブカウンタにおいて規則性が成立しているかを判断することで誤カウントを検出しているが、より多くの記憶領域(カウントアドレス)を用いてカウントを行なうようにした場合に、複数のカウントアドレスの値が飛び飛びに破壊されてしまうと、誤カウントを適切に検出できないという課題があった。また、このような場合には、その破壊を修復することもできない。
【0008】
本発明は、上記のような問題を解決するためになされたものであって、複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できるデータカウント方法および画像形成装置を提供することである。
【課題を解決するための手段】
【0009】
この発明のある局面に従えば、書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なうためのデータカウント方法を提供する。カウント動作においては、連続的なアドレス番号が割当てられている3個以上のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上のカウントアドレスに対して循環的に書き込む。本データカウント方法は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとを含む。
【0010】
好ましくは、連続カウントアドレス群を特定するステップは、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定するステップを含む。
【0011】
さらに好ましくは、連続カウントアドレス群を特定するステップは、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、カウントデータをカウント単位ずつ増加させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定するステップと、カウントデータをカウント単位ずつ減少させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定するステップとをさらに含む。
【0012】
好ましくは、異常カウントアドレスを特定するステップは、基準とされたカウントアドレスが有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレスが有するカウントデータとの間の差分の絶対値が、(a)両カウントアドレスの間のアドレス番号についての差分の絶対値にカウント単位を乗じた値、または、(b)管理カウントアドレス群に含まれるカウントアドレスの総数から両カウントアドレスの間のアドレス番号についての差分の絶対値を減算して得られた値にカウント単位を乗じた値、のいずれかの値と一致するか否かを判断するステップを含む。異常カウントアドレスを特定するステップは、さらに、いずれの値とも一致しない場合に、当該判断対象となるカウントアドレスを異常カウントアドレスとして特定するステップと含む。
【0013】
好ましくは、本データカウント方法は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復するステップをさらに含む。
【0014】
さらに好ましくは、本データカウント方法は、さらに、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出するステップと、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが過半数未満であるか否かを判断するステップを含む。修復するステップは、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に実行される。
【0015】
さらに好ましくは、本データカウント方法は、さらに、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断するステップと、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを特定するステップを再度実行させるステップとを含む。
【0016】
好ましくは、修復するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定するステップと、基準値カウントアドレスと異常カウントアドレスとの関係に基づいて、異常カウントアドレスの有するカウントデータを修復するステップとを含む。
【0017】
さらに好ましくは、基準値カウントアドレスに設定するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定するステップを含む。
【0018】
あるいは、さらに好ましくは、基準値カウントアドレスに設定するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定するステップを含む。
【0019】
好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更する。ここで、基準値カウントアドレスのカウントデータをDとし、管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、カウント単位をαとしている。
【0020】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更する。
【0021】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更する。
【0022】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更する。
【0023】
この発明の別の局面に従えば、書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なう画像形成装置を提供する。本画像形成装置は、連続的なアドレス番号が割当てられている3個以上のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上のカウントアドレスに対して循環的に書き込む手段と、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する手段と、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する手段と、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する手段とを含む。
【0024】
好ましくは、連続カウントアドレス群を特定する手段は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定する。
【0025】
さらに好ましくは、連続カウントアドレス群を特定する手段は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、書き込む手段がカウントデータをカウント単位ずつ増加させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定し、書き込む手段がカウントデータをカウント単位ずつ減少させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定する。
【0026】
好ましくは、本画像形成装置は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復する手段をさらに含む。
【0027】
さらに好ましくは、本画像形成装置は、さらに、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する手段と、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが過半数未満であるか否かを判断する手段とを含む。修復する手段は、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に処理を実行する。
【0028】
さらに好ましくは、本画像形成装置は、さらに、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する手段と、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを特定する手段に再度処理を実行させる手段とを含む。
【発明の効果】
【0029】
本発明によれば、複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できる。
【図面の簡単な説明】
【0030】
【図1】この発明の実施の形態に従う画像形成装置の外観を示す図である。
【図2】この発明の実施の形態に従う画像形成装置の電気的構成の概要を示す図である。
【図3】この発明に関連するデータカウント方法におけるメモリマップの一例を示す図である。
【図4】この発明に関連するデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【図5】この発明の実施の形態に従うデータカウント方法におけるメモリマップの一例を示す図である。
【図6】この発明の実施の形態に従うデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【図7】図1に示す制御部における制御構造を示す模式図である。
【図8】この発明の実施の形態に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図9】図8に示すカウント動作サブルーチンの処理手順を示すフローチャートである。
【図10】図8に示す連続カウントアドレス算出サブルーチンの処理手順を示すフローチャートである。
【図11】図8に示す異常判定サブルーチンの処理手順を示すフローチャートである。
【図12】図8に示す過半数算出サブルーチンの処理手順を示すフローチャートである。
【図13】図8に示す異常特定サブルーチンの処理手順を示すフローチャートである。
【図14】図8に示す修復サブルーチンの処理手順を示すフローチャートである。
【図15】図14に示す第1異常修復サブルーチンの処理手順を示すフローチャートである。
【図16】図14に示す第2異常修復サブルーチンの処理手順を示すフローチャートである。
【図17】図14に示す第3異常修復サブルーチンの処理手順を示すフローチャートである。
【図18】図14に示す第4異常修復サブルーチンの処理手順を示すフローチャートである。
【図19】この発明の実施の形態の変形例1に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図20】この発明の実施の形態の変形例2に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図21】この発明の実施の形態に従うデータカウント方法の適用例1を説明するための図である。
【図22】この発明の実施の形態に従うデータカウント方法の適用例2を説明するための図である。
【図23】この発明の実施の形態に従うデータカウント方法の適用例3を説明するための図である。
【図24】この発明の実施の形態に従うデータカウント方法の適用例4を説明するための図である。
【発明を実施するための形態】
【0031】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【0032】
本発明に係るデータカウント方法は、種々の装置などに適用可能であるが、以下では、電子写真方式の画像形成装置(典型的には、複写機、コピー機、レーザプリンタなど)に装着される、感光体や現像機などのユニットの動作回数をカウントする例について説明する。
【0033】
<装置構成>
図1は、この発明の実施の形態に従う画像形成装置MFPの外観を示す図である。図2は、この発明の実施の形態に従う画像形成装置MFPの電気的構成の概要を示す図である。
【0034】
図1を参照して、本実施の形態に従う画像形成装置MFPの本体には、電子写真方式で像を生成するための感光体ユニット40と、感光体ユニット40にトナーを供給するためのトナーユニット50と、印刷媒体である用紙を保持するためのカセット60とが装着可能に構成される。すなわち、画像形成装置MFPの下部に装着されたカセット60内に収納された用紙(記録紙)が搬送されるに伴って、感光体ユニット40によって出力すべき画像に対応する潜像が形成され、この潜像に対応するトナー像が用紙に転写される。そして、トナー像が転写された用紙は、定着装置を通じた後にプリント出力される。
【0035】
本実施の形態に従う画像形成装置MFPは、感光体ユニット40の動作回数、トナーユニット50の動作回数、カセット60からの給紙回数などをカウントする。
【0036】
たとえば、感光体ユニット40は、画像形成装置MFPの内部に架設される転写ベルトの幅方向に延びる感光体42と、トナーユニット50からトナーの供給を受けるためのトナー供給孔44と、記憶モジュール46とを含む。記憶モジュール46は、画像形成装置MFP本体と電気的に接続するためのコネクタと、感光体ユニット40の動作回数のカウンタ値を記憶するためのメモリを含む。
【0037】
図2を参照して、画像形成装置MFPは、プリントエンジン70と、制御部100とをさらに含む。プリントエンジン70は、画像形成動作を行なうために必要な各種の機構からなる。制御部100は、プリントエンジン70における画像形成動作を司る。
【0038】
制御部100は、CPU(Central Processing Unit)10と、ROM(Read Only Memory)12と、RAM(Random Access Memory)14と、通信I/F(インターフェイス:Interface)18と、入出力I/O(Input/Output)20とを含む。これらの各部は、内部バス16を介して互いに接続される。
【0039】
制御部100では、CPU10が、ROM12などに予め格納されている各種処理を実行するためのプログラムをRAM14などに展開して実行することで、後述するカウント処理を含む各種制御が提供される。RAM14は、揮発性メモリであり、ワークメモリとして使用される。より具体的には、RAM14には、実行されるプログラム自体に加えて、処理対象の画像データや各種変数データが一時的に格納される。
【0040】
通信I/F18は、図示しない操作パネル、ならびに、感光体ユニット40およびトナーユニット50のような画像形成装置MFPに装着される消耗品などとの間でデータを遣り取りする。この通信I/F18は、複数のコネクタ31,32,…,3Nが接続されており、コネクタ31,32,…,3Nの各々は、感光体ユニット40またはトナーユニット50と電気的に接続される。そして、通信I/F18は、感光体ユニット40およびトナーユニット50に内蔵されているメモリ48(58)に対してデータの書き込み、および、当該メモリからのデータの読み出しを行なう。
【0041】
入出力I/O20は、プリントエンジン70との間で、画像形成動作に必要な検出値や制御指令を遣り取りする。
【0042】
以下の説明では、理解を容易にするために、ある1つのユニット(感光体ユニットまたはトナーユニット)との間で動作回数をカウントする場合の処理について説明する。
【0043】
<関連技術>
まず、本実施の形態に従うカウント処理について説明する前に、本発明に関連するカウント処理について説明する。
【0044】
図3は、この発明に関連するデータカウント方法におけるメモリマップの一例を示す図である。図4は、この発明に関連するデータカウント方法の実行に伴うメモリ内容の変化を示す図である。なお、図3および図4には、特開平7−78232号公報(特許文献1)と同様に、メモリに含まれる3個のカウントアドレスを用いて、データカウントを行なう場合の例を示す。また、図3には、感光体の動作回数(感光体カウンタ)を記憶する領域と、現像回数(現像カウンタ)を記憶する領域とが用意される。
【0045】
なお、本明細書において「カウントアドレス」とは、メモリ内に所定単位の記憶領域の各々を総称する。すなわち、各カウントアドレスは、メモリを所定単位で分割した各々に相当する。たとえば、メモリを16ビット(1ワード)または32ビット(2ワード)の単位で分割し、各分割された後のメモリ単位、すなわち1ワードまたは2ワードの各々を識別するためのアドレス番号をアドレス[1],[2],…といった具合に示す。したがって、たとえば、2ワード(32ビット)の単位でカウントアドレスを定義した場合には、各カウントアドレスには、“0”〜“4294967295”までの値を記憶することが可能となる。また、各カウントアドレスが保持するデータを「カウントデータ」と称する。
【0046】
図3を参照して、本発明の関連技術に係るデータカウント方法では、感光体の動作回数を保持する領域として、絶対アドレス[3],[5],[7]にそれぞれ対応付けられる感光体カウンタ1,2,3と、絶対アドレス[57],[59],[61]にそれぞれ対応付けられる感光体カウンタ1,2,3(移動後)とが用意される。感光体カウンタ1,2,3は、メモリの書き換え回数がその制限値に到達するまで利用される記憶領域であり、感光体カウンタ1,2,3(移動後)は、感光体カウンタ1,2,3での書き換え回数がその制限値に到達した後に連続性を維持したまま利用される記憶領域である。
【0047】
そして、メモリの書き換え回数がその制限値に到達したか否かを判断するために、絶対アドレス[21],[23],[25]にそれぞれ対応付けられる感光体カウンタ1,2,3書き込み回数が用意される。また、感光体カウンタ1,2,3と、感光体カウンタ1,2,3(移動後)とのうち、いずれが有効となっているかを記憶するために、絶対アドレス[63]に対応付けられる感光体カウンタ管理状態が用意される。
【0048】
現像カウンタについても同様に、絶対アドレス[4],[6],[8]にそれぞれ対応付けられる現像カウンタ1,2,3と、絶対アドレス[58],[60],[62]にそれぞれ対応付けられる現像カウンタ1,2,3(移動後)とが用意される。現像カウンタ1,2,3は、メモリの書き換え回数がその制限値に到達するまで利用される記憶領域であり、現像カウンタ1,2,3(移動後)は、現像カウンタ1,2,3での書き換え回数がその制限値に到達した後に連続性を維持したまま利用される記憶領域である。
【0049】
そして、メモリの書き換え回数がその制限値に到達したか否かを判断するために、絶対アドレス[22],[24],[26]にそれぞれ対応付けられる現像カウンタ1,2,3書き込み回数が用意される。また、現像カウンタ1,2,3と、現像カウンタ1,2,3(移動後)とのうち、いずれが有効となっているかを記憶するために、絶対アドレス[64]に対応付けられる現像カウンタ管理状態が用意される。
【0050】
図4を参照して、感光体ユニット40の動作に伴うカウント処理について説明する。なお、図4に示す「カウント数」は、本来カウントしたい値を示し、たとえば、感光体ユニット40が動作するたびに1つずつ加算されるとする。
【0051】
まず、カウント数が“0”である初期状態においては、感光体カウンタ1,2,3にそれぞれ互いに連続する初期値がセットされている。図4に示す例では、“−2”,“−1”,“0”である。
【0052】
続いて、感光体ユニット40が1回動作すると、本来のカウント数は“1”となる。これに対応して、感光体カウンタ1の値が“−2”から“1”へ書き換えられる。続いて、感光体ユニット40がさらに1回動作して本来のカウント数が“2”となると、感光体カウンタ1の次に位置する感光体カウンタ2の値が“−1”から“2”へ書き換えられる。さらに、感光体ユニット40がさらに1回動作して本来のカウント数が“3”となると、感光体カウンタ2の次に位置する感光体カウンタ3の値が“0”から“3”へ書き換えられる。
【0053】
その後、感光体ユニット40がさらに1回動作して本来のカウント数が“4”となると、感光体カウンタ1の値が“1”から“4”へ再度書き換えられる。
【0054】
このように、感光体カウンタ1,2,3の書き替え回数が制限値に到達するまでは、感光体カウンタ1→2→3→1→2→…といった順序で、循環的に、カウントデータが書き込まれる。
【0055】
上述のような3個のアドレスに対して循環的にカウントデータを書き込むことで、常に、3個のカウントアドレスの間では、互いに連続した値(カウントデータ)が本来的に保持されるので、何らかの理由によって、カウントデータが破壊された場合であっても、破壊されていないデータを基準にして、連続性を保つように加減算を行なうことでデータ修復を行なっていた。
【0056】
上述のような感光体カウンタ1,2,3へのデータ書き込みに連動して、感光体カウンタ1,2,3へのデータ書き込みが行われた回数が、それぞれ感光体カウンタ1,2,3書き込み回数へ順次書き込まれる。
【0057】
その後、カウント処理が継続して、感光体カウンタ1,2,3のいずれかへのデータ書き換え回数が制限値(図4に示す例では、100万回)を超えた場合に、感光体カウンタ1,2,3への新たなデータ書き込みは行なわれず、それに代えて、感光体カウンタ1,2,3が保持していたカウントデータは、それぞれ感光体カウンタ1,2,3(移動後)へそれぞれ移行される。すなわち、感光体カウンタ1が記憶していたカウントデータは、感光体カウンタ1(移動後)へ複写され、感光体カウンタ2が記憶していたカウントデータは、感光体カウンタ2(移動後)へ複写され、感光体カウンタ3が記憶していたカウントデータは、感光体カウンタ3(移動後)へ複写される。
【0058】
このデータ移行と同時に、感光体カウンタ管理状態の値が“0”から“1”へ書き換えられる。この感光体カウンタ管理状態の値が“1”にセットされると、感光体カウンタ1,2,3(移動後)が有効化されたことを意味する。
【0059】
そして、以後のカウント処理においては、感光体カウンタ1,2,3(移動後)に対して、循環的にカウントデータが書き込まれる。すなわち、感光体カウンタ1,2,3に対するデータ書き込みと同様に、感光体カウンタ1(移動後)→感光体カウンタ2(移動後)→感光体カウンタ3(移動後)→感光体カウンタ1(移動後)→…といった順序で、循環的に、カウントデータが書き込まれる。
【0060】
上述のような構成を採用した場合には、最終的には、“5999997”までカウントすることが可能である。すなわち、3カウントアドレスを用いてカウント処理を行なう場合には、書き換え回数の制限値についての3倍の単位(上述の例では、“300万回”)でカウントの上限値を変更することができる。
【0061】
言い換えれば、感光体ユニット40の機械的に使用可能な動作回数が“350万回”であった場合、すなわち、カウンタデータの最大値が“350万回”で十分であるが、上述の方法によれば、10個のカウントアドレスを用意する必要がある。別の例としては、カウントデータの最大値が“700万回”でよい場合であっても、上述の方法によれば、16個のカウントアドレスを用意する必要がある。
【0062】
ここで、各カウントアドレスについての書き換え回数の制限値が“100万回”であるのであれば、“350万回”までカウント動作を行なうためには、論理的には4個のカウントアドレスを使用できれば十分なはずである。同様に、“700万回”までカウント動作を行なうためには、論理的には7個のカウントアドレスを使用できれば十分なはずである。
【0063】
しかしながら、本発明の関連技術に係るデータカウント方法では、論理的なカウントアドレスの最小使用数が4個である場合であっても、現実には10個のカウントアドレスを使用しており、また、論理的なカウントアドレスの最小使用数が7個である場合であっても、現実には16個のカウントアドレスを使用することになっていた。
【0064】
このように、本発明の関連技術に係るデータカウント方法では、メモリの利用効率が低いという課題があった。
【0065】
<本実施の形態に従うカウント方法の概要>
本実施の形態に従うデータカウント方法においては、連続的なアドレス番号が割当てられている3個以上のカウントアドレスからなる管理カウントアドレス群に対してカウントデータを循環的に書き込む。この「管理カウントアドレス群」は、本実施の形態に従うデータカウント方法に利用されるカウントアドレスの組を意味する。
【0066】
このとき、管理カウントアドレス群に「連続カウントアドレス群」が存在するか否かが判断され、「連続カウントアドレス群」が存在する場合には、それに含まれるカウントアドレスを特定する。この「連続カウントアドレス群」は、管理カウントアドレス群に含まれるカウントアドレスが有するカウントデータについて循環的な書き込みに応じた規則性が成立している組を意味する。
【0067】
この「循環的な書き込みに応じた規則性」あるいは「規則性」とは、管理カウントアドレス群に対してカウントデータを循環的に書き込む際の周期性を意味する。より具体的には、各カウントアドレスについて見れば、管理カウントアドレス群に含まれるカウントアドレスの総数が書き込み周期となり、その書き込まれる値は、書き込み周期と各カウント動作において変化する単位(以下「カウント単位」とも称す。)との積に相当する値ずつ変化することになる。また、各カウントアドレスに書き込まれる値と隣接するカウントアドレスに書き込まれる値との間には、周期に応じた特定の関係が成立する。このような、管理カウントアドレス群に含まれる各カウントアドレスと隣接するカウントアドレスとの間で、それぞれが保持するカウントデータについての関係を調査することで、データ破壊の発生の有無などを判断する。
【0068】
なお、上述したように、本実施の形態に従うデータカウント方法では、複数のカウントアドレスに対して循環的なカウントデータの書き込みを行なうので、管理カウントアドレス群の最後に位置するカウントアドレスと先頭に位置するカウントアドレスとは、実質的に「隣接」することになる。
【0069】
本実施の形態に従うデータカウント方法においては、上述のように特定した連続カウントアドレス群を「データ破壊」がされていないカウントアドレスであるとみなして、管理カウントアドレス群に含まれるカウントアドレスに異常が発生しているか否かを判断するとともに、異常が発生している場合には、その異常が発生しているカウントアドレスを特定する。すなわち、規則性が成立している複数のカウントアドレスを正常なカウントアドレスとみなして、他のカウントアドレスにおける異常の有無や異常の修復を行なう。
【0070】
このように、連続カウントアドレス群を利用して評価するので、連続カウントアドレス群が存在しさえすれば、管理カウントアドレス群に含まれるカウントアドレスに飛び飛びに異常が発生したとしても、これらの異常を適切に検出および修復することができる。
【0071】
<メモリマップ>
図5は、この発明の実施の形態に従うデータカウント方法におけるメモリマップの一例を示す図である。図6は、この発明の実施の形態に従うデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【0072】
図5を参照して、本実施の形態に従うデータカウント方法では、感光体の動作回数を保持する領域として、絶対アドレス[3],[7],[21],[27],[57],[63],[68]にそれぞれ対応付けられる感光体カウンタ1,2,3,4,5,6,7が用意される。同様に、絶対アドレス[4],[8],[22],[28],[58],[64],[69]にそれぞれ対応付けられる現像カウンタ1,2,3,4,5,6,7が用意される。
【0073】
上述の図3に示すメモリマップとは異なり、利用されるすべてのカウントアドレスが制限値内の範囲で利用される。すなわち、本実施の形態に従うデータカウント方法では、各カウントアドレスに対する書き換え回数の制限値の単位(上述の例では、“100万回”)で、カウンタ値の上限を自在に変更することが可能である。したがって、図5に示す例では、7個のカウントアドレスを利用して、“700万回”までのカウントを可能する構成を示すが、さらに大きな値までカウントするためには、利用するカウントアドレスを追加すればよい。
【0074】
図6を参照して、感光体ユニット40の動作に伴うカウント処理について説明する。
まず、カウンタ数が“0”である初期状態においては、感光体カウンタ1,2,3,4,5,6,7にそれぞれ互いに連続する初期値がセットされている。図6に示す例では、“−6”,“−5”,“−4”,“−3”,“−2”,“−1”,“0”である。この初期値は、カウントデータの規則性に応じて定められる値であり、何らのカウント動作が行なわれていない状態であっても、各カウントデータは、規則性を維持したカウントデータを保持することになる。
【0075】
続いて、感光体ユニット40が1回動作すると、本来のカウント数は“1”となる。これに対応して、感光体カウンタ1の値が“−6”から“1”へ書き換えられる。続いて、感光体ユニット40がさらに1回動作して本来のカウント数が“2”となると、感光体カウンタ1に隣接する感光体カウンタ2の値が“−5”から“2”へ書き換えられる。さらに、感光体ユニット40がさらに1回動作して本来のカウント数が“3”となると、感光体カウンタ2に隣接する感光体カウンタ3の値が“−4”から“3”へ書き換えられる。
【0076】
以下同様にして、本来のカウント数が“7”となると、感光体カウンタ7の値が“0”から“7”へ書き換えられる。
【0077】
その後、感光体ユニット40がさらに1回動作して本来のカウント数が“8”となると、感光体カウンタ1の値が“1”から“8”へ再度書き換えられる。
【0078】
このように、感光体カウンタ1→2→3→4→5→7→6→1→2→…といった順序で、循環的に、カウントデータが書き込まれる。すなわち、図6に示す例では、感光体カウンタ1〜7が「管理カウントアドレス群」に相当し、この感光体カウンタ1〜7に対して、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータが循環的に書き込まれる。
【0079】
なお、感光体カウンタ1〜7には、上記の絶対アドレスとは異なり、相対的なアドレス番号が連続的に割当てられているとする。すなわち、以下の説明では、感光体カウンタ1〜7には、アドレス番号[1]〜[7]がそれぞれ割当てられているものとする。
【0080】
なお、各感光体カウンタに着目すれば、データ書き換えによって、その保持する値は、カウント処理に使用されている感光体カウンタの数(図5および図6の例では、“7”個)と同じ数ずつ増加することになる。
【0081】
さらに、上述の例では、“1”ずつカウントアップするデータカウント方法の例を示したが、任意の数ずつカウントアップするようにしてもよい。たとえば、“2”ずつカウントアップする場合には、各カウントアドレスには、“2”の倍数のカウントデータが書き込まれる。
【0082】
さらに、本実施の形態に従うデータカウント方法は、所定のカウント単位だけ順次減じるようなカウントダウンにも適用することができる。たとえば、“1”ずつカウントダウンすることは、“−1”ずつカウントアップことと等価となる。
【0083】
そこで、以下の説明では、1回のカウント動作においてカウントアップ/ダウンされる値をカウント単位αとも称す。
【0084】
本実施の形態に従うデータカウント方法においては、予めカウントデータの最大値が想定された上で、利用されるカウントアドレスの数(管理カウントアドレス群)が決定される。すなわち、各カウントアドレスについての書き換え回数がその制限値に到達しない範囲で使用されるように、その利用数が決定される。したがって、上述の図4に示すようなデータ移行などの処理は不要となる。
【0085】
さらに、後述するように、何らかの理由によって、カウントデータが破壊された場合であっても、適切に破壊されたカウントデータを検出し、その検出したデータ破壊を修復する機能を有している。また、当該修復機能によれば、カウントデータが飛び飛びで破壊されたとしても、データ修復が可能である。
【0086】
<制御部における制御構造>
図7は、図1に示す制御部100における制御構造を示す模式図である。図7を参照して、制御部100は、その制御構造として、カウントモジュール102と、連続カウントアドレス特定モジュール104と、異常検出モジュール106と、異常特定モジュール108と、修復モジュール110と、入出力モジュール112とを含む。
【0087】
カウントモジュール102は、プリントエンジン70(図2)などからカウントイベントを受けると、入出力モジュール112を介して、感光体ユニット40に内蔵されている記憶モジュールにアクセスして、現在のカウントデータを読み出すとともに、新たなカウントデータを適切なカウントアドレスに書き込む。すなわち、カウントモジュール102は、連続的なアドレス番号が割当てられている3個以上(図6の例では、7個)のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上(図6の例では、7個)のカウントアドレスに対して循環的に書き込む。
【0088】
連続カウントアドレス特定モジュール104は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する。
【0089】
異常検出モジュール106は、カウントモジュール102の動作に応答して、入出力モジュール112を介して、感光体ユニット40に内蔵されている記憶モジュールにアクセスして、現在のカウントデータを読み出すとともに、それぞれのカウントアドレスに記憶されているカウントデータに異常があるか否かを判断する。すなわち、異常検出モジュール106は、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する。
【0090】
異常特定モジュール108は、異常検出モジュール106において異常があると判断された場合には、異常となっているカウントデータを特定する。すなわち、異常特定モジュール108は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する。
【0091】
修復モジュール110は、異常特定モジュール108により特定された異常カウントデータを修復する。すなわち、修復モジュール110は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復する。
【0092】
入出力モジュール112は、通信I/F18(図2)などの間で情報を遣り取りすることで、感光体ユニット40に内蔵されている記憶モジュール内の各カウントアドレスに記憶されているカウントデータの読み出し、および、各カウントアドレスへのカウントデータの書き込みを行なう。
【0093】
<全体処理フロー>
図8は、この発明の実施の形態に従うデータカウント方法の全体処理手順を示すフローチャートである。図8に示す全体処理手順は、典型的には、CPU10がROM12などに格納されているプログラムをRAM14などに展開して実行することで提供される。なお、処理の全体または一部を専用のハードウェアなどとして実装してもよい。
【0094】
図8を参照して、まず、CPU10は、カウント対象のイベントが発生したか否かを判断する(ステップS2)。すなわち、CPU10は、画像形成動作の実行といった、感光体ユニット40などが動作したか否かを判断する。
【0095】
カウントすべきイベントが発生していない場合(ステップS2においてNOの場合)には、ステップS2の処理が繰返される。
【0096】
カウントすべきイベントが発生した場合(ステップS2においてYESの場合)には、CPU10は、対象のカウントデータをカウントするために、カウント動作サブルーチンを実行する(ステップS4)。このカウント動作サブルーチンの詳細については、図9を参照して後述する。
【0097】
カウント動作サブルーチンの実行後、CPU10は、連続カウントアドレス算出サブルーチンを実行する(ステップS6)。すなわち、CPU10は、対象のカウントデータを保持する複数のカウントアドレス(管理カウントアドレス群)のうち、規則性が連続的に成立しているカウントアドレスの組(以下「連続カウントアドレス群」とも称す。)を特定する。なお、図6に示す例では、感光体カウンタ1〜7が「管理カウントアドレス群」に相当する。また、管理カウントアドレス群に含まれるカウントアドレスの総数を“管理カウントアドレス数N”とする。
【0098】
この連続カウントアドレス算出サブルーチンの詳細については、図10を参照して後述する。
【0099】
続いて、CPU10は、異常判定サブルーチンを実行する(ステップS8)。すなわち、CPU10は、連続カウントアドレス算出サブルーチンの実行結果に基づいて、対象のカウントデータに異常があるか否かを判断する。この異常判定サブルーチンの詳細については、図11を参照して後述する。
【0100】
そして、CPU10は、異常判定サブルーチンの実行結果に基づいて、対象のカウントデータに異常が発生しているか否かを判断する(ステップS10)。対象のカウントデータに異常が発生していない場合(ステップS10においてNOの場合)には、処理は終了する。
【0101】
これに対して、対象のカウントデータに異常が発生している場合(ステップS10においてYESの場合)には、ステップS12以下の修復処理が実行される。すなわち、まず、CPU10は、ステップS6において実行された連続カウントアドレス算出サブルーチンによって、管理カウントアドレス群から規則性が連続的に成立している2個以上のカウントアドレスである、連続カウントアドレス群が抽出されたか否かを判断する(ステップS12)。
【0102】
連続カウントアドレス群が抽出された場合(ステップS12においてYESの場合)には、CPU10は、過半数算出サブルーチンを実行し、管理カウントアドレス数についての過半数の値を算出する(ステップS14)。この過半数算出サブルーチンの詳細については、図12を参照して後述する。
【0103】
続いて、CPU10は、異常特定サブルーチンを実行して、管理カウントアドレス群で異常になっているカウントアドレスを特定する(ステップS16)。この異常特定サブルーチンの詳細については、図13を参照して後述する。
【0104】
続いて、CPU10は、ステップS14において実行された過半数算出サブルーチンによって算出された管理カウントアドレス数についての過半数の値と、ステップS16において実行された異常特定サブルーチンによって特定された異常になっているカウントアドレスの数とを比較する。そして、CPU10は、異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっているか否かを判断する(ステップS18)。すなわち、CPU10は、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが管理カウントアドレス数の過半数未満であるか否かを判断する。このステップS18においては、管理カウントアドレス群に含まれるカウントアドレスの過半数以上において異常が発生している場合には、異常が発生していない、すなわち正常なカウントアドレスとの判断についての信頼性が低いと考えられるので、別の処理で再度評価するか、あるいは、修復処理を断念するかを判断する。
【0105】
異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっていない場合(ステップS18においてNOの場合)には、CPU10は、修復サブルーチンを実行し、異常となっているカウントアドレスに記憶されているカウントデータを修復する(ステップS20)。すなわち、CPU10は、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に、カウントデータを修復する。
【0106】
これに対して、異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっている場合(ステップS18においてYESの場合)には、CPU10は、ステップS6において実行された連続カウントアドレス算出サブルーチンによって、別の連続カウントアドレス群が抽出されているか否かを判断する(ステップS22)。
【0107】
別の連続カウントアドレス群が抽出されている場合(ステップS22においてYESの場合)には、ステップS16以下の処理が再度実行される。すなわち、CPU10は、別の連続カウントアドレス群を基準にして、管理カウントアドレス群に含まれる各カウントアドレスを再評価する。
【0108】
すなわち、CPU10は、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する。そして、CPU10は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを再度特定する。
【0109】
これに対して、連続カウントアドレス群が抽出されていない場合(ステップS12においてNOの場合)、または、別の連続カウントアドレス群が抽出されていない場合(ステップS22においてNOの場合)には、CPU10は、異常となっているカウントデータの修復が不可能と判断する。そのため、CPU10は、エラー通知を行なった上で、処理を終了する(ステップS24)。
【0110】
なお、図8に示すステップS2およびS4に示すカウント動作と、ステップS6〜S24に示す異常検出および修復動作とは、互いに独立したタイミングで実行してもよい。
【0111】
<カウント動作サブルーチン>
図9は、図8に示すカウント動作サブルーチン(ステップS4)の処理手順を示すフローチャートである。図9を参照して、CPU10は、まず、管理カウントアドレス群の各カウントアドレスに保持されているカウントデータを読み出す(ステップS100)。続いて、CPU10は、読み出したカウントデータのうち、最もその値が大きいものおよび最もその値が小さいものを特定する(ステップS102)。さらに、CPU10は、カウント動作が「カウントアップ」および「カウントダウン」のいずれであるかを判断する(ステップS104)。
【0112】
カウント動作が「カウントアップ」である場合(ステップS104において「カウントアップ」の場合)には、最も値が小さいカウントデータを保持するカウントアドレスを、最も大きなカウントデータの値に“カウント単位α”を加算した値に書き換える(ステップS106)。そして、処理はリターンする。
【0113】
一方、カウント動作が「カウントダウン」である場合(ステップS104において「カウントダウン」の場合)には、最も値が大きいカウントデータを保持するカウントアドレスを、最も小さなカウントデータの値に“カウント単位α”を減算した値に書き換える(ステップS108)。そして、処理はリターンする。
【0114】
すなわち、CPU10は、連続的なアドレス番号が割当てられている複数のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位αずつ書き込み毎に変化するカウントデータを、当該複数のカウントアドレスに対して循環的に書き込む。
【0115】
<連続カウントアドレス算出サブルーチン>
図10は、図8に示す連続カウントアドレス算出サブルーチン(ステップS6)の処理手順を示すフローチャートである。図10を参照して、CPU10は、管理カウントアドレス群のうち、1番目のカウントアドレスを注目カウントアドレスに設定する(ステップS200)。より具体的には、図5および図6に示すメモリマップにおける「感光体カウンタ1」を注目カウントアドレスに設定する。
【0116】
このとき、CPU10は、規則性チェック回数をゼロクリアする。そして、CPU10は、設定した注目カウントアドレスのカウントデータを読み出す(ステップS202)。
【0117】
続いて、CPU10は、以下に示すステップS204〜S224の処理を実行することで、管理カウントアドレス群の各カウントアドレスに保持されているカウントデータの規則性を評価する。
【0118】
より具体的には、まず、CPU10は、現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されているか否かを判断する(ステップS204)。すなわち、管理カウントアドレス群のうち、N番目のカウントアドレスが注目カウントアドレスに設定されているか否かを判断する。
【0119】
現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されている場合(ステップS204においてYESの場合)には、CPU10は、注目カウントアドレスを“−(N−1)”だけシフトする(ステップS206)。すなわち、CPU10は、現在の注目カウントアドレスが管理カウントアドレス群のN番目のカウントアドレスである場合には、当該注目カウントアドレスを管理カウントアドレス群の1番目のアドレス番号に変更する。これは、カウントデータを循環的に書き込むことに起因して、管理カウントアドレス群においては、最後のカウントアドレスに最初のカウントアドレスが隣接していることとみなすことができるからである。そして、処理はステップS210へ進む。
【0120】
これに対して、現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されていない場合(ステップS204においてNOの場合)には、CPU10は、注目カウントアドレスを“1”だけシフトする(ステップS208)。すなわち、CPU10は、現在の注目カウントアドレスを次に位置するカウントアドレスに変更する。そして、処理はステップS210へ進む。
【0121】
続いて、CPU10は、注目カウントアドレスに保持されているカウントデータを読み出す(ステップS210)。そして、CPU10は、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)を算出する(ステップS212)。すなわち、CPU10は、上述のステップS206またはS208におけるシフト処理によって、注目カウントアドレスが変更されたことに伴って、発生したカウントデータの差を取得する。
【0122】
そして、CPU10は、ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致するか否かを判断する(ステップS214)。
【0123】
さらに、ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致しない場合(ステップS214においてNOの場合)には、CPU10は、ステップS212において算出したカウントデータの差分がカウント単位αと一致するか否かを判断する(ステップS216)。
【0124】
ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致する場合(ステップS214においてYESの場合)、または、ステップS212において算出したカウントデータの差分がカウント単位αと一致する場合(ステップS216においてYESの場合)には、「規則性あり」と判断する(ステップS218)。
【0125】
これに対して、ステップS212において算出したカウントデータの差分が−(N−1)×カウント単位αと一致しない場合(ステップS214においてNOの場合)で、かつステップS212において算出したカウントデータの差分がカウント単位αと一致しない場合(ステップS216においてNOの場合)には、「規則性なし」と判断する(ステップS220)。
【0126】
ステップS218またはステップS220の実行後、CPU10は、規則性チェック回数をインクリメントする(ステップS222)。そして、CPU10は、ステップS218において「規則性あり」と判断されたか否かを判断する(ステップS224)。
【0127】
ステップS218において「規則性あり」と判断された場合(ステップS224においてYESの場合)には、ステップS204以下の処理が再度実行される。
【0128】
これに対して、ステップS218において「規則性あり」と判断されなかった場合、すなわち、ステップS220において「規則性なし」と判断された場合(ステップS224においてNOの場合)には、CPU10は、ステップS222においてインクリメントされた後の規則性チェック回数が管理カウントアドレス数Nを超えているか否かを判断する(ステップS226)。すなわち、CPU10は、管理カウントアドレス群のすべてについて規則性の評価を行なったか否かを判断する。
【0129】
規則性チェック回数が管理カウントアドレス数Nを超えていない場合(ステップS226においてNOの場合)には、ステップS204以下の処理が再度実行される。すなわち、管理カウントアドレス群に含まれるカウントアドレスのうち、規則性の評価が行なわれていないカウントアドレスが存在する場合には、ステップS204以下の処理が繰返される。
【0130】
これに対して、規則性チェック回数が管理カウントアドレス数Nを超えている場合(ステップS226においてYESの場合)には、CPU10は、管理カウントアドレス群のうち、2個以上の連続したカウントアドレスについて「規則性あり」と判断されたか否かを判断する(ステップS228)。
【0131】
2個以上の連続したカウントアドレスについて「規則性あり」と判断されたものがなかった場合(ステップS228においてNOの場合)には、管理カウントアドレス群に連続カウントアドレス群が存在しないと判断する(ステップS230)。そして、図8のステップS8へリターンする。
【0132】
これに対して、2個以上の連続したカウントアドレスについて「規則性あり」と判断された場合(ステップS228においてYESの場合)には、「規則性あり」と判断された2個以上の連続したカウントアドレスが2組以上存在するか否かを判断する(ステップS232)。
【0133】
「規則性あり」と判断された2個以上の連続したカウントアドレスが1組だけしか存在しない場合(ステップS232においてNOの場合)には、以後の処理は実行されず、図8のステップS8へリターンする。
【0134】
これに対して、「規則性あり」と判断された2個以上の連続したカウントアドレスが2組以上存在すると判断された場合(ステップS232においてYESの場合)には、CPU10は、「規則性あり」と判断された2個以上の連続したカウントアドレスの各組について、その中に含まれるカウントアドレスの数を取得する(ステップS234)。そして、CPU10は、連続したカウントアドレスの最長値を算出するとともに、当該連続したカウントアドレスの最長値を有する組が複数存在するか否かを判断する(ステップS236)。
【0135】
連続したカウントアドレスの最長値を有する組が1つしか存在しない場合(ステップS236においてNOの場合)には、CPU10は、当該連続したカウントアドレスの最長値を有する組に含まれるカウントアドレスを、連続カウントアドレス群に決定する(ステップS238)。
【0136】
これに対して、連続したカウントアドレスの最長値を有する組が複数存在する場合(ステップS236においてYESの場合)には、CPU10は、以下に示すような方法で、連続カウントアドレス群を決定する(ステップS240)。すなわち、CPU10は、(a)適用先のカウント動作が「カウントアップ」である場合には、当該連続したカウントアドレスの最長値を有する各組に含まれるカウントアドレスのうち、そのカウントアドレスの最大値が最も大きい組を連続カウントアドレス群に決定し、(b)適用先のカウント動作が「カウントダウン」である場合には、当該連続したカウントアドレスの最長値を有する各組に含まれるカウントアドレスのうち、そのカウントアドレスの最小値が最も小さい組を連続カウントアドレス群に決定する。そして、図8のステップS8へリターンする。
【0137】
上述のように決定された「連続カウントアドレス群」は、管理カウントアドレス群に含まれるカウントアドレスにおける異常の有無を判断するための基準となるものである。これは、管理カウントアドレス群において生じるデータ破壊が「局所的」に発生すると想定し、管理カウントアドレス群の多くは正常にデータを保持しているとする技術思想に基づくものである。また、複数の連続カウントアドレス群の候補となる組が複数抽出された場合には、ステップS234〜S240に示すような処理を行なうことで、より信頼性の高い組を抽出する。
【0138】
すなわち、CPU10は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する。
【0139】
このとき、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、CPU10は、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定する。
【0140】
さらに、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときには、以下のような処理によって連続カウントアドレス群を特定する。すなわち、CPU10は、カウントデータをカウント単位αずつ増加させる書き込み(カウントアップ動作)が行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定する。また、CPU10は、カウントデータをカウント単位αずつ減少させる書き込み(カウントダウン動作)が行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定する。
【0141】
<異常判定サブルーチン>
図11は、図8に示す異常判定サブルーチンの処理手順を示すフローチャートである。図11を参照して、CPU10は、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性あり」と判断されたか否かを判断する(ステップS300)。
【0142】
管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性あり」と判断された場合(ステップS300においてYESの場合)には、CPU10は、対象の管理カウントアドレス群について「異常なし」と判断する(ステップS302)。
【0143】
これに対して、管理カウントアドレス群に含まれるいずれかのカウントアドレスにおいて「規則性なし」と判断された場合(ステップS300においてNOの場合)には、CPU10は、対象の管理カウントアドレス群について「異常あり」と判断する(ステップS304)。
【0144】
そして、図8のステップS10へリターンする。
すなわち、CPU10は、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する。言い換えれば、CPU10は、連続カウントアドレス群に含まれるカウントアドレスの数と管理カウントアドレス群に含まれるカウントアドレスの数とが同一でなければ、カウントデータに異常が発生していると判断する。
【0145】
<過半数算出サブルーチン>
図12は、図8に示す過半数算出サブルーチンの処理手順を示すフローチャートである。図12を参照して、CPU10は、管理カウントアドレス数Nを取得する(ステップS400)。続いて、CPU10は、“N/2+1”(小数切捨て)を過半数(整数値)として算出する(S402)。そして、図8のステップS12へリターンする。
【0146】
このように、CPU10は、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する。
【0147】
<異常特定サブルーチン>
図13は、図8に示す異常特定サブルーチンの処理手順を示すフローチャートである。図13を参照して、CPU10は、(管理カウントアドレス数N)−(連続カウントアドレス群に含まれるカウントアドレスの総数)を比較回数Iとして算出する(ステップS500)。そして、CPU10は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを比較元カウントアドレスとして設定するとともに、比較元カウントアドレスを初期の比較先カウントアドレスとして設定する(ステップS502)。
【0148】
続いて、CPU10は、比較先カウントアドレスが管理カウントアドレス群のうち最後のアドレス番号が設定されているか否かを判断する(ステップS504)。すなわち、管理カウントアドレス群のうち、N番目のカウントアドレスが比較先カウントアドレスに設定されているか否かを判断する。
【0149】
比較先カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されている場合(ステップS504においてYESの場合)には、CPU10は、比較先カウントアドレスを“−(N−1)”だけシフトする(ステップS506)。すなわち、CPU10は、比較先カウントアドレスが管理カウントアドレス群のN番目のカウントアドレスである場合には、当該比較先カウントアドレスを管理カウントアドレス群の1番目のカウントアドレスに変更する。これは、カウントデータを循環的に書き込むことに起因して、管理カウントアドレス群においては、最後のカウントアドレスに最初のカウントアドレスが隣接していることとみなすことができるからである。そして、処理はステップS510へ進む。
【0150】
これに対して、比較先カウントアドレスとして管理カウントアドレス群のうち最後のカウントアドレスが設定されていない場合(ステップS504においてNOの場合)には、CPU10は、比較先カウントアドレスを“1”だけシフトする(ステップ508)。すなわち、CPU10は、現在の比較先カウントアドレスを次に位置するカウントアドレスに変更する。そして、処理はステップS510へ進む。
【0151】
続いて、CPU10は、比較先カウントアドレスのアドレス番号と比較元カウントアドレスのアドレス番号との間の絶対値差分AG、ならびに、比較先カウントアドレスに保持されているカウントデータと比較元カウントアドレスに保持されているカウントデータとの間の絶対値差分DGを算出する(ステップS510)。
【0152】
その後、CPU10は、絶対値差分DG=カウント単位α×絶対値差分AGが成立するか否かを判断する(ステップS512)。
【0153】
絶対値差分DG=カウント単位α×絶対値差分AGが成立しない場合(ステップS512においてNOの場合)には、CPU10は、絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)が成立するか否かを判断する(ステップS514)。
【0154】
すなわち、ステップS512およびS514において、CPU10は、隣接するカウントアドレスが保持するカウントデータの間にカウントデータの循環的な書き込みに伴う規則性が存在するか否かが判断される。
【0155】
絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)が成立しない場合(ステップS514においてNOの場合)には、CPU10は、現在の比較先カウントアドレスを異常カウントアドレスとして記憶する(ステップS516)。
【0156】
ステップS516の実行後、または、絶対値差分DG=カウント単位α×絶対値差分AGが成立する場合(ステップS512においてYESの場合)、あるいは、絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)が成立する場合(ステップS514においてYESの場合)には、CPU10は、比較元カウントアドレスと比較先カウントアドレスとの間の比較が比較回数I回だけ実行済であるか否かを判断する(ステップS518)。すなわち、管理カウントアドレス群のうち、連続カウントアドレス群には含まれないカウントアドレスのすべてについて比較が完了しているか否かが判断される。
【0157】
比較元カウントアドレスと比較先カウントアドレスとの間の比較の実行済回数が比較回数I回まで到達していない場合(ステップS518においてNOの場合)には、ステップS504以下の処理が再度実行される。
【0158】
これに対して、比較元カウントアドレスと比較先カウントアドレスとの間の比較が比較回数I回だけ実行済である場合(ステップS518においてNOの場合)には、処理は、図8のステップS12へリターンする。
【0159】
上述のように、CPU10は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する。すなわち、CPU10は、基準とされたカウントアドレス(比較元カウントアドレス)が有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレス(比較先カウントアドレス)が有するカウントデータとの間の差分の絶対値(絶対値差分DG)が以下のいずれかの値と一致するか否かを判断する。
【0160】
(a)両カウントアドレスの間のアドレス番号についての差分の絶対値(絶対値差分AG)にカウント単位αを乗じた値
(b)管理カウントアドレス群に含まれるカウントアドレスの総数(管理カウントアドレス数N)から両カウントアドレスの間のアドレス番号についての差分の絶対値(絶対値差分AG)を減算して得られた値にカウント単位αを乗じた値
そして、CPU10は、絶対値差分DGがいずれの値とも一致しない場合に、比較先カウントアドレスを異常カウントアドレスとして特定する。
【0161】
<修復サブルーチン>
図14は、図8に示す修復サブルーチンの処理手順を示すフローチャートである。図14を参照して、本実施の形態に従うデータカウント方法においては、管理カウントアドレス群のうち異常カウントアドレス以外のカウントアドレスから選択される基準値カウントアドレス(最大値もしくは最小値)、および、カウント動作(カウントダウンもしくはカウントアップ)に応じて、4通りの異常修復処理が選択的に実行される。
【0162】
より具体的には、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントアップであるか否かを判断する(ステップS600)。
【0163】
ステップS600においてYESの場合には、CPU10は、第1異常修復処理サブルーチンを実行する(ステップS602)。
【0164】
ステップS600においてNOの場合には、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントダウンであるか否かを判断する(ステップS604)。
【0165】
ステップS604においてYESの場合には、CPU10は、第2異常修復処理サブルーチンを実行する(ステップS606)。
【0166】
ステップS604においてNOの場合には、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントアップであるか否かを判断する(ステップS608)。
【0167】
ステップS608においてYESの場合には、CPU10は、第3異常修復処理サブルーチンを実行する(ステップS610)。
【0168】
ステップS608においてNOの場合には、CPU10は、第4異常修復処理サブルーチンを実行する(ステップS612)。
【0169】
以上のように、CPU10は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを規則性に基づいて修復する。
【0170】
<第1異常修復サブルーチン>
図15は、図14に示す第1異常修復サブルーチンの処理手順を示すフローチャートである。図15を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700A)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0171】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0172】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最大値−絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS706A)。
【0173】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS708A)。
【0174】
ステップS706AまたはS708Aの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0175】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0176】
<第2異常修復サブルーチン>
図16は、図14に示す第2異常修復サブルーチンの処理手順を示すフローチャートである。図16を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700A)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0177】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0178】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS706B)。
【0179】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS708B)。
【0180】
ステップS706BまたはS708Bの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0181】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0182】
<第3異常修復サブルーチン>
図17は、図14に示す第3異常修復サブルーチンの処理手順を示すフローチャートである。図17を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700B)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0183】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0184】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最小値+(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS706C)。
【0185】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最小値+絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS708C)。
【0186】
ステップS706CまたはS708Cの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0187】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0188】
<第4異常修復サブルーチン>
図18は、図14に示す第4異常修復サブルーチンの処理手順を示すフローチャートである。図18を参照して、まず、CPU10は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すカウントアドレスを基準値カウントアドレスとして選択する(ステップS700B)。続いて、CPU10は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分RAGを算出する(ステップS702)。
【0189】
続いて、CPU10は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する(ステップS704)。
【0190】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合(ステップS704においてYESの場合)には、CPU10は、異常カウントカウントアドレスのカウントデータを(管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最小値+絶対値差分RAG×カウント単位α)に書き換える(修復する)(ステップS706D)。
【0191】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合(ステップS704においてNOの場合)には、CPU10は、異常カウントアドレスのカウントデータを(管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最小値+(管理カウントアドレス数N−絶対値差分RAG)×カウント単位α)に書き換える(修復する)(ステップS708D)。
【0192】
ステップS706DまたはS708Dの実行後、CPU10は、すべての異常カウントアドレスについて修復が完了したか否かを判断する(ステップS710)。すべての異常カウントアドレスについて修復が完了していない場合(ステップS710においてNOの場合)には、ステップS702以下の処理が再度実行される。
【0193】
これに対して、すべての異常カウントアドレスについて修復が完了している場合(ステップS710においてYESの場合)には、処理はリターンする。
【0194】
<修復サブルーチンについてのまとめ>
上述の図15〜図18に示すように、CPU10は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定し(ステップS700A,S700B)、基準値カウントアドレスと異常カウントアドレスとの関係に基づいて、異常カウントアドレスの有するカウントデータを修復する(ステップS706A,S708A,S706B,S708B,S706C,S708C,S706D,S708D)。
【0195】
より具体的には、図15および図16のステップS700Aとして示すように、CPU10は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定する。
【0196】
代替的に、図17および図18のステップS700Bとして示すように、CPU10は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定する。
【0197】
さらに、カウントデータの修復の具体的な処理内容としては、状況に応じて、以下に示す4つの方法のうち、いずれかが採用される。
【0198】
第1の方法は、カウントデータをカウント単位ずつ増加させる書き込み(カウントアップ動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更する。
【0199】
ここで、Dは、基準値カウントアドレスのカウントデータであり、Nは、管理カウントアドレス群に含まれるカウントアドレスの総数であり、RAGは、基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値であり、αは、カウント単位である。
【0200】
第2の方法は、カウントデータをカウント単位ずつ減少させる書き込み(カウントダウン動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更する。
【0201】
第3の方法は、カウントデータをカウント単位ずつ増加させる書き込み(カウントアップ動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更する。
【0202】
第4の方法は、カウントデータをカウント単位ずつ減少させる書き込み(カウントダウン動作)が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、CPU10は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更する。
【0203】
<変形例>
図19は、この発明の実施の形態の変形例1に従うデータカウント方法の全体処理手順を示すフローチャートである。図20は、この発明の実施の形態の変形例2に従うデータカウント方法の全体処理手順を示すフローチャートである。
【0204】
上述の実施の形態においては、カウントイベントが発生すると、その都度、記憶モジュールにアクセスして現在のカウントデータを読み出し、読み出されたカウントデータに対してカウントアップまたはカウントダウンを行ない、それとともに、異常判定および必要な修復を行なう処理例を例示した(図8におけるステップS2〜S8)。
【0205】
このような処理例に代えて、カウントイベントの発生とは独立したタイミングで、異常判定および必要な修復を行なうようにしてもよい。
【0206】
たとえば、図19に示すように、画像形成装置の電源をオンにしたタイミングで図8のステップS8以下と同様の処理を実行するようにしてもよい。カウントデータの異常は、記憶モジュール46へのカウントデータの書き込み動作中に画像形成装置の電源がオフされた場合に発生し易いので、電源をオンにしたときに異常判定を行なうことで、効率的に異常を発見して修復することができる。
【0207】
なお、図8のフローチャートに示す処理および図19のフローチャートに示す処理の両方を並列的に実行するようにしてもよい。
【0208】
さらに別の形態として、画像形成装置の電源をオンにしたタイミングで、記憶モジュール46からカウントデータを読み出してRAM14へ書き込み、それ以降はRAM14に保持されているカウントデータを用いるようにしてもよい。この場合には、図20に示すように、記憶モジュール46からカウントデータを読み出してRAM14へ書き込んだ場合(ステップS30)に、図8のステップS8以下と同様の処理を実行するようにしてもよい。
【0209】
その後、カウントデータが発生する都度、すなわち、カウントアップまたはカウントダウンが行なわれる都度、カウント値が記憶モジュール46へ書き込まれる。
【0210】
なお、カウント値の記憶モジュール46への書き込みは、カウント動作が所定回数実行される毎、所定数のジョブが実行される毎、電源をオフにするための操作が行われたとき、などの適切なタイミングで行なうことができる。
【0211】
<適用例1>
以下、本実施の形態に従うデータカウント方法を具体的な事例に適用した場合の動作について例示する。
【0212】
図21は、この発明の実施の形態に従うデータカウント方法の適用例1を説明するための図である。
【0213】
適用例1に係るメモリに格納されているカウントデータ例を図21(a)に示す。この図21(a)には、管理カウントアドレス数N=7、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図21(a)に示す例では、アドレス[3],[5],[7]の3つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0214】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図21(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS218などの処理に従って、アドレス[1]および[2]の2つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス[1]のカウントデータおよびアドレス[2]の計2つのカウントアドレスのみについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0215】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0216】
さらに、アドレス[1]および[2]の2つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0217】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図21(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図21(c)には、連続カウントアドレス群であるアドレス[1]および[2]の2つのカウントアドレスのうち、アドレス[2]を比較元カウントアドレスに設定した場合の例を示す。この図21(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[3],[5],[7]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0218】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“3”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0219】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例1では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0220】
このとき、基準値カウントアドレスは、アドレス[6]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図21(d)に示すようになる。
【0221】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[3]については、図15のステップS706Aの処理が実行され、カウントデータ“14”が“26”へ修復される。また、アドレス[5]については、図15のステップS706Aの処理が実行され、カウントデータ“16”が“28”へ修復される。また、アドレス[7]については、図15のステップS708Aの処理が実行され、カウントデータ“18”が“23”へ修復される。
【0222】
<適用例2>
図22は、この発明の実施の形態に従うデータカウント方法の適用例2を説明するための図である。
【0223】
適用例2に係るメモリに格納されているカウントデータ例を図22(a)に示す。この図22(a)には、管理カウントアドレス数N=7、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図22(a)に示す例では、アドレス[2],[4],[6]の3つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0224】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図22(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS216などの処理に従って、アドレス[1]および[7]の2つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス[1]のカウントデータおよびアドレス[7]の計2つのカウントアドレスのみについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0225】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0226】
さらに、アドレス[1]および[7]の2つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0227】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図22(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図22(c)には、連続カウントアドレス群であるアドレス[1]および[7]の2つのカウントアドレスのうち、アドレス[1]を比較元カウントアドレスに設定した場合の例を示す。この図22(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[2],[4],[6]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0228】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“3”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0229】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例2では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0230】
このとき、基準値カウントアドレスは、アドレス[7]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図22(d)に示すようになる。
【0231】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[2]については、図15のステップS706Aの処理が実行され、カウントデータ“15”が“38”へ修復される。また、アドレス[4]については、図15のステップS706Aの処理が実行され、カウントデータ“17”が“40”へ修復される。また、アドレス[6]については、図15のステップS706Aの処理が実行され、カウントデータ“19”が“42”へ修復される。
【0232】
<適用例3>
図23は、この発明の実施の形態に従うデータカウント方法の適用例3を説明するための図である。
【0233】
適用例3に係るメモリに格納されているカウントデータ例を図23(a)に示す。この図23(a)には、管理カウントアドレス数N=7、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図23(a)に示す例では、アドレス[1],[2],[4]の3つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0234】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図23(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS216などの処理に従って、アドレス[1]および[2]の2つのカウントアドレス、ならびに、アドレス[5],[6]および[7]の3つのカウントアドレスがそれぞれ「連続カウントアドレス群」として決定される。言い換えれば、アドレス[1],[2],[5],[6],[7]のカウントデータの計5つのカウントアドレスについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0235】
さらに、図10のステップS238に示す処理によって、連続したアドレスの最長値を有する組に含まれるカウントアドレスが連続カウントアドレス群に決定される。この場合には、より長く連続している、アドレス[5],[6]および[7]の3つのカウントアドレスが「連続カウントアドレス群」として採用される。
【0236】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0237】
さらに、アドレス[5],[6]および[7]の3つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0238】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図23(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図23(c)には、連続カウントアドレス群であるアドレス[5],[6]および[7]の3つのカウントアドレスのうち、アドレス[7]を比較元カウントアドレスに設定した場合の例を示す。この図23(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[1],[2],[4]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0239】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“3”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0240】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例3では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0241】
このとき、基準値カウントアドレスは、アドレス[3]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図23(d)に示すようになる。
【0242】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[1]については、図15のステップS706Aの処理が実行され、カウントデータ“41”が“49”へ修復される。また、アドレス[2]については、図15のステップS706Aの処理が実行され、カウントデータ“42”が“50”へ修復される。また、アドレス[4]については、図15のステップS708Aの処理が実行され、カウントデータ“44”が“45”へ修復される。
【0243】
<適用例4>
図24は、この発明の実施の形態に従うデータカウント方法の適用例4を説明するための図である。
【0244】
適用例4に係るメモリに格納されているカウントデータ例を図24(a)に示す。この図24(a)には、管理カウントアドレス数N=6、かつ、カウント単位α=1として、データカウントを行なう場合の処理例を示す。なお、図24(a)に示す例では、アドレス[2]および[6]の2つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【0245】
まず、図8のステップS6および図10に示す連続カウントアドレス算出サブルーチンを実行することで、図24(b)に示すように、各カウントアドレスについて、(今回の注目カウントアドレスのカウントデータ)−(前回の注目カウントアドレスのカウントデータ)が算出される(図10のステップS212)。従って、ステップS214およびS216などの処理に従って、アドレス[3],[4]および[5]の3つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス[3],[4]および[5]のカウントデータについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【0246】
次に、図8のステップS8および図11に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される(図11のステップS304)。
【0247】
さらに、アドレス[3],[4]および[5]の3つのカウントアドレスが「連続カウントアドレス群」であるので、図8のステップS14および図12に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“N/2+1”の式から、“4”と算出される。
【0248】
さらに、図8のステップS16および図13に示す異常特定サブルーチンを実行することで、図24(c)に示すように、各カウントアドレスについての絶対値差分AGおよび絶対値差分DGが算出される。なお、図24(c)には、連続カウントアドレス群であるアドレス[3],[4]および[5]の3つのカウントアドレスのうち、アドレス[5]を比較元カウントアドレスに設定した場合の例を示す。この図24(c)に示す各カウントアドレスについての絶対値差分AGおよび絶対値差分DGについて、“絶対値差分DG=カウント単位α×絶対値差分AG”が成立せず(図13に示すステップS512においてNO)、かつ、“絶対値差分DG=カウント単位α×(管理カウントアドレス数N−絶対値差分AG)”が成立しない(図13に示すステップS514においてNO)ものは、アドレス[2]および[6]である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【0249】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“2”であり、算出された過半数の値“4”より小さいので、図8のステップS18の処理に基づいて、図8のステップS20および図14に示す修復サブルーチンが実行される。
【0250】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例4では、カウント動作がカウントアップであるので、図15に示す第1異常修復サブルーチンが実行される。
【0251】
このとき、基準値カウントアドレスは、アドレス[5]となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分RAGは、図24(d)に示すようになる。
【0252】
各カウントアドレスにつての絶対値差分RAGの値に応じて、図15のステップS706AおよびS708Aのいずれか一方の修復処理が実行される。より具体的には、アドレス[2]については、図15のステップS706Aの処理が実行され、カウントデータ“31”が“16”へ修復される。また、アドレス[6]については、図15のステップS708Aの処理が実行され、カウントデータ“356”が“14”へ修復される。
【0253】
<作用効果>
本実施の形態によれば、カウントアドレスの単位でカウント可能な範囲を自在に設定できるので、自由度が高く、かつ、メモリの使用効率を高めることができる。さらに、2つ以上のカウントアドレスにデータ破壊などが生じた場合であっても、より効率的にデータ破壊が生じているカウントアドレスを特定し、さらに、それらを修復することができる。そのため、より信頼性の高いカウント動作を提供できる。
【0254】
[その他の実施の形態]
上述の実施の形態において説明したような制御を実行させるプログラムを任意の方法で提供することもできる。このようなプログラムは、フレキシブルディスク、CD−ROM(Compact Disk-Read Only Memory)、ROM(Read Only Memory)、RAM(Random Access Memory)およびメモリカードなどのコンピュータ読取り可能な記録媒体に記録させた状態で提供することもできる。あるいは、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【0255】
このようなプログラムは、コンピュータのオペレーティングシステム(OS)の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずOSと協働して処理が実行される。このようなモジュールを含まないプログラムも、本実施の形態に従うプログラムに含まれ得る。
【0256】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0257】
10 CPU、12 ROM、14 RAM、16 内部バス、18 通信I/F、20 入出力I/O、31,32,…,3N, コネクタ、40 感光体ユニット、42 感光体、44 トナー供給孔、46 記憶モジュール、48 メモリ、50 トナーユニット、60 カセット、70 プリントエンジン、100 制御部、102 カウントモジュール、104 連続カウントアドレス特定モジュール、106 異常検出モジュール、108 異常特定モジュール、110 修復モジュール、112 入出力モジュール、AG 絶対値差分、DG 絶対値差分、MFP 画像形成装置、RAG 絶対値差分、α カウント単位。
【特許請求の範囲】
【請求項1】
書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なうためのデータカウント方法であって、前記カウント動作においては、連続的なアドレス番号が割当てられている3個以上の前記カウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上の前記カウントアドレスに対して循環的に書き込み、前記データカウント方法は、
前記管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、
前記連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、前記管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、
前記連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、前記連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとを備える、データカウント方法。
【請求項2】
前記連続カウントアドレス群を特定するステップは、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を前記連続カウントアドレス群として特定するステップを含む、請求項1に記載のデータカウント方法。
【請求項3】
前記連続カウントアドレス群を特定するステップは、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、
前記カウントデータを前記カウント単位ずつ増加させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を前記連続カウントアドレス群として特定するステップと、
前記カウントデータを前記カウント単位ずつ減少させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を前記連続カウントアドレス群として特定するステップとをさらに含む、請求項2に記載のデータカウント方法。
【請求項4】
前記異常カウントアドレスを特定するステップは、
前記基準とされたカウントアドレスが有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレスが有するカウントデータとの間の差分の絶対値が以下のいずれかの値と一致するか否かを判断するステップと、
両カウントアドレスの間のアドレス番号についての差分の絶対値に前記カウント単位を乗じた値、または、
前記管理カウントアドレス群に含まれるカウントアドレスの総数から両カウントアドレスの間のアドレス番号についての差分の絶対値を減算して得られた値に前記カウント単位を乗じた値、
いずれの値とも一致しない場合に、当該判断対象となるカウントアドレスを前記異常カウントアドレスとして特定するステップとを含む、請求項1〜3のいずれか1項に記載のデータカウント方法。
【請求項5】
前記異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、前記規則性に基づいて修復するステップをさらに備える、請求項1〜4のいずれか1項に記載のデータカウント方法。
【請求項6】
前記管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出するステップと、
前記管理カウントアドレス群に含まれる、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満であるか否かを判断するステップとをさらに備え、
前記修復するステップは、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満と判断された場合に実行される、請求項5に記載のデータカウント方法。
【請求項7】
前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数以上と判断された場合に、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断するステップと、
前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな前記連続カウントアドレス群として特定し、さらに、前記異常カウントアドレスを特定するステップを再度実行させるステップとをさらに備える、請求項6に記載のデータカウント方法。
【請求項8】
前記修復するステップは、
前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定するステップと、
前記基準値カウントアドレスと前記異常カウントアドレスとの関係に基づいて、前記異常カウントアドレスの有するカウントデータを修復するステップとを含む、請求項5〜7のいずれか1項に記載のデータカウント方法。
【請求項9】
前記基準値カウントアドレスに設定するステップは、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを前記基準値カウントアドレスに設定するステップを含む、請求項8に記載のデータカウント方法。
【請求項10】
前記基準値カウントアドレスに設定するステップは、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを前記基準値カウントアドレスに設定するステップを含む、請求項8に記載のデータカウント方法。
【請求項11】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項12】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項13】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項14】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項15】
書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なう画像形成装置であって、
連続的なアドレス番号が割当てられている3個以上の前記カウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上の前記カウントアドレスに対して循環的に書き込む手段と、
前記管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する手段と、
前記連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、前記管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する手段と、
前記連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、前記連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する手段とを備える、画像形成装置。
【請求項16】
前記連続カウントアドレス群を特定する手段は、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を前記連続カウントアドレス群として特定する、請求項15に記載の画像形成装置。
【請求項17】
前記連続カウントアドレス群を特定する手段は、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、
前記書き込む手段がカウントデータを前記カウント単位ずつ増加させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を前記連続カウントアドレス群として特定し、
前記書き込む手段がカウントデータを前記カウント単位ずつ減少させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を前記連続カウントアドレス群として特定する、請求項16に記載の画像形成装置。
【請求項18】
前記異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、前記規則性に基づいて修復する手段をさらに備える、請求項16または17に記載の画像形成装置。
【請求項19】
前記管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する手段と、
前記管理カウントアドレス群に含まれる、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満であるか否かを判断する手段とをさらに備え、
前記修復する手段は、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満と判断された場合に処理を実行する、請求項18に記載の画像形成装置。
【請求項20】
前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数以上と判断された場合に、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する手段と、
前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな前記連続カウントアドレス群として特定し、さらに、前記異常カウントアドレスを特定する手段に再度処理を実行させる手段とをさらに備える、請求項19に記載の画像形成装置。
【請求項1】
書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なうためのデータカウント方法であって、前記カウント動作においては、連続的なアドレス番号が割当てられている3個以上の前記カウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上の前記カウントアドレスに対して循環的に書き込み、前記データカウント方法は、
前記管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、
前記連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、前記管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、
前記連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、前記連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとを備える、データカウント方法。
【請求項2】
前記連続カウントアドレス群を特定するステップは、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を前記連続カウントアドレス群として特定するステップを含む、請求項1に記載のデータカウント方法。
【請求項3】
前記連続カウントアドレス群を特定するステップは、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、
前記カウントデータを前記カウント単位ずつ増加させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を前記連続カウントアドレス群として特定するステップと、
前記カウントデータを前記カウント単位ずつ減少させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を前記連続カウントアドレス群として特定するステップとをさらに含む、請求項2に記載のデータカウント方法。
【請求項4】
前記異常カウントアドレスを特定するステップは、
前記基準とされたカウントアドレスが有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレスが有するカウントデータとの間の差分の絶対値が以下のいずれかの値と一致するか否かを判断するステップと、
両カウントアドレスの間のアドレス番号についての差分の絶対値に前記カウント単位を乗じた値、または、
前記管理カウントアドレス群に含まれるカウントアドレスの総数から両カウントアドレスの間のアドレス番号についての差分の絶対値を減算して得られた値に前記カウント単位を乗じた値、
いずれの値とも一致しない場合に、当該判断対象となるカウントアドレスを前記異常カウントアドレスとして特定するステップとを含む、請求項1〜3のいずれか1項に記載のデータカウント方法。
【請求項5】
前記異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、前記規則性に基づいて修復するステップをさらに備える、請求項1〜4のいずれか1項に記載のデータカウント方法。
【請求項6】
前記管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出するステップと、
前記管理カウントアドレス群に含まれる、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満であるか否かを判断するステップとをさらに備え、
前記修復するステップは、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満と判断された場合に実行される、請求項5に記載のデータカウント方法。
【請求項7】
前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数以上と判断された場合に、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断するステップと、
前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな前記連続カウントアドレス群として特定し、さらに、前記異常カウントアドレスを特定するステップを再度実行させるステップとをさらに備える、請求項6に記載のデータカウント方法。
【請求項8】
前記修復するステップは、
前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定するステップと、
前記基準値カウントアドレスと前記異常カウントアドレスとの関係に基づいて、前記異常カウントアドレスの有するカウントデータを修復するステップとを含む、請求項5〜7のいずれか1項に記載のデータカウント方法。
【請求項9】
前記基準値カウントアドレスに設定するステップは、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを前記基準値カウントアドレスに設定するステップを含む、請求項8に記載のデータカウント方法。
【請求項10】
前記基準値カウントアドレスに設定するステップは、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを前記基準値カウントアドレスに設定するステップを含む、請求項8に記載のデータカウント方法。
【請求項11】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項12】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D−(N−RAG)×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D−RAG×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項13】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項14】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをDとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をNとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をRAGとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式(D+RAG×α)に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式(D+(N−RAG)×α)に従って算出される値に変更する、請求項5〜8のいずれか1項に記載のデータカウント方法。
【請求項15】
書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なう画像形成装置であって、
連続的なアドレス番号が割当てられている3個以上の前記カウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該3個以上の前記カウントアドレスに対して循環的に書き込む手段と、
前記管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する手段と、
前記連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、前記管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する手段と、
前記連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、前記連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する手段とを備える、画像形成装置。
【請求項16】
前記連続カウントアドレス群を特定する手段は、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を前記連続カウントアドレス群として特定する、請求項15に記載の画像形成装置。
【請求項17】
前記連続カウントアドレス群を特定する手段は、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、
前記書き込む手段がカウントデータを前記カウント単位ずつ増加させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を前記連続カウントアドレス群として特定し、
前記書き込む手段がカウントデータを前記カウント単位ずつ減少させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を前記連続カウントアドレス群として特定する、請求項16に記載の画像形成装置。
【請求項18】
前記異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、前記規則性に基づいて修復する手段をさらに備える、請求項16または17に記載の画像形成装置。
【請求項19】
前記管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する手段と、
前記管理カウントアドレス群に含まれる、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満であるか否かを判断する手段とをさらに備え、
前記修復する手段は、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満と判断された場合に処理を実行する、請求項18に記載の画像形成装置。
【請求項20】
前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数以上と判断された場合に、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する手段と、
前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな前記連続カウントアドレス群として特定し、さらに、前記異常カウントアドレスを特定する手段に再度処理を実行させる手段とをさらに備える、請求項19に記載の画像形成装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【公開番号】特開2011−199449(P2011−199449A)
【公開日】平成23年10月6日(2011.10.6)
【国際特許分類】
【出願番号】特願2010−62022(P2010−62022)
【出願日】平成22年3月18日(2010.3.18)
【出願人】(303000372)コニカミノルタビジネステクノロジーズ株式会社 (12,802)
【Fターム(参考)】
【公開日】平成23年10月6日(2011.10.6)
【国際特許分類】
【出願日】平成22年3月18日(2010.3.18)
【出願人】(303000372)コニカミノルタビジネステクノロジーズ株式会社 (12,802)
【Fターム(参考)】
[ Back to top ]