(57)【特許請求の範囲】
【請求項１】
複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取装置において；
読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する生成手段と；
前記バー幅値に基づいて、読み取られた前記バーコードが所定の規格条件を満たすか否かを判定する判定手段と；
前記バーコードを構成する前記白バー及び前記黒バーのいずれかを、当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する変換手段とを備え；
前記判定手段により当該バーコードが所定の規格条件を満たしていないと判定された場合、前記変換手段により当該バーコードを構成する前記白バー及び前記黒バーのいずれかを変換した後、前記判定手段により再判定を行う；
ことを特徴とするバーコード読取装置。
【請求項２】
前記変換手段は変換対象のバーをそれぞれ基本最小単位の倍数の幅対応の複数本のバーに変換することを特徴とする請求項１記載のバーコード読取装置。
【請求項３】
前記変換手段は、変換した前記複数本のバーが前記バーコードのスタートガードバー、センターバー、及びエンドガードバーのいずれにも対応しないとき、前記変換を有効にすることを特徴とする請求項１または２記載のバーコード読取装置。
【請求項４】
前記変換手段は、前記複数本のバーに変換する部分を前記バーコードの一箇所だけとすることを特徴とする請求項１または２記載のバーコード読取装置。
【請求項５】
複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取装置において；
読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する生成手段と；
前記バー幅値に基づいて、読み取られた前記バーコードのパターンを判定する判定手段とを備え；
前記判定手段は、読み取られた前記パターンがそれぞれ基本最小単位幅対応の１本の白バー及び１本の黒バーと基本最小単位の３倍の幅対応の白バー及び黒バーのいずれかとを有する場合と、それぞれ基本最小単位幅対応の２本の白バー及び基本最小単位の３倍の幅対応の黒バーを有する場合とのいずれかにおいて、当該パターンを前記バーコードのセンターバーに対応する部分であると推定する；
ことを特徴とするバーコード読取装置。
【請求項６】
読み取られた前記パターンが前記バーコードのスタートガードバーから前記センターバーを経由しエンドガードバーまでを一走査により読み取ったパターンであるとき、当該パターンを前記バーコードの前記センターバー対応部分と推定した前記判定手段による判定を有効にすることを特徴とする請求項５記載のバーコード読取装置。
【請求項７】
読み取られた前記パターンが前記バーコードのスタートガードバーと前記センターバーとの間及び前記センターバーとエンドガードバーとの間のいずれかまでを一走査により読み取ったパターンであるとき、当該パターンを前記バーコードの前記センターバー対応部分と推定した前記判定手段による判定を有効にすることを特徴とする請求項５記載のバーコード読取装置。
【請求項８】
明部及び暗部を有するバーコードからの反射光を受光して前記バーコードの読み取りを行うバーコード読取装置において；
受光量に応じた振幅を持つ明暗パターン信号を生成する生成手段と；
前記明暗パターン信号の明部から暗部への第１の変化点と前記明暗パターン信号の暗部から明部への第２の変化点とをそれぞれ検出する第１の検出手段と；
前記第１の変化点から前記第２の変化点までの間隔と前記第２の変化点から前記第１の変化点までの間隔とをそれぞれ計測する計測手段と；
前記第１の変化点及び前記第２の変化点のいずれかが連続して検出されたか否かを検出する第２の検出手段と；
前記バーコードを構成する白バー及び黒バーのいずれかを当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する変換手段とを備え；
前記第２の検出手段により前記第１の変化点及び前記第２の変化点のいずれかが連続して検出された場合、前記変換手段は当該変化点に対応する白バー及び黒バーのいずれかに対する変換を実行する；
ことを特徴とするバーコード読取装置。
【請求項９】
複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取方法において；
読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する第１のステップと；
前記バー幅値に基づいて、読み取られた前記バーコードが所定の規格条件を満たすか否かを判定する第２のステップと；
前記バーコードを構成する前記白バー及び前記黒バーのいずれかを、当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する第３のステップとを備え；
前記第２のステップにおいて当該バーコードが所定の規格条件を満たしていないと判定された場合、前記第３のステップにより当該バーコードを構成する前記白バー及び前記黒バーのいずれかを変換した後、前記第２のステップにより再判定を行う；
ことを特徴とするバーコード読取方法。
【請求項１０】
複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取方法において；
読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する第１のステップと；
前記バー幅値に基づいて、読み取られた前記バーコードのパターンを判定する第２のステップとを備え；
前記第２のステップは、読み取られた前記パターンがそれぞれ基本最小単位幅対応の１本の白バー及び１本の黒バーと基本最小単位の３倍の幅対応の白バー及び黒バーのいずれかとを有する場合と、それぞれ基本最小単位幅対応の２本の白バー及び基本最小単位の３倍の幅対応の黒バーを有する場合とのいずれかにおいて、当該パターンを前記バーコードのセンターバーに対応する部分であると推定する；
ことを特徴とするバーコード読取方法。
【請求項１１】
明部及び暗部を有するバーコードからの反射光を受光して前記バーコードの読み取りを行うバーコード読取方法において；
受光量に応じた振幅を持つ明暗パターン信号を生成する第１のステップと；
前記明暗パターン信号の明部から暗部への第１の変化点と前記明暗パターン信号の暗部から明部への第２の変化点とをそれぞれ検出する第２のステップと；
前記第１の変化点から前記第２の変化点までの間隔と前記第２の変化点から前記第１の変化点までの間隔とをそれぞれ計測する第３のステップと；
前記第１の変化点及び前記第２の変化点のいずれかが連続して検出されたか否かを検出する第４のステップと；
前記バーコードを構成する白バー及び黒バーのいずれかを当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する第５のステップとを備え；
前記第４のステップにおいて前記第１の変化点及び前記第２の変化点のいずれかが連続して検出された場合、前記第５のステップは当該変化点に対応する白バー及び黒バーのいずれかに対する変換を実行する；
ことを特徴とするバーコード読取方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バーコードに光を照射して反射光の強度変化を検出することによってバーコードを読み取り、これをデータに復調するバーコード読取装置及びバーコード読取方法に関する。
【０００２】
【従来の技術】
近年、流通業等におけるＰＯＳ（Point of Sales）システムに代表されるように、商品等の管理をバーコードによって行うことが一般化している。例えば、商店のＰＯＳシステムでは、商品の種類や販売価格等の情報をバーコードのフォーマットにコード化して商品に印刷または貼り付けておく。そして、精算場所のレジスタにより商品のバーコードを読み取ることによって、料金精算を行うとともに、商品の売り上げ数をリアルタイムで集計し、在庫管理や仕入れ管理に役立てるようにしている。
【０００３】
ところで、このようなバーコードは、ＷＰＣコード、ＵＰＣコード、ＥＡＮコード及びＪＡＮコード等の固定長コードと、可変長のセカンドコードとに大別される。この可変長コードとは、規格上長さ（バーの数）の定めがないコードであり、例えば、ＩＴＦ（Interleaved Two of Five）コード、ＣＯＤＥ３９、ＮＷ７及びＣＯＤＥ１２８等が挙げられる。
【０００４】
上記固定長コードは、前後両端に付加されるガードバー（ＧＢ）と中間部に挿入されるセンターバー（ＣＢ）とを有し、各ガードバーとセンターバーとの間に各々４または６キャラクタ分のデータキャラクタが配置されている。この場合、前半のデータキャラクタのみが読み取られても、このデータキャラクタが先端側のガードバー（ＬＧＢ）及びセンターバーに挟まれていることから、バーコードを構成するデータであると認識され得る。同様に、後半のデータキャラクタのみが読み取られても、このデータキャラクタがセンターバー及び後端側のガードバー（ＲＧＢ）に挟まれていることから、バーコードを構成するデータであると認識され得る。従って、バーコードを構成する前半のデータキャラクタ及び後半のデータキャラクタを別個に読み取ったデータに基づいて、バーコード全体による読取データを合成することができる。
【０００５】
このようなバーコードを読み取るためのバーコード読取装置（バーコードリーダ）は、バーコードの形成されている商品が小さい場合に用いられる固定型と、商品が大きい場合等に用いられるハンディ型とに大別される。
【０００６】
このうち固定型のバーコードリーダには、操作者がバーコードの方向をあまり意識しなくてもバーコードの読み取りができるように、読み取り用の照射光を多数方向に走査する機構が設けられている。即ち、読み取り照射光としてのレーザービームをポリゴンミラーと固定反射鏡とを併用して、ポリゴンミラーの一反射面での走査中に多数の方向に走査するようにしている。そして、このような走査中にレーザビームの商品表面での反射光を受光し、この受光された反射光の強度変化情報（反射光情報）を復調処理回路においてバーコード用の復調アルゴリズムによって復調し、バーコードにコード化されていたデータを抽出するようにしている。
【０００７】
このような固定型のバーコードリーダーは、商品の通過速度（リーダに対する移動速度）が速い場合でもバーコード読み取りを正確に行えるように高性能化することが求められている。そのため、ポリゴンミラーを高速回転させてレーザ走査速度を高めることにより、バーコードリーダ上を通過する商品のバーコードにレーザービームがヒットする確率（バーコードの走査確率）を高めようとする試みがなされている。
【０００８】
このような高速走査を行うためには、ポリゴンミラーの駆動モータの回転数を高くする必要がある。しかし、このモータの回転数上昇に伴い、消費電流が増大するため、大電流容量の電源装置が必要になるだけではなく、アナログ系回路の高周波数特性に応答する高性能ＩＣの搭載が二値化回路などに必要になる。これらはいずれもバーコードリーダ自体及び関係設備の大幅なコスト上昇の要因になる。
【０００９】
従って、現状では、上記高速走査手法を採用していないバーコードリーダが多い。
【００１０】
【発明が解決しようとする課題】
この結果、従来のバーコードリーダにおいては、バーコードの取り込み回数が十分でなく、商品の通過速度が速いとせいぜい１回程度しかバーコードのデータ取り込みができないという問題がある。
【００１１】
また、従来のバーコードリーダにおいては、白黒の二値化をするか否かの判定基準として、所定の電圧以上は白／黒のエッジ信号（ＷＥＧ、ＢＥＧ）を出力するためにスライスレベル（しきい値）を設けている。このスライスレベルは、回路ノイズの影響が商品表面の凹凸によるノイズまでをエッジ信号として出力しないようにするために、ある程度高めに設定されている。
【００１２】
このようなバーコードリーダにおいては、ＰＣＳ値（白黒の反射率の差）が低いバーコードや色付きのバーコードなどの場合、またリーダのバーコード読取部と商品との通過距離が大きい場合、反射光の戻り光量が少なくなる。
【００１３】
これにより、白黒の変化波形の振幅が小さくなり、スライスレベルを下回る結果、ノイズとして判断され、エッジ信号が出力されなくなる。また、仮にスライスレベルを僅かに上回ったとしても振幅が小さいところでは、Ｓ／Ｎ比が悪く、回路ノイズ等の影響によりスライスレベルを下回り、エッジ信号が出力されないときがある。
【００１４】
さらに、上述した各問題を生じる条件が重畳した場合、バーコード対応の光電変換波形の微分信号の振幅がスライスレベルを下回ってしまい、複数本のバーが１本のバーに見えてしまって、バーコードのデータを正確に抽出し復調できなくなる。
【００１５】
本発明の課題は、見かけ上、１本（１バー）として読み取ってしまったバーを複数本のバーとして推測補正することにより、読取異常のバーコードの復調を可能にするバーコード読取装置及びバーコード読取方法を提供することにある。
【００１６】
【課題を解決するための手段】
本発明によるバーコード読取装置は、複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取装置において；読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する生成手段と；前記バー幅値に基づいて、読み取られた前記バーコードが所定の規格条件を満たすか否かを判定する判定手段と；前記バーコードを構成する前記白バー及び前記黒バーのいずれかを、当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する変換手段とを備え；前記判定手段により当該バーコードが所定の規格条件を満たしていないと判定された場合、前記変換手段により当該バーコードを構成する前記白バー及び前記黒バーのいずれかを変換した後、前記判定手段により再判定を行う構成である。
【００１７】
この構成のバーコード読取装置において、前記変換手段は変換対象のバーをそれぞれ基本最小単位の倍数の幅対応の複数本のバーに変換する構成を採ることができる。また、前記変換手段は、変換した前記複数本のバーが前記バーコードのスタートガードバー、センターバー、及びエンドガードバーのいずれにも対応しないとき、前記変換を有効にする。さらに、前記変換手段は、前記複数本のバーに変換する部分を前記バーコードの一箇所だけとする。
【００１８】
本発明の他のバーコード読取装置は、複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取装置において；読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する生成手段と；前記バー幅値に基づいて、読み取られた前記バーコードのパターンを判定する判定手段とを備え；前記判定手段は、読み取られた前記パターンがそれぞれ基本最小単位幅対応の１本の白バー及び１本の黒バーと基本最小単位の３倍の幅対応の白バー及び黒バーのいずれかとを有する場合と、それぞれ基本最小単位幅対応の２本の白バー及び基本最小単位の３倍の幅対応の黒バーを有する場合とのいずれかにおいて、当該パターンを前記バーコードのセンターバーに対応する部分であると推定する構成である。
【００１９】
この構成のバーコード読取装置において、読み取られた前記パターンが前記バーコードのスタートガードバーから前記センターバーを経由しエンドガードバーまでを一走査により読み取ったパターンであるとき、当該パターンを前記バーコードの前記センターバー対応部分と推定した前記判定手段による判定を有効にする。また、読み取られた前記パターンが前記バーコードのスタートガードバーと前記センターバーとの間及び前記センターバーとエンドガードバーとの間のいずれかまでを一走査により読み取ったパターンであるとき、当該パターンを前記バーコードの前記センターバー対応部分と推定した前記判定手段による判定を有効にすることができる。
【００２０】
本発明の別のバーコード読取装置は、明部及び暗部を有するバーコードからの反射光を受光して前記バーコードの読み取りを行うバーコード読取装置において；受光量に応じた振幅を持つ明暗パターン信号を生成する生成手段と；前記明暗パターン信号の明部から暗部への第１の変化点と前記明暗パターン信号の暗部から明部への第２の変化点とをそれぞれ検出する第１の検出手段と；前記第１の変化点から前記第２の変化点までの間隔と前記第２の変化点から前記第１の変化点までの間隔とをそれぞれ計測する計測手段と；前記第１の変化点及び前記第２の変化点のいずれかが連続して検出されたか否かを検出する第２の検出手段と；前記バーコードを構成する白バー及び黒バーのいずれかを当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する変換手段とを備え；前記第２の検出手段により前記第１の変化点及び前記第２の変化点のいずれかが連続して検出された場合、前記変換手段は当該変化点に対応する白バー及び黒バーのいずれかに対する変換を実行する構成である。
【００２１】
本発明のバーコード読取方法は、複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取方法において；読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する第１のステップと；前記バー幅値に基づいて、読み取られた前記バーコードが所定の規格条件を満たすか否かを判定する第２のステップと；前記バーコードを構成する前記白バー及び前記黒バーのいずれかを、当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する第３のステップとを備え；前記第２のステップにおいて当該バーコードが所定の規格条件を満たしていないと判定された場合、前記第３のステップにより当該バーコードを構成する前記白バー及び前記黒バーのいずれかを変換した後、前記第２のステップにより再判定を行う構成である。
【００２２】
本発明の他のバーコード読取方法は、複数本の白バー及び複数本の黒バーから構成されるバーコードを読み取るバーコード読取方法において；読み取られた白バー及び黒バーの幅をそれぞれ示すバー幅値を生成する第１のステップと；前記バー幅値に基づいて、読み取られた前記バーコードのパターンを判定する第２のステップとを備え；前記第２のステップは、読み取られた前記パターンがそれぞれ基本最小単位幅対応の１本の白バー及び１本の黒バーと基本最小単位の３倍の幅対応の白バー及び黒バーのいずれかとを有する場合と、それぞれ基本最小単位幅対応の２本の白バー及び基本最小単位の３倍の幅対応の黒バーを有する場合とのいずれかにおいて、当該パターンを前記バーコードのセンターバーに対応する部分であると推定する構成である。
【００２３】
本発明の別のバーコード読取方法は、明部及び暗部を有するバーコードからの反射光を受光して前記バーコードの読み取りを行うバーコード読取方法において；受光量に応じた振幅を持つ明暗パターン信号を生成する第１のステップと；前記明暗パターン信号の明部から暗部への第１の変化点と前記明暗パターン信号の暗部から明部への第２の変化点とをそれぞれ検出する第２のステップと；前記第１の変化点から前記第２の変化点までの間隔と前記第２の変化点から前記第１の変化点までの間隔とをそれぞれ計測する第３のステップと；前記第１の変化点及び前記第２の変化点のいずれかが連続して検出されたか否かを検出する第４のステップと；前記バーコードを構成する白バー及び黒バーのいずれかを当該色のバーの間に白黒が反転したバーが挟まれる複数本のバーに変換する第５のステップとを備え；前記第４のステップにおいて前記第１の変化点及び前記第２の変化点のいずれかが連続して検出された場合、前記第５のステップは当該変化点に対応する白バー及び黒バーのいずれかに対する変換を実行する構成である。
【００２４】
本発明のバーコード読取装置及びバーコード読取方法によれば、物体（商品）を高速に通過（移動）させた場合にバーコードを読み取れないで読取異常と処理したものを救済することができる。この結果、物体を高速に通過させたときのバーコードの読取率が向上する。
【００２５】
また、本発明によれば、バーコード読取装置とこれに対して通過させる物体との距離が適当でない場合などにバーコード読取異常と処理したものを救済することができる。この結果、バーコードの読取エリアが拡大する。
【００２６】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
＜バーコード読取装置（バーコードリーダ）の構成＞
本発明の一実施の形態によるバーコード読取装置（バーコードリーダ）の構成を示す図１を参照すると、レーザー光源１はレーザービームＬを出射する半導体レーザである。このレーザー光源１から出射されたレーザービームＬは走査・集光光学系２に入射される。この走査・集光光学系２はポリゴンミラーによってレーザービームＬを偏向するとともに、偏向されたレーザービームＬを複数の固定ミラーで種々の方向に反射させる光学系である。この走査・集光光学系２によると、ポリゴンミラーの一反射面による偏向周期内で、この走査・集光光学系２の上方に向けて、複数の方向へのレーザービーム走査が連続的に行われる。
【００２７】
このようにして走査されたレーザービームＬが商品３の表面に当たると、この表面においてレーザービームＬが乱反射され、その反射光Ｒの一部が走査・集光光学系２に戻る。走査・集光光学系２はこの反射光Ｒを光検知器４に入力する。光検知器４は、レーザービームＬ（反射光Ｒ）と同じ波長の光のみを透過するフィルタが被せられたホトダイオードであり、反射光Ｒの強度変化に応じた電流を出力する。
【００２８】
微分回路５は光検知器４から出力された反射光Ｒの強度変化に応じた電流信号の立ち上がり及び立ち下がり時、つまりバーコード（マージンを含む）の黒バー（暗部）から白バー（明部）への変化点及び白バーから黒バーへの変化点において電流信号レベルに応じた振幅の微分信号（厳密には、１回微分の電圧信号）を二値化回路６に出力する。なお、この微分回路５の前段には、光検知器４の出力の電流信号を所定レベルに増幅するための増幅回路が設けられることもある。
【００２９】
二値化回路６は微分回路５からの微分信号と後に詳述するスライスレベル発生回路７からの第１のスライスレベル及び第２のスライスレベルとを比較し、微分信号の振幅が第１のスライスレベルを超えるときはバーコードの黒バーから白バーへの変化点（白エッジ）を示す白エッジパルスＷＥＧを出力し、微分信号の振幅が第２のスライスレベルを超えるときはバーコードの白バーから黒バーへの変化点（黒エッジ）を示す黒エッジパルスＢＥＧを出力する。これらの白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧはそれぞれ変化点において論理「Ｈ（１）」レベルから論理「Ｌ（０）」レベルに変化する矩形信号である。
【００３０】
スライスレベル発生回路７は二値化回路６に入力するための第１のスライスレベル及び第２のスライスレベルの電圧信号を発生する。第１のスライスレベルは二値化回路６において白エッジを検出するための＋レベルのしきい値であり、第２のスライスレベルは黒エッジを検出するための−レベルのしきい値である。
【００３１】
このスライスレベル発生回路７は微分回路５の出力の微分信号のピークホールドを求め、微分信号の振幅が大きいときには、その振幅に応じた第１及び第２のスライスレベルを可変設定するが、微分信号の振幅が小さいときには、第１及び第２のスライスレベルを予め定めたレベル（例えば、±３００ｍＶ）に固定するように動作する。
【００３２】
バー幅カウンタ８は二値化回路６から入力された白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧに基づいて、白エッジパルスＷＥＧのタイミングから黒エッジパルスＢＥＧのタイミングまでの時間（バーコード３０中の白バーの幅に対応するものと期待される）と、黒エッジパルスＢＥＧのタイミングから白エッジパルスＷＥＧのタイミングまでの時間（バーコード３０中の黒バーの幅に対応するものと期待される）とを測定する。そして、このバー幅カウンタ８はこれらバー幅に対応する時間を計測するためにクロック発生回路９からのクロックパルスの数をカウントし、これらバー幅に対応するカウント値を示すバー幅カウント値ＢＣＤをフィルタ回路１０に出力する。
【００３３】
また、バー幅カウンタ８はこのバー幅カウント値ＢＣＤと同時に、そのバーが黒バーか白バーかを示す色識別信号Ｂ／Ｗをフィルタ回路１０に出力する。この色識別は白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧの入力状態に基づいて行うことができる。したがって、この色識別のための回路は、例えば、白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧをそれぞれ入力し、これらエッジパルスのそれぞれに対応して論理レベル「Ｈ（１）」信号及び論理レベル「Ｌ（０）」信号を出力するフリップフロップ回路により構成できる。
【００３４】
さらに、バー幅カウンタ８は、バーコード３０の読取正常時に交互に入力される二値化回路６からの白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧのいずれかが２回連続的に入力されたとき、異常信号としてウエーブエラー信号ＷＥをフィルタ回路１０に送出する。この実施の形態では、後述する第５のバーコード補正処理時にウエーブエラー信号ＷＥを利用する。
【００３５】
フィルタ回路１０はバー幅カウンタ８から入力された各カウント値ＢＣＤを論理的に判定し、明らかにバーコード３０からの反射光Ｒ以外の要因による強度変化を示すカウント値（例えば、商品のバーコード周辺のデザイン部を走査した際に発生する無駄データ対応のカウント値）を除去し、バーコード３０の各バーの幅を示すバー幅カウント値ＢＣＤである蓋然性が高いものだけを抽出して色識別信号Ｂ／Ｗとともに次段のＦＩＦＯメモリ回路１１に渡す。このフィルタ回路１０の無駄データ除去作用は、後述するバーコード認識・復調回路１２における復調処理の負荷軽減及び精度向上に寄与している。
【００３６】
ＦＩＦＯメモリ回路１１はフィルタ回路１０を通過したバー幅カウント値ＢＣＤ及びこれに付加された色識別信号Ｂ／Ｗを一旦保持するとともに、保持した順序に従ってバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗを出力する先入れ先出しメモリであり、バッファとして機能する。このＦＩＦＯメモリ回路１１は短時間に大量のバー幅カウント値ＢＣＤが発生した場合、バーコード認識・復調回路１２における復調処理が間に合わないためにメモリオーバーフローになること、つまりバー幅カウント値ＢＣＤの取りこぼしを回避するための緩衝作用を有する。
【００３７】
バーコード認識・復調回路１２はＦＩＦＯメモリ回路１１から読み出された各バー幅カウント値ＢＣＤに対して所定の認識・復調処理プログラムを実行して、バーコードにコード化されていた各種のデータを取り出すプロセッサである。
【００３８】
（バーコード認識・復調回路の詳細構成）
ここで、上記バーコード認識・復調回路１２の詳細構成を前段に配置されるＦＩＦＯメモリ回路１１とともに説明する。
【００３９】
図２を参照すると、バーコード認識・復調回路１２の前段にはＦＩＦＯメモリ回路１１が配置されている。このＦＩＦＯメモリ回路１１の入出力信号において、信号ＢＣＤはフィルタ回路１０を構成する複数段のバッファ（図示省略）のうちの最終段のバッファから出力されるバー幅カウント値を示す。また、信号Ｂ／Ｗはフィルタ回路１０の最終段のバッファから出力されるバー色（黒／白）を示す色識別信号を示す。さらに、信号ＷＥはフィルタ回路１０の最終段のバッファから出力されるウエーブエラー信号を示す。
【００４０】
これらの各信号は、フィルタ回路１０から信号（ＳＦＴＩＮ）が送信されてきた時に、ＦＩＦＯメモり回路１１によって読み取られる。また、これらの信号を読み取ると、ＦＩＦＯメモリ回路１１はインプットレディ信号（ＩＲ）をバー幅カウンタ８（図１参照）に向けて送出する。
【００４１】
このＦＩＦＯメモリ回路１１と次段のバーコード認識・復調回路１２とは、外部バス（１６ビット構成）ＥＢによって接続されている。そして、ＦＩＦＯメモリ回路１１は、最先に読み込んだバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗを外部バスＥＢを介してバーコード認識・復調回路１２に向けて出力するとともに、これら信号の取り込みを指示する信号（ＯＲ）をバーコード認識・復調回路１２に対して発行する。そして、バーコード認識・復調回路１２がこれらの信号の取り込み完了を示す信号（ＳＦＴＯＵＴ）を通知してくると、次のバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗをバーコード認識・復調回路１２に向けて出力する。
【００４２】
なお、ＦＩＦＯメモリ回路１１とバーコード認識・復調回路１２とを接続する外部バスＥＢには、外部メモリ回路としてＲＡＭ１３及びＲＯＭ１４が接続されている。ＲＡＭ１３はＦＩＦＯメモリ回路１１から送信されたデータ（バー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗ）を一時的に格納するランダムアクセスメモリである。また、ＲＯＭ１４はバーコード認識・復調回路１２の制御回路（後に詳述）が実行する各種プログラムを格納するリードオンリーメモリである。
【００４３】
バーコード認識・復調回路１２は内部バス（３２ビット構成）ＬＢによって夫々接続された制御回路（ＣＰＵ）１２０、メモリ回路（ＲＡＭ）１２１、ユニバーサルアシンクロナスレシーバトランスミッタ（ＵＡＲＴ）１２２、ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）１２３、及び内部バスＬＢと外部バスＥＢとの間に接続されたバスステートコントローラ（ＢＳＣ）１２４から構成されている。
【００４４】
制御回路（ＣＰＵ）１２０はＲＩＳＣチップから構成され、バーコード認識・復調回路１２全体の制御を行い、ＦＩＦＯメモリ回路１１から送信されたバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗに基づくバーコードの認識及び復調処理を実行する。
【００４５】
バスステートコントローラ（ＢＳＣ）１２４は内部バスＬＢ及び外部バスＥＢの状態を管理する入出力インタフェースである。
ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）１２３は、ＦＩＦＯメモリ回路１１から信号の取り込みを指示する信号（ＯＲ）が入力されると、ＦＩＦＯメモリ回路１１から送信されてきているバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗのデータを一旦外部のＲＡＭ１３に取り込んだ後、バスステートコントローラ１２４を制御して、このＲＡＭ１３に比べて小容量の内部のＲＡＭ１２１に格納させるために転送する。この転送が完了すると、ＤＭＡＣ１２３はデータの取り込み完了を示す信号（ＳＦＴＯＵＴ）をＦＩＦＯメモリ回路１１に返送する。
【００４６】
ユニバーサルアシンクロナスレシーバトランスミッタ（ＵＡＲＴ）１２２はパラレル情報として復調されたキャラクタ情報（復調バーコードデータ）をシリアル信号に変換して図示省略のＲＳ−２３２Ｃポートから外部のＰＯＳなどに出力するパラレル／シリアルインタフェースである。
【００４７】
＜バーコード読取装置（バーコードリーダ）の動作＞
以上述べた構成を採るバーコードリーダの動作について、図１、図２及び図３を併用して説明する。
【００４８】
使用者がバーコードリーダの電源を投入すると、レーザー光源１から出射されたレーザービームＬが走査・集光光学系２によってあらゆる方向に走査される。使用者が商品３のバーコード３０が付されている面を走査・集光光学系２上に置くか、その上を通過（移動）すると、この面の走査が行われる。そして、レーザービームＬがこの商品３の面上におけるバーコード３０の白バー（明部）及び黒バー（暗部）に当たると、バー色に対応した反射光Ｒが走査・集光光学系２に戻って光検知器４に受光される。
【００４９】
ＵＰＣ、ＥＰＣ、ＪＡＮコードでは、バー幅の基本最小単位（最小幅）を１モジュールとしており、またバーコードを構成するバーの最大幅は４モジュールである。さらに、１キャラクタは２本の黒バー及び２本の白バーから構成され、１キャラクタの幅は７モジュールである。
【００５０】
例えば、商品３のバーコード３０が図３（Ａ）に示すように、３モジュールの黒バーＢａ、３モジュールの白バーＷａ、１モジュールの黒バーＢｂ、１モジュールの白バーＷｂ、１モジュールの黒バーＢｃ、１モジュールの白バーＷｃ、２モジュールの黒バーＢｄ、３モジュールの白バーＷｄ……である場合、走査・集光光学系２からのレーザービームＬが各バーを順次照射し、バー幅とバー色に対応した反射光Ｒが走査・集光光学系２に戻って光検知器４に受光される。
【００５１】
この結果、光検知器４を構成するホトダイオードの光電変換波形４０は図３（Ｂ）に示すようになる。同図に示すように、バーコード３０に照射されるレーザービームＬは白バー位置では反射され、黒バー位置では吸収されるため、光電変換波形４０のレベルは黒バー照射位置では低下する。
【００５２】
このような光電変換波形４０はバーコード３０の走査順に光検知器４から微分回路５に入力される。微分回路５は図３（Ｃ）に示すように、光電変換波形４０の立ち下がり（黒エッジ）及び立ち上がり（白エッジ）箇所で−レベル及び＋レベルの振幅の微分信号５０を出力する。時刻Ｔ４において点線で示す微分信号５０はバーコード読取異常時の出力状態であり、補正手法については後に詳述する。
【００５３】
二値化回路６はスラスレベル発生回路７から入力された＋スライスレベル７０及び−スライスレベル７１を基準にして、微分回路５から入力される各微分信号５０の振幅を判定する。この結果、−スライスレベル７１を微分信号５０の振幅が超える場合、白バーから黒バーへの変化点である黒エッジを示す矩形信号が黒エッジパルスＢＥＧとして出力される。また、＋スライスレベル７０を微分信号５０の振幅が超える場合、黒バーから白バーへの変化点である白エッジを示す矩形信号が白エッジパルスＷＥＧとして出力される。
【００５４】
図３（Ｄ）には、時刻Ｔ１、Ｔ３、Ｔ５、Ｔ７に黒エッジパルスＢＥＧがそれぞれ出力され、時刻Ｔ２、Ｔ４、Ｔ６、Ｔ８に白エッジパルスＷＥＧがそれぞれ出力された状態を示す。なお、微分信号５０が点線で示す時刻Ｔ４対応の出力状態であるとき、時刻Ｔ４での白エッジパルスＷＥＧは二値化回路６から出力されない。この理由及び補正手法については後に詳述する。
【００５５】
バー幅カウンタ８は二値化回路６から入力される黒エッジパルスＢＥＧ及び白エッジパルスＷＥＧに基づいて、図３（Ｅ）、図３（Ｆ）及び図３（Ｇ）に示すような色識別信号Ｂ／Ｗ、バー幅カウント値ＢＣＤ及びウェーブエラー信号ＷＥを生成する。バー幅カウンタ８は黒エッジパルスＢＥＧの入力から白エッジパルスＷＥＧの入力までの時間においては、論理「Ｈ（１）」レベルの黒バーを示す色識別信号Ｂを出力する。また、バー幅カウンタ８は白エッジパルスＷＥＧの入力から黒エッジパルスＢＥＧの入力までの時間においては、論理「Ｌ（０）」レベルの白バーを示す色識別信号Ｗを出力する。この例では、バーコード読取正常時、図３（Ｅ）に示す色識別信号Ｂ／Ｗ「Ｂ」、「Ｗ」が交互に出力される。
【００５６】
バー幅カウンタ８は、黒エッジパルスＢＥＧが二値化回路６から入力された時点から白エッジパルスＷＥＧが入力されるまで、または白エッジパルスＷＥＧが二値化回路６から入力された時点から黒エッジパルスＢＥＧが入力されるまでの時間、クロック発生回路９から入力されるクロックパルスのカウント動作をそれぞれ行い、計数結果のデータをバー幅カウント値ＢＣＤとしてフィルタ回路１０に出力する。この例では、バーコード読取正常時、図３（Ｆ）に示すバー幅カウント値ＢＣＤ、つまり１０進数表現の「３００、３００、１００、１００、１００、１００、２００、３００」が出力される。
【００５７】
実回路では、バー幅カウント値ＢＣＤは上記１０進数を２進数で表した２進化１０進数のデータ形式でバー幅カウンタ８から出力される。なお、ウエーブエラー信号ＷＥについては、後に詳述する。
【００５８】
上述したように、バー幅カウンタ８から出力されたバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗは、フィルタ回路１０において、明らかにバーコード３０からの反射光Ｒ以外の要因による強度変化を示すカウント値（例えば、商品のバーコード周辺のデザイン部を走査した際に発生する無駄データ対応のカウント値）に該当するときは除去され、バーコード３０の各バーの幅を示すバー幅カウント値ＢＣＤである蓋然性の高いものだけが色識別信号Ｂ／Ｗとともに次段のＦＩＦＯメモリ回路１１に入力される。短時間に大量のバー幅カウント値ＢＣＤが発生した場合の緩衝作用を有するＦＩＦＯメモリ回路１１は、フィルタ回路１０を通過したバー幅カウント値ＢＣＤ及びこれに付加された色識別信号Ｂ／Ｗを一旦保持する。
【００５９】
バーコード認識・復調回路１２はＦＩＦＯメモリ回路１１からバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗを読み出し、所定の認識・復調処理プログラムを実行して、バーコード３０にコード化されていた各種のデータを取り出す。
【００６０】
（バーコード認識・復調処理）
続いて、バーコード認識・復調回路１２におけるバーコードの認識及び復調処理について説明する。なお、バーコード認識・復調回路１２は、ＦＩＦＯメモリ回路１１からバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗを内部のＲＡＭ１２１に取り込むとき、上述したように、ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）１２３がＦＩＦＯメモリ回路１１から送信されるバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗのデータを一旦外部のＲＡＭ１３に取り込んだ後、バスステートコントローラ１２４を制御して、このＲＡＭ１３に比べて小容量のＲＡＭ１２１に格納させるために転送する処理を行うが、以下の説明ではこれに関する詳細なデータ及び信号の送受信は省略する。
【００６１】
バーコード認識・復調回路１２の制御回路（ＣＰＵ）１２０において実行されるバーコード認識・復調処理プログラムの内容を示す図４を図１、図２及び図３と併せ参照すると、この処理プログラムは、バーコードリーダに電源が投入されることによりスタートする。
【００６２】
最初の処理手順（Ｓ）４０１においては、ＦＩＦＯメモリ回路１１から転送済みのバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗのデータを内部のＲＡＭ１２１から順次読み込む。
【００６３】
次のＳ４０２では、Ｓ４０１にて読み込んだ一連のデータ（データブロック）のバー幅カウント値ＢＣＤに基づき、バー幅のモジュール値を算出する。つまり、読み込んだデータに基づき、基本最小単位（１モジュール相当）のバー幅カウント値ＢＣＤを探し出すとともに、他のバー幅カウント値ＢＣＤが基本最小単位のバー幅カウント値ＢＣＤの何倍であるか（２、３、４のいずれのモジュールに相当するか）を算出する。この例では、バーコード読取正常時、図３（Ｈ）に示すように、複数のモジュール値（バー幅データ列）ＢＤ「３、３、１、１、１、１、２、３」が算出される。算出されたバー幅のモジュール値の各々はＲＡＭ１２１のワークエリアに一時的に格納されるが、ここではこの詳細説明を省略する。
【００６４】
次のＳ４０３では、Ｓ４０２で算出された複数のモジュール値、つまりバー幅データ列ＢＤに基づき、スタートコードチェック、エンドコードチェック、センターバーチェック、及びキャラクタ長チェックなどのバーコード規格に照らし合わせたチェックを行う。
【００６５】
詳細に述べると、スタートコードチェックでは、マージン（白バー７モジュール以上）とこれに続くスタートガードバー（レフトガードバー）ＬＧＢとを検出する。このスタートガードバーＬＧＢは黒バー１モジュール・白バー１モジュール・黒バー１モジュール構成の３モジュール分である。エンドコードチェックでは、エンドガードバー（ライトガードバー）ＲＧＢとこれに続くマージン（白バー７モジュール以上）とを検出する。このエンドガードバーＲＧＢは黒バー１モジュール・白バー１モジュール・黒バー１モジュール構成の３モジュール分である。また、センターバーチェックでは、白バー１モジュール・黒バー１モジュール・白バー１モジュール・黒バー１モジュール・白バー１モジュール構成で５モジュール分のセンターバーＣＢを検出する。
【００６６】
さらに、上記キャラクタ長チェックには、第１キャラクタ長チェック、隣接キャラクタ間のキャラクタ長チェック、及びエンドキャラクタ長チェックの３種類がある。第１キャラクタ長チェックでは、複数のモジュール値（バー幅データ列）に基づき、スタートガードバーＬＧＢまたはセンターバーＣＢと第１キャラクタの幅（モジュール値）とを比較する。隣接キャラクタ間のキャラクタ長チェックでは、隣接するキャラクタ同士のモジュール長が７モジュール／１キャラクタで等しいか否かをチェックする。また、エンドキャラクタ長チェックでは、エンドガードバーＲＧＢまたはセンターバーＣＢとエンドキャラクタの幅（モジュール値）とを比較する。
【００６７】
次のＳ４０４では、Ｓ４０３におけるすべてのチェックが正常であるとき、そのバー幅データ列が正規のバーコード部分であると仮判定（認識）して、処理をＳ４０５に進めるが、いずれかのチェックが異常のときは、その都度、後に詳述のＳ４０９のモジュール補正処理に移る。
【００６８】
次のＳ４０５では、Ｓ４０４で正規のバーコード部分であると仮判定されたバー幅データ列の１キャラクタ分（白バー２本及び黒バー２本に相当する４個のバー幅カウント値及び色識別信号）のデータのパターンに対応するキャラクタ情報に順次変換（復調）してＲＡＭ１２１に格納する。
【００６９】
次のＳ４０６では、ＲＡＭ１２１に格納の復調バーコードデータであるキャラクタ情報を１キャラクタ分づつ順次読み出してキャラクタ構成チェックを行う。このキャラクタ構成チェックは後述するモジュラス１０チェックとともにバーコードの誤読防止のためのチェック手法である。
【００７０】
このキャラクタ構成チェックには、各キャラクタのＯｄｄ／Ｅｖｅｎ（奇数：Ｏ／偶数：Ｅ）構成により、コード（ＵＰＣ、ＥＡＮなど）を区別するＯｄｄ／Ｅｖｅｎキャラクタ構成チェックがある。例えば、１２桁構成のＵＰＣコードでは、フラグキャラクタが「４」のとき、バーコードの左側のキャラクタ構成（Ｏｄｄ／Ｅｖｅｎの並び方）は「Ｏ、Ｅ、Ｏ、Ｏ、Ｅ、Ｅ」であり、右側のキャラクタ構成は「Ｅ、Ｅ、Ｅ、Ｅ、Ｅ、Ｅ」である。７モジュール構成の各キャラクタ内の黒バーのモジュール数の総和が奇数であるときは「Ｏｄｄ」、また白バーのモジュール数の総和が偶数であるときは「Ｅｖｅｎ」である。
【００７１】
次のＳ４０７では、Ｓ４０６のキャラクタ構成チェックで正常であった復調バーコードデータのキャラクタ情報をＲＡＭ１２１から読み出してモジュラス１０チェックを行う。このモジュラス１０チェックでは、復調バーコードデータの全桁の奇数番号の桁のデータを加算するとともに、偶数番号の桁のデータを加算する。そして、偶数番号の桁のデータの加算結果を３倍した数値と、奇数番号の桁のデータの加算結果との和が１０の倍数であることをチェックする。
【００７２】
このモジュラス１０チェック結果が正常であれば、Ｓ４０８において、ＲＡＭ１２１に格納していたキャラクタ情報（復調バーコードデータ）をユニバーサルアシンクロナスレシーバトランスミッタ（ＵＡＲＴ）１２２を通して外部装置（ＰＯＳ）に送信する。
【００７３】
そして、次の一連のバーコードの復調を行うために、処理をＳ４０１に戻す。また、Ｓ４０６、Ｓ４０７において、異常と判定されたときは、Ｓ４１１でデータを破棄した後、それぞれ処理をＳ４０１に戻す。全てのバーコードの復調が完了した場合は処理を終了する。
【００７４】
さて、上記Ｓ４０４の判定において、Ｓ４０３でのチェックのいずれかが異常であった場合、従来のバーコードリーダにおいては、そのバー幅データ列を破棄していた。しかし、このようにデータ破棄を行うと、高速で商品を通過させたときの読取率の低下を免れないので、次に述べるモジュール補正処理をＳ４０９で行う。
【００７５】
（モジュール補正処理１）
上記バーコード認識・復調処理プログラムにおけるモジュール補正処理Ｓ４０９の第１の例を示す図５を併せ参照すると、Ｓ４０４で異常判定されたバー幅データ列の中からモジュール値が３モジュールか否かを順次調べていき、３モジュールであった場合には、それを３本（３バー）の１モジュールに分解する（Ｓ５０１、Ｓ５０２）。
【００７６】
例えば、図６に示すように、異常判定されたバー幅データ列ＢＤが「黒バー１モジュール（Ｂ１）・白バー３モジュール（Ｗ３）・黒バー２モジュール（Ｂ２）」であった場合、Ｗ３のバー幅データを各１モジュールの３バーに分解し、「Ｂ１、Ｗ１、Ｂ１、Ｗ１、Ｂ２」のバー幅データ列ＢＤＨに補正する。
【００７７】
これは、白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧが二値化回路６から出力されなくなる箇所は微分信号５０の振幅の小さい箇所（図３（Ｃ）中の時刻Ｔ４）に対応し、そこには主に１モジュールの複数バーが連続しているからである。このような箇所においては、連続する複数のバーが見かけ上、１本のバーとして抽出され、読取異常を引き起こす。
【００７８】
次に、補正後のバー幅データ列ＢＤＨについてＳ４０３及びＳ４０４と同様のチェック処理及び判定処理を行う（Ｓ５０３、Ｓ５０４）。この結果、正規のバーコード部分と仮判定されたときは、補正が正しいとしてキャラクタ復調処理Ｓ４０５に進む。
【００７９】
一方、異常の時は、Ｓ４１０で一連の全てのバー幅データをチェックしたか否か判断し、完了していればＳ４１１でデータ破棄を行い、Ｓ４０１に戻る。また、Ｓ４１０で未完了のときは、Ｓ５０１に戻り、ＲＡＭ１２１の次の３モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ５０２以降の処理を繰り返す。
【００８０】
ここで、図３を参照すると、図３（Ｃ）に点線で示すように微分信号５０が＋スラスレベル７０を超えないことに起因して、時刻Ｔ４で白エッジパルスＷＥＧが二値化回路６から送出されないため（図３（Ｄ）参照）、バー幅カウンタ８から送出されるバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗが本来「１００、１００、１００」及び「Ｂ、Ｗ、Ｂ」であるべきところが「３００」及び「Ｂ」となる（図３（Ｅ）、（Ｆ）参照）。この結果、バーコード認識・復調回路１２では、本来バー幅データ（モジュール値）ＢＤ「１、１、１」の３本のバーをＢＤ「３」の１本のバーとして検出する（図３（Ｈ）参照）。上述した第１のモジュール補正処理により、このバー幅データＢＤ「３」の１本のバーを各１モジュールの３本のバーに補正できる（図３（Ｉ）参照）。
【００８１】
なお、バー幅データを各１モジュールの３バーに分解して補正する箇所は一連のバー幅データ列（データブロック）の１箇所に特定する厳しい条件で実施することもできる。
【００８２】
（モジュール補正処理２）
次に、上記バーコード認識・復調処理プログラムにおけるモジュール補正処理Ｓ４０９の第２の例を示す図７を併せ参照すると、Ｓ４０４で異常判定されたバー幅データ列の中から隣り合う３本のバーのモジュール値が、特定パターン（１）「白バー１モジュール（Ｗ１）・黒バー１モジュール（Ｂ１）・白バー３モジュール（Ｗ３）」、特定パターン（２）「白バー１モジュール（Ｗ１）・黒バー３モジュール（Ｂ３）・白バー１モジュール（Ｗ１）」、及び特定パターン（３）「白バー３モジュール（Ｗ３）・黒バー１モジュール（Ｂ１）・白バー１モジュール（Ｗ１）」のいずれかに合致するか否かを順次調べていく（Ｓ６０１、Ｓ６０２）。
【００８３】
いずれかの特定パターンに合致する場合、それがセンターバーＣＢであると推定し、３モジュールのバー幅データを各１モジュールの３バーに分解し、「Ｗ１、Ｂ１、Ｗ１、Ｂ１、Ｗ１」のバー幅データ列に補正する（Ｓ６０３）。ここで、図８（Ａ）を参照すると、バーコード読取正常時のセンターバーＣＢは白バー１モジュール・黒バー１モジュール・白バー１モジュール・黒バー１モジュール・白バー１モジュールの５モジュール構成で検出される。上記Ｓ４０４でバー幅データ列が正規のバーコード部分ではないと異常判定される場合、白エッジパルスＷＥＧ及び黒エッジパルスＢＥＧのいずれかが二値化回路６から出力されなくなる。その箇所は微分信号５０の振幅の小さい箇所に対応し、そこには主に１モジュールの複数バーが連続しているからである。このような箇所においては、連続する複数のバーが見かけ上、１本のバーとして抽出され、読取異常を引き起こす。したがって、異常判定されたバー幅データ列が上記特定パターン（１）、（２）、（３）のいずれかに合致する場合、それはセンターバーＣＢであると推定できるので、図８（Ｂ）、（Ｃ）、（Ｄ）に示すように、３モジュールのバー幅データを各１モジュールの３バーに分解し補正する。
【００８４】
一方、いずれの特定パターンにも合致しない場合は、Ｓ６０１に戻り、ＲＡＭ１２１の次の１モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ６０２以降の処理を繰り返す。
【００８５】
次に、補正後のバー幅データ列についてＳ４０３及びＳ４０４と同様のチェック処理及び判定処理を行う（Ｓ６０４、Ｓ６０５）。この結果、正規のバーコード部分と仮判定されたときは、補正が正しいとしてキャラクタ復調処理Ｓ４０５に進む。
【００８６】
一方、異常の時は、Ｓ４１０で一連の全てのバー幅データをチェックしたか否か判断し、完了していればＳ４１１でデータ破棄を行い終了する。また、Ｓ４１０で未完了のときは、Ｓ６０１に戻り、ＲＡＭ１２１の次の１モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ６０２以降の処理を繰り返す。
【００８７】
（モジュール補正処理３）
次に、上記バーコード認識・復調処理プログラムにおけるモジュール補正処理Ｓ４０９の第３の例を示す図９を併せ参照すると、Ｓ４０４で異常判定されたバー幅データ列の中から隣り合う３本のバーのモジュール値が、特定パターン（１）「白バー１モジュール（Ｗ１）・黒バー１モジュール（Ｂ１）・白バー３モジュール（Ｗ３）」、特定パターン（２）「白バー１モジュール（Ｗ１）・黒バー３モジュール（Ｂ３）・白バー１モジュール（Ｗ１）」、及び特定パターン（３）「白バー３モジュール（Ｗ３）・黒バー１モジュール（Ｂ１）・白バー１モジュール（Ｗ１）」のいずれかに合致するか否かを順次調べていく（Ｓ７０１、Ｓ７０２）。
【００８８】
いずれかの特定パターンに合致する場合、第２のモジュール補正処理において述べた理由により、それがセンターバーＣＢであると推定し、３モジュールのバー幅データを各１モジュールの３バーに分解し、「Ｗ１、Ｂ１、Ｗ１、Ｂ１、Ｗ１」のバー幅データ列に補正する（Ｓ７０３）。
【００８９】
一方、いずれの特定パターンにも合致しない場合は、Ｓ７０１に戻り、ＲＡＭ１２１の次の１モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ７０２以降の処理を繰り返す。
【００９０】
次に、補正後のバー幅データ列についてＳ４０３及びＳ４０４と同様のチェック処理及び判定処理を行う（Ｓ７０４、Ｓ７０５）。この結果、正規のバーコード部分と仮判定されたときは、Ｓ７０６で更に厳しい条件で判定する。この判定においては、そのバー幅データ列がバーコード読取手法の一気通貫読取データ、つまりスタートガードバーＬＧＢからセンターバーＣＢを経由しエンドガードバーＲＧＢまで途切れなく続いているか否か（一走査で読み取られている状態か否か）をチェックする。
【００９１】
また、他の判定手法として、半ブロック読取データ、つまりセンターバーＣＢからスタートガードバーＬＧＢ及びエンドガードバーＲＧＢのいずれかまで途切れなく続いているか否かをチェックする処理を代替採用してもよい。更に、一気通貫読取手法及び半ブロック読取手法の両機能を有するバーコードリーダにおいては、この判定条件に一気通貫読取データチェック及びブロック読取データチェックの双方を採用してもよい。
【００９２】
Ｓ７０６の判定の結果、条件に合致した場合は、補正が正しいとしてキャラクタ復調処理Ｓ４０５に進む。また、判定の結果、条件に合致しない場合は、Ｓ７０１の処理に戻り、ＲＡＭ１２１の次の１モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ７０２以降の処理を繰り返す。
【００９３】
上記Ｓ７０５で異常の時は、Ｓ４１０で一連の全てのバー幅データをチェックしたか否か判断し、完了していればＳ４１１でデータ破棄を行い、Ｓ４０１に戻る。また、Ｓ４１０で未完了のときは、Ｓ７０１に戻り、ＲＡＭ１２１の次の１モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ７０２以降の処理を繰り返す。
【００９４】
（モジュール補正処理４）
次に、上記バーコード認識・復調処理プログラムにおけるモジュール補正処理Ｓ４０９の第４の例を示す図１０を併せ参照すると、Ｓ４０４で異常判定されたバー幅データ列の中からモジュール値が３モジュールか否かを順次調べていき、３モジュールであった場合には、それを３本（３バー）の１モジュールに分解する（Ｓ８０１、Ｓ８０２）。
【００９５】
例えば、異常判定されたバー幅データ列が「黒バー１モジュール（Ｂ１）・白バー３モジュール（Ｗ３）・黒バー２モジュール（Ｂ２）」であった場合、Ｗ３のバー幅データを各１モジュールの３バーに分解し、「Ｂ１、Ｗ１、Ｂ１、Ｗ１、Ｂ２」のバー幅データ列に補正する。
【００９６】
次に、補正後のバー幅データ列についてＳ４０３及びＳ４０４と同様のチェック処理及び判定処理を行う（Ｓ８０３、Ｓ８０４）。この結果、正規のバーコード部分と仮判定されたときは、Ｓ８０５で更に厳しい条件で判定する。この判定においては、Ｓ８０２で１モジュールの３バーに分解したバー幅データの位置を記憶しておき、そのバー幅データがスタートガードバーＬＧＢ、センターバーＣＢ、及びエンドガードバーＲＧＢのいずれにも対応しない、つまりキャラクタ構成部分であるか否かをチェックする。
【００９７】
この判定の結果、条件に合致したときは、補正が正しいとしてキャラクタ復調処理Ｓ４０５に進む。また、判定の結果、条件に合致しない場合は、Ｓ８０１の処理に戻り、ＲＡＭ１２１の次の３モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ８０２以降の処理を繰り返す。
【００９８】
上記Ｓ８０４で異常の時は、Ｓ４１０で一連の全てのバー幅データをチェックしたか否か判断し、完了していればＳ４１１でデータ破棄を行い、Ｓ４０１に戻る。また、Ｓ４１０で未完了のときは、Ｓ８０１に戻り、ＲＡＭ１２１の次の３モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ８０２以降の処理を繰り返す。
【００９９】
（モジュール補正処理５）
次に、上記バーコード認識・復調処理プログラムにおけるモジュール補正処理Ｓ４０９の第５の例について説明する。
【０１００】
図３（Ｃ）に点線で示すように、バーコード読取異常時には、微分回路５から出力される微分信号５０は、時刻Ｔ４において、その振幅が＋スライスレベル７０を下回る。本来、この微分信号５０はバーコード３０の黒バーＢｂから白バーＷｂの変化点に対応するため、＋スライスレベル７０を超える振幅で出力されなければならないが、バーコード読取時のノイズの影響などにより、この現象が生じる。この結果、二値化回路６は時刻Ｔ４において、白エッジパルスＷＥＧを出力しない。
【０１０１】
バー幅カウンタ８内に設けられたウエーブエラー検出回路は、図３及び更に詳細な図１１に示すように、バーコード読取正常時に交互に入力される黒エッジパルスＢＥＧ及び白エッジパルスＷＥＧのいずかが２回連続で入力された場合、論理「Ｈ（１）」レベルのウエーブエラー信号ＷＥを出力する。したがって、ウエーブエラー検出回路は二値化回路６から時刻Ｔ３及びＴ５に黒エッジパルスＢＥＧを２回連続で受信するので、図３（Ｇ）及び図１１（Ｂ）に示すように、論理レベル「Ｈ（１）」のウエーブエラー信号ＷＥを出力する。
【０１０２】
また、バー幅カウンタ８は時刻Ｔ３で入力の黒エッジパルスＢＥＧから計数動作を開始し、時刻Ｔ６での白エッジパルスＷＥＧの入力時に計数動作を終了して、図３（Ｅ）及び（Ｆ）に示すように、３モジュールの黒バーに対応するバー幅カウント値ＢＣＤ「３００」及び色識別信号Ｂ／Ｗ「Ｂ」を出力する。
【０１０３】
バーコード認識・復調回路１２はバー幅カウンタ８から出力されたバー幅カウント値ＢＣＤ「３００」、色識別信号Ｂ／Ｗ「Ｂ」及びウエーブエラー信号ＷＥ「Ｈ」をフィルタ回路１０及びＦＩＦＯメモリ回路１１を介して内部のＲＡＭ１２１から読み込んでモジュール補正処理を実施する。
【０１０４】
バーコード認識・復調回路１２におけるこのモジュール補正処理は次の考えに基づいている。制御回路（ＣＰＵ）１２０はバーコード認識・復調処理プログラムによるモジュール補正処理において、３モジュールの１バーを１モジュールの３バーに分解するとき、ウエーブエラー信号ＷＥが論理レベル「Ｈ」か否かをチェックする。ＣＰＵ１２０はウエーブエラー信号ＷＥの状態をチェックすることにより、３モジュール１バーのバー幅データが正規の３モジュール対応のバー幅データか、また微分信号５０の振幅がバーコード読取時のノイズの影響などによりスライスレベルを下回った結果の見かけ上の３モジュール対応のバー幅データ（図３（Ｈ）参照）かをある程度の確率で判定することができる。これにより、ＣＰＵ１２０は見かけ上の３モジュール対応のバー幅データを１モジュールの３バーに補正できる（図３（Ｉ）参照）。
【０１０５】
ここで、ある程度の確率で判定できるとした理由は、ウエーブエラー信号ＷＥが論理レベル「Ｈ」のときは、図３を参照して既述したように見かけ上の３モジュールになる。しかし、ウエーブエラー信号ＷＥが論理レベル「Ｌ」のとき、つまり、例えば図３（Ｄ）に示す時刻Ｔ５における黒エッジパルスＢＥＧが時刻Ｔ４における白エッジパルスＷＥＧとともに出力されないバーコード読取異常時（更に詳細な図１１（Ｃ）に点線で示す状態には）、ＣＰＵ１２０はウエーブエラー信号ＷＥが検出されないので、正規の３モジュールか見かけ上の３モジュールかを判定できないからである。
【０１０６】
図１２を併せ参照すると、バーコード認識・復調プログラムのＳ４０４で異常判定されたバー幅データ列の中からモジュール値が３モジュールであり、かつウエーブエラー信号ＷＥ対応の付加ビットが論理レベル「Ｈ」を示す「１」信号であるか否かを順次調べていく（Ｓ９０１、Ｓ９０２）。この付加ビットが「１」信号でなかった場合は、ＲＡＭ１２１の次の３モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ９０２以降の処理を繰り返す。
【０１０７】
この付加ビットが「１」信号であった場合には、対応の３モジュール１バーのバー幅データを３本（３バー）の１モジュールに分解する（Ｓ９０３）。例えば、異常判定されたバー幅データ列が「黒バー１モジュール（Ｂ１）・白バー３モジュール（Ｗ３）・黒バー２モジュール（Ｂ２）」であった場合、Ｗ３のバー幅データを各１モジュールの３バーに分解し、「Ｂ１、Ｗ１、Ｂ１、Ｗ１、Ｂ２」のバー幅データ列に補正する。
【０１０８】
次に、補正後のバー幅データ列についてＳ４０３及びＳ４０４と同様のチェック処理及び判定処理を行う（Ｓ９０４、Ｓ９０５）。この結果、正規のバーコード部分と仮判定されたときは、補正が正しいとしてキャラクタ復調処理Ｓ４０５に進む。
【０１０９】
一方、異常の時は、Ｓ４１０で一連の全てのバー幅データをチェックしたか否か判断し、完了していればＳ４１１でデータ破棄を行い、Ｓ４０１に戻る。また、Ｓ４１０で未完了のときは、Ｓ９０１に戻り、ＲＡＭ１２１の次の３モジュールのバー幅データを格納する位置を指定するためのポインタをインクリメントし、Ｓ９０２以降の処理を繰り返す。なお、このモジュール補正処理においては、Ｓ４０１でバー幅カウント値ＢＣＤ及び色識別信号Ｂ／Ｗに加え、ウエーブエラー信号ＷＥがＲＡＭ１２１から読み込まれる。
【０１１０】
上述した本発明の一実施の形態においては、見かけ上、１本のバーとして読み取ってしまった３モジュールのバーを１モジュールの３本のバーに補正する例で説明したが、例えば４モジュールのバーを１モジュール及び２モジュールの３本のバー（つまり、バー幅データ「１、２、１」や「２、１、１」）に補正する手法を採ることができる。
【０１１１】
【発明の効果】
以上説明したように、本発明によれば、物体（商品）を高速に通過（移動）させた場合にバーコードを読み取れないで読取異常と処理したものを救済することができる。この結果、物体を高速に通過させたときのバーコードの読取率が向上する。
【０１１２】
また、本発明によれば、バーコード読取装置とこれに対して通過させる物体との距離が適当でない場合などにバーコード読取異常と処理したものを救済することができる。この結果、バーコードの読取エリアが拡大する。
【図面の簡単な説明】
【図１】  本発明の一実施の形態におけるバーコードリーダの構成を示すブロック図。
【図２】  図１のバーコード認識・復調回路の詳細構成を示すブロック図。
【図３】  本発明の一実施の形態におけるバーコードリーダの動作を説明するための図。
【図４】  本発明の一実施の形態におけるバーコード認識・復調処理手順を示すフローチャート。
【図５】  図４に示すバーコード認識・復調処理における第１のモジュール補正処理手順を示すフローチャート。
【図６】  第１のモジュール補正処理において３モジュールの１バーを１モジュールの３バーに補正する動作説明図。
【図７】  図４に示すバーコード認識・復調処理における第２のモジュール補正処理手順を示すフローチャート。
【図８】  第２のモジュール補正処理において特定パターンのバー幅データ列をセンターバーと推定できる理由を説明するための図。
【図９】  図４に示すバーコード認識・復調処理における第３のモジュール補正処理手順を示すフローチャート。
【図１０】  図４に示すバーコード認識・復調処理における第４のモジュール補正処理手順を示すフローチャート。
【図１１】  第５のモジュール補正処理におけるウエーブエラー信号を説明するための図。
【図１２】  図４に示すバーコード認識・復調処理における第５のモジュール補正処理手順を示すフローチャート。
【符号の説明】
１    レーザー光源
２    走査・集光光学系
３    商品
３０    バーコード
４    光検知器
５    微分回路
６    二値化回路
７    スライスレベル発生回路
８    バー幅カウンタ
９    クロック発生回路
１０    フィルタ回路
１１    ＦＩＦＯメモリ回路
１２    バーコード認識・復調回路
１２０    制御回路（ＣＰＵ）
１２１    ＲＡＭ
【図１】
0004117368.tif 000002
【図２】
0004117368.tif 000003
【図３】
0004117368.tif 000004
【図４】
0004117368.tif 000005
【図５】
0004117368.tif 000006
【図６】
0004117368.tif 000007
【図７】
0004117368.tif 000008
【図８】
0004117368.tif 000009
【図９】
0004117368.tif 000010
【図１０】
0004117368.tif 000011
【図１１】
0004117368.tif 000012
【図１２】
0004117368.tif 000013