(57)【特許請求の範囲】
【請求項１】
バーコード記号を読み取ってその濃度差により２値化した信号の各部の幅を示すカウントデータを、任意のｍ段分だけ一時格納しておくｍ段データバッファ部と、
前記カウントデータをｎ倍するｎ倍器と、
前記ｍ段データバッファ部に格納されたｍ段分のカウントデータのうちｋ段前までのデータを比較対象として選択するセレクタ部と、先に前記ｍ段データバッファ部に格納されて前記セレクタ部が選択したデータと、前記ｎ倍器によりｎ倍された新たなカウントデータとを比較して、ｎ倍された新たなカウントデータの方が小さいときにスタートマージン候補検出フラグを出力する比較器と、
該比較器によって検出されたスタートマージン候補検出フラグのデータを時系列的に格納するスタートマージン候補格納部と
を有し、少なくとも前記ｎ倍器のｎ倍および前記セレクタ部が比較対象として選択するデータの段数ｋは、それぞれ任意に設定可能であることを特徴とするバーコード記号読取装置。
【請求項２】
前記ｍ段データバッファ部をフリップフロップ回路又はメモリ等の記憶回路で構成した請求項１記載のバーコード記号読取装置。
【請求項３】
前記ｎ倍器を演算回路によって構成した請求項１記載のバーコード記号読取装置。
【請求項４】
請求項１乃至３のいずれか一項に記載のバーコード記号読取装置を用いて、前記ｎ倍器のｎ倍および前記セレクタ部が比較対象として選択するデータの段数ｋを、読み取るバーコード記号の印刷状態等の状態に応じて設定し、前記バーコード記号を読み取ってその濃度差により２値化した信号の各部の幅を示すカウントデータにおける黒バーのカウントデータの設定値のｎ倍と、それ以前のバーの設定されたｋ段分の各カウントデータとを比較し、前記カウントデータのｎ倍の値が、それ以前のバーのｋ段分の各カウントデータ値のいずれよりも小さいとき、その黒バーのカンウトデータをスタートマージン候補として検出し、スタートマージン候補格納部に時系列的に格納することを特徴とするバーコード記号のスタートマージン候補検出方法。
【請求項５】
請求項４記載のバーコード記号のスタートマージン検出方法によって前記スタートマージン候補格納手段に時系列的に格納されたスタートマージン候補を、マイクロプロセッサが時系列的に早い方から順次呼び出して、その呼び出したスタートマージン候補に対応するカウントデータからバーコード記号の認識処理を試み、バーコード記号データであると認識できなかったときは次のスタートマージン候補に対応するカウントデータからバーコード記号の認識処理を試みることを繰り返し、バーコード記号データであると認識できた時系列的に最初のスタートマージン候補に対応するカウントデータから開始したバーコード記号の認識処理を最後まで行って、バーコード記号をデコードすることを特徴とするバーコード記号読取方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、バーコード記号を有する物品などの流通システムにおけるバーコード記号を、光学的読取手段によりバーコードデータとして読み取るバーコード記号読取装置に関し、さらに、そのバーコード記号読取装置を用いてバーコード記号の読み取りを開始するためのスタートマージン候補を検出するスタートマージン候補検出方法、ならびにその検出結果を使用するバーコード記号読取方法に関する。
【０００２】
【従来の技術】
バーコード記号読取装置によってバーコード記号の読み取りを行う場合、バーコード記号データのデコードを行う前処理として、スタートマージン候補の検出を行う必要がある。そのスタートマージン候補を検出する手段として、従来から広く用いられている方法として、ソフトウェアによる処理によってこれに対応することが知られている。ここで「スタートマージン候補」とは、バーコード記号の先頭の候補と同義である。
【０００３】
従来のバーコード記号読取装置における、一般に知られているソフトウェアによりスタートマージン候補を検出してバーコード記号を読み取る方法の例を、図５に示すバーコード記号の各部の幅を示す時系列データ例と、図６のフローチャートとによって説明する。
【０００４】
この方法によれば、図５に示す時系列データから、ソフトウェアでスタートマージン候補の検出を行うために、図６に示すように、読み取った記号の格納データにおけるｍ番目のデータを読み出し、それが黒データであったとき、そのデータ値（バー幅）のｎ倍（この例では３倍で、ｄ＝格納データｍ×３）と、その直前のｍ−１番目の白データのデータ値とを比較演算し、前者より後者の方が大きかったときにスタートマージン候補と判別することによって実現している。ここで、上記演算に使用する「ｎ」の値は、一般的に３〜７程度とする。またｍは読み終わった全データのうちの任意の場所である。
【０００５】
このような、従来のソフトウェアを用いてスタートマージン候補を検出する場合には、ソフトウェアはこのスタートマージン候補が検出されるまで、すなわちバーコード記号の先頭の候補が検出されるまで、読み取ったデータ値の全てに対して繰り返して上記の比較演算を行い、その後にデコード処理に移行することによってバーコード記号を読み取っている。
【０００６】
図５は、時系列的に格納されたバーコード記号のｍ−２番目からｍ＋３番目までのバー幅のデータ例を示す。図６は、上記「ｎ」を「３」にした場合のソフトウエアによるスタートマージン候補検出処理例を示すフローチャートである。
この例によれば、黒いバーの３倍以上の幅の白いバーが直前にあった時に、その黒いバーがスタートマージン候補であると判断する。
また、他の従来例として、バーコードの位置をマイクロプロセッサ（ＣＰＵ）を用いないで検出する方法もある。
【０００７】
例えば、特開平３−１４４７８７号公報に見られるように、走査されたイメージを白と黒に対応する２つのレベルのデータとして読み取るスキャナから“白”に対応するレベルのデータの連続入力期間を計測する計測回路と、この計測回路によって計算された上記連続入力期間と予め設定された期間とを比較する比較回路と、この比較回路による比較の結果に基づいて、データ処理を行うＣＰＵに対してバーコード記号の認識処理を起動させる起動回路とを備え、ハード的にバーコード記号の開始位置を検出してバーコード記号の認識処理を開始させる方法も提案されている。
【０００８】
【発明が解決しようとする課題】
しかしながら、上述したような従来のバーコード記号を読み取る方法において、スタートマージン候補の検出をソフトウェアで行う場合には、スタートマージン候補が検出されるまで、すなわちバーコード記号の先頭の候補が検出されるまでデコード処理を開始することができない。従って読み取ったバーコード記号データに対し、スタートマージン候補の検出が成されるまで繰り返し演算をしなければならない。よってバーコード記号データのデコード処理の前に、スタートマージン候補を検出するためのある程度の時間は必要不可欠であり、結果的にバーコード記号の読み取り時間に影響を与えるものである。
【０００９】
また、上述したバーコード記号の開始位置をハード的に検出してＣＰＵにバーコード記号の認識処理を開始させる方法も、その検出された黒バーの位置がバーコード記号の先頭の候補であるという１つ（単独）の検出信号をＣＰＵに伝達し、その信号に基づいてＣＰＵが処理することとなり、結果としてソフトウェアの処理に頼らざるを得ないことになる。
【００１０】
すなわち、この場合、スタートマージンレジスタとマージンカウンタの値を比較するコンパレータ（比較回路）の出力信号を、直接ＣＰＵが取り込むので、ＣＰＵは直ちに演算処理に入ることになり、仮に印刷汚れその他の外的要因による汚れ等により、このスタートマージン候補の検出に誤りがあった場合、ソフトウェア処理で再度スタートマージン候補の頭出しをしなければならず、やはり検出時間がかかっていた。
【００１１】
この発明は、このような従来の問題を解決するためになされたものであり、上述した従来例のようなソフトウェアを用いることなく、簡単なハードウェアにより、効率良くバーコード記号の読み取りを行うことができるようにし、しかも、印刷されたバーコード記号に印刷汚れその他の外的要因による汚れ等が存在した場合でも、誤りなくスタートマージン候補の検出ができるようにすることを目的とする。それによって、バーコード記号読取装置の製造コストの低減を図ることも目的とする。
【００１２】
【課題を解決するための手段】
この発明は上記目的を達成するために、バーコード記号を読み取ってその濃度差により２値化した信号の各部の幅を示すカウントデータを、任意のｍ段分だけ一時格納しておくｍ段データバッファ部と、上記カウントデータをｎ倍するｎ倍器と、上記ｍ段データバッファ部に格納されたｍ段分のカウントデータのうちｋ段前までのデータを比較対象として選択するセレクタ部と、先に上記ｍ段データバッファ部に格納されて上記セレクタ部が選択したデータと、上記ｎ倍器によりｎ倍された新たなカウントデータとを比較して、ｎ倍された新たなカウントデータの方が小さいときにスタートマージン候補検出フラグを出力する比較器と、その比較器によって検出されたスタートマージン候補検出フラグのデータを時系列的に格納するスタートマージン候補格納部とを有し、少なくとも上記ｎ倍器のｎ倍および上記セレクタ部が比較対象として選択するデータの段数ｋは、それぞれ任意に設定可能であることを特徴とするバーコード記号読取装置を提供する。
【００１３】
上記バーコード記号のカウントデータを任意の段数分だけ一時格納するｍ段データバッファ部は、フリップフロップ回路又はメモリ等の記憶回路で構成することができる。
また、上記バーコード記号のカウントデータをｎ倍するｎ倍器は、演算回路によって構成するとよい。
【００１４】
また、この発明によるスタートマージン候補検出方法は、上記バーコード記号読取装置を用いて、上記ｎ倍器のｎ倍および上記セレクタ部が比較対象として選択するデータの段数ｋを、読み取るバーコード記号の印刷状態等の状態に応じて設定し、バーコード記号を読み取ってその濃度差により２値化した信号の各部の幅を示すカウントデータにおける黒バーのカウントデータの設定値のｎ倍と、それ以前のバーの設定されたｋ段分の各カウントデータとを比較し、上記カウントデータのｎ倍の値が、それ以前のバーのｋ段分の各カウントデータ値のいずれよりも小さいとき、その黒バーのカントデータをスタートマージン候補として検出し、スタートマージン候補格納部に時系列的に格納することを特徴とする。
【００１５】
さらに、この発明によるバーコード記号読取方法は、上記スタートマージン検出方法によって上記スタートマージン候補格納手段に時系列的に格納されたスタートマージン候補を、マイクロプロセッサが時系列的に早い方から順次呼び出して、その呼び出したスタートマージン候補に対応するカウントデータからバーコード記号の認識処理を試みる。
【００１６】
そして、バーコード記号データであると認識できなかったときは次のスタートマージン候補に対応するカウントデータからバーコード記号の認識処理を試みることを繰り返し、バーコード記号データであると認識できた時系列的に最初のスタートマージン候補に対応するカウントデータから開始したバーコード記号の認識処理を最後まで行って、バーコード記号をデコードすることを特徴とする。
【００１７】
【発明の実施の形態】
以下、この発明の実施の形態を図面を用いて具体的に説明する。
図１は、この発明によるバーコード記号読取装置におけるバーコード記号のスタートマージン候補の検出用ハードウェアのブロック図であり、この発明の特徴を最も良く表わす図である。
【００１８】
図１において、１は読み取り対象であるバーコード記号、２はバーコード記号読取装置における光学読取部、３はバーコードデータ値カウント部であり、光学読取部２から出力されるバーコードデータを入力して、サンプリングクロック発生回路４からのサンプリングクロックによってカウント動作を行い、白データおよび黒データの幅を示すカウントデータ（数値）に変換する。
【００１９】
５はバーコードデータ値カウント部３から出力されるカウントデータを、ｍ段分（ｍは任意の整数）だけ一時格納するｍ段データバッファ部であり、フリップフロップ回路やメモリ等の記憶回路で構成される。６はカウントデータ値格納部で、バーコードデータ値カウント部３から順次出力されるカウントデータを、時系列的にすべて格納して保存するフリップフロップ回路やメモリのような記憶回路からなる。７はカウントデータをｎ倍する演算回路によって構成されるｎ倍器である。
【００２０】
８はセレクタ部であり、ｍ段データバッファ部５に一時格納されたｍ段分のカウントデータのうち、比較対象とするデータを選択する。９はセレクタ部８からのデータとｎ倍器７からのデータとを比較する比較器であり、比較の結果によってｎ倍器７からのデータの方が小さいときにスタートマージン候補検出フラグを出力する。
１０はフリップフロップ回路のような記憶機能を有するスタートマージン候補格納部であり、比較器９から出力されるスタートマージン候補検出フラグＳＭＦを、そのとき比較対象としたカウントデータ値と対応させて格納する。
【００２１】
１１はスタートマージン候補格納部１０とカウントデータ値格納部６の各データをマイクロプロセッサ(ＣＰＵ)１２に入力させるためのインタフェイス部である。
ＣＰＵ１２は、インタフェイス部１１を介して入力されるスタートマージン候補検出フラグとカウントデータとによって、バーコードの認識処理を実行するマイクロプロセッサであるが、そのプログラムメモリであるＲＯＭおよびデータメモリであるＲＡＭ等を含むマイクロコンピュータであってもよい。
【００２２】
このバーコード読取装置は、上記の構成において、バーコード記号１に対して光学読取部２から、発光ダイオード（ＬＥＤ）やレーザダイオード（ＬＤ）等の光源による光を照射し、その反射光をフォトダイオードやフォトトランジスタ等の受光素子で受光して電気信号に変換し、その電気信号を２値化してバーコード記号の濃淡すなわち黒色バー又は白色バーを示すデジタルのバーコードデータに変換する。
【００２３】
これをサンプリングクロック発生回路４によって発生されるサンプリングクロックによってカウント動作するバーコードデータ値カウント部３に入力し、ＣＰＵ１２が扱えるカウントデータに変換する。そのカウントデータは、バーコード記号１における各白データおよび黒データの幅を示す数値データ列となる。
そのカウントデータは、カウントデータ値格納部６に保存されるとともに、バーコード記号の印刷状態により「ｍ段」を任意に定めたｍ段データバッファ部５にも一時格納する。
【００２４】
スタートマージン候補を検出するにあたっては、カウントデータ値格納部６に今まさに格納しようとしているカウントデータと、先に一時保存しているｍ段データバッファ部５のカウントデータとを比較する必要がある。このｍ段分のデータのうち、どのデータを比較するかを選択するのが、セレクタ部８である。
【００２５】
このセレクタ部８には、予めＣＰＵ１２等によりｍ段データバッファ部５中の何段前までのデータを比較対象として選択するかを、バーコード記号の印刷状態、印刷汚れ、外的要因による汚れ等の状態に準じて設定しておくことができる。これを、この発明の説明においては設定値ｋと定義する。
【００２６】
また、データを比較するにあたっては、ｍ段データバッファ部５からのカウントデータが、今バーコードデータ値カウント部３から出力されたカウントデータの値の何倍より大きいことをもってスタートマージン候補とするかも、予め設定しておく必要がある。その何倍かを示す「ｎ」の設定及びそのｎ倍の演算を行うのがｎ倍器７である。なお、このｎ倍器７においてカウントデータを何倍にするかの設定も、バーコード記号の印刷状態等の状態により、予めＣＰＵ１２等により行っておく。これを、この発明の説明においては設定値ｎと定義する。
【００２７】
ｎ倍器７から出力されるデータと、セレクタ部８において選択して出力されたｍ段データバッファ部５中のｋ段前までの各データを、比較器９において比較する。このとき、ｎ倍器７から出力されるデータの方が小さいときは、スタートマージン候補があったと判定し、スタートマージン候補検出フラグＳＭＦを出力する。
そのフラグＳＭＦは、スタートマージン候補格納部１０に、どのカウントデータによってスタートマージン候補となったかも判るように、カウントデータ値格納部６に格納された最新のカウントデータと対応させて保存される。
【００２８】
スタートマージン候補は１つだけとは限らないが、スタートマージン候補検出フラグＳＭＦが発生するたびに、そのフラグＳＭＦとそのとき比較対象になったカウントデータとが、スタートマージン候補格納部１０に対応して逐次格納される。ただし、スタートマージン候補は、バーコード記号１における黒色バーの手前に、ある一定以上の幅の白バーが存在しているときに発生させるものである。
【００２９】
また、このスタートマージン候補格納部１０に格納されているスタートマージン候補検出フラグＳＭＦおよび、カウントデータ値格納部６に格納されているカウントデータは、インタフェイス部１１を介してＣＰＵ１２によって読み出し可能である。これらの構成は全てハードウェアで構築されている。
【００３０】
この図１に示したバーコード記号読取装置を用いたスタートマージン候補検出方法のいくつかの実施例を、図２から図４によってそれぞれ説明する。
図２は、図１によって説明したこの発明によるスタートマージン候補を検出するためのハードウェアにおけるバーコードデータの流れと、スタートマージン候補を検出するまでの動作を説明するための図であり、第１の実施例を示す。
【００３１】
図２において、（Ａ）に示すバーコード記号を光学読取部２によって読み取って、（Ｂ）に示すように２値のバーコードデータに変換する。この例では白レベルを“０”に、黒レベルを“１”にしている。このバーコードデータを、バーコードデータ値カウント部３によって各レベル毎にその継続時間（幅）をサンプリングクロックの周期でカウントし、（Ｃ）に示すカウントデータに変換する。
【００３２】
すなわち、このカウントデータが、バーコード記号１における記号の濃淡（黒バーと白バー）の幅を示しており、記号の幅が広い方がカウントデータの値が大きい。すなわち、このカウントデータの値は、バーコード記号１を構成する黒バー又は白バーの幅に比例する。
なお、このカウントデータは、図１に示したサンプリングクロック発生回路４からのサンプリングクロックのパルス数により、バーコード記号の各幅を表すようにしている。
【００３３】
さらに、図２の（Ｃ）には、カウントデータのうち（ａ）部分から（ｈ）部分のデータを記しているが、時系列的に（ａ）部分のデータが一番古く、（ｈ）部分のデータが一番新しいものである。すなわち、このカウントデータは、図１に示したｍ段データバッファ部５に時系列的に格納されている。
【００３４】
この第１の実施例においては、予め図１のセレクタ部８に、ｍ段データバッファ部５中の何段前までのデータを比較対象として選択するかの設定値ｋを「２」とし（ｋ＝２）、常に２つ前までのデータと比較することが人為的に設定されている。また、図１のｎ倍器７には、予め設定値ｎを「３」とし、常にカウントデータを３倍することが、これも人為的に設定されている。
図２に示す（Ｃ）のカウントデータのうち、（ａ）部について説明すると、ここには白色のバー記号の幅に相当する「１００」という値が格納されている。
【００３５】
次に（ｂ）部に、上記白色のバー記号の直後の黒色のバー記号の幅に相当した「２０」という値が格納されている場合、この第１の実施例では、設定値ｎ＝３が予め設定されているので、この黒色のバー記号が、ｎ倍器７を通してカウントデータとして出力される時、その出力値は「２０×３＝６０」となる。この値が、図１の比較器９において、カウントデータの（ａ）部の時点で既にｍ段データバッファ部５に格納されているデータ値である「１００」と比較される（図２で丸付数字１の比較１）。
【００３６】
その比較の結果、６０＜１００となり、スタートマージン候補が検出され、（Ｄ）のスタートマージン候補検出フラグが、カウントデータの（ｂ）部に相当する部分で“１”となる。なお、このスタートマージン候補検出フラグは、“１”のとき検出あり、“０”のときは検出なしを示す。
【００３７】
次に、（Ｃ）に示すカウントデータの（ｄ）部に着目すると、この時のカウントデータは「２０」である。ここで、設定値ｋ＝２であるので、時系列でその２つ前までのデータ（ｂ）部および（ｃ）部が比較の対象となる。またｎ倍器７の設定値ｎ＝３が設定されており、この黒色のバー記号がカウントデータとして出力されたとき、ｎ倍器７の出力値は「２０×３＝６０」となる。この値が、比較器９においてカウントデータの（ｂ）部および（ｃ）部と比較される（図２で丸付数字２の比較２）が、（ｂ）部の２０および（ｃ）部の３５よりも大きいため、スタートマージン候補検出フラグは発生せず、“０”となる。
【００３８】
以下、これを繰り返し、スタートマージン候補を逐次ハードウェアで自動検出し、そのスタートマージン候補検出フラグを図１のスタートマージン候補格納部１０に保存していく。
【００３９】
そして、図２の（Ｃ）に示すカウントデータの（ｈ）部に着目すると、この時のカウントデータは「２０」であり、ｎ倍器７の出力値は「（ｈ）×３＝２０×３＝６０」となる。この値が、比較器９において、カウントデータの（ｇ）部および（ｆ）部と比較される（図２で丸付数字４の比較４）。その結果、（ｇ）部のカウントデータは「３５」であるから（ｇ）＜（ｈ）×３になるため、時系列的にその１つ前の（ｆ）部のカウントデータと比較することになる。（ｆ）部のカウントデータは「７０」であるから、（ｆ）＞（ｈ）×３となり、スタートマージン候補が検出され、スタートマージン候補検出フラグが（ｈ）部に相当する部分で“１”となり、スタートマージン候補格納部１０に格納される。
【００４０】
かくして、検出されたスタートマージン候補検出フラグは、図１のスタートマージン候補格納部１０に、図２の（Ｄ）に示すように（Ｃ）のカウントデータの（ａ）部から（ｈ）部……で示す時系列（カウントデータ値格納部６に格納されたカウントデータ列）と対比できる形で格納される。
【００４１】
図１におけるＣＰＵ１２は、予め定められたバーコード認識用のコード、例えばＪＡＮコードをメモリに記憶させており、このスタートマージン候補格納部１０からそこに格納されているデータを順次呼び出し、その呼び出したスタートマージン候補からのカウントデータ列によってＪＡＮコードによるバーコード記号の認識処理（デコード動作）を試み、バーコード記号データであると認識できなかったときは、次のスタートマージン候補からのカウントデータ列によってバーコード記号の認識処理を試みることを繰り返し、バーコード記号データであると認識できた時系列的に最初のスタートマージン候補のカウントデータから開始したバーコード記号の認識処理を、最後まで行ってバーコード記号を読み取る。
【００４２】
図３は、図１に示したバーコード記号読取装置を用いたスタートマージン候補検出方法の第２の実施例を示す。この第２の実施例は、バーコード記号より前の位置に印刷汚れあるいは手その他の外的要因による汚れが存在する場合に、スタートマージン候補を検出するケースであって、その汚れがバーコード記号の比較的前に存在する場合の例を示す。
【００４３】
この図３の（Ａ）に示すバーコード記号を図１の光学読取部２で読み取って、（Ｂ）に示す２値のバーコードデータに変換し、さらにそれをバーコードデータ値カウント部３によって（Ｃ）に示すでカウントデータに変換し、それをｍ段データバッファ部５およびカウントデータ値格納部６にそれぞれ時系列に格納することは、第１の実施例の場合と同様である。したがって、そのプロセスの詳細な説明は省略する。
【００４４】
また、この第２の実施例においても、予め図１のセレクタ部８に設定する設定値ｋは２（ｋ＝２）で、ｎ倍器７に設定する設定値ｎも３（ｎ＝３）であり、第１の実施例の場合と同じである。
図３に示す、この第２の実施例では、前記したようにバーコード記号より前の位置に幾つかの汚れがある場合の、スタートマージン候補を検出する例であるので、その点に絞って以下に説明する。
【００４５】
図３の（Ｃ）に示すカウントデータのうち、（ａ）部には白色のバー記号の幅に相当する「６０」という値が格納されている。
次に、（ｂ）部には、上記白色のバー記号の直後の黒色のバー記号の幅に相当する「１５」という値が格納されている。
この第２の実施例でも、第１の実施例と同様に、設定値ｎ＝３が設定されているので、この黒色のバー記号に相当する汚れが、カウントデータとして出力されたとき、ｎ倍器７の出力値は、「１５×３＝４５」となる。
【００４６】
この値が、図１における比較器９によって、カウントデータの（ａ）部の時点で既にｍ段データバッファ部５に格納されているデータ値である「６０」と比較される（図３で丸付数字１の比較１）。その結果として、（ａ）＞（ｂ）×３であるため、スタートマージン候補が検出されたことになり、図３の（Ｄ）に示すスタートマージン候補検出フラグが、カウントデータの（ｂ）部に相当する部分で１となる。この検出フラグがスタートマージン候補格納部１０に格納される。
【００４７】
次に、図３の（Ｃ）に示すカウントデータの（ｄ）部に着目すると、この時のカウントデータの値は「８」であるから、ｎ倍器７の出力値は、「８×３＝２４」となる。ここで設定値ｋは２であるため、この値と時系列で２つ前までのデータが比較の対象となる（図３で丸付数字２の比較２）が、この値「２４」は、（ｂ）部および（ｃ）部の時点で既に格納されているデータ値「１５」および「８」よりも大きい。そのため、スタートマージン候補検出フラグは発生せず“０”である。
【００４８】
以下このような動作を繰り返し、スタートマージン候補を逐次図１に示したハードウェアで自動的に検出し、その検出フラグをスタートマージン候補格納部１０に保存する。
【００４９】
次に、図３の（Ｃ）に示すカウントデータにおける（ｈ）部に着目すると、この時のカウントデータは「２０」であり、従ってｎ倍器７の出力値は「２０×３＝６０」であり、直前の（ｇ）部のデータは「６５」であるから、それと比較すると（図３で丸付数字４の比較４）、（ｇ）＞（ｈ）×３となるため、ここでもスタートマージン候補が検出されたことになり、（Ｄ）に示すスタートマージン候補検出フラグが、カウントデータの（ｈ）部に相当する部分で“１”となる。
【００５０】
このように、この第２の実施例においても、スタートマージン候補を一度検出したという条件で、スタートマージン候補検出動作を停止することはなく、上述した比較演算をハードウェアで継続し、スタートマージン候補をすべて逐次検出して保存をしていく。このようにして検出されたスタートマージン候補検出フラグは、図１のスタートマージン候補格納部１０に、図３の（Ｄ）に示すように（Ｃ）に示すカウントデータの（ａ）部から（ｈ)部……で示した時系列（カウントデータ値格納部６に格納されたカウントデータ列）と、１：１に対比できる形で格納されている。
【００５１】
ところで、この第２の実施例の図３を観察すると、（Ｃ）のカウントデータにおける（ｂ）部に相当する部分でスタートマージン候補が検出されているが、図３を見て明らかなように、バーコードデータ上では黒バーに相当するように見える（ｂ）部は、デコードしたいバーそのものではなく、黒色の汚れ部分である。
【００５２】
そのため、仮にＣＰＵ１２がこの部分をバーコード記号のスタートマージンとみなして、カウントデータ値格納部６から読み出したカウントデータ列のデコード処理を開始すると、正常なコードとはならないため、ＣＰＵ１２はこれを所定のバーコード記号であるとは認識しない。かかる場合、ＣＰＵ１２はそのデコード処理を直ちに中止し、正常のバーコード記号をデコードするために、次のスタートマージン候補検出フラグを探す。
【００５３】
そして、ＣＰＵ１２は次の動作に移り、図３の（Ｄ）に示すスタートマージン候補検出フラグの（ｈ）部を検出する。そして、ＣＰＵ１２は、カウントデータ値格納部６から読み出したカウントデータ列に対して、この（ｈ）部をバーコード記号のスタートとみなしてデコード処理を開始する。このデコード処理の過程において、この場合は前回と異なり、ＣＰＵ１２はこのスタートマージン候補検出フラグが対応する（ｈ）部以降のカウントデータ列をバーコードデータであると認識し、デコード処理を最後まで続行してバーコードを読み取る。
【００５４】
このように、図１に示したＣＰＵ１２は、スタートマージン候補格納部１０から格納データを呼び出し、第１の実施例の場合と同様に、どの時点でスタートマージン候補があったかを認識し、バーコード記号データであると認識した時系列的に最初のスタートマージン候補検出フラグを検知して、カウントデータ値格納部６から読み出したカウントデータ列に対する認識（デコード）処理を行って、バーコードを読み取る。
【００５５】
ここで、ＣＰＵ１２が図３の（Ｃ）における（ｂ）部をスタートマージン候補として取り扱っているにもかかわらず、バーコード記号データとして認識処理しないのは、前述した第１の実施例おいて説明したように、ＣＰＵ１２には、予め定められた、例えばＪＡＮコードをメモリに記憶させており、このＣＰＵ１２が（ｂ）部のデータも最初はスタートマージン候補として扱うが、この（ｂ）部のスタートマージン候補以降のカウントデータ列（データ構成）に対して、それがバーコード記号のデータであるか否かを認識（デコード）処理する。
【００５６】
すなわち、ＣＰＵ１２は、このようなスタートマージン候補が正常なものか、又は汚れ等によるものなのかを、デコード処理において判断・処理する。
【００５７】
次に、第３の実施例を図４によって説明する。この第３の実施例も前述の第２の実施例と同様、バーコード記号の前に印刷汚れや油汚れ等のある場合のバーコード記号のスタートマージン候補の検出に関する例であるが、その汚れがバーコード記号の直前に存在する場合の例である。
【００５８】
かかる場合は、第２の実施例で説明したように予め図１のセレクタ部８に設定する設定値ｋ（比較段数）を２にしたのでは、バーコード記号のスタートマージン候補の検出に不都合を生ずる。すなわち、図４に示す第３の実施例において、第２の実施例の場合と同様に、設定値ｋをｋ＝２、ｎ倍量のｎをｎ＝３と設定すると、（Ｃ）に示すカウントデータの（ｆ）部のデータ値は「１２」であるので、ｎ倍量の出力値は「１２×３＝３６」となり、これがｋ段分即ち２段分前のカウントデータの（ｅ）部及び（ｄ）部の「２０」および「１５」とそれぞれ比較され、それより大であるので、この（ｆ）部ではスタートマージン候補検出フラグは検出されない。このような場合にも、バーコード記号の先頭のスタートマージン候補の検出を行えるようにしたのが、この第３の実施例である。
【００５９】
そのため、この第３の実施例では、設定値ｋをｋ＝４、ｎ倍量のｎはｎ＝３とする。
図４の（Ｃ）に示すカウントデータのうち、（ａ）部には白色バー記号の幅に相当する「６０」という値が格納されている。次いで（ｂ）部分では、上記白色バーの直後に黒色バーに相当する記号（汚れ）がカウントデータ「１５」として出力され、ｎ倍器７の出力値は「１５×３＝４５」となる。この値が、図３に示した第２の実施例と同様に比較器９で比較され、４５＜６０であるため、（ａ）＞（ｂ）×３である。したがって、スタートマージン候補が検出されたことになり、（Ｄ）に示すスタートマージン候補検出フラグが（ｂ）部に相当する部分で“１”となる。
【００６０】
次に、バーコード記号の直前の黒い汚れ（黒色バー）の幅に相当する（ｄ）部に着目すると、この時のカウントデータの値は「１５」であり、ｎ倍器７の出力値は、設定値ｎ＝３であるので、「１５×３＝４５」となる。ここで設定値ｋ＝４であるため、時系列的に４つ前までのデータがｎ倍器７の出力値との比較の対象となる。まず、このカウントデータの（ｄ）部の直前の（ｃ）部の格納値「６５」と比較され、４５＜６５となり、ここでもスタートマージン候補が検出され、（Ｄ）に示すスタートマージン候補検出フラグが、カウントデータの（ｄ）部に相当する部分で“１”となる。
【００６１】
次いで、カウントデータにおける（ｆ）部に着目すると、この時のカウントデータは「１２」であり、ｎ倍器７の出力値は「１２×３＝３６」となる。ここでこの実施例では、設定値ｋは、ｋ＝４（時系列で４つ前までのカウントデータが比較対象）に設定されているので、まず（ｅ）部のカウントデータ「２０」と比較した時、２０＜３６であるから（ｅ）＜（ｆ）×３であり、スタートマージン候補は検出されない。
【００６２】
次に、その前の（ｄ）部のカウントデータ「１５」と比較した時、１５＜３６であるから（ｄ）＜（ｆ）×３であり、やはりスタートマージン候補は検出されない。さらに、その前の（ｃ）部のカウントデータ「６５」と比較した時、６５＞３６であるから（ｃ）＞（ｆ)×３となり、ここで初めてスタートマージン候補が検出されたことになり、（Ｄ）に示すスタートマージン候補検出フラグが、（Ｃ）に示すカウントデータの（ｆ）部に相当する部分で“１”となる。
【００６３】
また、この第３の実施例においても、図４の（Ｃ）に示すカウントデータにおける（ｂ）部および（ｄ）部でスタートマージン候補が検出されているが、図４の（Ａ）から明らかなように、バーコードデータ上では黒バーに相当するように見える（ｂ）部及び（ｄ）部は、デコードしたいバーそのものではなく、黒色の汚れの部分である。
【００６４】
そこで、この実施例でも前述した第２の実施例の場合と同様に、図１におけるＣＰＵ１２は、正常なバーコード記号をデコードするために、スタートマージン候補格納部１０に格納されているスタートマージン候補フラグを、時系列的に早い方から順次読み出して、そのカウントデータからのカウントデータ列に対してデコード処理を試み、バーコード記号データであると認識した時系列的に最初のスタートマージン候補検出フラグ、図４に示した例では（ｆ）部のスタートマージン候補検出フラグを検出する。そして、そのフラグに対応するカウントデータから開始したバーコード記号の認識（デコード）動作を最後まで続行して、バーコード記号を読み取る（デコードする）。
【００６５】
ところで、以上説明した３つの実施例において、比較段数の設定値ｋを２および４に設定した例を説明したが、この設定値ｋは、バーコード記号の印刷状態や汚れ等の状態により、人為的に任意に設定することが可能であり、その任意に設定するタイミングや方法には、次のような方法がある。
【００６６】
１．バーコード記号読取開始前に、人間が印刷状態や汚れの状態を見てＣＰＵ１２を介して設定する方法。
２．バーコード記号の読取が不可能な場合には、人為的操作によりＣＰＵ１２を介して再設定する方法。
３．バーコード記号の読取が不可能であるとＣＰＵ１２が判断した時、ＣＰＵ１２自身が光学読取部１に次の読取動作を行わせる前に再設定する方法。
【００６７】
この発明を実施する際には、これらの何れの方法を用いて比較段数の設定値ｋを設定してもよい。
また、ｎ倍器７の設定値ｎについても、上述の各実施例ではその設定倍数を３とした場合についてのみ説明したが、バーコード記号の特徴如何により、３〜７程度に設定すればよい。
【００６８】
なお、上述の各実施例におけるバーコード記号を構成する各部のデータ幅（カウントデータ値）の比率は、実際のバーコードのものではなく、あくまで実施例の説明のためのものである。
【００６９】
【発明の効果】
以上説明してきたように、この発明によれば、バーコード記号読取装置にｍ段データバッファ部を設けたことにより、そこに一時保存されたｍ段分のカウントデータのうちセレクタ部によって選択される任意のｋ段前までのデータと、現在のカウントデータとを比較することができるので、スタートマージン候補検出の範囲を大きく広げることができる。
またｎ倍器を設けたことにより、現在のカウントデータを任意のｎ倍の値にして比較することが可能であり、バーコードの種類等によって倍率を最適値に設定することにより、スタートマージン候補の検出精度を高めることができる。
【００７０】
さらに、スタートマージン候補を、カウントデータ格納時にハードウェアで自動検出して、その検出フラグをスタートマージン候補格納部に格納することにより、ＣＰＵによるスタートマージン候補検出処理（演算）を省くことができ、また、スタートマージン候補を複数格納することが可能なため、ある１つのスタートマージン候補が誤りであった場合でも、すばやく次のスタートマージン候補からＣＰＵによるバーコードデータのデコード処理を再開できるので、ソフトウェアを簡略化することが可能となり、且つバーコード記号読取時間を短縮することができる。
【図面の簡単な説明】
【図１】  この発明によるバーコード記号読取装置におけるバーコード記号のスタートマージン候補を検出するハードウェアのブロック図である。
【図２】  図１のハードウエアを使用してバーコード記号のスタートマージン候補を検出する第１の実施例を説明するための説明図である。
【図３】  同じく第２の実施例を説明するための説明図である。
【図４】  同じく第３の実施例を説明するための説明図である。
【図５】  従来のバーコード記号のスタートマージン候補検出方法を説明するための時系列に格納されたバーコード記号のバー幅のカウントデータ列を示す図である。
【図６】  従来のソフトウエアによってスタートマージン候補を検出するための処理のフローチャートである。
【符号の説明】
１：バーコード記号    ２：光学読取部
３：バーコードデータ値カウント部
４：サンプリングクロック発生回路
５：ｍ段データバッファ部
６：カウントデータ値格納部    ７：ｎ倍器
８：セレクタ部    ９：比較器
１０：スタートマージン候補格納部
１１：インタフェイス部
１２：マイクロプロセッサ（ＣＰＵ）
【図１】
0004555952.tif 000002
【図２】
0004555952.tif 000003
【図３】
0004555952.tif 000004
【図４】
0004555952.tif 000005
【図５】
0004555952.tif 000006
【図６】
0004555952.tif 000007