(57)【要約】【課題】複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できるデータカウント方法および画像形成装置を提供する。【解決手段】本データカウント方法では、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、連続カウントアドレス群内のいずれかのカウントアドレスを基準として、連続カウントアドレス群以外のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとが実行される。【選択図】図８
2011199449.tif 000002
【特許請求の範囲】
【請求項１】
書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なうためのデータカウント方法であって、前記カウント動作においては、連続的なアドレス番号が割当てられている３個以上の前記カウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該３個以上の前記カウントアドレスに対して循環的に書き込み、前記データカウント方法は、
前記管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、
前記連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、前記管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、
前記連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、前記連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとを備える、データカウント方法。
【請求項２】
前記連続カウントアドレス群を特定するステップは、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を前記連続カウントアドレス群として特定するステップを含む、請求項１に記載のデータカウント方法。
【請求項３】
前記連続カウントアドレス群を特定するステップは、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、
前記カウントデータを前記カウント単位ずつ増加させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を前記連続カウントアドレス群として特定するステップと、
前記カウントデータを前記カウント単位ずつ減少させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を前記連続カウントアドレス群として特定するステップとをさらに含む、請求項２に記載のデータカウント方法。
【請求項４】
前記異常カウントアドレスを特定するステップは、
前記基準とされたカウントアドレスが有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレスが有するカウントデータとの間の差分の絶対値が以下のいずれかの値と一致するか否かを判断するステップと、
両カウントアドレスの間のアドレス番号についての差分の絶対値に前記カウント単位を乗じた値、または、
前記管理カウントアドレス群に含まれるカウントアドレスの総数から両カウントアドレスの間のアドレス番号についての差分の絶対値を減算して得られた値に前記カウント単位を乗じた値、
いずれの値とも一致しない場合に、当該判断対象となるカウントアドレスを前記異常カウントアドレスとして特定するステップとを含む、請求項１〜３のいずれか１項に記載のデータカウント方法。
【請求項５】
前記異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、前記規則性に基づいて修復するステップをさらに備える、請求項１〜４のいずれか１項に記載のデータカウント方法。
【請求項６】
前記管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出するステップと、
前記管理カウントアドレス群に含まれる、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満であるか否かを判断するステップとをさらに備え、
前記修復するステップは、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満と判断された場合に実行される、請求項５に記載のデータカウント方法。
【請求項７】
前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数以上と判断された場合に、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断するステップと、
前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな前記連続カウントアドレス群として特定し、さらに、前記異常カウントアドレスを特定するステップを再度実行させるステップとをさらに備える、請求項６に記載のデータカウント方法。
【請求項８】
前記修復するステップは、
前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定するステップと、
前記基準値カウントアドレスと前記異常カウントアドレスとの関係に基づいて、前記異常カウントアドレスの有するカウントデータを修復するステップとを含む、請求項５〜７のいずれか１項に記載のデータカウント方法。
【請求項９】
前記基準値カウントアドレスに設定するステップは、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを前記基準値カウントアドレスに設定するステップを含む、請求項８に記載のデータカウント方法。
【請求項１０】
前記基準値カウントアドレスに設定するステップは、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを前記基準値カウントアドレスに設定するステップを含む、請求項８に記載のデータカウント方法。
【請求項１１】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをＤとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をＮとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をＲＡＧとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ−ＲＡＧ×α）に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ−（Ｎ−ＲＡＧ）×α）に従って算出される値に変更する、請求項５〜８のいずれか１項に記載のデータカウント方法。
【請求項１２】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをＤとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をＮとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をＲＡＧとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ−（Ｎ−ＲＡＧ）×α）に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ−ＲＡＧ×α）に従って算出される値に変更する、請求項５〜８のいずれか１項に記載のデータカウント方法。
【請求項１３】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをＤとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をＮとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をＲＡＧとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋（Ｎ−ＲＡＧ）×α）に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋ＲＡＧ×α）に従って算出される値に変更する、請求項５〜８のいずれか１項に記載のデータカウント方法。
【請求項１４】
前記修復するステップは、前記書き込むステップにおいてカウントデータを前記カウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、前記管理カウントアドレス群のうち前記異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが前記基準値カウントアドレスに設定された場合に、
前記基準値カウントアドレスのカウントデータをＤとし、前記管理カウントアドレス群に含まれるカウントアドレスの総数をＮとし、前記基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をＲＡＧとし、前記カウント単位をαとすると、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋ＲＡＧ×α）に従って算出される値に変更し、
前記基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋（Ｎ−ＲＡＧ）×α）に従って算出される値に変更する、請求項５〜８のいずれか１項に記載のデータカウント方法。
【請求項１５】
書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なう画像形成装置であって、
連続的なアドレス番号が割当てられている３個以上の前記カウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該３個以上の前記カウントアドレスに対して循環的に書き込む手段と、
前記管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する手段と、
前記連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、前記管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する手段と、
前記連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、前記連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する手段とを備える、画像形成装置。
【請求項１６】
前記連続カウントアドレス群を特定する手段は、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を前記連続カウントアドレス群として特定する、請求項１５に記載の画像形成装置。
【請求項１７】
前記連続カウントアドレス群を特定する手段は、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、
前記書き込む手段がカウントデータを前記カウント単位ずつ増加させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を前記連続カウントアドレス群として特定し、
前記書き込む手段がカウントデータを前記カウント単位ずつ減少させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を前記連続カウントアドレス群として特定する、請求項１６に記載の画像形成装置。
【請求項１８】
前記異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、前記規則性に基づいて修復する手段をさらに備える、請求項１６または１７に記載の画像形成装置。
【請求項１９】
前記管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する手段と、
前記管理カウントアドレス群に含まれる、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満であるか否かを判断する手段とをさらに備え、
前記修復する手段は、前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数未満と判断された場合に処理を実行する、請求項１８に記載の画像形成装置。
【請求項２０】
前記異常カウントアドレスとして特定されたカウントアドレスが前記過半数以上と判断された場合に、前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する手段と、
前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の前記規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな前記連続カウントアドレス群として特定し、さらに、前記異常カウントアドレスを特定する手段に再度処理を実行させる手段とをさらに備える、請求項１９に記載の画像形成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、書き換え回数の制限のあるメモリを用いたデータカウント方法およびその方法を提供する画像形成装置に関する。
【背景技術】
【０００２】
従来から不揮発性の記憶媒体として、ＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory）などの半導体デバイスが使用されている。このような半導体記憶デバイスは、その電気的な状態を利用してデータを保持する。典型的には、１ビットのデータを保持する単位素子について、その電荷の有無などに対応付けて、“０”値または“１”値を記憶する。
【０００３】
したがって、データを書き換える際には、内部的な電荷の移動が生じることになる。その結果、このような半導体記憶では電気的な寿命が存在することになる。たとえば、一般的なＥＥＰＲＯＭは、データ書き換え可能な回数（制限値）は、最大で約１００万回とされている。
【０００４】
そのため、１００万回以上の値をカウントする必要がある用途では、これらの書き換え回数の制限値を超えないように、複数の記憶領域（カウントアドレス）を利用する構成が知られている。また、万が一、データの破壊が生じた場合であっても、その破壊を修復する技術も知られている。
【０００５】
たとえば、特開平７−７８２３２号公報（特許文献１）には、誤カウントを検出し、これを正しい値に補正するカウンタが開示されている。このカウンタは、互いに連続する値の初期値が設定された複数のサブカウンタと、カウントアップ時に、上記複数のサブカウンタの持つ値のうち、最大の値と、２番目に大きな値とが連続しているか否かを判断する判断手段と、上記判断手段により、最大の値と、２番目に大きな値とが連続していないと判断された場合、最小の値を持つサブカウンタの値を、２番目に大きな値に２を加えた値に書き換え、書き換えられた値をカウント値とし、また、最大の値と、２番目に大きな値とが連続していると判断された場合、最小の値を持つサブカウンタの値を、最大の値に１を加えた値に書き換え、書き換えられた値をカウント値とする制御手段とを有する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−７８２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述の特開平７−７８２３２号公報（特許文献１）では、サブカウンタにおいて規則性が成立しているかを判断することで誤カウントを検出しているが、より多くの記憶領域（カウントアドレス）を用いてカウントを行なうようにした場合に、複数のカウントアドレスの値が飛び飛びに破壊されてしまうと、誤カウントを適切に検出できないという課題があった。また、このような場合には、その破壊を修復することもできない。
【０００８】
本発明は、上記のような問題を解決するためになされたものであって、複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できるデータカウント方法および画像形成装置を提供することである。
【課題を解決するための手段】
【０００９】
この発明のある局面に従えば、書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なうためのデータカウント方法を提供する。カウント動作においては、連続的なアドレス番号が割当てられている３個以上のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該３個以上のカウントアドレスに対して循環的に書き込む。本データカウント方法は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定するステップと、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断するステップと、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定するステップとを含む。
【００１０】
好ましくは、連続カウントアドレス群を特定するステップは、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定するステップを含む。
【００１１】
さらに好ましくは、連続カウントアドレス群を特定するステップは、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、カウントデータをカウント単位ずつ増加させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定するステップと、カウントデータをカウント単位ずつ減少させる書き込みが行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定するステップとをさらに含む。
【００１２】
好ましくは、異常カウントアドレスを特定するステップは、基準とされたカウントアドレスが有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレスが有するカウントデータとの間の差分の絶対値が、（ａ）両カウントアドレスの間のアドレス番号についての差分の絶対値にカウント単位を乗じた値、または、（ｂ）管理カウントアドレス群に含まれるカウントアドレスの総数から両カウントアドレスの間のアドレス番号についての差分の絶対値を減算して得られた値にカウント単位を乗じた値、のいずれかの値と一致するか否かを判断するステップを含む。異常カウントアドレスを特定するステップは、さらに、いずれの値とも一致しない場合に、当該判断対象となるカウントアドレスを異常カウントアドレスとして特定するステップと含む。
【００１３】
好ましくは、本データカウント方法は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復するステップをさらに含む。
【００１４】
さらに好ましくは、本データカウント方法は、さらに、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出するステップと、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが過半数未満であるか否かを判断するステップを含む。修復するステップは、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に実行される。
【００１５】
さらに好ましくは、本データカウント方法は、さらに、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断するステップと、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを特定するステップを再度実行させるステップとを含む。
【００１６】
好ましくは、修復するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定するステップと、基準値カウントアドレスと異常カウントアドレスとの関係に基づいて、異常カウントアドレスの有するカウントデータを修復するステップとを含む。
【００１７】
さらに好ましくは、基準値カウントアドレスに設定するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定するステップを含む。
【００１８】
あるいは、さらに好ましくは、基準値カウントアドレスに設定するステップは、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定するステップを含む。
【００１９】
好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ−ＲＡＧ×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ−（Ｎ−ＲＡＧ）×α）に従って算出される値に変更する。ここで、基準値カウントアドレスのカウントデータをＤとし、管理カウントアドレス群に含まれるカウントアドレスの総数をＮとし、基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値をＲＡＧとし、カウント単位をαとしている。
【００２０】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ−（Ｎ−ＲＡＧ）×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ−ＲＡＧ×α）に従って算出される値に変更する。
【００２１】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ増加させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋（Ｎ−ＲＡＧ）×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋ＲＡＧ×α）に従って算出される値に変更する。
【００２２】
あるいは好ましくは、修復するステップは、書き込むステップにおいてカウントデータをカウント単位ずつ減少させる書き込みが行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋ＲＡＧ×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋（Ｎ−ＲＡＧ）×α）に従って算出される値に変更する。
【００２３】
この発明の別の局面に従えば、書き換え回数に制限のあるメモリ内の所定単位の記憶領域であるカウントアドレスを複数個用いて、カウント動作を行なう画像形成装置を提供する。本画像形成装置は、連続的なアドレス番号が割当てられている３個以上のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該３個以上のカウントアドレスに対して循環的に書き込む手段と、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する手段と、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する手段と、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する手段とを含む。
【００２４】
好ましくは、連続カウントアドレス群を特定する手段は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定する。
【００２５】
さらに好ましくは、連続カウントアドレス群を特定する手段は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときに、書き込む手段がカウントデータをカウント単位ずつ増加させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定し、書き込む手段がカウントデータをカウント単位ずつ減少させる書き込みを行っていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定する。
【００２６】
好ましくは、本画像形成装置は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復する手段をさらに含む。
【００２７】
さらに好ましくは、本画像形成装置は、さらに、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する手段と、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが過半数未満であるか否かを判断する手段とを含む。修復する手段は、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に処理を実行する。
【００２８】
さらに好ましくは、本画像形成装置は、さらに、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する手段と、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを特定する手段に再度処理を実行させる手段とを含む。
【発明の効果】
【００２９】
本発明によれば、複数のカウントアドレスを用いてカウント動作を行なう場合に、データ破壊を確実に検出できる。
【図面の簡単な説明】
【００３０】
【図１】この発明の実施の形態に従う画像形成装置の外観を示す図である。
【図２】この発明の実施の形態に従う画像形成装置の電気的構成の概要を示す図である。
【図３】この発明に関連するデータカウント方法におけるメモリマップの一例を示す図である。
【図４】この発明に関連するデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【図５】この発明の実施の形態に従うデータカウント方法におけるメモリマップの一例を示す図である。
【図６】この発明の実施の形態に従うデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【図７】図１に示す制御部における制御構造を示す模式図である。
【図８】この発明の実施の形態に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図９】図８に示すカウント動作サブルーチンの処理手順を示すフローチャートである。
【図１０】図８に示す連続カウントアドレス算出サブルーチンの処理手順を示すフローチャートである。
【図１１】図８に示す異常判定サブルーチンの処理手順を示すフローチャートである。
【図１２】図８に示す過半数算出サブルーチンの処理手順を示すフローチャートである。
【図１３】図８に示す異常特定サブルーチンの処理手順を示すフローチャートである。
【図１４】図８に示す修復サブルーチンの処理手順を示すフローチャートである。
【図１５】図１４に示す第１異常修復サブルーチンの処理手順を示すフローチャートである。
【図１６】図１４に示す第２異常修復サブルーチンの処理手順を示すフローチャートである。
【図１７】図１４に示す第３異常修復サブルーチンの処理手順を示すフローチャートである。
【図１８】図１４に示す第４異常修復サブルーチンの処理手順を示すフローチャートである。
【図１９】この発明の実施の形態の変形例１に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図２０】この発明の実施の形態の変形例２に従うデータカウント方法の全体処理手順を示すフローチャートである。
【図２１】この発明の実施の形態に従うデータカウント方法の適用例１を説明するための図である。
【図２２】この発明の実施の形態に従うデータカウント方法の適用例２を説明するための図である。
【図２３】この発明の実施の形態に従うデータカウント方法の適用例３を説明するための図である。
【図２４】この発明の実施の形態に従うデータカウント方法の適用例４を説明するための図である。
【発明を実施するための形態】
【００３１】
本発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００３２】
本発明に係るデータカウント方法は、種々の装置などに適用可能であるが、以下では、電子写真方式の画像形成装置（典型的には、複写機、コピー機、レーザプリンタなど）に装着される、感光体や現像機などのユニットの動作回数をカウントする例について説明する。
【００３３】
＜装置構成＞
図１は、この発明の実施の形態に従う画像形成装置ＭＦＰの外観を示す図である。図２は、この発明の実施の形態に従う画像形成装置ＭＦＰの電気的構成の概要を示す図である。
【００３４】
図１を参照して、本実施の形態に従う画像形成装置ＭＦＰの本体には、電子写真方式で像を生成するための感光体ユニット４０と、感光体ユニット４０にトナーを供給するためのトナーユニット５０と、印刷媒体である用紙を保持するためのカセット６０とが装着可能に構成される。すなわち、画像形成装置ＭＦＰの下部に装着されたカセット６０内に収納された用紙（記録紙）が搬送されるに伴って、感光体ユニット４０によって出力すべき画像に対応する潜像が形成され、この潜像に対応するトナー像が用紙に転写される。そして、トナー像が転写された用紙は、定着装置を通じた後にプリント出力される。
【００３５】
本実施の形態に従う画像形成装置ＭＦＰは、感光体ユニット４０の動作回数、トナーユニット５０の動作回数、カセット６０からの給紙回数などをカウントする。
【００３６】
たとえば、感光体ユニット４０は、画像形成装置ＭＦＰの内部に架設される転写ベルトの幅方向に延びる感光体４２と、トナーユニット５０からトナーの供給を受けるためのトナー供給孔４４と、記憶モジュール４６とを含む。記憶モジュール４６は、画像形成装置ＭＦＰ本体と電気的に接続するためのコネクタと、感光体ユニット４０の動作回数のカウンタ値を記憶するためのメモリを含む。
【００３７】
図２を参照して、画像形成装置ＭＦＰは、プリントエンジン７０と、制御部１００とをさらに含む。プリントエンジン７０は、画像形成動作を行なうために必要な各種の機構からなる。制御部１００は、プリントエンジン７０における画像形成動作を司る。
【００３８】
制御部１００は、ＣＰＵ（Central Processing Unit）１０と、ＲＯＭ（Read Only Memory）１２と、ＲＡＭ（Random Access Memory）１４と、通信Ｉ／Ｆ（インターフェイス：Interface）１８と、入出力Ｉ／Ｏ（Input/Output）２０とを含む。これらの各部は、内部バス１６を介して互いに接続される。
【００３９】
制御部１００では、ＣＰＵ１０が、ＲＯＭ１２などに予め格納されている各種処理を実行するためのプログラムをＲＡＭ１４などに展開して実行することで、後述するカウント処理を含む各種制御が提供される。ＲＡＭ１４は、揮発性メモリであり、ワークメモリとして使用される。より具体的には、ＲＡＭ１４には、実行されるプログラム自体に加えて、処理対象の画像データや各種変数データが一時的に格納される。
【００４０】
通信Ｉ／Ｆ１８は、図示しない操作パネル、ならびに、感光体ユニット４０およびトナーユニット５０のような画像形成装置ＭＦＰに装着される消耗品などとの間でデータを遣り取りする。この通信Ｉ／Ｆ１８は、複数のコネクタ３１，３２，…，３Ｎが接続されており、コネクタ３１，３２，…，３Ｎの各々は、感光体ユニット４０またはトナーユニット５０と電気的に接続される。そして、通信Ｉ／Ｆ１８は、感光体ユニット４０およびトナーユニット５０に内蔵されているメモリ４８（５８）に対してデータの書き込み、および、当該メモリからのデータの読み出しを行なう。
【００４１】
入出力Ｉ／Ｏ２０は、プリントエンジン７０との間で、画像形成動作に必要な検出値や制御指令を遣り取りする。
【００４２】
以下の説明では、理解を容易にするために、ある１つのユニット（感光体ユニットまたはトナーユニット）との間で動作回数をカウントする場合の処理について説明する。
【００４３】
＜関連技術＞
まず、本実施の形態に従うカウント処理について説明する前に、本発明に関連するカウント処理について説明する。
【００４４】
図３は、この発明に関連するデータカウント方法におけるメモリマップの一例を示す図である。図４は、この発明に関連するデータカウント方法の実行に伴うメモリ内容の変化を示す図である。なお、図３および図４には、特開平７−７８２３２号公報（特許文献１）と同様に、メモリに含まれる３個のカウントアドレスを用いて、データカウントを行なう場合の例を示す。また、図３には、感光体の動作回数（感光体カウンタ）を記憶する領域と、現像回数（現像カウンタ）を記憶する領域とが用意される。
【００４５】
なお、本明細書において「カウントアドレス」とは、メモリ内に所定単位の記憶領域の各々を総称する。すなわち、各カウントアドレスは、メモリを所定単位で分割した各々に相当する。たとえば、メモリを１６ビット（１ワード）または３２ビット（２ワード）の単位で分割し、各分割された後のメモリ単位、すなわち１ワードまたは２ワードの各々を識別するためのアドレス番号をアドレス［１］，［２］，…といった具合に示す。したがって、たとえば、２ワード（３２ビット）の単位でカウントアドレスを定義した場合には、各カウントアドレスには、“０”〜“４２９４９６７２９５”までの値を記憶することが可能となる。また、各カウントアドレスが保持するデータを「カウントデータ」と称する。
【００４６】
図３を参照して、本発明の関連技術に係るデータカウント方法では、感光体の動作回数を保持する領域として、絶対アドレス［３］，［５］，［７］にそれぞれ対応付けられる感光体カウンタ１，２，３と、絶対アドレス［５７］，［５９］，［６１］にそれぞれ対応付けられる感光体カウンタ１，２，３（移動後）とが用意される。感光体カウンタ１，２，３は、メモリの書き換え回数がその制限値に到達するまで利用される記憶領域であり、感光体カウンタ１，２，３（移動後）は、感光体カウンタ１，２，３での書き換え回数がその制限値に到達した後に連続性を維持したまま利用される記憶領域である。
【００４７】
そして、メモリの書き換え回数がその制限値に到達したか否かを判断するために、絶対アドレス［２１］，［２３］，［２５］にそれぞれ対応付けられる感光体カウンタ１，２，３書き込み回数が用意される。また、感光体カウンタ１，２，３と、感光体カウンタ１，２，３（移動後）とのうち、いずれが有効となっているかを記憶するために、絶対アドレス［６３］に対応付けられる感光体カウンタ管理状態が用意される。
【００４８】
現像カウンタについても同様に、絶対アドレス［４］，［６］，［８］にそれぞれ対応付けられる現像カウンタ１，２，３と、絶対アドレス［５８］，［６０］，［６２］にそれぞれ対応付けられる現像カウンタ１，２，３（移動後）とが用意される。現像カウンタ１，２，３は、メモリの書き換え回数がその制限値に到達するまで利用される記憶領域であり、現像カウンタ１，２，３（移動後）は、現像カウンタ１，２，３での書き換え回数がその制限値に到達した後に連続性を維持したまま利用される記憶領域である。
【００４９】
そして、メモリの書き換え回数がその制限値に到達したか否かを判断するために、絶対アドレス［２２］，［２４］，［２６］にそれぞれ対応付けられる現像カウンタ１，２，３書き込み回数が用意される。また、現像カウンタ１，２，３と、現像カウンタ１，２，３（移動後）とのうち、いずれが有効となっているかを記憶するために、絶対アドレス［６４］に対応付けられる現像カウンタ管理状態が用意される。
【００５０】
図４を参照して、感光体ユニット４０の動作に伴うカウント処理について説明する。なお、図４に示す「カウント数」は、本来カウントしたい値を示し、たとえば、感光体ユニット４０が動作するたびに１つずつ加算されるとする。
【００５１】
まず、カウント数が“０”である初期状態においては、感光体カウンタ１，２，３にそれぞれ互いに連続する初期値がセットされている。図４に示す例では、“−２”，“−１”，“０”である。
【００５２】
続いて、感光体ユニット４０が１回動作すると、本来のカウント数は“１”となる。これに対応して、感光体カウンタ１の値が“−２”から“１”へ書き換えられる。続いて、感光体ユニット４０がさらに１回動作して本来のカウント数が“２”となると、感光体カウンタ１の次に位置する感光体カウンタ２の値が“−１”から“２”へ書き換えられる。さらに、感光体ユニット４０がさらに１回動作して本来のカウント数が“３”となると、感光体カウンタ２の次に位置する感光体カウンタ３の値が“０”から“３”へ書き換えられる。
【００５３】
その後、感光体ユニット４０がさらに１回動作して本来のカウント数が“４”となると、感光体カウンタ１の値が“１”から“４”へ再度書き換えられる。
【００５４】
このように、感光体カウンタ１，２，３の書き替え回数が制限値に到達するまでは、感光体カウンタ１→２→３→１→２→…といった順序で、循環的に、カウントデータが書き込まれる。
【００５５】
上述のような３個のアドレスに対して循環的にカウントデータを書き込むことで、常に、３個のカウントアドレスの間では、互いに連続した値（カウントデータ）が本来的に保持されるので、何らかの理由によって、カウントデータが破壊された場合であっても、破壊されていないデータを基準にして、連続性を保つように加減算を行なうことでデータ修復を行なっていた。
【００５６】
上述のような感光体カウンタ１，２，３へのデータ書き込みに連動して、感光体カウンタ１，２，３へのデータ書き込みが行われた回数が、それぞれ感光体カウンタ１，２，３書き込み回数へ順次書き込まれる。
【００５７】
その後、カウント処理が継続して、感光体カウンタ１，２，３のいずれかへのデータ書き換え回数が制限値（図４に示す例では、１００万回）を超えた場合に、感光体カウンタ１，２，３への新たなデータ書き込みは行なわれず、それに代えて、感光体カウンタ１，２，３が保持していたカウントデータは、それぞれ感光体カウンタ１，２，３（移動後）へそれぞれ移行される。すなわち、感光体カウンタ１が記憶していたカウントデータは、感光体カウンタ１（移動後）へ複写され、感光体カウンタ２が記憶していたカウントデータは、感光体カウンタ２（移動後）へ複写され、感光体カウンタ３が記憶していたカウントデータは、感光体カウンタ３（移動後）へ複写される。
【００５８】
このデータ移行と同時に、感光体カウンタ管理状態の値が“０”から“１”へ書き換えられる。この感光体カウンタ管理状態の値が“１”にセットされると、感光体カウンタ１，２，３（移動後）が有効化されたことを意味する。
【００５９】
そして、以後のカウント処理においては、感光体カウンタ１，２，３（移動後）に対して、循環的にカウントデータが書き込まれる。すなわち、感光体カウンタ１，２，３に対するデータ書き込みと同様に、感光体カウンタ１（移動後）→感光体カウンタ２（移動後）→感光体カウンタ３（移動後）→感光体カウンタ１（移動後）→…といった順序で、循環的に、カウントデータが書き込まれる。
【００６０】
上述のような構成を採用した場合には、最終的には、“５９９９９９７”までカウントすることが可能である。すなわち、３カウントアドレスを用いてカウント処理を行なう場合には、書き換え回数の制限値についての３倍の単位（上述の例では、“３００万回”）でカウントの上限値を変更することができる。
【００６１】
言い換えれば、感光体ユニット４０の機械的に使用可能な動作回数が“３５０万回”であった場合、すなわち、カウンタデータの最大値が“３５０万回”で十分であるが、上述の方法によれば、１０個のカウントアドレスを用意する必要がある。別の例としては、カウントデータの最大値が“７００万回”でよい場合であっても、上述の方法によれば、１６個のカウントアドレスを用意する必要がある。
【００６２】
ここで、各カウントアドレスについての書き換え回数の制限値が“１００万回”であるのであれば、“３５０万回”までカウント動作を行なうためには、論理的には４個のカウントアドレスを使用できれば十分なはずである。同様に、“７００万回”までカウント動作を行なうためには、論理的には７個のカウントアドレスを使用できれば十分なはずである。
【００６３】
しかしながら、本発明の関連技術に係るデータカウント方法では、論理的なカウントアドレスの最小使用数が４個である場合であっても、現実には１０個のカウントアドレスを使用しており、また、論理的なカウントアドレスの最小使用数が７個である場合であっても、現実には１６個のカウントアドレスを使用することになっていた。
【００６４】
このように、本発明の関連技術に係るデータカウント方法では、メモリの利用効率が低いという課題があった。
【００６５】
＜本実施の形態に従うカウント方法の概要＞
本実施の形態に従うデータカウント方法においては、連続的なアドレス番号が割当てられている３個以上のカウントアドレスからなる管理カウントアドレス群に対してカウントデータを循環的に書き込む。この「管理カウントアドレス群」は、本実施の形態に従うデータカウント方法に利用されるカウントアドレスの組を意味する。
【００６６】
このとき、管理カウントアドレス群に「連続カウントアドレス群」が存在するか否かが判断され、「連続カウントアドレス群」が存在する場合には、それに含まれるカウントアドレスを特定する。この「連続カウントアドレス群」は、管理カウントアドレス群に含まれるカウントアドレスが有するカウントデータについて循環的な書き込みに応じた規則性が成立している組を意味する。
【００６７】
この「循環的な書き込みに応じた規則性」あるいは「規則性」とは、管理カウントアドレス群に対してカウントデータを循環的に書き込む際の周期性を意味する。より具体的には、各カウントアドレスについて見れば、管理カウントアドレス群に含まれるカウントアドレスの総数が書き込み周期となり、その書き込まれる値は、書き込み周期と各カウント動作において変化する単位（以下「カウント単位」とも称す。）との積に相当する値ずつ変化することになる。また、各カウントアドレスに書き込まれる値と隣接するカウントアドレスに書き込まれる値との間には、周期に応じた特定の関係が成立する。このような、管理カウントアドレス群に含まれる各カウントアドレスと隣接するカウントアドレスとの間で、それぞれが保持するカウントデータについての関係を調査することで、データ破壊の発生の有無などを判断する。
【００６８】
なお、上述したように、本実施の形態に従うデータカウント方法では、複数のカウントアドレスに対して循環的なカウントデータの書き込みを行なうので、管理カウントアドレス群の最後に位置するカウントアドレスと先頭に位置するカウントアドレスとは、実質的に「隣接」することになる。
【００６９】
本実施の形態に従うデータカウント方法においては、上述のように特定した連続カウントアドレス群を「データ破壊」がされていないカウントアドレスであるとみなして、管理カウントアドレス群に含まれるカウントアドレスに異常が発生しているか否かを判断するとともに、異常が発生している場合には、その異常が発生しているカウントアドレスを特定する。すなわち、規則性が成立している複数のカウントアドレスを正常なカウントアドレスとみなして、他のカウントアドレスにおける異常の有無や異常の修復を行なう。
【００７０】
このように、連続カウントアドレス群を利用して評価するので、連続カウントアドレス群が存在しさえすれば、管理カウントアドレス群に含まれるカウントアドレスに飛び飛びに異常が発生したとしても、これらの異常を適切に検出および修復することができる。
【００７１】
＜メモリマップ＞
図５は、この発明の実施の形態に従うデータカウント方法におけるメモリマップの一例を示す図である。図６は、この発明の実施の形態に従うデータカウント方法の実行に伴うメモリ内容の変化を示す図である。
【００７２】
図５を参照して、本実施の形態に従うデータカウント方法では、感光体の動作回数を保持する領域として、絶対アドレス［３］，［７］，［２１］，［２７］，［５７］，［６３］，［６８］にそれぞれ対応付けられる感光体カウンタ１，２，３，４，５，６，７が用意される。同様に、絶対アドレス［４］，［８］，［２２］，［２８］，［５８］，［６４］，［６９］にそれぞれ対応付けられる現像カウンタ１，２，３，４，５，６，７が用意される。
【００７３】
上述の図３に示すメモリマップとは異なり、利用されるすべてのカウントアドレスが制限値内の範囲で利用される。すなわち、本実施の形態に従うデータカウント方法では、各カウントアドレスに対する書き換え回数の制限値の単位（上述の例では、“１００万回”）で、カウンタ値の上限を自在に変更することが可能である。したがって、図５に示す例では、７個のカウントアドレスを利用して、“７００万回”までのカウントを可能する構成を示すが、さらに大きな値までカウントするためには、利用するカウントアドレスを追加すればよい。
【００７４】
図６を参照して、感光体ユニット４０の動作に伴うカウント処理について説明する。
まず、カウンタ数が“０”である初期状態においては、感光体カウンタ１，２，３，４，５，６，７にそれぞれ互いに連続する初期値がセットされている。図６に示す例では、“−６”，“−５”，“−４”，“−３”，“−２”，“−１”，“０”である。この初期値は、カウントデータの規則性に応じて定められる値であり、何らのカウント動作が行なわれていない状態であっても、各カウントデータは、規則性を維持したカウントデータを保持することになる。
【００７５】
続いて、感光体ユニット４０が１回動作すると、本来のカウント数は“１”となる。これに対応して、感光体カウンタ１の値が“−６”から“１”へ書き換えられる。続いて、感光体ユニット４０がさらに１回動作して本来のカウント数が“２”となると、感光体カウンタ１に隣接する感光体カウンタ２の値が“−５”から“２”へ書き換えられる。さらに、感光体ユニット４０がさらに１回動作して本来のカウント数が“３”となると、感光体カウンタ２に隣接する感光体カウンタ３の値が“−４”から“３”へ書き換えられる。
【００７６】
以下同様にして、本来のカウント数が“７”となると、感光体カウンタ７の値が“０”から“７”へ書き換えられる。
【００７７】
その後、感光体ユニット４０がさらに１回動作して本来のカウント数が“８”となると、感光体カウンタ１の値が“１”から“８”へ再度書き換えられる。
【００７８】
このように、感光体カウンタ１→２→３→４→５→７→６→１→２→…といった順序で、循環的に、カウントデータが書き込まれる。すなわち、図６に示す例では、感光体カウンタ１〜７が「管理カウントアドレス群」に相当し、この感光体カウンタ１〜７に対して、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータが循環的に書き込まれる。
【００７９】
なお、感光体カウンタ１〜７には、上記の絶対アドレスとは異なり、相対的なアドレス番号が連続的に割当てられているとする。すなわち、以下の説明では、感光体カウンタ１〜７には、アドレス番号［１］〜［７］がそれぞれ割当てられているものとする。
【００８０】
なお、各感光体カウンタに着目すれば、データ書き換えによって、その保持する値は、カウント処理に使用されている感光体カウンタの数（図５および図６の例では、“７”個）と同じ数ずつ増加することになる。
【００８１】
さらに、上述の例では、“１”ずつカウントアップするデータカウント方法の例を示したが、任意の数ずつカウントアップするようにしてもよい。たとえば、“２”ずつカウントアップする場合には、各カウントアドレスには、“２”の倍数のカウントデータが書き込まれる。
【００８２】
さらに、本実施の形態に従うデータカウント方法は、所定のカウント単位だけ順次減じるようなカウントダウンにも適用することができる。たとえば、“１”ずつカウントダウンすることは、“−１”ずつカウントアップことと等価となる。
【００８３】
そこで、以下の説明では、１回のカウント動作においてカウントアップ／ダウンされる値をカウント単位αとも称す。
【００８４】
本実施の形態に従うデータカウント方法においては、予めカウントデータの最大値が想定された上で、利用されるカウントアドレスの数（管理カウントアドレス群）が決定される。すなわち、各カウントアドレスについての書き換え回数がその制限値に到達しない範囲で使用されるように、その利用数が決定される。したがって、上述の図４に示すようなデータ移行などの処理は不要となる。
【００８５】
さらに、後述するように、何らかの理由によって、カウントデータが破壊された場合であっても、適切に破壊されたカウントデータを検出し、その検出したデータ破壊を修復する機能を有している。また、当該修復機能によれば、カウントデータが飛び飛びで破壊されたとしても、データ修復が可能である。
【００８６】
＜制御部における制御構造＞
図７は、図１に示す制御部１００における制御構造を示す模式図である。図７を参照して、制御部１００は、その制御構造として、カウントモジュール１０２と、連続カウントアドレス特定モジュール１０４と、異常検出モジュール１０６と、異常特定モジュール１０８と、修復モジュール１１０と、入出力モジュール１１２とを含む。
【００８７】
カウントモジュール１０２は、プリントエンジン７０（図２）などからカウントイベントを受けると、入出力モジュール１１２を介して、感光体ユニット４０に内蔵されている記憶モジュールにアクセスして、現在のカウントデータを読み出すとともに、新たなカウントデータを適切なカウントアドレスに書き込む。すなわち、カウントモジュール１０２は、連続的なアドレス番号が割当てられている３個以上（図６の例では、７個）のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位ずつ書き込み毎に変化するカウントデータを、当該３個以上（図６の例では、７個）のカウントアドレスに対して循環的に書き込む。
【００８８】
連続カウントアドレス特定モジュール１０４は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する。
【００８９】
異常検出モジュール１０６は、カウントモジュール１０２の動作に応答して、入出力モジュール１１２を介して、感光体ユニット４０に内蔵されている記憶モジュールにアクセスして、現在のカウントデータを読み出すとともに、それぞれのカウントアドレスに記憶されているカウントデータに異常があるか否かを判断する。すなわち、異常検出モジュール１０６は、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する。
【００９０】
異常特定モジュール１０８は、異常検出モジュール１０６において異常があると判断された場合には、異常となっているカウントデータを特定する。すなわち、異常特定モジュール１０８は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する。
【００９１】
修復モジュール１１０は、異常特定モジュール１０８により特定された異常カウントデータを修復する。すなわち、修復モジュール１１０は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを、規則性に基づいて修復する。
【００９２】
入出力モジュール１１２は、通信Ｉ／Ｆ１８（図２）などの間で情報を遣り取りすることで、感光体ユニット４０に内蔵されている記憶モジュール内の各カウントアドレスに記憶されているカウントデータの読み出し、および、各カウントアドレスへのカウントデータの書き込みを行なう。
【００９３】
＜全体処理フロー＞
図８は、この発明の実施の形態に従うデータカウント方法の全体処理手順を示すフローチャートである。図８に示す全体処理手順は、典型的には、ＣＰＵ１０がＲＯＭ１２などに格納されているプログラムをＲＡＭ１４などに展開して実行することで提供される。なお、処理の全体または一部を専用のハードウェアなどとして実装してもよい。
【００９４】
図８を参照して、まず、ＣＰＵ１０は、カウント対象のイベントが発生したか否かを判断する（ステップＳ２）。すなわち、ＣＰＵ１０は、画像形成動作の実行といった、感光体ユニット４０などが動作したか否かを判断する。
【００９５】
カウントすべきイベントが発生していない場合（ステップＳ２においてＮＯの場合）には、ステップＳ２の処理が繰返される。
【００９６】
カウントすべきイベントが発生した場合（ステップＳ２においてＹＥＳの場合）には、ＣＰＵ１０は、対象のカウントデータをカウントするために、カウント動作サブルーチンを実行する（ステップＳ４）。このカウント動作サブルーチンの詳細については、図９を参照して後述する。
【００９７】
カウント動作サブルーチンの実行後、ＣＰＵ１０は、連続カウントアドレス算出サブルーチンを実行する（ステップＳ６）。すなわち、ＣＰＵ１０は、対象のカウントデータを保持する複数のカウントアドレス（管理カウントアドレス群）のうち、規則性が連続的に成立しているカウントアドレスの組（以下「連続カウントアドレス群」とも称す。）を特定する。なお、図６に示す例では、感光体カウンタ１〜７が「管理カウントアドレス群」に相当する。また、管理カウントアドレス群に含まれるカウントアドレスの総数を“管理カウントアドレス数Ｎ”とする。
【００９８】
この連続カウントアドレス算出サブルーチンの詳細については、図１０を参照して後述する。
【００９９】
続いて、ＣＰＵ１０は、異常判定サブルーチンを実行する（ステップＳ８）。すなわち、ＣＰＵ１０は、連続カウントアドレス算出サブルーチンの実行結果に基づいて、対象のカウントデータに異常があるか否かを判断する。この異常判定サブルーチンの詳細については、図１１を参照して後述する。
【０１００】
そして、ＣＰＵ１０は、異常判定サブルーチンの実行結果に基づいて、対象のカウントデータに異常が発生しているか否かを判断する（ステップＳ１０）。対象のカウントデータに異常が発生していない場合（ステップＳ１０においてＮＯの場合）には、処理は終了する。
【０１０１】
これに対して、対象のカウントデータに異常が発生している場合（ステップＳ１０においてＹＥＳの場合）には、ステップＳ１２以下の修復処理が実行される。すなわち、まず、ＣＰＵ１０は、ステップＳ６において実行された連続カウントアドレス算出サブルーチンによって、管理カウントアドレス群から規則性が連続的に成立している２個以上のカウントアドレスである、連続カウントアドレス群が抽出されたか否かを判断する（ステップＳ１２）。
【０１０２】
連続カウントアドレス群が抽出された場合（ステップＳ１２においてＹＥＳの場合）には、ＣＰＵ１０は、過半数算出サブルーチンを実行し、管理カウントアドレス数についての過半数の値を算出する（ステップＳ１４）。この過半数算出サブルーチンの詳細については、図１２を参照して後述する。
【０１０３】
続いて、ＣＰＵ１０は、異常特定サブルーチンを実行して、管理カウントアドレス群で異常になっているカウントアドレスを特定する（ステップＳ１６）。この異常特定サブルーチンの詳細については、図１３を参照して後述する。
【０１０４】
続いて、ＣＰＵ１０は、ステップＳ１４において実行された過半数算出サブルーチンによって算出された管理カウントアドレス数についての過半数の値と、ステップＳ１６において実行された異常特定サブルーチンによって特定された異常になっているカウントアドレスの数とを比較する。そして、ＣＰＵ１０は、異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっているか否かを判断する（ステップＳ１８）。すなわち、ＣＰＵ１０は、管理カウントアドレス群に含まれる、異常カウントアドレスとして特定されたカウントアドレスが管理カウントアドレス数の過半数未満であるか否かを判断する。このステップＳ１８においては、管理カウントアドレス群に含まれるカウントアドレスの過半数以上において異常が発生している場合には、異常が発生していない、すなわち正常なカウントアドレスとの判断についての信頼性が低いと考えられるので、別の処理で再度評価するか、あるいは、修復処理を断念するかを判断する。
【０１０５】
異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっていない場合（ステップＳ１８においてＮＯの場合）には、ＣＰＵ１０は、修復サブルーチンを実行し、異常となっているカウントアドレスに記憶されているカウントデータを修復する（ステップＳ２０）。すなわち、ＣＰＵ１０は、異常カウントアドレスとして特定されたカウントアドレスが過半数未満と判断された場合に、カウントデータを修復する。
【０１０６】
これに対して、異常になっているカウントアドレスの数が管理カウントアドレス数の過半数以上となっている場合（ステップＳ１８においてＹＥＳの場合）には、ＣＰＵ１０は、ステップＳ６において実行された連続カウントアドレス算出サブルーチンによって、別の連続カウントアドレス群が抽出されているか否かを判断する（ステップＳ２２）。
【０１０７】
別の連続カウントアドレス群が抽出されている場合（ステップＳ２２においてＹＥＳの場合）には、ステップＳ１６以下の処理が再度実行される。すなわち、ＣＰＵ１０は、別の連続カウントアドレス群を基準にして、管理カウントアドレス群に含まれる各カウントアドレスを再評価する。
【０１０８】
すなわち、ＣＰＵ１０は、異常カウントアドレスとして特定されたカウントアドレスが過半数以上と判断された場合に、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在するか否かを判断する。そして、ＣＰＵ１０は、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が他に存在すると判断された場合に、当該他の規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組を新たな連続カウントアドレス群として特定し、さらに、異常カウントアドレスを再度特定する。
【０１０９】
これに対して、連続カウントアドレス群が抽出されていない場合（ステップＳ１２においてＮＯの場合）、または、別の連続カウントアドレス群が抽出されていない場合（ステップＳ２２においてＮＯの場合）には、ＣＰＵ１０は、異常となっているカウントデータの修復が不可能と判断する。そのため、ＣＰＵ１０は、エラー通知を行なった上で、処理を終了する（ステップＳ２４）。
【０１１０】
なお、図８に示すステップＳ２およびＳ４に示すカウント動作と、ステップＳ６〜Ｓ２４に示す異常検出および修復動作とは、互いに独立したタイミングで実行してもよい。
【０１１１】
＜カウント動作サブルーチン＞
図９は、図８に示すカウント動作サブルーチン（ステップＳ４）の処理手順を示すフローチャートである。図９を参照して、ＣＰＵ１０は、まず、管理カウントアドレス群の各カウントアドレスに保持されているカウントデータを読み出す（ステップＳ１００）。続いて、ＣＰＵ１０は、読み出したカウントデータのうち、最もその値が大きいものおよび最もその値が小さいものを特定する（ステップＳ１０２）。さらに、ＣＰＵ１０は、カウント動作が「カウントアップ」および「カウントダウン」のいずれであるかを判断する（ステップＳ１０４）。
【０１１２】
カウント動作が「カウントアップ」である場合（ステップＳ１０４において「カウントアップ」の場合）には、最も値が小さいカウントデータを保持するカウントアドレスを、最も大きなカウントデータの値に“カウント単位α”を加算した値に書き換える（ステップＳ１０６）。そして、処理はリターンする。
【０１１３】
一方、カウント動作が「カウントダウン」である場合（ステップＳ１０４において「カウントダウン」の場合）には、最も値が大きいカウントデータを保持するカウントアドレスを、最も小さなカウントデータの値に“カウント単位α”を減算した値に書き換える（ステップＳ１０８）。そして、処理はリターンする。
【０１１４】
すなわち、ＣＰＵ１０は、連続的なアドレス番号が割当てられている複数のカウントアドレスからなる管理カウントアドレス群について、その値が所定のカウント単位αずつ書き込み毎に変化するカウントデータを、当該複数のカウントアドレスに対して循環的に書き込む。
【０１１５】
＜連続カウントアドレス算出サブルーチン＞
図１０は、図８に示す連続カウントアドレス算出サブルーチン（ステップＳ６）の処理手順を示すフローチャートである。図１０を参照して、ＣＰＵ１０は、管理カウントアドレス群のうち、１番目のカウントアドレスを注目カウントアドレスに設定する（ステップＳ２００）。より具体的には、図５および図６に示すメモリマップにおける「感光体カウンタ１」を注目カウントアドレスに設定する。
【０１１６】
このとき、ＣＰＵ１０は、規則性チェック回数をゼロクリアする。そして、ＣＰＵ１０は、設定した注目カウントアドレスのカウントデータを読み出す（ステップＳ２０２）。
【０１１７】
続いて、ＣＰＵ１０は、以下に示すステップＳ２０４〜Ｓ２２４の処理を実行することで、管理カウントアドレス群の各カウントアドレスに保持されているカウントデータの規則性を評価する。
【０１１８】
より具体的には、まず、ＣＰＵ１０は、現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されているか否かを判断する（ステップＳ２０４）。すなわち、管理カウントアドレス群のうち、Ｎ番目のカウントアドレスが注目カウントアドレスに設定されているか否かを判断する。
【０１１９】
現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されている場合（ステップＳ２０４においてＹＥＳの場合）には、ＣＰＵ１０は、注目カウントアドレスを“−（Ｎ−１）”だけシフトする（ステップＳ２０６）。すなわち、ＣＰＵ１０は、現在の注目カウントアドレスが管理カウントアドレス群のＮ番目のカウントアドレスである場合には、当該注目カウントアドレスを管理カウントアドレス群の１番目のアドレス番号に変更する。これは、カウントデータを循環的に書き込むことに起因して、管理カウントアドレス群においては、最後のカウントアドレスに最初のカウントアドレスが隣接していることとみなすことができるからである。そして、処理はステップＳ２１０へ進む。
【０１２０】
これに対して、現在の注目カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されていない場合（ステップＳ２０４においてＮＯの場合）には、ＣＰＵ１０は、注目カウントアドレスを“１”だけシフトする（ステップＳ２０８）。すなわち、ＣＰＵ１０は、現在の注目カウントアドレスを次に位置するカウントアドレスに変更する。そして、処理はステップＳ２１０へ進む。
【０１２１】
続いて、ＣＰＵ１０は、注目カウントアドレスに保持されているカウントデータを読み出す（ステップＳ２１０）。そして、ＣＰＵ１０は、（今回の注目カウントアドレスのカウントデータ）−（前回の注目カウントアドレスのカウントデータ）を算出する（ステップＳ２１２）。すなわち、ＣＰＵ１０は、上述のステップＳ２０６またはＳ２０８におけるシフト処理によって、注目カウントアドレスが変更されたことに伴って、発生したカウントデータの差を取得する。
【０１２２】
そして、ＣＰＵ１０は、ステップＳ２１２において算出したカウントデータの差分が−（Ｎ−１）×カウント単位αと一致するか否かを判断する（ステップＳ２１４）。
【０１２３】
さらに、ステップＳ２１２において算出したカウントデータの差分が−（Ｎ−１）×カウント単位αと一致しない場合（ステップＳ２１４においてＮＯの場合）には、ＣＰＵ１０は、ステップＳ２１２において算出したカウントデータの差分がカウント単位αと一致するか否かを判断する（ステップＳ２１６）。
【０１２４】
ステップＳ２１２において算出したカウントデータの差分が−（Ｎ−１）×カウント単位αと一致する場合（ステップＳ２１４においてＹＥＳの場合）、または、ステップＳ２１２において算出したカウントデータの差分がカウント単位αと一致する場合（ステップＳ２１６においてＹＥＳの場合）には、「規則性あり」と判断する（ステップＳ２１８）。
【０１２５】
これに対して、ステップＳ２１２において算出したカウントデータの差分が−（Ｎ−１）×カウント単位αと一致しない場合（ステップＳ２１４においてＮＯの場合）で、かつステップＳ２１２において算出したカウントデータの差分がカウント単位αと一致しない場合（ステップＳ２１６においてＮＯの場合）には、「規則性なし」と判断する（ステップＳ２２０）。
【０１２６】
ステップＳ２１８またはステップＳ２２０の実行後、ＣＰＵ１０は、規則性チェック回数をインクリメントする（ステップＳ２２２）。そして、ＣＰＵ１０は、ステップＳ２１８において「規則性あり」と判断されたか否かを判断する（ステップＳ２２４）。
【０１２７】
ステップＳ２１８において「規則性あり」と判断された場合（ステップＳ２２４においてＹＥＳの場合）には、ステップＳ２０４以下の処理が再度実行される。
【０１２８】
これに対して、ステップＳ２１８において「規則性あり」と判断されなかった場合、すなわち、ステップＳ２２０において「規則性なし」と判断された場合（ステップＳ２２４においてＮＯの場合）には、ＣＰＵ１０は、ステップＳ２２２においてインクリメントされた後の規則性チェック回数が管理カウントアドレス数Ｎを超えているか否かを判断する（ステップＳ２２６）。すなわち、ＣＰＵ１０は、管理カウントアドレス群のすべてについて規則性の評価を行なったか否かを判断する。
【０１２９】
規則性チェック回数が管理カウントアドレス数Ｎを超えていない場合（ステップＳ２２６においてＮＯの場合）には、ステップＳ２０４以下の処理が再度実行される。すなわち、管理カウントアドレス群に含まれるカウントアドレスのうち、規則性の評価が行なわれていないカウントアドレスが存在する場合には、ステップＳ２０４以下の処理が繰返される。
【０１３０】
これに対して、規則性チェック回数が管理カウントアドレス数Ｎを超えている場合（ステップＳ２２６においてＹＥＳの場合）には、ＣＰＵ１０は、管理カウントアドレス群のうち、２個以上の連続したカウントアドレスについて「規則性あり」と判断されたか否かを判断する（ステップＳ２２８）。
【０１３１】
２個以上の連続したカウントアドレスについて「規則性あり」と判断されたものがなかった場合（ステップＳ２２８においてＮＯの場合）には、管理カウントアドレス群に連続カウントアドレス群が存在しないと判断する（ステップＳ２３０）。そして、図８のステップＳ８へリターンする。
【０１３２】
これに対して、２個以上の連続したカウントアドレスについて「規則性あり」と判断された場合（ステップＳ２２８においてＹＥＳの場合）には、「規則性あり」と判断された２個以上の連続したカウントアドレスが２組以上存在するか否かを判断する（ステップＳ２３２）。
【０１３３】
「規則性あり」と判断された２個以上の連続したカウントアドレスが１組だけしか存在しない場合（ステップＳ２３２においてＮＯの場合）には、以後の処理は実行されず、図８のステップＳ８へリターンする。
【０１３４】
これに対して、「規則性あり」と判断された２個以上の連続したカウントアドレスが２組以上存在すると判断された場合（ステップＳ２３２においてＹＥＳの場合）には、ＣＰＵ１０は、「規則性あり」と判断された２個以上の連続したカウントアドレスの各組について、その中に含まれるカウントアドレスの数を取得する（ステップＳ２３４）。そして、ＣＰＵ１０は、連続したカウントアドレスの最長値を算出するとともに、当該連続したカウントアドレスの最長値を有する組が複数存在するか否かを判断する（ステップＳ２３６）。
【０１３５】
連続したカウントアドレスの最長値を有する組が１つしか存在しない場合（ステップＳ２３６においてＮＯの場合）には、ＣＰＵ１０は、当該連続したカウントアドレスの最長値を有する組に含まれるカウントアドレスを、連続カウントアドレス群に決定する（ステップＳ２３８）。
【０１３６】
これに対して、連続したカウントアドレスの最長値を有する組が複数存在する場合（ステップＳ２３６においてＹＥＳの場合）には、ＣＰＵ１０は、以下に示すような方法で、連続カウントアドレス群を決定する（ステップＳ２４０）。すなわち、ＣＰＵ１０は、（ａ）適用先のカウント動作が「カウントアップ」である場合には、当該連続したカウントアドレスの最長値を有する各組に含まれるカウントアドレスのうち、そのカウントアドレスの最大値が最も大きい組を連続カウントアドレス群に決定し、（ｂ）適用先のカウント動作が「カウントダウン」である場合には、当該連続したカウントアドレスの最長値を有する各組に含まれるカウントアドレスのうち、そのカウントアドレスの最小値が最も小さい組を連続カウントアドレス群に決定する。そして、図８のステップＳ８へリターンする。
【０１３７】
上述のように決定された「連続カウントアドレス群」は、管理カウントアドレス群に含まれるカウントアドレスにおける異常の有無を判断するための基準となるものである。これは、管理カウントアドレス群において生じるデータ破壊が「局所的」に発生すると想定し、管理カウントアドレス群の多くは正常にデータを保持しているとする技術思想に基づくものである。また、複数の連続カウントアドレス群の候補となる組が複数抽出された場合には、ステップＳ２３４〜Ｓ２４０に示すような処理を行なうことで、より信頼性の高い組を抽出する。
【０１３８】
すなわち、ＣＰＵ１０は、管理カウントアドレス群のうち、各々が有するカウントデータについて循環的な書き込みに応じた規則性が成立している、アドレス番号が連続する複数のカウントアドレスの組である連続カウントアドレス群を特定する。
【０１３９】
このとき、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合に、ＣＰＵ１０は、その中に含まれるカウントアドレスの数が最大である組を連続カウントアドレス群として特定する。
【０１４０】
さらに、規則性が成立しているアドレス番号が連続する複数のカウントアドレスの組が複数存在する場合であって、その中に含まれるカウントアドレスの数が最大である組が複数存在するときには、以下のような処理によって連続カウントアドレス群を特定する。すなわち、ＣＰＵ１０は、カウントデータをカウント単位αずつ増加させる書き込み（カウントアップ動作）が行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最大値が最も大きな組を連続カウントアドレス群として特定する。また、ＣＰＵ１０は、カウントデータをカウント単位αずつ減少させる書き込み（カウントダウン動作）が行なわれていれば、当該複数の組のうち、各組に含まれるカウントアドレスの有するカウントデータの最小値が最も小さな組を連続カウントアドレス群として特定する。
【０１４１】
＜異常判定サブルーチン＞
図１１は、図８に示す異常判定サブルーチンの処理手順を示すフローチャートである。図１１を参照して、ＣＰＵ１０は、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性あり」と判断されたか否かを判断する（ステップＳ３００）。
【０１４２】
管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性あり」と判断された場合（ステップＳ３００においてＹＥＳの場合）には、ＣＰＵ１０は、対象の管理カウントアドレス群について「異常なし」と判断する（ステップＳ３０２）。
【０１４３】
これに対して、管理カウントアドレス群に含まれるいずれかのカウントアドレスにおいて「規則性なし」と判断された場合（ステップＳ３００においてＮＯの場合）には、ＣＰＵ１０は、対象の管理カウントアドレス群について「異常あり」と判断する（ステップＳ３０４）。
【０１４４】
そして、図８のステップＳ１０へリターンする。
すなわち、ＣＰＵ１０は、連続カウントアドレス群に含まれるカウントアドレスの数に基づいて、管理カウントアドレス群に含まれるいずれかのカウントアドレスが有するカウントデータに異常が発生しているか否かを判断する。言い換えれば、ＣＰＵ１０は、連続カウントアドレス群に含まれるカウントアドレスの数と管理カウントアドレス群に含まれるカウントアドレスの数とが同一でなければ、カウントデータに異常が発生していると判断する。
【０１４５】
＜過半数算出サブルーチン＞
図１２は、図８に示す過半数算出サブルーチンの処理手順を示すフローチャートである。図１２を参照して、ＣＰＵ１０は、管理カウントアドレス数Ｎを取得する（ステップＳ４００）。続いて、ＣＰＵ１０は、“Ｎ／２＋１”（小数切捨て）を過半数（整数値）として算出する（Ｓ４０２）。そして、図８のステップＳ１２へリターンする。
【０１４６】
このように、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスの総数についての過半数の値を算出する。
【０１４７】
＜異常特定サブルーチン＞
図１３は、図８に示す異常特定サブルーチンの処理手順を示すフローチャートである。図１３を参照して、ＣＰＵ１０は、（管理カウントアドレス数Ｎ）−（連続カウントアドレス群に含まれるカウントアドレスの総数）を比較回数Ｉとして算出する（ステップＳ５００）。そして、ＣＰＵ１０は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを比較元カウントアドレスとして設定するとともに、比較元カウントアドレスを初期の比較先カウントアドレスとして設定する（ステップＳ５０２）。
【０１４８】
続いて、ＣＰＵ１０は、比較先カウントアドレスが管理カウントアドレス群のうち最後のアドレス番号が設定されているか否かを判断する（ステップＳ５０４）。すなわち、管理カウントアドレス群のうち、Ｎ番目のカウントアドレスが比較先カウントアドレスに設定されているか否かを判断する。
【０１４９】
比較先カウントアドレスとして管理カウントアドレス群のうち最後のアドレス番号が設定されている場合（ステップＳ５０４においてＹＥＳの場合）には、ＣＰＵ１０は、比較先カウントアドレスを“−（Ｎ−１）”だけシフトする（ステップＳ５０６）。すなわち、ＣＰＵ１０は、比較先カウントアドレスが管理カウントアドレス群のＮ番目のカウントアドレスである場合には、当該比較先カウントアドレスを管理カウントアドレス群の１番目のカウントアドレスに変更する。これは、カウントデータを循環的に書き込むことに起因して、管理カウントアドレス群においては、最後のカウントアドレスに最初のカウントアドレスが隣接していることとみなすことができるからである。そして、処理はステップＳ５１０へ進む。
【０１５０】
これに対して、比較先カウントアドレスとして管理カウントアドレス群のうち最後のカウントアドレスが設定されていない場合（ステップＳ５０４においてＮＯの場合）には、ＣＰＵ１０は、比較先カウントアドレスを“１”だけシフトする（ステップ５０８）。すなわち、ＣＰＵ１０は、現在の比較先カウントアドレスを次に位置するカウントアドレスに変更する。そして、処理はステップＳ５１０へ進む。
【０１５１】
続いて、ＣＰＵ１０は、比較先カウントアドレスのアドレス番号と比較元カウントアドレスのアドレス番号との間の絶対値差分ＡＧ、ならびに、比較先カウントアドレスに保持されているカウントデータと比較元カウントアドレスに保持されているカウントデータとの間の絶対値差分ＤＧを算出する（ステップＳ５１０）。
【０１５２】
その後、ＣＰＵ１０は、絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧが成立するか否かを判断する（ステップＳ５１２）。
【０１５３】
絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧが成立しない場合（ステップＳ５１２においてＮＯの場合）には、ＣＰＵ１０は、絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）が成立するか否かを判断する（ステップＳ５１４）。
【０１５４】
すなわち、ステップＳ５１２およびＳ５１４において、ＣＰＵ１０は、隣接するカウントアドレスが保持するカウントデータの間にカウントデータの循環的な書き込みに伴う規則性が存在するか否かが判断される。
【０１５５】
絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）が成立しない場合（ステップＳ５１４においてＮＯの場合）には、ＣＰＵ１０は、現在の比較先カウントアドレスを異常カウントアドレスとして記憶する（ステップＳ５１６）。
【０１５６】
ステップＳ５１６の実行後、または、絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧが成立する場合（ステップＳ５１２においてＹＥＳの場合）、あるいは、絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）が成立する場合（ステップＳ５１４においてＹＥＳの場合）には、ＣＰＵ１０は、比較元カウントアドレスと比較先カウントアドレスとの間の比較が比較回数Ｉ回だけ実行済であるか否かを判断する（ステップＳ５１８）。すなわち、管理カウントアドレス群のうち、連続カウントアドレス群には含まれないカウントアドレスのすべてについて比較が完了しているか否かが判断される。
【０１５７】
比較元カウントアドレスと比較先カウントアドレスとの間の比較の実行済回数が比較回数Ｉ回まで到達していない場合（ステップＳ５１８においてＮＯの場合）には、ステップＳ５０４以下の処理が再度実行される。
【０１５８】
これに対して、比較元カウントアドレスと比較先カウントアドレスとの間の比較が比較回数Ｉ回だけ実行済である場合（ステップＳ５１８においてＮＯの場合）には、処理は、図８のステップＳ１２へリターンする。
【０１５９】
上述のように、ＣＰＵ１０は、連続カウントアドレス群に含まれるいずれかのカウントアドレスを基準として、連続カウントアドレス群に含まれない他のカウントアドレスのうち、そのカウントデータに異常が発生している異常カウントアドレスを特定する。すなわち、ＣＰＵ１０は、基準とされたカウントアドレス（比較元カウントアドレス）が有するカウントデータと異常が発生しているか否かの判断対象となるカウントアドレス（比較先カウントアドレス）が有するカウントデータとの間の差分の絶対値（絶対値差分ＤＧ）が以下のいずれかの値と一致するか否かを判断する。
【０１６０】
（ａ）両カウントアドレスの間のアドレス番号についての差分の絶対値（絶対値差分ＡＧ）にカウント単位αを乗じた値
（ｂ）管理カウントアドレス群に含まれるカウントアドレスの総数（管理カウントアドレス数Ｎ）から両カウントアドレスの間のアドレス番号についての差分の絶対値（絶対値差分ＡＧ）を減算して得られた値にカウント単位αを乗じた値
そして、ＣＰＵ１０は、絶対値差分ＤＧがいずれの値とも一致しない場合に、比較先カウントアドレスを異常カウントアドレスとして特定する。
【０１６１】
＜修復サブルーチン＞
図１４は、図８に示す修復サブルーチンの処理手順を示すフローチャートである。図１４を参照して、本実施の形態に従うデータカウント方法においては、管理カウントアドレス群のうち異常カウントアドレス以外のカウントアドレスから選択される基準値カウントアドレス（最大値もしくは最小値）、および、カウント動作（カウントダウンもしくはカウントアップ）に応じて、４通りの異常修復処理が選択的に実行される。
【０１６２】
より具体的には、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントアップであるか否かを判断する（ステップＳ６００）。
【０１６３】
ステップＳ６００においてＹＥＳの場合には、ＣＰＵ１０は、第１異常修復処理サブルーチンを実行する（ステップＳ６０２）。
【０１６４】
ステップＳ６００においてＮＯの場合には、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントダウンであるか否かを判断する（ステップＳ６０４）。
【０１６５】
ステップＳ６０４においてＹＥＳの場合には、ＣＰＵ１０は、第２異常修復処理サブルーチンを実行する（ステップＳ６０６）。
【０１６６】
ステップＳ６０４においてＮＯの場合には、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すものが基準値カウントアドレスに選択され、かつ、カウント動作がカウントアップであるか否かを判断する（ステップＳ６０８）。
【０１６７】
ステップＳ６０８においてＹＥＳの場合には、ＣＰＵ１０は、第３異常修復処理サブルーチンを実行する（ステップＳ６１０）。
【０１６８】
ステップＳ６０８においてＮＯの場合には、ＣＰＵ１０は、第４異常修復処理サブルーチンを実行する（ステップＳ６１２）。
【０１６９】
以上のように、ＣＰＵ１０は、異常カウントアドレスとして特定されたカウントアドレスが有するカウントデータを規則性に基づいて修復する。
【０１７０】
＜第１異常修復サブルーチン＞
図１５は、図１４に示す第１異常修復サブルーチンの処理手順を示すフローチャートである。図１５を参照して、まず、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すカウントアドレスを基準値カウントアドレスとして選択する（ステップＳ７００Ａ）。続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧを算出する（ステップＳ７０２）。
【０１７１】
続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する（ステップＳ７０４）。
【０１７２】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合（ステップＳ７０４においてＹＥＳの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最大値−絶対値差分ＲＡＧ×カウント単位α）に書き換える（修復する）（ステップＳ７０６Ａ）。
【０１７３】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合（ステップＳ７０４においてＮＯの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−（管理カウントアドレス数Ｎ−絶対値差分ＲＡＧ）×カウント単位α）に書き換える（修復する）（ステップＳ７０８Ａ）。
【０１７４】
ステップＳ７０６ＡまたはＳ７０８Ａの実行後、ＣＰＵ１０は、すべての異常カウントアドレスについて修復が完了したか否かを判断する（ステップＳ７１０）。すべての異常カウントアドレスについて修復が完了していない場合（ステップＳ７１０においてＮＯの場合）には、ステップＳ７０２以下の処理が再度実行される。
【０１７５】
これに対して、すべての異常カウントアドレスについて修復が完了している場合（ステップＳ７１０においてＹＥＳの場合）には、処理はリターンする。
【０１７６】
＜第２異常修復サブルーチン＞
図１６は、図１４に示す第２異常修復サブルーチンの処理手順を示すフローチャートである。図１６を参照して、まず、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最大値を示すカウントアドレスを基準値カウントアドレスとして選択する（ステップＳ７００Ａ）。続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧを算出する（ステップＳ７０２）。
【０１７７】
続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する（ステップＳ７０４）。
【０１７８】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合（ステップＳ７０４においてＹＥＳの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−（管理カウントアドレス数Ｎ−絶対値差分ＲＡＧ）×カウント単位α）に書き換える（修復する）（ステップＳ７０６Ｂ）。
【０１７９】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合（ステップＳ７０４においてＮＯの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最大値−絶対値差分ＲＡＧ×カウント単位α）に書き換える（修復する）（ステップＳ７０８Ｂ）。
【０１８０】
ステップＳ７０６ＢまたはＳ７０８Ｂの実行後、ＣＰＵ１０は、すべての異常カウントアドレスについて修復が完了したか否かを判断する（ステップＳ７１０）。すべての異常カウントアドレスについて修復が完了していない場合（ステップＳ７１０においてＮＯの場合）には、ステップＳ７０２以下の処理が再度実行される。
【０１８１】
これに対して、すべての異常カウントアドレスについて修復が完了している場合（ステップＳ７１０においてＹＥＳの場合）には、処理はリターンする。
【０１８２】
＜第３異常修復サブルーチン＞
図１７は、図１４に示す第３異常修復サブルーチンの処理手順を示すフローチャートである。図１７を参照して、まず、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すカウントアドレスを基準値カウントアドレスとして選択する（ステップＳ７００Ｂ）。続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧを算出する（ステップＳ７０２）。
【０１８３】
続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する（ステップＳ７０４）。
【０１８４】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合（ステップＳ７０４においてＹＥＳの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最小値＋（管理カウントアドレス数Ｎ−絶対値差分ＲＡＧ）×カウント単位α）に書き換える（修復する）（ステップＳ７０６Ｃ）。
【０１８５】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合（ステップＳ７０４においてＮＯの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるカウントアドレスに保持されているカウントデータの最小値＋絶対値差分ＲＡＧ×カウント単位α）に書き換える（修復する）（ステップＳ７０８Ｃ）。
【０１８６】
ステップＳ７０６ＣまたはＳ７０８Ｃの実行後、ＣＰＵ１０は、すべての異常カウントアドレスについて修復が完了したか否かを判断する（ステップＳ７１０）。すべての異常カウントアドレスについて修復が完了していない場合（ステップＳ７１０においてＮＯの場合）には、ステップＳ７０２以下の処理が再度実行される。
【０１８７】
これに対して、すべての異常カウントアドレスについて修復が完了している場合（ステップＳ７１０においてＹＥＳの場合）には、処理はリターンする。
【０１８８】
＜第４異常修復サブルーチン＞
図１８は、図１４に示す第４異常修復サブルーチンの処理手順を示すフローチャートである。図１８を参照して、まず、ＣＰＵ１０は、管理カウントアドレス群に含まれるカウントアドレスのうち、異常カウントアドレス以外のカウントアドレスの中で最小値を示すカウントアドレスを基準値カウントアドレスとして選択する（ステップＳ７００Ｂ）。続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号と異常カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧを算出する（ステップＳ７０２）。
【０１８９】
続いて、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きいか否かを判断する（ステップＳ７０４）。
【０１９０】
基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より大きい場合（ステップＳ７０４においてＹＥＳの場合）には、ＣＰＵ１０は、異常カウントカウントアドレスのカウントデータを（管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最小値＋絶対値差分ＲＡＧ×カウント単位α）に書き換える（修復する）（ステップＳ７０６Ｄ）。
【０１９１】
これに対して、基準値カウントアドレスのアドレス番号が異常カウントアドレスのアドレス番号より小さい場合（ステップＳ７０４においてＮＯの場合）には、ＣＰＵ１０は、異常カウントアドレスのカウントデータを（管理カウントアドレス群に含まれるアドレスに保持されているカウントデータの最小値＋（管理カウントアドレス数Ｎ−絶対値差分ＲＡＧ）×カウント単位α）に書き換える（修復する）（ステップＳ７０８Ｄ）。
【０１９２】
ステップＳ７０６ＤまたはＳ７０８Ｄの実行後、ＣＰＵ１０は、すべての異常カウントアドレスについて修復が完了したか否かを判断する（ステップＳ７１０）。すべての異常カウントアドレスについて修復が完了していない場合（ステップＳ７１０においてＮＯの場合）には、ステップＳ７０２以下の処理が再度実行される。
【０１９３】
これに対して、すべての異常カウントアドレスについて修復が完了している場合（ステップＳ７１０においてＹＥＳの場合）には、処理はリターンする。
【０１９４】
＜修復サブルーチンについてのまとめ＞
上述の図１５〜図１８に示すように、ＣＰＵ１０は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスのいずれかを基準値カウントアドレスに設定し（ステップＳ７００Ａ，Ｓ７００Ｂ）、基準値カウントアドレスと異常カウントアドレスとの関係に基づいて、異常カウントアドレスの有するカウントデータを修復する（ステップＳ７０６Ａ，Ｓ７０８Ａ，Ｓ７０６Ｂ，Ｓ７０８Ｂ，Ｓ７０６Ｃ，Ｓ７０８Ｃ，Ｓ７０６Ｄ，Ｓ７０８Ｄ）。
【０１９５】
より具体的には、図１５および図１６のステップＳ７００Ａとして示すように、ＣＰＵ１０は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定する。
【０１９６】
代替的に、図１７および図１８のステップＳ７００Ｂとして示すように、ＣＰＵ１０は、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスを基準値カウントアドレスに設定する。
【０１９７】
さらに、カウントデータの修復の具体的な処理内容としては、状況に応じて、以下に示す４つの方法のうち、いずれかが採用される。
【０１９８】
第１の方法は、カウントデータをカウント単位ずつ増加させる書き込み（カウントアップ動作）が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ−ＲＡＧ×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ−（Ｎ−ＲＡＧ）×α）に従って算出される値に変更する。
【０１９９】
ここで、Ｄは、基準値カウントアドレスのカウントデータであり、Ｎは、管理カウントアドレス群に含まれるカウントアドレスの総数であり、ＲＡＧは、基準値カウントアドレスと修復対象の異常カウントアドレスとの間のアドレス番号についての差分の絶対値であり、αは、カウント単位である。
【０２００】
第２の方法は、カウントデータをカウント単位ずつ減少させる書き込み（カウントダウン動作）が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最大のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ−（Ｎ−ＲＡＧ）×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ−ＲＡＧ×α）に従って算出される値に変更する。
【０２０１】
第３の方法は、カウントデータをカウント単位ずつ増加させる書き込み（カウントアップ動作）が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋（Ｎ−ＲＡＧ）×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋ＲＡＧ×α）に従って算出される値に変更する。
【０２０２】
第４の方法は、カウントデータをカウント単位ずつ減少させる書き込み（カウントダウン動作）が行なわれている場合であって、かつ、管理カウントアドレス群のうち異常カウントアドレスではないカウントアドレスの中で、最小のカウントデータを有するカウントアドレスが基準値カウントアドレスに設定された場合に実行される。このとき、ＣＰＵ１０は、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号より大きいときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋ＲＡＧ×α）に従って算出される値に変更し、基準値カウントアドレスのアドレス番号が当該異常カウントアドレスのアドレス番号以下であるときには、当該異常カウントアドレスのカウントデータを式（Ｄ＋（Ｎ−ＲＡＧ）×α）に従って算出される値に変更する。
【０２０３】
＜変形例＞
図１９は、この発明の実施の形態の変形例１に従うデータカウント方法の全体処理手順を示すフローチャートである。図２０は、この発明の実施の形態の変形例２に従うデータカウント方法の全体処理手順を示すフローチャートである。
【０２０４】
上述の実施の形態においては、カウントイベントが発生すると、その都度、記憶モジュールにアクセスして現在のカウントデータを読み出し、読み出されたカウントデータに対してカウントアップまたはカウントダウンを行ない、それとともに、異常判定および必要な修復を行なう処理例を例示した（図８におけるステップＳ２〜Ｓ８）。
【０２０５】
このような処理例に代えて、カウントイベントの発生とは独立したタイミングで、異常判定および必要な修復を行なうようにしてもよい。
【０２０６】
たとえば、図１９に示すように、画像形成装置の電源をオンにしたタイミングで図８のステップＳ８以下と同様の処理を実行するようにしてもよい。カウントデータの異常は、記憶モジュール４６へのカウントデータの書き込み動作中に画像形成装置の電源がオフされた場合に発生し易いので、電源をオンにしたときに異常判定を行なうことで、効率的に異常を発見して修復することができる。
【０２０７】
なお、図８のフローチャートに示す処理および図１９のフローチャートに示す処理の両方を並列的に実行するようにしてもよい。
【０２０８】
さらに別の形態として、画像形成装置の電源をオンにしたタイミングで、記憶モジュール４６からカウントデータを読み出してＲＡＭ１４へ書き込み、それ以降はＲＡＭ１４に保持されているカウントデータを用いるようにしてもよい。この場合には、図２０に示すように、記憶モジュール４６からカウントデータを読み出してＲＡＭ１４へ書き込んだ場合（ステップＳ３０）に、図８のステップＳ８以下と同様の処理を実行するようにしてもよい。
【０２０９】
その後、カウントデータが発生する都度、すなわち、カウントアップまたはカウントダウンが行なわれる都度、カウント値が記憶モジュール４６へ書き込まれる。
【０２１０】
なお、カウント値の記憶モジュール４６への書き込みは、カウント動作が所定回数実行される毎、所定数のジョブが実行される毎、電源をオフにするための操作が行われたとき、などの適切なタイミングで行なうことができる。
【０２１１】
＜適用例１＞
以下、本実施の形態に従うデータカウント方法を具体的な事例に適用した場合の動作について例示する。
【０２１２】
図２１は、この発明の実施の形態に従うデータカウント方法の適用例１を説明するための図である。
【０２１３】
適用例１に係るメモリに格納されているカウントデータ例を図２１（ａ）に示す。この図２１（ａ）には、管理カウントアドレス数Ｎ＝７、かつ、カウント単位α＝１として、データカウントを行なう場合の処理例を示す。なお、図２１（ａ）に示す例では、アドレス［３］，［５］，［７］の３つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【０２１４】
まず、図８のステップＳ６および図１０に示す連続カウントアドレス算出サブルーチンを実行することで、図２１（ｂ）に示すように、各カウントアドレスについて、（今回の注目カウントアドレスのカウントデータ）−（前回の注目カウントアドレスのカウントデータ）が算出される（図１０のステップＳ２１２）。従って、ステップＳ２１４およびＳ２１８などの処理に従って、アドレス［１］および［２］の２つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス［１］のカウントデータおよびアドレス［２］の計２つのカウントアドレスのみについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【０２１５】
次に、図８のステップＳ８および図１１に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される（図１１のステップＳ３０４）。
【０２１６】
さらに、アドレス［１］および［２］の２つのカウントアドレスが「連続カウントアドレス群」であるので、図８のステップＳ１４および図１２に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“Ｎ／２＋１”の式から、“４”と算出される。
【０２１７】
さらに、図８のステップＳ１６および図１３に示す異常特定サブルーチンを実行することで、図２１（ｃ）に示すように、各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧが算出される。なお、図２１（ｃ）には、連続カウントアドレス群であるアドレス［１］および［２］の２つのカウントアドレスのうち、アドレス［２］を比較元カウントアドレスに設定した場合の例を示す。この図２１（ｃ）に示す各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧについて、“絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧ”が成立せず（図１３に示すステップＳ５１２においてＮＯ）、かつ、“絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）”が成立しない（図１３に示すステップＳ５１４においてＮＯ）ものは、アドレス［３］，［５］，［７］である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【０２１８】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“３”であり、算出された過半数の値“４”より小さいので、図８のステップＳ１８の処理に基づいて、図８のステップＳ２０および図１４に示す修復サブルーチンが実行される。
【０２１９】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例１では、カウント動作がカウントアップであるので、図１５に示す第１異常修復サブルーチンが実行される。
【０２２０】
このとき、基準値カウントアドレスは、アドレス［６］となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧは、図２１（ｄ）に示すようになる。
【０２２１】
各カウントアドレスにつての絶対値差分ＲＡＧの値に応じて、図１５のステップＳ７０６ＡおよびＳ７０８Ａのいずれか一方の修復処理が実行される。より具体的には、アドレス［３］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“１４”が“２６”へ修復される。また、アドレス［５］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“１６”が“２８”へ修復される。また、アドレス［７］については、図１５のステップＳ７０８Ａの処理が実行され、カウントデータ“１８”が“２３”へ修復される。
【０２２２】
＜適用例２＞
図２２は、この発明の実施の形態に従うデータカウント方法の適用例２を説明するための図である。
【０２２３】
適用例２に係るメモリに格納されているカウントデータ例を図２２（ａ）に示す。この図２２（ａ）には、管理カウントアドレス数Ｎ＝７、かつ、カウント単位α＝１として、データカウントを行なう場合の処理例を示す。なお、図２２（ａ）に示す例では、アドレス［２］，［４］，［６］の３つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【０２２４】
まず、図８のステップＳ６および図１０に示す連続カウントアドレス算出サブルーチンを実行することで、図２２（ｂ）に示すように、各カウントアドレスについて、（今回の注目カウントアドレスのカウントデータ）−（前回の注目カウントアドレスのカウントデータ）が算出される（図１０のステップＳ２１２）。従って、ステップＳ２１４およびＳ２１６などの処理に従って、アドレス［１］および［７］の２つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス［１］のカウントデータおよびアドレス［７］の計２つのカウントアドレスのみについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【０２２５】
次に、図８のステップＳ８および図１１に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される（図１１のステップＳ３０４）。
【０２２６】
さらに、アドレス［１］および［７］の２つのカウントアドレスが「連続カウントアドレス群」であるので、図８のステップＳ１４および図１２に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“Ｎ／２＋１”の式から、“４”と算出される。
【０２２７】
さらに、図８のステップＳ１６および図１３に示す異常特定サブルーチンを実行することで、図２２（ｃ）に示すように、各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧが算出される。なお、図２２（ｃ）には、連続カウントアドレス群であるアドレス［１］および［７］の２つのカウントアドレスのうち、アドレス［１］を比較元カウントアドレスに設定した場合の例を示す。この図２２（ｃ）に示す各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧについて、“絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧ”が成立せず（図１３に示すステップＳ５１２においてＮＯ）、かつ、“絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）”が成立しない（図１３に示すステップＳ５１４においてＮＯ）ものは、アドレス［２］，［４］，［６］である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【０２２８】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“３”であり、算出された過半数の値“４”より小さいので、図８のステップＳ１８の処理に基づいて、図８のステップＳ２０および図１４に示す修復サブルーチンが実行される。
【０２２９】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例２では、カウント動作がカウントアップであるので、図１５に示す第１異常修復サブルーチンが実行される。
【０２３０】
このとき、基準値カウントアドレスは、アドレス［７］となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧは、図２２（ｄ）に示すようになる。
【０２３１】
各カウントアドレスにつての絶対値差分ＲＡＧの値に応じて、図１５のステップＳ７０６ＡおよびＳ７０８Ａのいずれか一方の修復処理が実行される。より具体的には、アドレス［２］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“１５”が“３８”へ修復される。また、アドレス［４］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“１７”が“４０”へ修復される。また、アドレス［６］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“１９”が“４２”へ修復される。
【０２３２】
＜適用例３＞
図２３は、この発明の実施の形態に従うデータカウント方法の適用例３を説明するための図である。
【０２３３】
適用例３に係るメモリに格納されているカウントデータ例を図２３（ａ）に示す。この図２３（ａ）には、管理カウントアドレス数Ｎ＝７、かつ、カウント単位α＝１として、データカウントを行なう場合の処理例を示す。なお、図２３（ａ）に示す例では、アドレス［１］，［２］，［４］の３つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【０２３４】
まず、図８のステップＳ６および図１０に示す連続カウントアドレス算出サブルーチンを実行することで、図２３（ｂ）に示すように、各カウントアドレスについて、（今回の注目カウントアドレスのカウントデータ）−（前回の注目カウントアドレスのカウントデータ）が算出される（図１０のステップＳ２１２）。従って、ステップＳ２１４およびＳ２１６などの処理に従って、アドレス［１］および［２］の２つのカウントアドレス、ならびに、アドレス［５］，［６］および［７］の３つのカウントアドレスがそれぞれ「連続カウントアドレス群」として決定される。言い換えれば、アドレス［１］，［２］，［５］，［６］，［７］のカウントデータの計５つのカウントアドレスについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【０２３５】
さらに、図１０のステップＳ２３８に示す処理によって、連続したアドレスの最長値を有する組に含まれるカウントアドレスが連続カウントアドレス群に決定される。この場合には、より長く連続している、アドレス［５］，［６］および［７］の３つのカウントアドレスが「連続カウントアドレス群」として採用される。
【０２３６】
次に、図８のステップＳ８および図１１に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される（図１１のステップＳ３０４）。
【０２３７】
さらに、アドレス［５］，［６］および［７］の３つのカウントアドレスが「連続カウントアドレス群」であるので、図８のステップＳ１４および図１２に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“Ｎ／２＋１”の式から、“４”と算出される。
【０２３８】
さらに、図８のステップＳ１６および図１３に示す異常特定サブルーチンを実行することで、図２３（ｃ）に示すように、各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧが算出される。なお、図２３（ｃ）には、連続カウントアドレス群であるアドレス［５］，［６］および［７］の３つのカウントアドレスのうち、アドレス［７］を比較元カウントアドレスに設定した場合の例を示す。この図２３（ｃ）に示す各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧについて、“絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧ”が成立せず（図１３に示すステップＳ５１２においてＮＯ）、かつ、“絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）”が成立しない（図１３に示すステップＳ５１４においてＮＯ）ものは、アドレス［１］，［２］，［４］である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【０２３９】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“３”であり、算出された過半数の値“４”より小さいので、図８のステップＳ１８の処理に基づいて、図８のステップＳ２０および図１４に示す修復サブルーチンが実行される。
【０２４０】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例３では、カウント動作がカウントアップであるので、図１５に示す第１異常修復サブルーチンが実行される。
【０２４１】
このとき、基準値カウントアドレスは、アドレス［３］となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧは、図２３（ｄ）に示すようになる。
【０２４２】
各カウントアドレスにつての絶対値差分ＲＡＧの値に応じて、図１５のステップＳ７０６ＡおよびＳ７０８Ａのいずれか一方の修復処理が実行される。より具体的には、アドレス［１］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“４１”が“４９”へ修復される。また、アドレス［２］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“４２”が“５０”へ修復される。また、アドレス［４］については、図１５のステップＳ７０８Ａの処理が実行され、カウントデータ“４４”が“４５”へ修復される。
【０２４３】
＜適用例４＞
図２４は、この発明の実施の形態に従うデータカウント方法の適用例４を説明するための図である。
【０２４４】
適用例４に係るメモリに格納されているカウントデータ例を図２４（ａ）に示す。この図２４（ａ）には、管理カウントアドレス数Ｎ＝６、かつ、カウント単位α＝１として、データカウントを行なう場合の処理例を示す。なお、図２４（ａ）に示す例では、アドレス［２］および［６］の２つのカウントアドレスにおけるカウントデータにそれぞれエラーが発生しているとする。
【０２４５】
まず、図８のステップＳ６および図１０に示す連続カウントアドレス算出サブルーチンを実行することで、図２４（ｂ）に示すように、各カウントアドレスについて、（今回の注目カウントアドレスのカウントデータ）−（前回の注目カウントアドレスのカウントデータ）が算出される（図１０のステップＳ２１２）。従って、ステップＳ２１４およびＳ２１６などの処理に従って、アドレス［３］，［４］および［５］の３つのカウントアドレスが「連続カウントアドレス群」として決定される。言い換えれば、アドレス［３］，［４］および［５］のカウントデータについて、「規則性あり」と判断され、その他のカウントアドレスにつては「規則性なし」と判断される。
【０２４６】
次に、図８のステップＳ８および図１１に示す異常判定サブルーチンを実行することで、管理カウントアドレス群に含まれるすべてのカウントアドレスにおいて「規則性なし」と判断されているため、対象の管理カウントアドレス群について「異常あり」と判断される（図１１のステップＳ３０４）。
【０２４７】
さらに、アドレス［３］，［４］および［５］の３つのカウントアドレスが「連続カウントアドレス群」であるので、図８のステップＳ１４および図１２に示す過半数算出サブルーチンが実行されて、対象のカウントアドレス数についての過半数の値が“Ｎ／２＋１”の式から、“４”と算出される。
【０２４８】
さらに、図８のステップＳ１６および図１３に示す異常特定サブルーチンを実行することで、図２４（ｃ）に示すように、各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧが算出される。なお、図２４（ｃ）には、連続カウントアドレス群であるアドレス［３］，［４］および［５］の３つのカウントアドレスのうち、アドレス［５］を比較元カウントアドレスに設定した場合の例を示す。この図２４（ｃ）に示す各カウントアドレスについての絶対値差分ＡＧおよび絶対値差分ＤＧについて、“絶対値差分ＤＧ＝カウント単位α×絶対値差分ＡＧ”が成立せず（図１３に示すステップＳ５１２においてＮＯ）、かつ、“絶対値差分ＤＧ＝カウント単位α×（管理カウントアドレス数Ｎ−絶対値差分ＡＧ）”が成立しない（図１３に示すステップＳ５１４においてＮＯ）ものは、アドレス［２］および［６］である。そのため、これらのカウントアドレスが異常カウントアドレスとして特定される。
【０２４９】
ここで、異常カウントアドレスとして特定されたカウントアドレスの数は“２”であり、算出された過半数の値“４”より小さいので、図８のステップＳ１８の処理に基づいて、図８のステップＳ２０および図１４に示す修復サブルーチンが実行される。
【０２５０】
修復サブルーチンにおいて、管理カウントアドレス群に含まれるアドレスのうち、異常カウントアドレス以外のアドレスの中で最大値を示すものを基準値カウントアドレスに選択すると、適用例４では、カウント動作がカウントアップであるので、図１５に示す第１異常修復サブルーチンが実行される。
【０２５１】
このとき、基準値カウントアドレスは、アドレス［５］となる。そのため、基準値カウントアドレスのアドレス番号と各カウントアドレスのアドレス番号との間の絶対値差分ＲＡＧは、図２４（ｄ）に示すようになる。
【０２５２】
各カウントアドレスにつての絶対値差分ＲＡＧの値に応じて、図１５のステップＳ７０６ＡおよびＳ７０８Ａのいずれか一方の修復処理が実行される。より具体的には、アドレス［２］については、図１５のステップＳ７０６Ａの処理が実行され、カウントデータ“３１”が“１６”へ修復される。また、アドレス［６］については、図１５のステップＳ７０８Ａの処理が実行され、カウントデータ“３５６”が“１４”へ修復される。
【０２５３】
＜作用効果＞
本実施の形態によれば、カウントアドレスの単位でカウント可能な範囲を自在に設定できるので、自由度が高く、かつ、メモリの使用効率を高めることができる。さらに、２つ以上のカウントアドレスにデータ破壊などが生じた場合であっても、より効率的にデータ破壊が生じているカウントアドレスを特定し、さらに、それらを修復することができる。そのため、より信頼性の高いカウント動作を提供できる。
【０２５４】
［その他の実施の形態］
上述の実施の形態において説明したような制御を実行させるプログラムを任意の方法で提供することもできる。このようなプログラムは、フレキシブルディスク、ＣＤ−ＲＯＭ（Compact Disk-Read Only Memory）、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）およびメモリカードなどのコンピュータ読取り可能な記録媒体に記録させた状態で提供することもできる。あるいは、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【０２５５】
このようなプログラムは、コンピュータのオペレーティングシステム（ＯＳ）の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずＯＳと協働して処理が実行される。このようなモジュールを含まないプログラムも、本実施の形態に従うプログラムに含まれ得る。
【０２５６】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した実施の形態の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２５７】
１０  ＣＰＵ、１２  ＲＯＭ、１４  ＲＡＭ、１６  内部バス、１８  通信Ｉ／Ｆ、２０  入出力Ｉ／Ｏ、３１，３２，…，３Ｎ，  コネクタ、４０  感光体ユニット、４２  感光体、４４  トナー供給孔、４６  記憶モジュール、４８  メモリ、５０  トナーユニット、６０  カセット、７０  プリントエンジン、１００  制御部、１０２  カウントモジュール、１０４  連続カウントアドレス特定モジュール、１０６  異常検出モジュール、１０８  異常特定モジュール、１１０  修復モジュール、１１２  入出力モジュール、ＡＧ  絶対値差分、ＤＧ  絶対値差分、ＭＦＰ  画像形成装置、ＲＡＧ  絶対値差分、α  カウント単位。
【図１】
2011199449.tif 000003
【図２】
2011199449.tif 000004
【図３】
2011199449.tif 000005
【図４】
2011199449.tif 000006
【図５】
2011199449.tif 000007
【図６】
2011199449.tif 000008
【図７】
2011199449.tif 000009
【図８】
2011199449.tif 000010
【図９】
2011199449.tif 000011
【図１０】
2011199449.tif 000012
【図１１】
2011199449.tif 000013
【図１２】
2011199449.tif 000014
【図１３】
2011199449.tif 000015
【図１４】
2011199449.tif 000016
【図１５】
2011199449.tif 000017
【図１６】
2011199449.tif 000018
【図１７】
2011199449.tif 000019
【図１８】
2011199449.tif 000020
【図１９】
2011199449.tif 000021
【図２０】
2011199449.tif 000022
【図２１】
2011199449.tif 000023
【図２２】
2011199449.tif 000024
【図２３】
2011199449.tif 000025
【図２４】
2011199449.tif 000026