(57)【要約】【課題】メモリの利用効率がよく、破損したカウントデータを修復可能なカウントデータ記録装置を提供する。【解決手段】Ｎ個（Ｎは、４以上の整数）の記憶領域と、カウントデータを記憶領域に書き込むデータ書込部と、カウントデータを読み出すデータ読出部と、カウントデータの破損を検出して該破損を修復するデータ修復部とを有し、データ書込部は、Ｍ個（Ｍは、３以上Ｎ未満の整数）の記憶領域を小ループ範囲に定め、該小ループの範囲の記憶領域を順に使用してカウントデータを記録し、該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、所定の順に沿って後方へずらして小ループ範囲を変更する、ようにして、カウントデータを記憶部に記録し、データ修復部は、カウントデータをソートした被ソートカウントデータ列と該データ列の差分値列とに基づいて破損を修復するカウントデータ記録装置。【選択図】図１
2010146053.tif 000002
【特許請求の範囲】
【請求項１】
所定値から所定幅で単調に変化するカウント値をカウントデータとして記憶領域に記録するカウントデータ記録装置であって、
前記カウントデータを記憶する記憶領域をＮ個（Ｎは、４以上の整数）備える記憶部と、
前記カウントデータを前記記憶部に書き込むデータ書込部と、
前記カウントデータを前記記憶部から読み出すデータ読出部と、
前記記憶部に記憶されたカウントデータの破損を検出し、該破損を修復するデータ修復部とを有し、
前記データ書込部は、
前記Ｎ個の記憶領域のなかから、カウントデータの記録に使用する記憶領域の順序を規定する所定の順序に従って、Ｍ個（Ｍは、３以上前記Ｎ未満の整数）の記憶領域を選択して小ループ範囲に定め、
該小ループの範囲に含まれる前記記憶領域を前記所定の順序に沿って使用してカウントデータを記録し、
該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、前記所定の順序に沿って後方へずらして小ループ範囲を変更する、
ようにして、カウントデータを前記記憶部に記録し、
前記データ修復部は、
前記Ｎ個の記憶領域に記憶されたカウントデータを、カウントデータの値が単調に変化するようにソートして被ソートカウントデータ列を導出し、
前記被ソートカウントデータ列において互いに隣り合ったカウントデータ同士の差分値を求めてカウントデータ差分値列を導出し、
当該被ソートカウントデータ列およびカウントデータ差分値列に基づいて、前記Ｎ個の記憶領域に記憶されたカウントデータの破損を検出して該破損を修復する、カウントデータ記録装置。
【請求項２】
前記データ修復部は、前記カウントデータ差分値列において１番目に位置する第１カウントデータ差分値からｊ番目（ｊは、１から（Ｎ−１）までの整数）に位置する第ｊカウントデータ差分値までのｊ個の差分値に基づいて、前記被ソートカウントデータ列における第ｊ番目および第ｊ＋１番目に位置するカウントデータの少なくともいずれかの破損の有無を検出する、請求項１に記載のカウントデータ記録装置。
【請求項３】
前記データ修復部が前記被ソートカウントデータ列における第Ｍ番目に位置するカウントデータの破損を検出した場合には、
前記データ修復部は、前記被ソートカウントデータ列における第１番目に位置するカウントデータの値を前記所定幅で除算し、当該除算にて得た商を前記Ｍで除算したときに生じる剰余に基づいて、前記被ソートカウントデータ列における第Ｍ番目に位置するカウントデータを修復する、請求項２に記載のカウントデータ記録装置。
【請求項４】
前記データ修復部が前記被ソートカウントデータ列における第（Ｍ＋ｋ）番目（ｋは、１からＮ−Ｍの整数）に位置するカウントデータの破損を検出した場合には、
前記データ修復部は、前記被ソートカウントデータ列における第（Ｍ＋ｋ−１）番目に位置するカウントデータの値に対して前記Ｍと前記所定幅の積を加算して得た値を用いて、前記第（Ｍ＋ｋ）番目に位置するカウントデータの破損を修復する、請求項２に記載のカウントデータ記録装置。
【請求項５】
カウントデータ記録装置が、所定値から所定幅で単調に変化するカウント値をカウントデータとして記憶領域に記録するカウントデータ記録方法であって、
データ書込部が、前記カウントデータを記憶する記憶領域をＮ個（Ｎは、４以上の整数）備える記憶部の記憶領域のなかから、カウントデータの記録に使用する記憶領域の順序を規定する所定の順序に従って、Ｍ個（Ｍは、３以上前記Ｎ未満の整数）の記憶領域を選択して小ループ範囲に定めるステップと、
前記データ書込部が、該小ループの範囲に含まれる前記記憶領域を前記所定の順序に沿って使用してカウントデータを記録するステップと、
前記データ書込部が、該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、前記所定の順序に沿って後方へずらして小ループ範囲を変更するステップと、
データ修復部が、前記Ｎ個の記憶領域に記憶されたカウントデータを、カウントデータの値が単調に変化するようにソートして被ソートカウントデータ列を導出するステップと、
前記データ修復部が、前記被ソートカウントデータ列において互いに隣り合ったカウントデータ同士の差分値を求めてカウントデータ差分値列を導出するステップと、
前記データ修復部が、当該被ソートカウントデータ列およびカウントデータ差分値列に基づいて、前記Ｎ個の記憶領域に記憶されたカウントデータの破損を検出して該破損を修復するステップと、を有するカウントデータ記録方法。
【請求項６】
所定値から所定幅で単調に変化するカウント値をカウントデータとして記憶領域に記録するカウントデータ記録装置のコンピュータが実行可能なカウントデータ記録プログラムであって、
データ書込部に、前記カウントデータを記憶する記憶領域をＮ個（Ｎは、４以上の整数）備える記憶部の記憶領域のなかから、カウントデータの記録に使用する記憶領域の順序を規定する所定の順序に従って、Ｍ個（Ｍは、３以上前記Ｎ未満の整数）の記憶領域を選択して小ループ範囲に定めさせるステップと、
前記データ書込部に、該小ループの範囲に含まれる前記記憶領域を前記所定の順序に沿って使用してカウントデータを記録させるステップと、
前記データ書込部に、該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、前記所定の順序に沿って後方へずらして小ループ範囲を変更させるステップと、
データ修復部に、前記Ｎ個の記憶領域に記憶されたカウントデータを、カウントデータの値が単調に変化するようにソートして被ソートカウントデータ列を導出させるステップと、
前記データ修復部に、前記被ソートカウントデータ列において互いに隣り合ったカウントデータ同士の差分値を求めてカウントデータ差分値列を導出させるステップと、
前記データ修復部に、当該被ソートカウントデータ列およびカウントデータ差分値列に基づいて、前記Ｎ個の記憶領域に記憶されたカウントデータの破損を検出して該破損を修復させるステップと、を有するカウントデータ記録プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ等で構成される記憶領域へカウントデータを記録する装置、および、カウントデータ記録方法に関し、特に、該記憶領域に記録されたカウントデータにおいて生じた破損を検出し、当該検出にかかる破損したカウントデータを正常な状態へ修復するカウントデータ記録装置、および、記録方法に関する。
【背景技術】
【０００２】
従来、データの記録および保持には、メモリが利用される。特に、長期にわたって、データをメモリ内に保持する用途には、不揮発性メモリが用いられる。ここで、不揮発性メモリとは、電源を供給しなくても記憶を保持するメモリの総称である。
【０００３】
しかしながら、不揮発性メモリ（例えば、ＥＥＰＲＯＭ（Electrically Erasable and Programmable Read Only Memory））は、一般に、データの書き込みに関する繰り返し耐性が小さい。例えば、不揮発性メモリの書き込み繰り返し耐性は、その種類によって様々だが、例えば、１００万回程度である。
【０００４】
特定のデータのみを記録する用途に不揮発性メモリが用いられることもある。このような特定のデータの例としては、カウントデータがある。カウントデータとは、特定の値から所定値ずつインクリメントされて記録されることによって、何らかの回数をカウントするために用いられるデータである。（上記所定値が負の数であれば、カウントデータは、上記特定の値からデクリメントされつつ、順次、記録されるデータである。）カウントデータは、例えば、特定のデバイス（例えば、画像処理装置の感光体ユニット）が動作した回数を記録する用途に用いられる。
【０００５】
このようなカウントデータを、書き込み繰り返し耐性が比較的小さいメモリに記録する場合には、以下に記すようにしてカウントデータをメモリへ記録し、また、データが破壊されたときにはその修復を行う。
【０００６】
例えば、メモリの１つのアドレスに対する書き込み繰り返し耐性が１００万回であるメモリを用いて、３００万回のカウントデータの書き込みを行う場合、３つのアドレスを用いて、３つのアドレスに対し、順次的に、カウントデータの書き込みを行う。カウントデータは、所定値ずつ増加（あるいは減少）するため、上記３つのアドレスには、所定値ずつ増加（あるいは減少）する３つの値が、記録される。
【０００７】
カウントデータには、所定値ずつ増加（あるいは減少）するという性質が備わっているため、記録されたカウントデータが破壊された場合であっても、破壊されていないカウントデータの値を用いて、当該値に所定値あるいは所定値の２倍の値を加算（あるいは減算）して得られる値を、破壊されたアドレスに書き込むことで、破壊されたカウントデータを修復することができる。
【０００８】
このように、メモリの１つのアドレスに対する書き込み繰り返し耐性が１００万回であるメモリを用いる場合、３つのアドレスを用いることで３００万回のカウントデータの書き込み、および、その修復が可能である。
【０００９】
また、メモリの１つのアドレスに対する書き込み繰り返し耐性が１００万回であるメモリを用いて、３５０万回のカウントデータの書き込みを行おうとする場合、次のようにして、３５０万回のカウントデータの記録を実現している例も存在する。
【００１０】
先ず、所定の回数（例えば、９７万回）までは、先の例と同様に、３つのアドレスに対し、順次的に、カウントデータの書き込みを行う。ここからは、先の例とは異なり、上記３つのアドレスとは別の３つのアドレスに対し、順次的に、カウントデータの書き込みが開始される。
【００１１】
このような方法論によれば、３５０万回のカウントデータの書き込みを行うためには、カウントデータが書き込まれる６つのアドレスと、上記３つのアドレスそれぞれに対する書き込み回数を保持するための３つのアドレスと、上記３つのアドレス群および上記別の３つのアドレス群のいずれのアドレス群をカウントデータとして使用するかを示すデータが保持されるための１つのアドレスと、の総計１０個のアドレスが必要になる。
【００１２】
理論上、３５０万回の書き込みがなされるカウントデータの記録は、１００万回のデータ書き込みが可能なアドレスを４つ使えば足りる。にも拘わらず、上記の従来例においては、１０個のアドレスを用いて、カウントデータの記録（および破損されたカウントデータの修復）を行う。このことは、メモリの利用効率の観点から好ましいこととは言えない。
【００１３】
また、記録されたデータの誤りを検出して誤りを修復するための従来技術例として、以下の特許文献が存在する。
【００１４】
特許文献１は、カウントデータを記録する装置であるカウンタを開示する。
特許文献１に記載のカウンタは、制御手段と、連続した複数の値からなる初期値が設定された複数のサブカウンタとを備える。
カウントアップ時においては、当該カウンタの制御手段は、複数のカウンタの持つ値のうちで最大の値と２番目に大きな値とが連続しているか否かを判断し、連続していないと判断した場合には、最小の値を持つサブカウンタの値を、２番目に大きな値に２を加算した値に書き換えて当該書き換えられた値をカウント値とし、また、連続していると判断した場合には、最小の値を持つサブカウンタの値を、最大の値に１を加算した値に書き換えて当該書き換えられた値をカウント値とする。
このような構成によって、特許文献１に記載のカウンタは、複数のサブカウンタが持つ値相互間の連続性に着目して各サブカウンタが持つ値が誤った値であるか正しい値であるかを判定し、正しい値であると判定された値を用いてカウント値の誤りを補正する。
【００１５】
特許文献２は、画像形成装置に装着された交換ユニットの使用程度を表す情報を記憶する画像形成装置用寿命管理装置を開示する。
特許文献２に記載の装置は、交換ユニットの使用程度を表す情報を記憶する不揮発性メモリと、交換ユニットの使用程度を表す情報を不揮発性メモリに書き込む書込み手段と、不揮発性メモリに書き込まれた情報の誤りを検出して修復する修復処理手段と、を備える。また、当該不揮発性メモリには、３つ以上の、交換ユニットの使用程度を表す情報を記憶する領域が設けられている。
交換ユニットの使用程度を表す情報を書き込む際、当該装置の書込み手段は、同一内容の交換ユニットの使用程度を表す情報を、上記した３つ以上の領域のそれぞれに書き込む処理を行う。そして、該装置の修復処理手段は、上記した３つ以上の領域のそれぞれに書き込まれた情報が同一であるか否かを判断し、同一でないと判断した場合には、当該３つ以上の領域のそれぞれに書き込まれた情報が同一となるように修復処理を行う。
このような構成によって、特許文献２に記載の画像形成装置用寿命管理装置は、複数の記憶領域に書き込まれた情報が同一であるか否かに着目して誤った情報を検出し、該誤った情報を正しい情報に修復する。
【００１６】
このように、カウントデータ等を記録し、適宜、誤ったカウントデータ等を正しいデータに修復するための技術は、数多く提示されている。
【特許文献１】特開平０７−０７８２３２号公報
【特許文献２】特開２０００−１７２１３３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
本発明は、メモリに対する書込繰り返し耐性とカウント可能な回数との相対的利用効率の観点において、メモリの利用効率が従来よりも向上され、かつ、破損を受けたカウントデータを修復できるカウントデータ記録装置を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明は、その一態様においては、所定値から所定幅で単調に変化するカウント値をカウントデータとして記憶領域に記録するカウントデータ記録装置であって、カウントデータを記憶する記憶領域をＮ個（Ｎは、４以上の整数）備える記憶部と、カウントデータを記憶部に書き込むデータ書込部と、カウントデータを記憶部から読み出すデータ読出部と、記憶部に記憶されたカウントデータの破損を検出し、該破損を修復するデータ修復部とを有し、データ書込部は、Ｎ個の記憶領域のなかから、カウントデータの記録に使用する記憶領域の順序を規定する所定の順序に従って、Ｍ個（Ｍは、３以上Ｎ未満の整数）の記憶領域を選択して小ループ範囲に定め、該小ループの範囲に含まれる記憶領域を所定の順序に沿って使用してカウントデータを記録し、該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、所定の順序に沿って後方へずらして小ループ範囲を変更する、ようにして、カウントデータを記憶部に記録し、データ修復部は、Ｎ個の記憶領域に記憶されたカウントデータを、カウントデータの値が単調に変化するようにソートして被ソートカウントデータ列を導出し、被ソートカウントデータ列において互いに隣り合ったカウントデータ同士の差分値を求めてカウントデータ差分値列を導出し、当該被ソートカウントデータ列およびカウントデータ差分値列に基づいて、Ｎ個の記憶領域に記憶されたカウントデータの破損を検出して該破損を修復する、カウントデータ記録装置である。
【００１９】
本発明の一態様においては、データ修復部は、カウントデータ差分値列において１番目に位置する第１カウントデータ差分値からｊ番目（ｊは、１から（Ｎ−１）までの整数）に位置する第ｊカウントデータ差分値までのｊ個の差分値に基づいて、被ソートカウントデータ列における第ｊ番目および第ｊ＋１番目に位置するカウントデータの少なくともいずれかの破損の有無を検出する、ことが好ましい。
【００２０】
本発明の一態様においては、データ修復部が被ソートカウントデータ列における第Ｍ番目に位置するカウントデータの破損を検出した場合には、データ修復部は、被ソートカウントデータ列における第１番目に位置するカウントデータの値を前記所定幅で除算し、当該除算にて得た商をＭで除算したときに生じる剰余に基づいて、被ソートカウントデータ列における第Ｍ番目に位置するカウントデータを修復する、ことが好ましい。
【００２１】
本発明の一態様においては、データ修復部が被ソートカウントデータ列における第（Ｍ＋ｋ）番目（ｋは、１からＮ−Ｍの整数）に位置するカウントデータの破損を検出した場合には、データ修復部は、被ソートカウントデータ列における第（Ｍ＋ｋ−１）番目に位置するカウントデータの値に対してＭと所定幅の積を加算して得た値を用いて、第（Ｍ＋ｋ）番目に位置するカウントデータの破損を修復する、ことが好ましい。
【００２２】
本発明は、その別の一態様においては、カウントデータ記録装置が、所定値から所定幅で単調に変化するカウント値をカウントデータとして記憶領域に記録するカウントデータ記録方法であって、データ書込部が、カウントデータを記憶する記憶領域をＮ個（Ｎは、４以上の整数）備える記憶部の記憶領域のなかから、カウントデータの記録に使用する記憶領域の順序を規定する所定の順序に従って、Ｍ個（Ｍは、３以上Ｎ未満の整数）の記憶領域を選択して小ループ範囲に定めるステップと、データ書込部が、該小ループの範囲に含まれる記憶領域を所定の順序に沿って使用してカウントデータを記録するステップと、データ書込部が、該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、所定の順序に沿って後方へずらして小ループ範囲を変更するステップと、データ修復部が、Ｎ個の記憶領域に記憶されたカウントデータを、カウントデータの値が単調に変化するようにソートして被ソートカウントデータ列を導出するステップと、データ修復部が、被ソートカウントデータ列において互いに隣り合ったカウントデータ同士の差分値を求めてカウントデータ差分値列を導出するステップと、データ修復部が、当該被ソートカウントデータ列およびカウントデータ差分値列に基づいて、Ｎ個の記憶領域に記憶されたカウントデータの破損を検出して該破損を修復するステップと、を有するカウントデータ記録方法である。
【００２３】
本発明は、そのさらに別の一態様においては、所定値から所定幅で単調に変化するカウント値をカウントデータとして記憶領域に記録するカウントデータ記録装置のコンピュータが実行可能なカウントデータ記録プログラムであって、データ書込部に、カウントデータを記憶する記憶領域をＮ個（Ｎは、４以上の整数）備える記憶部の記憶領域のなかから、カウントデータの記録に使用する記憶領域の順序を規定する所定の順序に従って、Ｍ個（Ｍは、３以上Ｎ未満の整数）の記憶領域を選択して小ループ範囲に定めさせるステップと、データ書込部に、該小ループの範囲に含まれる記憶領域を所定の順序に沿って使用してカウントデータを記録させるステップと、データ書込部に、該小ループ範囲の最後尾の記憶領域を使用してカウントデータを記録すると、該小ループ範囲を、所定の順序に沿って後方へずらして小ループ範囲を変更させるステップと、データ修復部に、Ｎ個の記憶領域に記憶されたカウントデータを、カウントデータの値が単調に変化するようにソートして被ソートカウントデータ列を導出させるステップと、データ修復部に、被ソートカウントデータ列において互いに隣り合ったカウントデータ同士の差分値を求めてカウントデータ差分値列を導出させるステップと、データ修復部に、当該被ソートカウントデータ列およびカウントデータ差分値列に基づいて、Ｎ個の記憶領域に記憶されたカウントデータの破損を検出して該破損を修復させるステップと、を有するカウントデータ記録プログラムである。
【発明の効果】
【００２４】
本発明によるカウントデータ記録装置およびカウントデータ記録方法は、メモリに対する書込繰り返し耐性とカウント可能な回数との相対的利用効率の観点においてメモリの利用効率が従来よりも優れ、かつ、記録されたカウントデータが破損を受けた場合には、当該破損を修復し、正確なカウントデータに戻すことが可能である。
【発明を実施するための最良の形態】
【００２５】
本発明の実施の形態によるカウントデータ記録装置は、記憶装置の書き込み繰り返し耐性を超えてカウントデータを記録することが可能である。当該カウントデータ記録装置は、それぞれがカウントデータを記憶可能な記憶領域をＮ個（Ｎ：４以上の整数。）備える。カウントデータ記録装置は、カウント開始値Ｃ（Ｃは任意の数。）からインクリメント幅Ｌ（Ｌは０を除く数。）で単調に増加（Ｌが正数の場合。）（減少（Ｌが負数の場合。））するカウントデータを記録する。当該カウントデータ記録装置は、カウントデータを１回記録する度に、次に使用する記憶領域を所定の順序に従って変更する。
該カウントデータ記録装置においては、上記所定の順序における第Ｎ番目の記憶領域を使用してカウントデータを記録した場合、その次にカウントデータを記録するときは、原則として、上記所定の順序における第１番目の記憶領域を使用してカウントデータを記録するようにして、循環的にＮ個の記憶領域を使用する。本願においては、この、Ｎ個の記憶領域からなる、カウントデータの記録に使用する記憶領域の循環を「大ループ」と称する。
さらに、本発明の実施の形態によるカウントデータ記録装置は、上記「大ループ」の内部に含まれ、カウントデータの記録に使用する記憶領域を上記所定の順序に従って局所的に循環させるもう１つのループを備える。ここでは、この大ループ内における記憶領域のもう１つの循環を、「小ループ」と称する。「小ループ」は、Ｍ個（Ｍ：３以上Ｎ未満の整数。）の記憶領域からなり、１回のカウントデータの記録毎に順番に、次に使用する記憶領域を小ループ内で変更する。そして、小ループについての第Ｍ番目の記憶領域を使用してカウントデータを記録し、その次にカウントデータを記録するときは、小ループを構成するＭ個の記憶領域の範囲を、大ループ内における上記所定の順序に従って１つ後方へシフトさせ、新たな小ループの範囲を規定し、当該新たな小ループについての第１番目の記憶領域を使用してカウントデータを記録する。例えば、最初の小ループの範囲が、大ループについての第１番目から第Ｍ番目までのＭ個の記憶領域であれば、当該第Ｍ番目の記憶領域を使用してカウントデータを記録した後、小ループの範囲は、大ループについての第２番目から第（Ｍ＋１）番目までのＭ個の記憶領域が新たな小ループの範囲となり、次のカウントデータの記録は、大ループについての第２番目の記憶領域に対して行われる。
小ループの範囲が、大ループについての第Ｎ番目の記憶領域を超えるような場合には、小ループの範囲は、大ループについての所定の順序に従って循環のルールに従って大ループの第１番目の記憶領域に戻って延びる。
【００２６】
また、本発明にかかるカウントデータ記録装置は、カウントデータの破損を検出し、検出した破損を修復する。
本発明にかかるカウントデータ記録装置は、下記の原理に基づいて、カウントデータの破損を検出し、検出した破損を修復する。
上述したような方法でカウントデータを記録することにより、Ｎ個の記憶領域に記録されるカウントデータを、カウントデータの値に従って単調に変化するように（降順で（インクリメント幅Ｌが正数の場合。）または昇順で（インクリメント幅Ｌが負数の場合。））並べ替え（ソート）したときのカウントデータ列（被ソートカウントデータ列）は、有限個のパターン（カウントデータアドレス列パターン）のいずれかに一致する。また、被ソートカウントデータ列において互いに隣接するカウントデータ値の差分値がなす数列（カウントデータ差分値列）もまた、有限個のパターン（カウントデータ差分値列パターン）のいずれかに一致する。さらには、任意のカウントデータアドレス列パターンについて、当該カウントデータアドレス列パターンにおいて生じ得るカウントカウントデータ差分値列パターンとの対応関係もまた、各カウントデータアドレス列パターンについて高々有限個の予め定まった対応関係しか存在しない。しかるに、実際に記録されたカウントデータが正常であるか、破損を含んでいるか、は、当該カウントデータを、カウントデータの値でソートした被ソートカウントデータ列および被ソートカウントデータ列についてのカウントデータ差分値列が、カウントデータアドレス列パターンのいずれかと一致し、かつ、該カウントデータアドレス列パターンと対応しているカウントデータ差分値列パターンと一致するか、否か、に基づいて、判断することが可能である。
このような原理に基づいて、本発明にかかるカウントデータ記録装置は、カウントデータの破損を検出する。
また、本発明にかかるカウントデータ記録装置は、カウントデータの破損を検出した場合には、例えば、被ソートカウントデータ列において所定の順番に位置するカウントデータを正常なカウントデータであるとみなし、当該みなしにかかるカウントデータと、所定のカウントデータアドレス列パターンおよびカウントデータ差分値パターンとに基づいて、カウントデータの修復を行う。
【００２７】
このような構成により、本発明による実施の形態にかかるカウントデータ記録装置は、記憶領域の繰り返し書き込み耐性を超えた回数のカウントデータの記録、ならびに、カウントデータの破損の検出、および、カウントデータの破損の修復を行うことができる。
【００２８】
＜カウントデータ記録装置の構成＞
図１は、本発明にかかる実施の形態によるカウントデータ記録装置を示す斜視図である。本実施の形態においては、カウントデータ記録装置は、デジタル複合機（ＭＦＰ）１である。ＭＦＰ１は、所謂、画像形成装置であり、画像形成のためにトナーカートリッジ３、および、感光体ユニット５を、内部に備える。
【００２９】
図２は、感光体ユニット５の斜視図である。感光体ユニット５は、その使用回数をカウントするカウントデータを記録するための記憶装置７を備える。記憶装置７は、データ書き込みについて、記憶領域に繰り返し書き込むことができる回数が規定されており、規定された繰り返し回数を超えて、データを書き込むことは、データ記録の安定性を損なう。
【００３０】
図３は、本発明にかかる実施の形態によるカウントデータ記録装置であるＭＦＰ１のハードウェア構成を示すブロック図である。ＭＦＰ１は、データ処理や装置全体の動作の制御をする中央処理装置（ＣＰＵ）１１、プログラムやデータを保持するランダム・アクセス・メモリ（ＲＡＭ）１３、プログラムやデータを保持するリード・オンリ・メモリ（ＲＯＭ）１５を備え、これらはデータバスにより接続され、ＭＦＰ１内においてコンピュータ２１を構成する。コンピュータ２１は、カウントデータ記録用プログラムを実行することにより、カウントデータ記録装置として機能する。
【００３１】
また、ＭＦＰ１のコンピュータ２１は、カウントデータを記録するための記憶装置７、各種デバイスとのデータ送受信をするためのＩ／ＯＬＳＩ１７と接続される。Ｉ／ＯＬＳＩ１７を介し、コンピュータ２１は、出力デバイス１９ｏおよび入力デバイス１９ｉと接続される。
【００３２】
図４は、本発明の実施の形態によるカウントデータ記録装置にかかる機能を実現するためにＭＦＰ１が備える機能を表すブロック図である。コンピュータ２１は、カウントデータ記録用プログラムを実行することにより、本図に示される機能を実現する。
【００３３】
コンピュータ２１は、各機能ブロックを制御する制御部２３、記憶装置７に対しデータを所定のアドレス（記憶領域）に書き込むデータ書込部２５、記憶装置７に記録されているカウントデータ等の破損を検出し、当該破損を修復するデータ修復部２７、記憶装置７から所定のアドレス（記憶領域）に記録されたデータを読み出すデータ読出部２９、および、カウントデータ記録用プログラムの実行に必要な設定データを保持する設定データ保持部３１を実現する。
【００３４】
データ書込部２５は、設定データ保持部３１等に保持された設定データを参照してカウントデータを書き込むアドレス（記憶領域）を決定する書込アドレス決定部２５ａ、および、決定されたアドレス（記憶領域）へ、カウントデータを書き込むカウントデータ書込部２５ｂを備える。
【００３５】
データ修復部２７は、データ読出部２９が読み出した複数の所定のアドレス（記憶領域）に記録されたカウントデータを所定の規則（降順または昇順）で並べ替え、並べ替えた結果（被ソートカウントデータ列）を出力するカウントデータソート部２７ａ、カウントデータソート部２７ａが並べ替えた結果（被ソートカウントデータ列）について互いに隣接するカウントデータ間の差分（カウントデータ差分値列）を算出するカウントデータ差分算出部２７ｂ、ならびに、被ソートカウントデータ列およびカウントデータ差分値列パターン、および、被ソートカウントデータ列において所定の順番に位置するカウントデータの値に基づいて、カウントデータの破損を検出し検出された破損を修復する修復処理実行部２７ｃを備える。
【００３６】
修復処理実行部２７ｃは、データ破損の検出のための処理、および、検出されたデータ破損の修復のための処理、を実行する。
【００３７】
データ破損の検出処理は、上記被ソートカウントデータ列におけるアドレス（記憶領域）の並び方、上記被ソートカウントデータ列についてのカウントデータ差分値列の値の並び方、および、上記被ソートカウントデータ列における所定の順番に位置するカウントデータの値を、正常な（データ破損が含まれない）カウントデータを上記並べ替えした場合に起こり得るカウントデータの並び方（カウントデータアドレス列パターン）、および、各カウントデータアドレス列パターンについての互いに隣接するカウントデータの値の差分値の並び方（カウントデータ差分値列パターン）との組み合わせと比較することで、データ破損の生じているカウントデータを特定する。上記正常なカウントデータについて起こり得るカウントデータアドレス列パターンとカウントデータ差分値列パターンとの組み合わせは、データ破損の検出処理を実行する前に予め求めておき、装置が保持すればよい。上記カウントデータアドレス列パターンおよびカウントデータ差分値列パターンの数は、カウントデータの記録に用いるアドレスの数（大ループを構成するアドレスの総数Ｎ）および小ループを構成するアドレスの総数Ｍによって変化するが、いずれの場合においても高々有限個しかないため、保持可能である。
【００３８】
データ破損の修復処理は、修復処理実行部２７ｃが、データ破損の検出処理が検出した破損を含むカウントデータについて、上記カウントデータアドレス列パターンおよびカウントデータ差分値列パターンならびに被ソートカウントデータ列において所定の順番に位置するカウントデータの値に基づいて正常なカウントデータ値を求め、データ修復の指示を出力し、当該指示にもとづいて、データ書込部２５のカウントデータ書込部２５ｂが、正常なカウントデータ値を該当する記憶領域に書き込むことによって行われる。
【００３９】
設定データ保持部３１は、記憶装置７の、カウントデータを記録するために用意されている複数のアドレス、当該アドレスに対してカウントデータの書き込みを実施する順序、当該アドレスの総数（大ループ構成アドレス総数Ｎ）、小ループ構成アドレス総数Ｍ、カウントデータのインクリメント幅Ｌ、カウント初期値Ｃ等を保持する。
【００４０】
＜記憶装置７が保持するデータの構成＞
図５は、記憶装置７において、複数の、アドレス指定された記憶領域に対し、カウントデータが書き込まれる際に使用されるアドレスの順序を説明する模式図である。
【００４１】
アドレスとは、一般に、情報処理において、その処理の対象が存在する場所を規定する識別子である。本明細書においては、アドレスは、記憶装置７における記憶領域の特定のために用いる識別子を含む。
【００４２】
ここでは、１つのアドレスによって指定される記憶領域は、カウントデータを保持するのに十分なビット幅を有する。しかしながら、本発明は、複数のアドレスによって規定される記憶領域を用いて１つのカウントデータを記録することを除外するものではない。
【００４３】
１つのアドレスによって特定される記憶位置の記憶容量が、１つのカウントデータを記憶するのに必要な記憶容量に満たない場合には、複数のアドレスによって特定される複数の記憶位置に、当該１つのカウントデータを分割して記憶すればよい。その場合、本発明にかかるカウントデータ記録装置は、１つカウントデータを書き込む複数の記憶領域の組み合わせの情報や、それぞれにカウントデータを書き込む順序の情報を保持すればよい。
【００４４】
図５においては、図面左側に、Ｎ個（Ｎ：Ｎ＞＝４の正数。）の記憶領域が示される。該Ｎ個の記憶領域は、本発明における大ループを構成する記憶領域である。上述のように、Ｎ個の記憶領域には、カウントデータを書き込む順序が予め規定される。当該順序は、本図においては、第１の、第２の、・・・、第（Ｎ−１）の、第Ｎの、といった修飾語で表されている。
【００４５】
また、上述のように、本発明においては、大ループ内部において、Ｍ個の記憶領域からなる小ループが構成される。該小ループを構成するアドレス（記憶領域）の総数は、Ｍ個であればよい。ここで、Ｍは、３以上であって、Ｎよりも小さい自然数であればよい。本図においては、Ｍ＝３として、図を描いている。
【００４６】
カウントデータの書き込みが行われる順序を説明する。先ず、カウントデータ記録装置は、最初に起動した場合にのみ、初期設定を実行する。初期設定において、第１ないし第Ｎの記憶領域に対し、初期値が書き込まれる。
【００４７】
初期設定において、第１ないし第Ｎの記憶領域のそれぞれに書き込まれる初期値は、以下のようであることが望まれる。但、本発明にとってこの初期値の書き込みは必須でない。本発明においては、初期値の書き込みが行われない場合であっても、第１から第Ｎまでの各記憶領域に対し、それぞれ少なくとも１回のカウントデータの書き込みが行われた場合には、カウントデータの破損（異常）の検出および異常の修復をすることができる。
カウントデータの初期値は、
第ｉ記憶領域（ｉ：１＜＝ｉ＜Ｍ）に関し、
（初期値）＝Ｃ−（Ｍ−ｉ）・Ｌ、
第ｉ記憶領域（ｉ：Ｍ＜＝ｉ＜＝Ｎ）に関し、
（初期値）＝Ｃ−（Ｎ−ｉ＋１）・Ｍ・Ｌ、であることが望ましく、ここで、（Ｃ、Ｌ、Ｍ、Ｎ）は、（カウント開始値、カウントインクリメント幅、小ループ構成アドレス総数、大ループ構成アドレス総数）である。
【００４８】
第１回目のカウントデータの書き込みにおいては、カウントデータ（カウント開始値Ｃ）は、第１の記憶領域に書き込まれる。（図中の「ＣＤ」は、カウントデータを表す。）
【００４９】
第２回目のカウントデータの書き込みにおいては、カウントデータ（カウント開始値＋カウントインクリメント幅＝Ｃ＋Ｌ）は、第２の記憶領域に書き込まれる。
【００５０】
第３回目のカウントデータの書き込みにおいては、カウントデータ（Ｃ＋２・Ｌ）は、第３の記憶領域に書き込まれる。
【００５１】
さて、小ループ構成アドレス総数Ｍが、Ｍ＝３である本図の例においては、第４回目のカウントデータ書込に際し、小ループの範囲が、アドレスの順序にそって後方に１つシフトされ、第２、第３、第４の記憶領域が、新たな小ループの範囲に設定される。
そして、第４回目のカウントデータの書き込みにおいては、カウントデータ（Ｃ＋３・Ｌ）は、第２の記憶領域に書き込まれる。
【００５２】
このようにして、第５、第６回目のカウントデータの書き込みは、それぞれ、第３の、第４の記憶領域に対してなされ、その後で、小ループの範囲が、先程と同様にして後方に１つシフトされる。そして、第７回目のカウントデータの書き込みは、第３の記憶領域になされる。
【００５３】
上述したように、大ループの最後の記憶領域（第Ｎの記憶領域）の次は、第１の記憶領域へ戻り、繰り返し、第１の記憶領域から順番にカウントデータが書き込まれる。なお、小ループの範囲もまた、第Ｎの記憶領域を超える場合には、第１の記憶領域に戻って、小ループの範囲が設定される。
【００５４】
このようにして、カウントデータ記録装置は、（書込アドレス決定部２５ａが）カウントデータを書き込むアドレスを決定し、（カウントデータ書込部２５ｂが）カウントデータを当該アドレスにて指定される記憶領域に記録することで、カウントデータの記録を行う。
当業者にとっては、明白なことだが、上述のようにして、複数の記憶領域を循環的に使用してカウントデータの記録を行う場合、各記憶領域の繰り返し書き込み可能回数をＲ［回］（Ｒ：自然数。）とすれば、大ループを構成するアドレス総数Ｎ（Ｎ：Ｎ＞＝４の整数。）を用いて、本発明にかかるカウントデータ記録装置は、Ｒ・Ｎ回のカウントデータの記録が可能である。よって、カウント値Ｃからカウント値Ｃｍａｘまで、インクリメント幅Ｌでカウントデータを記録する場合、少なくとも、（（（Ｃｍａｘ−Ｃｍｉｎ）／Ｌ）＋１）／Ｒ以上の自然数だけアドレスがあればよい。記憶装置７の記憶領域の効率的使用の観点からは、（（（Ｃｍａｘ−Ｃｍｉｎ＋１）／Ｌ）＋１）／Ｒ以上の最小の自然数が最も有利である。
【００５５】
図６は、カウント開始値Ｃ＝１、カウントインクリメント幅Ｌ＝＋１、小ループ構成アドレス総数Ｍ＝３、大ループ構成アドレス総数Ｎ＝６として、カウントデータの書き込みを２６回実行した場合における、各記憶領域において保持されるカウントデータの値の推移を示す図である。本図においては、第ｉの記憶領域は、アドレス［ｉ］（ｉ：１＜＝ｉ＜＝６の整数。）と表記されている。また、斜線が付された部分は、各回のカウントデータ書き込みにおいてカウントデータが書き込まれる記憶領域を示している。
【００５６】
さて、このようにして各記憶領域（第１から第６の記憶領域）に対して書き込まれたカウントデータを、カウントデータの値に注目し、値の大きいものから順番に、つまり、降順で並べ替え（ソートし）てみる。なお、本発明においては、ソートは、カウントインクリメント幅Ｌが負数の場合には、値の小さいものから順番に、つまり、昇順でソートされる。
【００５７】
図７は、図６の各カウント回のカウント値（カウントデータの値）について降順でソートした場合の記憶領域の並びを示す図である。図中、Ｉ．〜ＶＩ．は、ソートされたカウントデータ列（被ソートカウントデータ列）の先頭からの各カウントデータの順番を示す。
【００５８】
このように、被ソートカウントデータ列の並び方は、パターン［０１］からパターン［１２］までの１２通りがあり、それ以外の並び方は、カウントデータが正常な場合には、存在しない。本願では、この並び方のパターンをカウントデータアドレス列パターンと称している。
また、組み合わせの総数は、大ループ構成アドレス総数Ｎおよび小ループ構成アドレス総数Ｍを用いて、Ｎ・（Ｍ−１）と表すことができる。このように、任意の（Ｍ，Ｎ）の組み合わせについて、カウントデータアドレス列パターンは、有限である。
【００５９】
図８は、カウントデータアドレス列パターンを整理した図である。このように、（Ｍ，Ｎ）＝（３，６）の場合には、カウントデータアドレス列パターンは、パターン［０１］からパターン［１２］までの１２通りである。
【００６０】
次に、被ソートカウントデータ列およびカウントデータアドレス列パターンにおいて互いに隣接するカウントデータの値の差分値の並び方について説明する。
【００６１】
図９は、正常なカウントデータについて、任意の（Ｍ，Ｎ）で成立する差分値列の並びを示す図である。なお、簡単のために、本図においては、カウントインクリメント幅Ｌは、Ｌ＝＋１としている。任意のＬについては、当業者であれば、本図より容易に導くことが可能であると思われるため、図示を省略する。
【００６２】
大ループを構成するアドレスの総数がＮの場合、差分値の総数は、（Ｎ−１）となる。カウントデータを降順（または昇順）でソートした被ソートカウントデータ列において、先頭（第１番目）のカウントデータの値と、２番目のカウントデータの値との差分値を、第１カウントデータ差分値と称する。同様に、２番目のカウントデータの値と３番目のカウントデータの値との差分値を、第２カウントデータ差分値と称する。このようにして総数（Ｎ−１）個の差分値を区別し、その順に並べた数列を、カウントデータ差分値列と称する。
任意の（Ｍ，Ｎ）について、カウントデータ差分値列は、Ｍ通り存在する。
そして、各カウントデータ差分値列においては、第１カウントデータ差分値から第（Ｍ−２）カウントデータ差分値は、全て「１」（カウントインクリメント幅Ｌ）となり、第（Ｍ−１）カウントデータ差分値は、「１」から「Ｍ」までの整数のいずれか（ｊ・Ｌ（ｊ：１＜＝ｊ＜＝Ｍ））となり、第Ｍカウントデータ差分値から第（Ｎ−１）カウントデータ差分値は、全て「Ｍ」（Ｌ・Ｍ）となる。このようにして、カウントデータ差分値列のパターン総数は、Ｍ通りとなる。
【００６３】
図１０は、（Ｃ，Ｌ，Ｍ，Ｎ）＝（１，１，３，６）の場合におけるカウント回数０回目（初期値）から２６回目までの各回の被ソートカウントデータ列についてのカウントデータ差分値列の詳細を示す図である。本例においては、Ｍ＝３であるから、Ｍ−１＝２である。上述のように、第１カウントデータ差分値は、常に、「１」であり、また、第３カウントデータ差分値から第５カウントデータ差分値は、常に、「Ｍ（Ｍ＝３）」であり、第２カウントデータ差分値のみが、「１」から「Ｍ（Ｍ＝３）」までの間の整数で順に変化することがわかる。
【００６４】
図１１は、（Ｃ，Ｌ，Ｍ，Ｎ）＝（１，１，３，６）の場合におけるカウントデータ差分値列を整理した図である。図より明らかなように、カウントデータ差分値列パターンは、パターン［１］からパターン［３］までの３通りである。
【００６５】
ここまで、（Ｍ，Ｎ）＝（３，６）の場合においては、正常なカウントデータについての被ソートカウントデータ列について、カウントデータアドレス列パターンは、高々１２通り、カウントデータ差分値列パターンは、高々３通りしか存在しないことを説明した。
【００６６】
次に、図１２を参照し、カウントデータアドレス列パターンと、カウントデータ差分値列パターンとの関係について説明する。図１２は、各カウントデータアドレス列パターンについて、可能なカウントデータ差分値列パターンを示した図である。
【００６７】
このように、各カウントデータアドレス列パターンは、全てのカウントデータ差分値列パターンを取り得るものではない。寧ろ、各カウントデータアドレス列パターンは、限定されたカウントデータ差分値列パターンを取り得る。例えば、カウントデータアドレス列パターン［０１］、［０３］、［０５］、［０７］、［０９］、［１１］のいずれかに従う（正常な）被ソートカウントデータ列においては、カウントデータ差分値列パターン［１］および［３］のいずれかが成立する。また、カウントデータアドレス列パターン［０２］、［０４］、［０６］、［０８］、［１０］、［１２］のいずれかに従う（正常な）被ソートカウントデータ列においては、カウントデータ差分値列パターン［２］のみが成立する。本図は、（Ｍ，Ｎ）＝（３，６）の場合について示す図であるが、任意の（Ｍ，Ｎ）の組み合わせについて、各カウントデータアドレス列パターンが取り得るカウントデータ差分値列パターンの総数は、有限であり、その特定も容易である。このことは、当業者であれば、容易に理解される事柄と思われる。
【００６８】
本発明による実施の形態によるカウントデータ記録装置は、上記したように、カウントデータソート部２７ａ（図４）が、被ソートカウントデータ列を作成し、カウントデータ差分算出部２７ｂ（図４）が、該被ソートカウントデータ列のカウントデータ差分値列を算出し、修復処理実行部２７ｃは、被ソートカウントデータ列およびそのカウントデータ差分値列を、予め保持するカウントデータアドレス列パターンおよびカウントデータ差分値列パターンと比較することによって、カウントデータの破損（異常）を検出し、検出した異常なカウントデータを、被ソートカウントデータ列の所定の順番に位置するカウントデータの値、ならびに、カウントデータアドレス列パターンおよびカウントデータ差分値列パターンとに基づいて、修復する。
【００６９】
以下、本発明による実施の形態によるカウントデータ記録装置におけるカウントデータの書き込み、ならびに、異常の検出および異常の修復にかかる処理について説明する。
【００７０】
＜カウントデータ書き込み処理＞
図１３は、カウントデータ記録装置１（図１）が記憶装置７（図２）の記憶領域に対してカウントデータを書き込む処理を示すフローチャートである。
【００７１】
ステップＳ１０１において、データ書込部２５（図４）は、初期設定として記憶装置７の記憶領域に初期値を書き込む。この処理は、カウントデータ記録装置１が初めて起動した場合や、記憶装置７が換装された場合にのみ行えば足りる。
【００７２】
ステップＳ１０３において、制御部２３（図４）は、データ書込部２５に対し、カウントデータ書込指示を送る。
データ書込部２５が、カウントデータ書込指示を受けた場合（ステップＳ１０３における「ＹＥＳ」）、処理は、ステップＳ１０５へ移行する。
データ書込部２５が、カウントデータ書込指示を受けていない場合（ステップＳ１０３における「ＮＯ」）、処理は、ステップＳ１０３を繰り返す。
【００７３】
ステップＳ１０５において、データ書込部２５は、その書込アドレス決定部２５ａが、カウントデータを書き込む記憶装置７内記憶領域を決定し、カウントデータ書込部２５ｂが当該記憶領域へカウントデータを書き込むことで、カウントデータの書き込みを１回行う。このとき、書込アドレス決定部２５ａやカウントデータ書込部２５ｂは、設定データ保持部３１等を参照する。そうすることで、書き込むべき記憶領域や、書き込むべきカウントデータの値は、決定される。
【００７４】
ステップＳ１０７からステップＳ１２１において、書込アドレス決定部２５ａは、次回のカウントデータ書き込みにおいて使用する記憶領域および次回のカウントデータ書き込みにおいて書き込むカウントデータの値を設定する処理を開始する。
【００７５】
ステップＳ１０７において、書込アドレス決定部２５ａは、直前に実行したステップＳ１０５においてカウントデータを書き込んだ記憶領域のアドレスが、大ループにおける第Ｎ番目のアドレスであるか、否かについて判定する。
直前のステップＳ１０５においてカウントデータを書き込んだ記憶領域のアドレスが、大ループにおけるアドレス順序の最後尾のアドレス（アドレス［Ｎ］）である場合（ステップＳ１０７における「ＹＥＳ」）、処理は、ステップＳ１１１へ移行する。
直前のステップＳ１０５においてカウントデータを書き込んだ記憶領域のアドレスが、大ループにおけるアドレス順序の最後尾のアドレスでない場合（ステップＳ１０７における「ＮＯ」）、処理は、ステップＳ１０９へ移行する。
【００７６】
ステップＳ１０９において、書込アドレス決定部２５ａは、大ループにおけるアドレス順序において直前のステップＳ１０５においてカウントデータを書き込んだ記憶領域の次の順番で管理されている記憶領域を、次データ書込アドレスに設定する。
【００７７】
ステップＳ１１１において、書込アドレス決定部２５ａは、大ループにおけるアドレス順序において先頭（第１番目）で管理されている記憶領域を、次データ書込アドレスに設定する。
【００７８】
ステップＳ１１３において、書込アドレス決定部２５ａは、ステップＳ１０９またはステップＳ１１１で設定した次データ書込アドレスが現在の小ループの範囲を超えているか、否か、判定する。
書込アドレス決定部２５ａが、次データ書込アドレスは現在の小ループの範囲を超えていると判定した場合（ステップＳ１１３における「ＹＥＳ」）、処理は、ステップＳ１１５へ移行する。
書込アドレス決定部２５ａが、次データ書込アドレスは現在の小ループの範囲を超えていないと判定した場合（ステップＳ１１３における「ＮＯ」）、処理は、ステップＳ１１５、Ｓ１１７をスキップして、ステップＳ１１９へ移行する。
【００７９】
ステップＳ１１５において、書込アドレス決定部２５ａは、大ループにおけるアドレス順序に沿って、小ループの範囲を１アドレス分だけ後方へシフトさせて、新たな小ループの範囲として管理する。
【００８０】
ステップＳ１１７において、書込アドレス決定部２５ａは、当該新たな小ループの範囲の先頭（第１番目）として管理されるアドレスを、次データ書込アドレスに設定する。
【００８１】
ステップＳ１１９において、書込アドレス決定部２５ａは、現在、次データ書込アドレスに設定されているアドレスを、データ書込アドレスに決定し、設定する。
【００８２】
ステップＳ１２１において、データ書込部２５は、直前に実行したステップＳ１０５において書き込んだカウントデータの値に、カウントインクリメント幅Ｌを加算して取得した値を、カウント値に設定する。
なお、新たなデータ書込アドレスや、新たなカウント値は、書込アドレス決定部２５ａが保持してもよいし、あるいは、一旦、設定データ保持部３１等に記録してもよい。
【００８３】
ステップＳ１２３において、制御部２３は、カウントデータ書込処理を終了するか、否か、判定する。
制御部２３が、カウントデータ書込処理を継続すると判定した場合（ステップＳ１２３における「ＹＥＳ」）、処理は、ステップＳ１０３へ戻る。
制御部２３が、カウントデータ書込処理を終了すると判定した場合（ステップＳ１２３における「ＮＯ」）、全てのカウントデータ書込処理が終了する。
【００８４】
＜カウントデータ破損検出処理および破損修復処理＞
これより、本発明の実施の形態によるカウントデータ記録装置におけるカウントデータの異常（破損）の検出、および、破損の修復にかかる処理について説明する。
【００８５】
図１４は、主としてデータ修復部２７が実行する、カウントデータの異常の検出および検出された異常の修復にかかる処理を示すフローチャートである。
【００８６】
ステップＳ２０１との関連において、データ読出部２９は、記憶装置７の第１から第Ｎの記憶領域に記録されたカウントデータを読み出して、データ修復部２７へ送る。
【００８７】
ステップＳ２０１において、データ修復部２７のカウントデータソート部２７ａは、データ読出部２９から受け取ったカウントデータを、各カウントデータの値の降順で、並べ替え（ソート）する。ここでは、ソートされたカウントデータの並びを、被ソートカウントデータ列と称する。被ソートカウントデータ列は、カウントデータソート部２７ａからカウントデータ差分算出部２７ｂへ送られる。
【００８８】
ステップＳ２０３において、カウントデータ差分算出部２７ｂは、被ソートカウントデータ列において互いに隣接するカウントデータの値について差分値を算出する。当該差分値は、複数個の数値からなる数列である。カウントデータ差分算出部２７ｂは、差分値を被ソートカウントデータ列のカウントデータの並びと整合するように並べて数列を作成し、当該数列を修復処理実行部２７ｃへ送る。ここでは、上記差分値からなる数列を、被ソートカウントデータ列についてのカウントデータ差分値列と称する。
【００８９】
ステップＳ２０５において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列が、カウントデータ差分値列パターン（図９、図１１等）のいずれかと一致するか、否か、を判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についてのカウントデータ差分値列はカウントデータ差分値列パターンのいずれか１つと一致すると判定した場合（ステップＳ２０５における「ＹＥＳ」）、処理は、終了する。つまり、ステップＳ２０５において「ＹＥＳ」と判定される場合とは、修復処理実行部２７ｃは、被ソートカウントデータ列には異常なカウントデータ（破損されたカウントデータ）が含まれないと判定した場合に相当する。
修復処理実行部２７ｃが、被ソートカウントデータ列についてのカウントデータ差分値列はカウントデータ差分値列パターンのいずれとも一致しないと判定した場合（ステップＳ２０５における「ＮＯ」）、処理は、ステップＳ２０７へ移行する。つまり、ステップＳ２０５において「ＮＯ」と判定される場合とは、修復処理実行部２７ｃは、被ソートカウントデータ列に異常なカウントデータ（破損されたカウントデータ）が含まれると判定した場合に相当する。以降の処理において、修復処理実行部２７ｃは、破損されたカウントデータの修復処理を実行する。
【００９０】
ステップＳ２０７において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第１番目の差分値が、カウントデータ差分値列パターンのいずれかの第１カウントデータ差分値と一致するか、否か、を判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についてのカウントデータ差分値列の第１番目の差分値はカウントデータ差分値列パターンのいずれかの第１カウントデータ差分値と一致すると判定した場合（ステップＳ２０７における「ＹＥＳ」）、処理は、ステップＳ２０９へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列についてのカウントデータ差分値列の第１番目の差分値はカウントデータ差分値列パターンの第１カウントデータ差分値のいずれとも一致しないと判定した場合（ステップＳ２０７における「ＮＯ」）、処理は、ステップＳ３へ移行する。
【００９１】
（カウントデータ修復処理１）
図１５は、カウントデータ修復処理１（図１４におけるＳ３）の詳細を示すフローチャートである。これより、図１５を参照してカウントデータ修復処理１について説明する。
カウントデータ修復処理１は、第１カウントデータ差分値が正常でない場合に実行される修復処理である。第１カウントデータ差分値は、被ソートカウントデータ列における先頭（１番目）と２番目に位置するカウントデータの値の差分値である。よって、第１カウントデータ差分値が正常な値を示さないことは、被ソートカウントデータ列における１番目のカウントデータの値、および、２番目のカウントデータの値の少なくともいずれか一方が破損していることを意味する。
これより説明するカウントデータ修復処理１においては、被ソートカウントデータ列の先頭に位置するカウントデータの値を正常な値であると認定し、被ソートカウントデータ列の２番目以降に位置するカウントデータの値を修復する。
【００９２】
ステップＳ３０１において、修復処理実行部２７ｃは、被ソートカウントデータ列の１番目に位置するカウントデータのアドレスを取得する。
【００９３】
ステップＳ３０３において、修復処理実行部２７ｃは、ステップＳ３０１において取得したアドレスが先頭に位置するカウントデータアドレス列パターン（図８参照。）を抽出し、抽出されたパターンを修復用の候補パターンとする。
【００９４】
ステップＳ３０５において、修復処理実行部２７ｃは、ステップＳ３０３において抽出した修復用の候補パターンに対応するカウントデータ差分値列パターン（図１１参照。）を抽出し、抽出したカウントデータ差分値列パターンを、ステップＳ３０３において抽出した候補パターンと対応付けて（図１２参照。）、保持する。
【００９５】
ステップＳ３０７において、修復処理実行部２７ｃは、ステップＳ３０３およびステップＳ３０５において抽出した候補パターンおよび該候補パターンに対応するカウントデータ差分値列パターンのなかから、カウントデータ差分値列パターンがカウントデータ差分値列パターン［１］（図１１）であるカウントデータアドレス列パターンを特定し、当該カウントデータアドレス列パターンおよびそれと対応付けられたカウントデータ差分値列パターンを、修復に用いるカウントデータアドレス列パターンおよびカウントデータ差分値列パターンに決定する。
なお、本ステップの本質的意義は、修復されたカウントデータについての被ソートカウントデータ列のカウントデータ差分値列を、１（より一般にはカウントインクリメント幅Ｌ）と、Ｍ（より一般にはＬ・Ｍ）のみになるように、被ソートカウントデータ列の２番目からＮ番目までに位置するカウントデータの値を修復することにある。また、カウントデータ差分値列が、１（より一般にはカウントインクリメント幅Ｌ）と、Ｍ（より一般にはＬ・Ｍ）のみで構成されることは、第（Ｍ−１）カウントデータ差分値が１（より一般にはＬ）であることに対応する。（第（Ｍ−１）カウントデータ差分値以外のカウントデータ差分値は、カウントデータが正常であれば、常に、１とＭ（より一般には、ＬとＬ・Ｍ）のみからなる。）
【００９６】
ステップＳ３０９において、修復処理実行部２７ｃは、ステップＳ３０７において決定した修復用カウントデータアドレス列パターンおよびそれと対応付けられたカウントデータ差分値列パターン（カウントデータ差分値列パターン［１］）ならびに被ソートカウントデータ列の１番目のカウントデータの値に基づいて、被ソートカウントデータ列の２番目以降に位置するカウントデータの値を修復する。
【００９７】
ステップＳ３０９の処理が完了すると、修復処理は終了する（図１４）。
【００９８】
なお、カウントデータ修復処理１は、任意の（Ｍ，Ｎ）の組み合わせにおいては、被ソートカウントデータ列の第１カウントデータ差分値から第ｋカウントデータ差分値（ｋ：１＜＝ｋ＜＝Ｍ−３の整数。）までが１（より一般には、カウントインクリメント幅Ｌ）であって、第（ｋ＋１）カウントデータ差分値が１ではない（より一般には、Ｌでない）ようなカウントデータ異常が検出された場合において、カウントデータの破損を修復するときに使用可能である。
【００９９】
（カウントデータ修復処理１変形例１）
図１６は、カウントデータ修復処理の変形例（第１の変形例）を示すフローチャートである。これより、図１６を参照してカウントデータ修復処理１変形例１について説明する。
カウントデータ修復処理１変形例１は、第１カウントデータ差分値が正常でない場合には、カウントデータが破損したことを通知する処理を実行する。カウントデータ修復処理１変形例１においては、カウントデータの異常を修復処理は行われない。
【０１００】
ステップＳ３１１において、修復処理実行部２７ｃは、カウントデータが破損していることを示す通知（カウントデータ異常）を出力する。当該出力は、例えば、制御部２３（図４）へ送られ、制御部２３は、当該出力に基づいて所定の処理を実行する。
【０１０１】
ステップＳ３１１の処理が完了すると、修復処理は終了する（図１４）。
【０１０２】
（カウントデータ修復処理１変形例２）
図１７は、カウントデータ修復処理の変形例（第２の変形例）を示すフローチャートである。これより、図１７を参照してカウントデータ修復処理１変形例２について説明する。
カウントデータ修復処理１変形例２もまた、第１カウントデータ差分値が正常でない場合に実行される修復処理である。ただし、本変形例においては、第２カウントデータ差分値、第３カウントデータ差分値、・・・、といった、カウントデータ差分値列において第１カウントデータ差分値の直後に位置する所定数のカウントデータ差分値を参照し、第２カウントデータ差分値から、連続して、カウントデータ差分値の総数の過半数以上のカウントデータ差分値が正常な値を示しているか否かを判定する。そして、カウントデータ記録装置が、当該複数の連続したカウントデータ差分値が正常な値を示していると判定した場合には、修復処理実行部２７ｃは上記過半数よりも多くの正常なカウントデータ差分値と対応するカウントデータの値は正常であると認定し、それら正常であると認められるカウントデータの値に基づいて、被ソートカウントデータ列の１番目等に位置するカウントデータを修復する。
図１７に示すフローチャートは、（Ｌ，Ｍ，Ｎ）＝（１，３，６）としてカウントデータ修復処理１変形例２を例示するものである。
【０１０３】
ステップＳ３１３において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第２カウントデータ差分値を参照し、当該第２カウントデータ差分値が、カウントデータ差分値列パターン（図１１）のいずれかにおける第２カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第２カウントデータ差分値はカウントデータ差分値列パターン（図１１）のいずれかにおける第２カウントデータ差分値と一致すると判定した場合（ステップＳ３１３における「ＹＥＳ」）、処理は、ステップＳ３１５に移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第２カウントデータ差分値はカウントデータ差分値列パターン（図１１）のいずれの第２カウントデータ差分値とも一致しないと判定した場合（ステップＳ３１３における「ＮＯ」）、処理は、ステップＳ３１９に移行する。
【０１０４】
ステップＳ３１５において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第３カウントデータ差分値および第４カウントデータ差分値を参照し、当該第３および第４カウントデータ差分値が、共に、ステップＳ３１３において第２カウントデータ差分値が一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第３カウントデータ差分値および第４カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第３および第４カウントデータ差分値はステップＳ３１３において第２カウントデータ差分値が一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第３および第４カウントデータ差分値と一致すると判定した場合（ステップＳ３１５における「ＹＥＳ」）、処理は、ステップＳ３１７に移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第３および第４カウントデータ差分値はステップＳ３１３において第２カウントデータ差分値が一致すると判定されたカウントデータ差分値列パターンにおける第３および第４カウントデータ差分値のいずれとも一致しないと判定した場合（ステップＳ３１５における「ＮＯ」）、処理は、ステップＳ３１７に移行する。
【０１０５】
すなわち、Ｎ＝６の場合には、カウントデータ差分値列は、５個の差分値で構成される。よって、ステップＳ３１５において「ＹＥＳ」と判定され処理がステップＳ３１７に移行する場合とは、第２カウントデータ差分値から、当該第２カウントデータ差分値を含めて過半数のカウントデータ差分値が正常である、と判定される場合に対応する。
なお、大ループ構成アドレス総数がＮである場合には、カウントデータ差分値列は、（Ｎ−１）個の数からなる。よって、第２カウントデータ差分値から、連続して、当該第２カウントデータ差分値を含めて（Ｎ−１）／２以上の最小の整数値［個］のカウントデータ差分値が正常であるか、否か、を判定すればよい。
【０１０６】
ステップＳ３１７において、修復処理実行部２７ｃは、被ソートカウントデータ列において２番目に位置するカウントデータの値に１（より一般には、カウントインクリメント幅Ｌ）を加算してなる値を取得し、当該値を用いて被ソートカウントデータ列の１番目に位置するカウントデータの値を修復する。
【０１０７】
ステップＳ３１９において、修復処理実行部２７ｃは、カウントデータが破損していることを示す通知（カウントデータ異常）を出力する。当該出力は、例えば、制御部２３（図４）へ送られ、制御部２３は、当該出力に基づいて所定の処理を実行する。
【０１０８】
ステップＳ３１９の処理が完了すると、修復処理は終了する（図１４）。
【０１０９】
ステップＳ３２１において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第５カウントデータ差分値を参照し、当該第５カウントデータ差分値が、ステップＳ３１３およびＳ３１５において第２、第３、第４カウントデータ差分値が一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第５カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についてのカウントデータ差分値列の第５カウントデータ差分値はステップＳ３１３およびＳ３１５において第２、第３、第４カウントデータ差分値が一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第５カウントデータ差分値と一致すると判定した場合（ステップＳ３２１における「ＹＥＳ」）、カウントデータ修復処理１変形例２の処理は、終了する。これは、修復処理実行部２７ｃが、被ソートカウントデータ列において６番目に位置するカウントデータの値は、修復する必要がない、と判断したことを意味する。
修復処理実行部２７ｃが、被ソートカウントデータ列についてのカウントデータ差分値列の第５カウントデータ差分値はステップＳ３１３およびＳ３１５において第２、第３、第４カウントデータ差分値が一致すると判定されたカウントデータ差分値列パターンにおける第５カウントデータ差分値のいずれとも一致しないと判定した場合（ステップＳ３２１における「ＮＯ」）、処理は、ステップＳ３２３へ移行する。
【０１１０】
ステップＳ３２３において、修復処理実行部２７ｃは、被ソートカウントデータ列において５番目に位置するカウントデータの値に３（より一般には、カウントインクリメント幅Ｌと小ループ構成アドレス総数Ｍとの積）を加算してなる値を取得し、当該値を用いて被ソートカウントデータ列の６番目に位置するカウントデータの値を修復する。
【０１１１】
ステップＳ３２３の処理が完了すると、修復処理は終了する（図１４）。
【０１１２】
次に、図１４のステップＳ２０７において「ＹＥＳ」と判定された場合について説明する。
【０１１３】
ステップＳ２０９において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第２番目の差分値が、ステップＳ２０７において一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第２カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第２カウントデータ差分値はステップＳ２０７において一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第２カウントデータ差分値と一致すると判定した場合（ステップＳ２０９における「ＹＥＳ」）、処理は、ステップＳ２１１へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第２カウントデータ差分値はステップＳ２０７において一致すると判定されたカウントデータ差分値列パターンにおける第２カウントデータ差分値のいずれとも一致しないと判定した場合（ステップＳ２０９における「ＮＯ」）、処理は、ステップＳ４へ移行する。
【０１１４】
（カウントデータ修復処理２）
図１８Ａおよび図１８Ｂは、カウントデータ修復処理２（図１４におけるＳ４）の詳細を示すフローチャートである。これより、図１８Ａおよび図１８Ｂを参照してカウントデータ修復処理２について説明する。
カウントデータ修復処理２は、第１カウントデータ差分値は正常であるが第２カウントデータ差分値が正常でない場合に実行される修復処理である。第２カウントデータ差分値は、被ソートカウントデータ列における２番目と３番目に位置するカウントデータの値の差分値である。よって、第１カウントデータ差分値は正常であるが第２カウントデー差分値が正常な値を示さないことは、被ソートカウントデータ列における３番目のカウントデータの値が破損している可能性が高いことを意味する。
以下においては、小ループを構成するアドレスの総数Ｍが、Ｍ＝３である場合を用いてカウントデータ修復処理２を説明する。
一般の小ループアドレス構成総数Ｍに関し、カウントデータ修復処理２は、第１から第（Ｍ−２）カウントデータ差分値までは正常だが第（Ｍ−１）カウントデータ差分値が正常でない値を示した場合に、カウントデータの修復に用いることができる修復処理である。
【０１１５】
ステップＳ４０１において、修復処理実行部２７ｃは、被ソートカウントデータ列の先頭（１番目）および２番目に位置するカウントデータのアドレスを取得する。
【０１１６】
ステップＳ４０３において、修復処理実行部２７ｃは、ステップＳ４０１において取得した、１番目および２番目のアドレスが、それぞれ、先頭および２番目に位置するカウントデータアドレス列パターン（図８参照。）を抽出し、抽出されたパターンを修復用の候補パターンとする。
【０１１７】
ステップＳ４０５において、修復処理実行部２７ｃは、ステップＳ４０３において抽出した修復用の候補パターンに対応するカウントデータ差分値列パターン（図１１参照。）を抽出し、抽出したカウントデータ差分値列パターンを、ステップＳ４０３において抽出した候補パターンと対応付けて（図１２参照。）、保持する。
【０１１８】
ステップＳ４０７において、修復処理実行部２７ｃは、被ソートカウントデータ列の１番目に位置するカウントデータの値を、小ループを構成するアドレスの総数Ｍ（例えば、「３」）で除算したときに生じる剰余を算出する。
そして、修復処理実行部２７ｃは、当該剰余に基づいて、ステップＳ４０５において抽出されたカウントデータ差分値列パターンのなかから、修復用のカウントデータ差分値列パターンを決定する。
本ステップは、以下のような原理に基づいている。
図９および図１０を参照すれば、第（Ｍ−１）カウントデータ差分値の変化は、カウント回数についてＭ［回］の周期を有することがわかる。図１０の例（Ｍ＝３の例）を見れば、第２カウントデータ差分値（第（Ｍ−１）差分値）は、カウントインクリメント幅ＬがＬ＝１である場合においては、１、２、３、１、２、３、・・・・、と、カウント回数について３［回］の周期で変化する。
また、カウント数は、被ソートカウントデータ列の１番目に位置するカウントデータの値である。
したがって、被ソートカウントデータ列の１番目に位置するカウントデータの値が正常である限り、第２カウントデータ差分値（第（Ｍ−１）カウントデータ差分値）の値は、被ソートカウントデータ列の１番目に位置するカウントデータの値を、小ループ構成アドレス総数Ｍで除算したときに生じる剰余の値から求めることができる。
なお、カウントインクリメント幅Ｌが、Ｌ＝１でない場合であっても、上記剰余の導出過程において、Ｌの値を考慮すれば、上記剰余に基づいて、第２カウントデータ差分値（第（Ｍ−１）カウントデータ差分値）の値を求めることは容易である。具体的には、任意のカウントインクリメント幅Ｌについては、上記した被ソートカウントデータ列の１番目の値を小ループ構成アドレス総数Ｍで除算したときに生じる剰余の代わりに、被ソートカウントデータ列の１番目に位置するカウントデータの値を先ずカウントインクリメント幅Ｌで除算し、当該除算にて得られた商を小ループアドレス総数Ｍで除算したときに生じる剰余の値を用いればよい。
本実施の形態においては、カウントインクリメント幅Ｌは、Ｌ＝＋１としている。そのため、上記ステップＳ４０７の処理の説明においては、被ソートカウントデータ列の１番目のカウントデータの値をカウントインクリメント幅Ｌで除算する工程を省略して説明している。当然のことながら、カウントインクリメント幅Ｌが１である場合であっても、上記ステップＳ４０７の処理において、被ソートカウントデータ列の１番目のカウントデータの値をカウントインクリメント幅Ｌで除算する工程を実施してよい。
【０１１９】
ステップＳ４０９において、修復処理実行部２７ｃは、ステップＳ４０７の処理によって、修復用のカウントデータ差分値列パターンがただ１つに決定できたか、否か、について判定する。
修復処理実行部２７ｃが、ステップＳ４０７の処理から修復用のカウントデータ差分値列パターンをただ１つに決定できたと判定した場合（ステップＳ４０７における「ＹＥＳ」）、処理は、ステップＳ４１１へ移行する。
修復処理実行部２７ｃが、ステップＳ４０７の処理から修復用のカウントデータ差分値列パターンをただ１つに決定できなかったと判定した場合（ステップＳ４０７における「ＮＯ」）、処理は、ステップＳ４１５へ移行する。
【０１２０】
ステップＳ４１１において、修復処理実行部２７ｃは、ステップＳ４０７において決定された修復用のカウントデータ差分値列パターンが、カウントデー差分値列パターン［１］であるか、否か、について判定する。
修復処理実行部２７ｃが、修復用のカウントデータ差分値列パターンはカウントデー差分値列パターン［１］であると判定した場合（ステップＳ４１１における「ＹＥＳ」）、処理は、Ｓ４１７へ移行する。
修復処理実行部２７ｃが、修復用のカウントデータ差分値列パターンはカウントデー差分値列パターン［１］でないと判定した場合（ステップＳ４１１における「ＮＯ」）、処理は、Ｓ４１３へ移行する。
【０１２１】
ステップＳ４１３において、修復処理実行部２７ｃは、ステップＳ４０７において決定された修復用のカウントデータ差分値列パターンが、カウントデー差分値列パターン［２］であるか、否か、について判定する。
修復処理実行部２７ｃが、修復用のカウントデータ差分値列パターンはカウントデー差分値列パターン［２］であると判定した場合（ステップＳ４１３における「ＹＥＳ」）、処理は、Ｓ４１９へ移行する。
修復処理実行部２７ｃが、修復用のカウントデータ差分値列パターンはカウントデータ差分値列パターン［２］でないと判定した場合（ステップＳ４１３における「ＮＯ」）、処理は、Ｓ４２１へ移行する。つまり、この場合、修復用のカウントデータ差分値列パターンは、カウントデータ差分値列パターン［３］である。
【０１２２】
つまり、カウントデータ修復処理２においては、修復処理実行部２７ｃは、被ソートカウントデータ列の１番目に位置するカウントデータの値を小ループ構成アドレス総数Ｍで除算したときに生じる剰余に基づいて、正常な第２カウントデータ差分値（第Ｍ−１カウントデータ差分値）を決定し、当該決定に基づいて、修復処理に用いるカウントデータ差分値列パターンを１つに決定する。
そして、修復処理実行部２７ｃは、ステップＳ４１７以降において、修復用のカウントデータ差分値列パターンに基づいて、カウントデータの修復処理を実行する。
なお、一般の小ループアドレス構成総数Ｍに関する、カウントデータ修復処理は、当業者にとっては、以下の説明より明らかであると思われるので、説明を省略する。
【０１２３】
ステップＳ４１５において、修復処理実行部２７ｃは、カウントデータが破損していることを示す通知（カウントデータ異常）を出力する。当該出力は、例えば、制御部２３（図４）へ送られ、制御部２３は、当該出力に基づいて所定の処理を実行する。
【０１２４】
ステップＳ４１５の処理が完了すると、修復処理は終了する（図１４）。
【０１２５】
ステップＳ４１７において、修復処理実行部２７ｃは、被ソートカウントデータ列の２番目（（Ｍ−１）番目）に位置するカウントデータの値から１を減算（より一般には、カウントインクリメント幅Ｌを減算）して取得した値を用いて、被ソートカウントデータ列の３番目（Ｍ番目）に位置するカウントデータを修復する。
【０１２６】
ステップＳ４１９において、修復処理実行部２７ｃは、被ソートカウントデータ列の２番目（（Ｍ−１）番目）に位置するカウントデータの値から２を減算（より一般には、２Ｌを減算）して取得した値を用いて、被ソートカウントデータ列の３番目（Ｍ番目）に位置するカウントデータを修復する。
【０１２７】
ステップＳ４２１において、修復処理実行部２７ｃは、被ソートカウントデータ列の２番目（（Ｍ−１）番目）に位置するカウントデータの値から３を減算（より一般には、３Ｌ（＝Ｍ・Ｌ）を減算）して取得した値を用いて、被ソートカウントデータ列の３番目（Ｍ番目）に位置するカウントデータを修復する。
【０１２８】
このように、ステップＳ４１７、Ｓ４１９、および、Ｓ４２１により、被ソートカウントデータ列の３番目に位置するカウントデータの値が修復される。
【０１２９】
次に、ステップＳ４２３以降の処理において、修復処理実行部２７ｃは、被ソートカウントデータ列の４番目以降に位置するカウントデータの値を修復する。
ステップＳ４２３以降の処理は、一般の（Ｍ，Ｎ）においては、被ソートカウントデータ列の第（Ｍ＋１）番目から第Ｎ番目に位置するカウントデータの修復処理に相当する。一般の小ループアドレス構成総数Ｍおよび大ループアドレス構成総数Ｎに関する、被ソートカウントデータ列の第（Ｍ＋１）番目から第Ｎ番目までのカウントデータの修復処理は、当業者にとっては、以下の説明より明らかであると思われるので、説明を省略する。
【０１３０】
ステップＳ４２３において、修復処理実行部２７ｃは、被ソートカウントデータ列についての（３番目のカウントデータの値が修復された後における）第３カウントデータ差分値が、ステップＳ４０７にて決定された修復用カウントデータ差分値列パターンの第３カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第３カウントデータ差分値は修復用カウントデータ差分値列パターンの第３カウントデータ差分値と一致すると判定した場合（ステップＳ４２３における「ＹＥＳ」）、処理は、ステップＳ４２７へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第３カウントデータ差分値は修復用カウントデータ差分値列パターンの第３カウントデータ差分値と一致しないと判定した場合（ステップＳ４２３における「ＮＯ」）、処理は、ステップＳ４２５へ移行する。
【０１３１】
ステップＳ４２５において、修復処理実行部２７ｃは、被ソートカウントデータ列の３番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の４番目（（Ｍ＋１）番目）に位置するカウントデータを修復する。
【０１３２】
ステップＳ４２７において、修復処理実行部２７ｃは、被ソートカウントデータ列の４番目に位置するカウントデータの（ステップＳ４２５において修復された後における）値と、５番目に位置するカウントデータの値との差分値（第４カウントデータ差分値）が、ステップＳ４０７にて決定された修復用カウントデータ差分値列パターンの第４カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第４カウントデータ差分値は修復用カウントデータ差分値列パターンの第４カウントデータ差分値と一致すると判定した場合（ステップＳ４２７における「ＹＥＳ」）、処理は、ステップＳ４３１へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第４カウントデータ差分値は修復用カウントデータ差分値列パターンの第４カウントデータ差分値と一致しないと判定した場合（ステップＳ４２７における「ＮＯ」）、処理は、ステップＳ４２９へ移行する。
【０１３３】
ステップＳ４２９において、修復処理実行部２７ｃは、被ソートカウントデータ列の４番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の５番目（（Ｍ＋２つまりＮ−１）番目）に位置するカウントデータを修復する。
【０１３４】
ステップＳ４３１において、修復処理実行部２７ｃは、被ソートカウントデータ列の５番目に位置するカウントデータの（ステップＳ４２９において修復された後における）値と、６番目に位置するカウントデータの値との差分値（第５カウントデータ差分値）が、ステップＳ４０７にて決定された修復用カウントデータ差分値列パターンの第５カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第５カウントデータ差分値は修復用カウントデータ差分値列パターンの第５カウントデータ差分値と一致すると判定した場合（ステップＳ４３１における「ＹＥＳ」）、修復処理２は、終了する（図１４）。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第５カウントデータ差分値は修復用カウントデータ差分値列パターンの第５カウントデータ差分値と一致しないと判定した場合（ステップＳ４３１における「ＮＯ」）、処理は、ステップＳ４３３へ移行する。
【０１３５】
ステップＳ４３３において、修復処理実行部２７ｃは、被ソートカウントデータ列の５番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の６番目（Ｎ番目）に位置するカウントデータを修復する。
【０１３６】
次に、図１４のステップＳ２０９において「ＹＥＳ」と判定された場合について説明する。
【０１３７】
ステップＳ２１１において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第３番目の差分値が、ステップＳ２０７およびステップＳ２０９において一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第３カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第３カウントデータ差分値はステップＳ２０７およびステップＳ２０９において一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第３カウントデータ差分値と一致すると判定した場合（ステップＳ２１１における「ＹＥＳ」）、処理は、ステップＳ２１３へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第３カウントデータ差分値はステップＳ２０７およびステップＳ２０９において一致すると判定されたカウントデータ差分値列パターンにおける第３カウントデータ差分値のいずれとも一致しないと判定した場合（ステップＳ２１１における「ＮＯ」）、処理は、ステップＳ５へ移行する。
【０１３８】
（カウントデータ修復処理３）
図１９は、カウントデータ修復処理３（図１４におけるＳ５）の詳細を示すフローチャートである。これより、図１９を参照してカウントデータ修復処理３について説明する。
カウントデータ修復処理３は、第１および第２カウントデータ差分値は正常であるが第３カウントデータ差分値が正常でない場合に実行される修復処理である。第３カウントデータ差分値は、被ソートカウントデータ列における３番目と４番目に位置するカウントデータの値の差分値である。よって、第１および第２カウントデータ差分値は正常であるが第３カウントデー差分値が正常な値を示さないことは、被ソートカウントデータ列における４番目のカウントデータの値が破損している可能性が高いことを意味する。
以下においては、小ループを構成するアドレスの総数Ｍが、Ｍ＝３である場合を用いてカウントデータ修復処理３を説明する。
なお、カウントデータ修復処理３は、一般の（Ｍ，Ｎ）に関しては、被ソートカウントデータ列の第１カウントデータ差分値から第（Ｍ−１＋ｐ）カウントデータ差分値（ｐ：０＜＝ｐ＜＝Ｎ−Ｍ−１の整数。）までが正常な値を示し、第（Ｍ−１＋ｐ＋１）カウントデータ差分値が正常でないようなカウントデータ異常が検出された場合において、カウントデータの破損を修復するときに使用可能である。
【０１３９】
ステップＳ５０１において、修復処理実行部２７ｃは、被ソートカウントデータ列の先頭（１番目）、２番目、３番目に位置するカウントデータのアドレスを取得する。
【０１４０】
ステップＳ５０３において、修復処理実行部２７ｃは、ステップＳ５０１において取得した、１番目、２番目、３番目のアドレスが、それぞれ、先頭、２番目、３番目に位置するカウントデータアドレス列パターン（図８参照。）を抽出し、抽出されたパターンを修復用のカウントデータアドレス列パターンの候補とする。
なお、本ステップは、一般の（Ｍ，Ｎ）に関しては、被ソートカウントデータ列の１番目、２番目、・・・、第（Ｍ−１＋ｐ）番目に位置するカウントデータのアドレスを取得し、取得したアドレスに基づいて、修復用のカウントデータアドレス列パターンの候補を抽出すればよい。
【０１４１】
ステップＳ５０５において、修復処理実行部２７ｃは、被ソートカウントデータ列の３番目（（Ｍ−１＋ｐ＋１）番目）に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の４番目（（Ｍ−１＋ｐ＋２）番目）に位置するカウントデータを修復する。
【０１４２】
ステップＳ５０７において、修復処理実行部２７ｃは、被ソートカウントデータ列についての（４番目のカウントデータの値が修復された後における）第４カウントデータ差分値が、ステップＳ５０３にて抽出された修復用カウントデータ差分値列パターンの候補の第４カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第４カウントデータ差分値は修復用カウントデータ差分値列パターンの候補の第４カウントデータ差分値と一致すると判定した場合（ステップＳ５０７における「ＹＥＳ」）、処理は、ステップＳ５１１へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第４カウントデータ差分値は修復用カウントデータ差分値列パターンの候補の第４カウントデータ差分値と一致しないと判定した場合（ステップＳ５０７における「ＮＯ」）、処理は、ステップＳ５０９へ移行する。
【０１４３】
ステップＳ５０９において、修復処理実行部２７ｃは、被ソートカウントデータ列の４番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の５番目に位置するカウントデータを修復する。
【０１４４】
ステップＳ５１１において、修復処理実行部２７ｃは、被ソートカウントデータ列についての（５番目のカウントデータの値が修復された後における）第５カウントデータ差分値が、ステップＳ５０３にて抽出された修復用カウントデータ差分値列パターンの候補の第５カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第５カウントデータ差分値は修復用カウントデータ差分値列パターンの候補の第５カウントデータ差分値と一致すると判定した場合（ステップＳ５１１における「ＹＥＳ」）、修復処理は、終了する（図１４参照。）。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第５カウントデータ差分値は修復用カウントデータ差分値列パターンの候補の第５カウントデータ差分値と一致しないと判定した場合（ステップＳ５１１における「ＮＯ」）、処理は、ステップＳ５１３へ移行する。
【０１４５】
ステップＳ５１３において、修復処理実行部２７ｃは、被ソートカウントデータ列の５番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の６番目に位置するカウントデータを修復する。
【０１４６】
次に、図１４のステップＳ２１１において「ＹＥＳ」と判定された場合について説明する。
【０１４７】
ステップＳ２１３において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列の第４番目の差分値が、ステップＳ２０７、ステップＳ２０９、および、ステップＳ２１１において一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第４カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第４カウントデータ差分値はステップＳ２０７、ステップＳ２０９、および、ステップＳ２１１において一致すると判定されたカウントデータ差分値列パターンのいずれかにおける第４カウントデータ差分値と一致すると判定した場合（ステップＳ２１３における「ＹＥＳ」）、処理は、ステップＳ７へ移行する。
修復処理実行部２７ｃが、被ソートカウントデータ列についての第４カウントデータ差分値はステップＳ２０７、ステップＳ２０９、および、ステップＳ２１１において一致すると判定されたカウントデータ差分値列パターンにおける第４カウントデータ差分値のいずれとも一致しないと判定した場合（ステップＳ２１３における「ＮＯ」）、処理は、ステップＳ６へ移行する。
【０１４８】
（カウントデータ修復処理４）
図２０は、カウントデータ修復処理４（図１４におけるＳ６）の詳細を示すフローチャートである。これより、図２０を参照してカウントデータ修復処理４について説明する。
カウントデータ修復処理４は、第１、第２、および、第３カウントデータ差分値は正常であるが第４カウントデータ差分値が正常でない場合に実行される修復処理である。第４カウントデータ差分値は、被ソートカウントデータ列における４番目と５番目に位置するカウントデータの値の差分値である。よって、第１、第２、および、第３カウントデータ差分値は正常であるが第４カウントデー差分値が正常な値を示さないことは、被ソートカウントデータ列における５番目のカウントデータの値が破損している可能性が高いことを意味する。
以下においては、（Ｍ，Ｎ）＝（３，６）である場合を用いてカウントデータ修復処理４を説明する。
なお、カウントデータ修復処理４は、カウントデータ修復処理３と同様、一般の（Ｍ，Ｎ）に関しては、被ソートカウントデータ列の第１カウントデータ差分値から第（Ｍ−１＋ｐ）カウントデータ差分値（ｐ：０＜＝ｐ＜＝Ｎ−Ｍ−１の整数。）までが正常な値を示し、第（Ｍ−１＋ｐ＋１）カウントデータ差分値が正常でないようなカウントデータ異常が検出された場合において、カウントデータの破損を修復するときに使用可能である。
【０１４９】
ステップＳ６０１において、修復処理実行部２７ｃは、被ソートカウントデータ列の先頭（１番目）、２番目、３番目、４番目に位置するカウントデータのアドレスを取得する。
【０１５０】
ステップＳ６０３において、修復処理実行部２７ｃは、ステップＳ６０１において取得した、１番目、２番目、３番目、４番目のアドレスが、それぞれ、先頭、２番目、３番目、４番目に位置するカウントデータアドレス列パターン（図８参照。）を抽出し、抽出されたパターンを修復用のカウントデータアドレス列パターンの候補とする。
【０１５１】
ステップＳ６０５において、修復処理実行部２７ｃは、被ソートカウントデータ列の４番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の５番目に位置するカウントデータを修復する。
【０１５２】
ステップＳ６０７において、修復処理実行部２７ｃは、被ソートカウントデータ列についての（５番目のカウントデータの値が修復された後における）第５カウントデータ差分値が、ステップＳ５０３にて抽出された修復用カウントデータ差分値列パターンの候補の第５カウントデータ差分値と一致するか、否か、について判定する。
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第５カウントデータ差分値は修復用カウントデータ差分値列パターンの候補の第５カウントデータ差分値と一致すると判定した場合（ステップＳ６０７における「ＹＥＳ」）、修復処理は、終了する（図１４参照。）
修復処理実行部２７ｃが、被ソートカウントデータ列の（修復後の）第５カウントデータ差分値は修復用カウントデータ差分値列パターンの候補の第５カウントデータ差分値と一致しないと判定した場合（ステップＳ６０７における「ＮＯ」）、処理は、ステップＳ６０９へ移行する。
【０１５３】
ステップＳ６０９において、修復処理実行部２７ｃは、被ソートカウントデータ列の５番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の６番目に位置するカウントデータを修復する。
【０１５４】
次に、図１４のステップＳ７について説明する。
【０１５５】
（カウントデータ修復処理５）
図２１は、カウントデータ修復処理５（図１４におけるＳ７）の詳細を示すフローチャートである。これより、図２１を参照してカウントデータ修復処理５について説明する。
カウントデータ修復処理５は、第１、第２、第３、および、第４カウントデータ差分値は正常であるが第５カウントデータ差分値が正常でない場合に実行される修復処理である。第５カウントデータ差分値は、被ソートカウントデータ列における５番目と６番目に位置するカウントデータの値の差分値である。よって、第１、第２、第３、および、第４カウントデータ差分値は正常であるが第５カウントデー差分値が正常な値を示さないことは、被ソートカウントデータ列における６番目のカウントデータの値が破損している可能性が高いことを意味する。
以下においては、（Ｍ，Ｎ）＝（３，６）である場合を用いてカウントデータ修復処理４を説明する。
なお、カウントデータ修復処理５は、カウントデータ修復処理３、４と同様、一般の（Ｍ，Ｎ）に関しては、被ソートカウントデータ列の第１カウントデータ差分値から第（Ｍ−１＋ｐ）カウントデータ差分値（ｐ：０＜＝ｐ＜＝Ｎ−Ｍ−１の整数。）までが正常な値を示し、第（Ｍ−１＋ｐ＋１）カウントデータ差分値が正常でないようなカウントデータ異常が検出された場合において、カウントデータの破損を修復するときに使用可能である。
【０１５６】
ステップＳ７０１において、修復処理実行部２７ｃは、被ソートカウントデータ列の先頭（１番目）、２番目、３番目、４番目、５番目に位置するカウントデータのアドレスを取得する。
【０１５７】
ステップＳ７０３において、修復処理実行部２７ｃは、ステップＳ７０１において取得した、１番目、２番目、３番目、４番目、５番目のアドレスが、それぞれ、先頭、２番目、３番目、４番目、５番目に位置するカウントデータアドレス列パターン（図８参照。）を抽出し、抽出されたパターンを修復用のカウントデータアドレス列パターンの候補とする。
【０１５８】
ステップＳ７０５において、修復処理実行部２７ｃは、被ソートカウントデータ列の５番目に位置するカウントデータの値から３を減算（より一般には、Ｌ・Ｍを減算）して取得した値を用いて、被ソートカウントデータ列の６番目に位置するカウントデータを修復する。
【０１５９】
以上のように、本願発明の実施の形態によるカウントデータ記録装置は、Ｎ個（Ｎ：Ｎ＞＝４の整数。）の記憶領域を所定の順序に従って循環的に用いてカウントデータを記録する。また、本願発明の実施の形態によるカウントデータ記録装置は、カウントデータを記録するＮ個記憶領域について、上記所定の順序に沿って連続するＭ個（Ｍ：３＜＝Ｍ＜Ｎの整数。）のアドレスからなる小ループを規定し、カウントデータの記録を当該Ｍ個のアドレスを順に使用して行う。そして、小ループの最後尾に位置するアドレスを用いてカウントデータの記録を行った後で、小ループの範囲を、上記所定の順序に沿って１アドレスだけ後方にシフトさせ、次のカウントデータの記録には、シフトされた小ループの範囲の先頭に位置するアドレスを使用する。
そうすることによって、カウントデータの値に従ってソートした被ソートカウントデータ列において、アドレスは、所定の有限な個数の整列パターンのうちのいずれか１つに従う。また、被ソートカウントデータ列において互いに隣り合ったカウントデータの値の差分値からなる数列（カウントデータ差分値列）もまた、所定の有限な個数の整列パターンのうちのいずれか１つに従う。
本願発明の実施の形態によるカウントデータ記録装置は、上記被ソートカウントデータ列についてのカウントデータアドレス列およびカウントデータ差分値列ならびに被ソートカウントデータ列において所定の順番に位置する１つ以上のカウントデータの値に基づいて、カウントデータ列に含まれる破損したカウントデータを修復することができる。
【０１６０】
（修復処理実行例）
以下、本願発明にかかるカウントデータ修復方法の実行例を示す。
【０１６１】
（修復処理実行例１）
図２２は、第１の修復処理実行例において用いるカウントデータの例を示す図である。本例においては、（Ｃ，Ｌ，Ｍ，Ｎ）＝（１，＋１，３，６）とする。
【０１６２】
ステップＳ２０１（図１４）において、カウントデータソート部２７ａ（図４）は、カウントデータ（図２２）を降順でソートし、被ソートカウントデータ列を導出する。
【０１６３】
図２３は、ステップＳ２０１において導出された被ソートカウントデータ列を示す。
【０１６４】
次に、ステップＳ２０３（図１４）において、カウントデータ差分算出部２７ｂは、被ソートカウントデータ列（図２３）において隣接するカウントデータ同士の差分値を求め、カウントデータ差分値列を導出する。
【０１６５】
図２４は、ステップＳ２０３において導出されたカウントデータ差分値列を示す。
【０１６６】
次に、ステップＳ２０５（図１４）において、修復処理実行部２７ｃは、カウントデータ差分値列（図２４）が、カウントデータ差分値列パターン［１］〜［３］（図１１）のいずれかと一致するか、否か、について判定する。
カウントデータ差分値列（図２４）は、カウントデータ差分値列パターン［１］〜［３］（図１１）のいずれとも一致しないため、処理は、ステップＳ２０７（図１４）へ移行する。
【０１６７】
ステップＳ２０７において、修復処理実行部２７ｃは、カウントデータ差分値列（図２４）の第１差分値が、カウントデータ差分値列パターン［１］〜［３］（図１１）の第１カウントデータ差分値のいずれかと一致するか、否か、について判定する。
カウントデータ差分値列の第１差分値は、カウントデータ差分値列パターン［１］〜［３］の第１カウントデータ差分値のいずれとも一致しないため、処理は、ステップＳ３へ移行する。
【０１６８】
（カウントデータ修復処理１）
図１４のステップＳ３であるカウントデータ修復処理１には、図１５に示した処理のほか、２つの変形例（図１６および図１７）が存在する。これら３種類のカウントデータ修復処理１について、順に、実行例を示す。
【０１６９】
（カウントデータ修復処理１（図１５）を用いた修復処理）
ステップＳ３０１（図１５）において、修復処理実行部２７ｃは、被ソートカウントデータ列（図２３）の先頭に位置するカウントデータのアドレスを取得する。ここでは、当該アドレスは、「アドレス［２］」である。
【０１７０】
ステップＳ３０３（図１５）において、修復処理実行部２７ｃは、カウントデータアドレス列パターン［０１］〜［１２］（図８）から、その先頭のカウントデータのアドレスが「アドレス［２］」であるカウントデータアドレス列パターンを抽出する。ここでは、図２５に示すように、カウントデータアドレス列パターン［１］および［４］が、カウントデータアドレス列パターンの候補として抽出される。
【０１７１】
ステップＳ３０５（図１５）において、修復処理実行部２７ｃは、カウントデータアドレス列パターン［１］および［４］それぞれについて、対応するカウントデータ差分値列パターンの候補（図１２参照。）を抽出する。ここでは、図２６に示すように、カウントデータアドレス列パターン［１］に対応するカウントデータ差分値列パターンは、パターン［１］およびパターン［３］であり、他方、カウントデータアドレス列パターン［４］に対応するカウントデータ差分値列パターンは、パターン［２］である。
【０１７２】
ステップＳ３０７（図１５）において、修復処理実行部２７ｃは、カウントデータ差分値列パターン［１］に対応するカウントデータアドレス列パターン［１］（図２６）を、修復用のカウントデータアドレス列パターンに決定する。
【０１７３】
ステップＳ３０９（図１５）において、修復処理実行部２７ｃは、カウントデータアドレス列パターン［１］およびカウントデータ差分値列パターン［１］に基づいて、被ソートアドレス列（図２３）の先頭に位置するカウントデータ以外のカウントデータを修復する。図２７は、修復前後におけるカウントデータの値を示す。
【０１７４】
（カウントデータ修復処理１変形例１（図１６）を用いた修復処理）
ステップＳ３１１（図１６）において、修復処理実行部２７ｃは、カウントデータが破損していることを示す通知（カウントデータ異常）を、例えば、制御部２３（図４）出力する。
【０１７５】
（カウントデータ修復処理１変形例２（図１７）を用いた修復処理）
ステップＳ３１３およびステップＳ３１５（図１７）において、修復処理実行部２７ｃは、被ソートカウントデータ列についてのカウントデータ差分値列（図２８）の第２、第３、第４カウントデータ差分値が、カウントデータ差分値列パターン［１］の第２、第３、第４カウントデータ差分値（図２９）と一致すると判定し、処理は、ステップＳ３１７へ移行する。
【０１７６】
ステップＳ３１７（図１７）において、修復処理実行部２７ｃは、カウントデータ差分値列パターン［１］（図２９）に従って、被ソートカウントデータ列の２番目に位置するカウントデータの値に１を加算して取得した値を用いて、被ソートカウントデータ列の先頭に位置するカウントデータの値を修復する。図３０は、当該先頭に位置するカウントデータの修復前後におけるカウントデータの値を示す。
【０１７７】
次に、ステップＳ３２１（図１７）において、修復処理実行部２７ｃは、被ソートカウントデータ列についての第５カウントデータ差分値（図２８）と、カウントデータ差分値列パターン［１］の第５カウントデータ差分値（図２９）とは一致しないと判定し、処理は、ステップＳ３２３へ移行する。
【０１７８】
ステップＳ３２３（図１７）において、修復処理実行部２７ｃは、カウントデータ差分値列パターン［１］（図２９）に従って、被ソートカウントデータ列の５番目に位置するカウントデータの値から３を減算して取得した値を用いて、被ソートカウントデータ列の６番目に位置するカウントデータの値を修復する。図３１は、当該６番目に位置するカウントデータの修復前後におけるカウントデータの値を示す。
【０１７９】
（修復処理実行例２）
以下、本願発明にかかるカウントデータ修復方法の別の実行例を示す。
図３２は、第２の修復処理実行例において用いるカウントデータの例を示す図である。本例においては、（Ｃ，Ｌ，Ｍ，Ｎ）＝（１，＋１，３，６）とする。
【０１８０】
ステップＳ２０１（図１４）において、カウントデータソート部２７ａ（図４）は、カウントデータ（図３２）を降順でソートし、被ソートカウントデータ列を導出する。
【０１８１】
図３３は、ステップＳ２０１において導出された被ソートカウントデータ列を示す。
【０１８２】
次に、ステップＳ２０３（図１４）において、カウントデータ差分算出部２７ｂは、被ソートカウントデータ列（図３３）において隣接するカウントデータ同士の差分値を求め、カウントデータ差分値列を導出する。
【０１８３】
図３４は、ステップＳ２０３において導出されたカウントデータ差分値列を示す。
【０１８４】
次に、ステップＳ２０５（図１４）において、修復処理実行部２７ｃは、カウントデータ差分値列（図３４）が、カウントデータ差分値列パターン［１］〜［３］（図１１）のいずれかと一致するか、否か、について判定する。
カウントデータ差分値列（図３４）は、カウントデータ差分値列パターン［１］〜［３］（図１１）のいずれとも一致しないため、処理は、ステップＳ２０７（図１４）へ移行する。
【０１８５】
ステップＳ２０７において、修復処理実行部２７ｃは、カウントデータ差分値列（図３４）の第１差分値が、カウントデータ差分値列パターン［１］〜［３］（図１１）の第１カウントデータ差分値のいずれかと一致するか、否か、について判定する。
カウントデータ差分値列の第１差分値は、カウントデータ差分値列パターン［１］〜［３］の第１カウントデータ差分値と一致する。よって、処理は、ステップＳ２０９へ移行する。
【０１８６】
ステップＳ２０９において、修復処理実行部２７ｃは、カウントデータ差分値列（図３４）の第２差分値が、カウントデータ差分値列パターン［１］〜［３］（図１１）の第２カウントデータ差分値のいずれかと一致するか、否か、について判定する。
カウントデータ差分値列の第２カウントデータ差分値（図３４）は、カウントデータ差分値列パターン［１］〜［３］の第２カウントデータ差分値（図１１）のいずれとも一致しないため、処理は、ステップＳ４へ移行する。
【０１８７】
（カウントデータ修復処理２）
ステップＳ４（図１４）において、修復処理実行部２７ｃは、カウントデータ修復処理２（図１８Ａおよび図１８Ｂ）を実行する。
【０１８８】
ステップＳ４０１（図１８Ａ）において、修復処理実行部２７ｃは、被ソートカウントデータ列（図３３）の先頭および２番目に位置するカウントデータのアドレスを取得する。ここでは、当該アドレスは、「アドレス［１］、アドレス［６］」である。
【０１８９】
ステップＳ４０３（図１８Ａ）において、修復処理実行部２７ｃは、カウントデータアドレス列パターン［０１］〜［１２］（図８）から、その先頭および２番目のカウントデータのアドレスが「アドレス［１］、アドレス［６］」であるカウントデータアドレス列パターンを抽出する。ここでは、図３５に示すように、カウントデータアドレス列パターン［１１］が、カウントデータアドレス列パターンの候補として抽出される。
【０１９０】
ステップＳ４０５（図１８Ａ）において、修復処理実行部２７ｃは、カウントデータアドレス列パターン［１１］について、対応するカウントデータ差分値列パターンの候補（図１２参照。）を抽出する。ここでは、図３６に示すように、カウントデータアドレス列パターン［１１］に対応するカウントデータ差分値列パターンは、パターン［１］およびパターン［３］である。
【０１９１】
ステップＳ４０７（図１８Ａ）において、修復処理実行部２７ｃは、被ソートカウントデータ列（図３３）の先頭に位置するカウントデータの値「５３」を、小ループ構成アドレス総数Ｍ「３」で除算した場合に生じる剰余を求める。ここで、当該剰余は、「２」である。修復処理実行部２７ｃは、剰余「２」に基づいて、修復用カウントデータ差分値列パターンを、ステップＳ４０５において抽出されたカウントデータ差分値列パターン［１］および［３］のなかから、決定する。
本例のように、（Ｃ，Ｌ，Ｍ，Ｎ）＝（１，＋１，３，６）の場合には、被ソートカウントデータ列の先頭に位置するカウントデータの値をＭで除算したときに生じる剰余「０」、「１」、「２」は、それぞれ、カウントデータ差分値列パターン［１］、［２］、［３］と対応する（図９、図１０、を参照。）。
修復処理実行部２７ｃは、修復用カウントデータ差分値列パターンを、カウントデータ差分値列パターン［３］に決定する。
【０１９２】
ステップＳ４０７において修復用カウントデータ差分値列パターンは、ただ１つのパターンに決定することができた。よって、ステップＳ４０９においては、「ＹＥＳ」と判定され、処理は、ステップＳ４１１へ移行する。
【０１９３】
修復用カウントデータ差分値列パターンは、パターン［３］であるから、処理は、ステップＳ４１１およびステップＳ４１３を経て、ステップＳ４２１へ移行する。
【０１９４】
ステップＳ４２１において、修復処理実行部２７ｃは、被ソートカウントデータ列の２番目に位置するカウントデータの値およびカウントデータ差分値列パターン［３］に従い、被ソートカウントデータ列の３番目に位置するカウントデータを修復する。
修復処理実行部２７ｃは、アドレス［６］のカウントデータの値「５２」（図３３）から「３」を減算して値「４９」を取得し、当該値「４９」を用いてアドレス［５］のカウントデータの値を修復する。
【０１９５】
図３７は、ステップＳ４２１における修復処理の前後におけるカウントデータの値を示す。
【０１９６】
ステップＳ４２３において、修復処理実行部２７ｃは、修復後の被ソートカウントデータ列についての第３カウントデータ差分値（＝４９−４６＝３（図３７））が、カウントデータ差分値列パターン［３］の第３カウントデータ差分値と一致する、と判定する。
処理は、ステップＳ４２７へ移行する。
【０１９７】
ステップＳ４２７において、修復処理実行部２７ｃは、修復後の被ソートカウントデータ列についての第４カウントデータ差分値（＝４６−４３＝３（図３７））が、カウントデータ差分値列パターン［３］の第４カウントデータ差分値と一致する、と判定する。
処理は、ステップＳ４３１へ移行する。
【０１９８】
ステップＳ４３１において、修復処理実行部２７ｃは、修復後の被ソートカウントデータ列についての第５カウントデータ差分値（＝４３−４０＝３（図３７））が、カウントデータ差分値列パターン［３］の第５カウントデータ差分値と一致する、と判定する。
よって、被ソートカウントデータ列の４番目、５番目、６番目に位置するカウントデータの値は正常であると判断され、修復処理は行われない。よって、修復処理の最終的な結果は、図３７に示した修復後カウントデータのとおりである。
【産業上の利用可能性】
【０１９９】
本発明にかかるカウントデータ記録装置は、書き込み繰り返し回数に制限がある記憶装置を用いてカウントデータを記録する場合に特に有用である。
【図面の簡単な説明】
【０２００】
【図１】本発明の実施の形態によるカウントデータ記録装置（ＭＦＰ１）の斜視図
【図２】感光体ユニット５の斜視図
【図３】ＭＦＰ１のハードウェア構成を示すブロック図
【図４】ＭＦＰ１の機能的構成を示すブロック図
【図５】本発明の実施の形態におけるカウントデータ記憶領域の構成およびカウントデータの書き込み順序を示す模式図
【図６】大ループを構成する記憶領域の総数Ｎが６、小ループを構成する記憶領域の総数Ｍが３、カウントインクリメント幅Ｌが１、カウント開始値Ｃが１である場合のカウントデータ書き込みの具体例を示す図
【図７】正常なカウントデータについて、その値を降順でソートしたときの被ソートカウントデータ列とカウントデータアドレス列パターンの対応を示す図
【図８】被ソートカウントデータ列とカウントデータアドレス列パターンの対応を示す図
【図９】被ソートカウントデータ列とカウントデータ差分値列パターンの対応を示す図
【図１０】（Ｎ，Ｍ，Ｌ，Ｃ）＝（６，３，１，１）の場合における、カウント数０から２６までのカウントデータ差分値を示す図
【図１１】（Ｎ，Ｍ，Ｌ）＝（６，３，１）の場合における、カウントデータ差分値列パターンの詳細を示す図
【図１２】（Ｎ，Ｍ，Ｌ）＝（６，３，１）の場合における、カウントデータアドレス列パターンとカウントデータ差分値列パターンとの対応を示す図
【図１３】カウントデータ書き込み処理のフローチャート
【図１４】カウントデータ修復処理のフローチャート
【図１５】カウントデータ修復処理１の詳細を示すフローチャート
【図１６】カウントデータ修復処理１の第１の変形例の詳細を示すフローチャート
【図１７】カウントデータ修復処理１の第２の変形例の詳細を示すフローチャート
【図１８Ａ】カウントデータ修復処理２の詳細を示すフローチャート
【図１８Ｂ】カウントデータ修復処理２の詳細を示すフローチャート
【図１９】カウントデータ修復処理３の詳細を示すフローチャート
【図２０】カウントデータ修復処理４の詳細を示すフローチャート
【図２１】カウントデータ修復処理５の詳細を示すフローチャート
【図２２】カウントデータ修復処理の第１実行例に用いるカウントデータを示す図
【図２３】被ソートカウントデータ列の詳細を示す図
【図２４】被ソートカウントデータ列のカウントデータ差分値列を示す図
【図２５】先頭がアドレス［２］である、カウントデータアドレス列パターンを示す図
【図２６】抽出したカウントデータアドレス列パターン候補それぞれに対応するカウントデータ差分値列パターンを示す図
【図２７】修復前後におけるカウントデータの値を示す図
【図２８】被ソートカウントデータ列のカウントデータ差分値列を示す図
【図２９】カウントデータ差分値列パターンを示す図
【図３０】被ソートカウントデータ列の先頭のカウントデータを修復した状態における被ソートカウントデータ列を示す図
【図３１】被ソートカウントデータ列の６番目のカウントデータを修復した状態における被ソートカウントデータ列を示す図
【図３２】カウントデータ修復処理の第２実行例に用いるカウントデータを示す図
【図３３】被ソートカウントデータ列の詳細を示す図
【図３４】被ソートカウントデータ列のカウントデータ差分値列を示す図
【図３５】先頭がアドレス［１］、２番目がアドレス［６］である、カウントデータアドレス列パターンを示す図
【図３６】抽出したカウントデータアドレス列パターン候補に対応するカウントデータ差分値列パターンを示す図
【図３７】被ソートカウントデータ列の３番目のカウントデータを修復した状態における被ソートカウントデータ列を示す図
【符号の説明】
【０２０１】
１・・・  カウントデータ記録装置（デジタル複合機）
３・・・  トナーカートリッジ
５・・・  感光体ユニット
７・・・  記憶装置
１１・・・  中央処理装置
１３・・・  ランダム・アクセス・メモリ
１５・・・  リード・オンリ・メモリ
１７・・・  Ｉ／Ｏ  ＬＳＩ
１９ｏ・・  出力デバイス
１９ｉ・・  入力デバイス
２１・・・  コンピュータ
２３・・・  制御部
２５・・・  データ書込部
２５ａ・・  書込アドレス決定部
２５ｂ・・  カウントデータ書込部
２７・・・  データ修復部
２７ａ・・  カウントデータソート部
２７ｂ・・  カウントデータ差分算出部
２７ｃ・・  修復処理実行部
２９・・・  データ読出部
３１・・・  設定データ保持部
４１・・・  第（Ｍ−１）カウントデータ差分値
４３・・・  第Ｍカウントデータ差分値から第（Ｎ−１）カウントデータ差分値
【図１】
2010146053.tif 000003
【図２】
2010146053.tif 000004
【図３】
2010146053.tif 000005
【図４】
2010146053.tif 000006
【図５】
2010146053.tif 000007
【図６】
2010146053.tif 000008
【図７】
2010146053.tif 000009
【図８】
2010146053.tif 000010
【図９】
2010146053.tif 000011
【図１０】
2010146053.tif 000012
【図１１】
2010146053.tif 000013
【図１２】
2010146053.tif 000014
【図１３】
2010146053.tif 000015
【図１４】
2010146053.tif 000016
【図１５】
2010146053.tif 000017
【図１６】
2010146053.tif 000018
【図１７】
2010146053.tif 000019
【図１８Ａ】
2010146053.tif 000020
【図１８Ｂ】
2010146053.tif 000021
【図１９】
2010146053.tif 000022
【図２０】
2010146053.tif 000023
【図２１】
2010146053.tif 000024
【図２２】
2010146053.tif 000025
【図２３】
2010146053.tif 000026
【図２４】
2010146053.tif 000027
【図２５】
2010146053.tif 000028
【図２６】
2010146053.tif 000029
【図２７】
2010146053.tif 000030
【図２８】
2010146053.tif 000031
【図２９】
2010146053.tif 000032
【図３０】
2010146053.tif 000033
【図３１】
2010146053.tif 000034
【図３２】
2010146053.tif 000035
【図３３】
2010146053.tif 000036
【図３４】
2010146053.tif 000037
【図３５】
2010146053.tif 000038
【図３６】
2010146053.tif 000039
【図３７】
2010146053.tif 000040