以下、本発明の光学情報読取装置をバーコードリーダに適用した実施形態について図を参照して説明する。まず、本実施形態に係るバーコードリーダ20の構成概要を図1に基づいて説明する。
図1に示すように、バーコードリーダ20は、主に、照明光源21、受光センサ23、フィルタ25、結像レンズ27等の光学系と、メモリ35、制御回路40、操作スイッチ42、液晶表示器46等のマイクロコンピュータ(以下「マイコン」という)系と、電源スイッチ41、電池49等の電源系と、から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されている。
光学系は、照明光源21、受光センサ23、フィルタ25、結像レンズ27等から構成されている。照明光源21は、照明光Lfを発光可能な照明光源として機能するもので、例えば、赤色のLEDとこのLEDの出射側に設けられる拡散レンズ、集光レンズ等とから構成されている。本実施形態では、受光センサ23を挟んだ両側に照明光源21が設けられており、図略のハウジングの読取口を介して読取対象物Rに向けて照明光Lfを照射可能に構成されている。この読取対象物Rには、紙やラベル等に印刷された静的情報コードとしての通常のバーコードが貼付されていたり、携帯電話機(情報コード表示装置)の画面に動的情報コードとしてのアクティブコードの要素コードが表示されていたりする。
なお、図1に示す符号Qは、情報コードを示すもので、通常のバーコード(静的情報コード)やアクティブコード(動的情報コード)の要素コード、の双方を含む概念である。アクティブコードについては、[背景技術]の欄で図13を参照し説明したものと同様である。
受光センサ23は、読取対象物Rや情報コードQに照射されて反射した反射光Lrを受光可能に構成されるもので、例えば、C−MOSやCCD等の固体撮像素子である受光素子22を2次元に配列したエリアセンサが、これに相当する。この受光センサ23の受光面23aは、ハウジング外から読取口を介して外観可能に位置しており、受光センサ23は、結像レンズ27を介して入射する入射光をこの受光面23aで受光可能に図略のプリント配線板に実装されている。
フィルタ25は、反射光Lrの波長相当以下の光の通過を許容し、当該波長相当を超える光の通過を遮断し得る光学的なローパスフィルタで、ハウジングの読取口と結像レンズ27との間に設けられている。これにより、反射光Lrの波長相当を超える不要な光が受光センサ23に入射することを抑制している。
結像レンズ27は、外部から読取口を介して入射する入射光を集光して受光センサ23の受光面23aに像を結像可能な結像光学系として機能するもので、例えば、鏡筒とこの鏡筒内に収容される複数の集光レンズとにより構成されている。本実施形態では、照明光源21から照射された照明光Lfが情報コードQに反射して読取口に入射する反射光Lrを集光することにより、受光センサ23の受光面23aに情報コードQの像を結像可能にしている。
次に、マイコン系の構成概要を説明する。マイコン系は、増幅回路31、A/D変換回路33、メモリ35、アドレス発生回路36、同期信号発生回路38、制御回路40、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等から構成されている。このマイコン系は、その名の通り、マイコン(情報処理装置)として機能し得る制御回路40およびメモリ35と中心に構成されるもので、前述した光学系によって撮像された情報コードQの画像信号をハードウェア的およびソフトウェア的に信号処理し得るものである。また制御回路40は、当該バーコードリーダ20の全体システムに関する制御も行っている。
光学系の受光センサ23から出力される画像信号(アナログ信号)は、増幅回路31に入力されることで所定ゲインで増幅された後、A/D変換回路33に入力されると、アナログ信号からディジタル信号に変換される。そして、ディジタル化された画像信号、つまり画像データ(画像情報)は、メモリ35に入力されると、画像データ蓄積領域に蓄積される。なお、同期信号発生回路38は、受光センサ23およびアドレス発生回路36に対する同期信号を発生可能に構成されており、またアドレス発生回路36は、この同期信号発生回路38から供給される同期信号に基づいて、メモリ35に格納される画像データの格納アドレスを発生可能に構成されている。
メモリ35は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。このメモリ35のうちのRAMには、前述した画像データ蓄積領域のほかに、制御回路40が算術演算や論理演算等の各処理時に利用する作業領域や読取条件テーブルも確保可能に構成されている。またROMには、後述する読取処理等を実行可能な所定プログラムやその他、照明光源21、受光センサ23等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
制御回路40は、バーコードリーダ20全体を制御可能なマイコンで、CPU、システムバス、入出力インタフェース等からなるもので、メモリ35とともに情報処理装置を構成し得るもので情報処理機能を有する。この制御回路40には、内蔵された入出力インタフェースを介して種々の入出力装置(周辺装置)と接続可能に構成されており、本実施形態の場合、電源スイッチ41、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等を接続されている。
これにより、例えば、電源スイッチ41や操作スイッチ42の監視や管理、またインジケータとして機能するLED43の点灯・消灯、ビープ音やアラーム音を発生可能なブザー44の鳴動のオンオフ、さらには読み取った情報コードQによるコード内容を画面表示可能な液晶表示器46の画面制御や外部装置とのシリアル通信を可能にする通信インタフェース48の通信制御等を可能にしている。なお、通信インタフェース48に接続される外部装置には、当該バーコードリーダ20の上位システムに相当するホストコンピュータHST等が含まれる。
電源系は、電源スイッチ41、電池49等により構成されており、制御回路40により管理される電源スイッチ41のオンオフによって、上述した各装置や各回路に、電池49から供給される駆動電圧の導通や遮断が制御されている。なお、電池49は、所定の直流電圧を発生可能な2次電池で、例えば、リチウムイオン電池等がこれに相当する。また、電池49によることなく、例えば、通信インタフェース48を介して接続されるホストコンピュータHST等の外部装置から電力供給を受ける構成を採る場合もあり、この場合には当該電池49は不要となる。
このようにバーコードリーダ20を構成することによって、例えば、電源スイッチ41がオンされて所定の自己診断処理等が正常終了し、情報コードQの読み取りが可能な状態になると、照明光Lfの発光を指示する操作スイッチ42(例えばトリガースイッチ)の入力を受け付ける。これにより、作業者がトリガースイッチを押圧しオンにすることで、制御回路40が同期信号を基準に照明光源21に発光信号を出力するので、当該発光信号を受けた照明光源21は、LEDを発光させて照明光Lfを照射する。すると、情報コードQに照射された照明光Lfが反射しその反射光Lrが読取口およびフィルタ25を介して結像レンズ27に入射するため、受光センサ23の受光面23aには、結像レンズ27により情報コードQの像が結像される。これにより、受光素子22が露光されるので、制御回路40による読取処理の画像情報取得処理によって画像信号による画像データの取得が可能となる。
このような動作の概要が、バーコードリーダ20による情報コードQの基本的な読取動作となるが、[発明が解決しようとする課題]の欄で述べたように、通常のバーコード(静的情報コード)とアクティブコード(動的情報コード)の要素コードとは、外観上ほぼ同様に構成されていながらも、情報コードQに付加されるチェックキャラクタ(チェックデジット)の算出方法が両コードで異なる。このため、通常のバーコードリーダではアクティブコードを読み取ることができないし、アクティブコード専用のバーコードリーダでは通常のバーコードを読み取ることができない。
そこで、本実施形態に係るバーコードリーダ20では、以下、図2〜図12を参照して説明する読取処理によって通常のバーコードおよびアクティブコードのいずれについても、読取可能にしている。
次に、バーコードリーダ20による読取処理の概要を図2に基づいて説明する。なお、この図2に示すフローチャートは、本発明に係るバーコードリーダ20による読取処理の例を概念的に表したもので、これを具現化したものが例えば図3に示す読取処理となる。
図2に示すように、バーコードリーダ20による読取処理では、まずステップS10による画像情報取得処理が行われる。この処理は、通常のバーコードまたはアクティブコードの要素コードが含まれる画像データ(画像情報)をメモリ35の画像データ蓄積領域から取得するもので、特許請求の範囲に記載の「画像情報取得手段」に相当し得るものである。
続くステップS20では、コード種別判定処理が行われる。この処理は、ステップS10により取得された画像データに基づいて当該画像データにアクティブコードの要素コードが含まれているか否かを判定するもので、特許請求の範囲に記載の「コード種別判定手段」に相当し得るものである。なお、このコード種別判定処理は、後に図4〜図10を参照して説明するように各種のバリエーションがある。
次のステップS30では、読取モード切替処理が行われる。この処理は、ステップS20により画像データに通常のバーコードが含まれていると判定された場合には、通常のバーコードを読取可能な通常ラベル読取モードに切り替え、ステップS20により画像データに要素コードが含まれていると判定された場合には、アクティブコードを読取可能なアクティブコード読取モードに切り替えるものである。なお、このステップS30は、特許請求の範囲に記載の「読取モード切替手段」に相当し得るものである。
続くステップS40、S50では、出力処理が行われる。即ち、ステップS30により通常ラベル読取モードに切り替えられた場合には、読み取った画像データを、通常のバーコードのデータとして所定のフォーマットに適合させ、通信インタフェース48を介して外部に出力する。
一方、ステップS30によりアクティブコード読取モードに切り替えられた場合には、読み取った画像データを、アクティブコードの要素コードのデータとして所定のフォーマットに適合させ、通信インタフェース48を介して外部に出力する。なお、本実施形態の場合、いずれの外部出力先も、これらのデータを情報処理可能なアプリケーションプログラムが実装されたホストコンピュータHST等になる。
ステップS40による出力処理が終了すると、つまり通常のバーコードラベルの場合には、ホストコンピュータHSTへのデータ出力が完了すると、次に読み込まれる情報コードQに備えて本読取処理を終了する。これに対し、ステップS50による出力処理が終了した場合(アクティブコードの場合)には、ステップS60に処理を移行する。
即ち、アクティブコードの場合、それを構成する要素コードを全て読み取り、それらをホストコンピュータHSTに出力しなければ当該アクティブコードの読取処理が完了しないので、ステップS60による出力完了判断処理では、アクティブコードを構成する全ての要素コードが出力されたか否かを判断する処理が行われる。
そして、全ての要素コードを出力していない場合には(S60;No)、残りの要素コードの読み取りに備えて、再度、ステップS10に処理を移行し、全ての要素コードを出力している場合には(S60;Yes)、次に読み込まれる情報コードQに備えて本読取処理を終了する。
このように本実施形態に係るバーコードリーダ20による読取処理は、図2に示すフローチャートのような処理の流れをその概念として把握することができるが、ここからは、このような読取処理をバーコードリーダ20に実装した例として、図3に示す読取処理を説明する。
図3に示すように、バーコードリーダ20に実装される読取処理では、まずステップS101により画像情報取得処理が行われる。この処理は、前述した画像情報取得処理S10(図2)に相当するもので、受光センサ23により検出されてA/D変換回路33によりディジタルデータに変換された画像データを、メモリ35の画像データ蓄積領域から取得する。
次のステップS103では、コード種別判定処理が行われる。この処理は、前述したコード種別判定処理S20(図2)に相当するもので、ここでは、図4に示すキャラクタチェック処理がこれにあたるので、ここからは図4を参照して説明する。
図4に示すように、キャラクタチェック処理(コード種別判定処理)では、まずステップS201によりデコード処理が行われる。この処理は、ステップS101により取得された画像データをコードデータ(コード情報)に解読するもので、特許請求の範囲に記載の「デコード手段」に相当し得るものである。例えば、図5(A) に示すコード128によるバーコードの場合、スタートキャラクタとストップキャラクタとの間に位置するデータキャラクタを解読する。なお、アクティブコードは、コード128のコードセットCにほぼ準拠している。
続くステップS203では、「モジュラス103+1」演算処理が行われる。即ち、コード128の場合、図5(A) および図5(B) に示すように、ストップキャラクタの直前に位置するデータキャラクタには、チェックキャラクタ(チェックデジット)が設定されているため、所定演算処理によりこれらのデータキャラクタにデータ誤りがあるか否かを検出することが可能になっている。
そして、アクティブコードを構成する要素コードの場合には、当該チェックキャラクタには、全てのデータキャラクタの総和を103で割った余りに1を足した値、つまりモジュラス103+1により演算される値が設定されているため、このステップS203によりこのような演算処理を行うことで、得られた演算結果とチェックキャラクタに設定されている値とが一致するか否か、つまり当該演算処理をエラーしないか否かによって、当該コードデータがアクティブコードの要素コードであるか否かを判断することが可能となる。なお、この処理は、特許請求の範囲に記載の「演算手段」に相当し得るものである。
次のステップS205では、ステップS203による演算エラーがないか否かを判断する処理が行われる。この処理によりエラーなし(S205;Yes)と判断された場合には、ステップS201により解読されたコードデータは、アクティブコードの要素コードであると判定されるので、ステップS213に処理を移行してその旨を明示する要素コードフラグをセットする(ADCフラグ設定処理)。
一方、ステップS205により演算エラーあり(S205;No)と判断された場合には、ステップS201により解読されたコードデータは、アクティブコードの要素コードではないと判定されるので、続くステップS207に処理を移行して通常のコード128に用いられるチェックデジットの計算方法である「モジュラス103等」演算処理を行う。
ステップS207では、「モジュラス103等」演算処理が行われる。コード128のコードセットCによるバーコードの場合、当該チェックキャラクタには、全てのデータキャラクタの総和を103で割った余りとして求められる値、つまりモジュラス103により演算される値が設定されている。また、それ以外のバーコード(コード39、インターリーブド2オブ5、コーダバー、スタンダード2オブ5、RSS等)の場合には、それぞれのコード仕様に規定された演算処理によって求められる値が設定されている。このため、このステップS207によりこのような各コード仕様による演算処理を行うことで、得られた演算結果とチェックキャラクタに設定されている値とが一致するか否か、つまり当該演算処理をエラーしないか否かによって、当該コードデータが通常のバーコードであるか否かを判断することが可能となる。
次のステップS209では、ステップS207による演算エラーがないか否かを判断する処理が行われる。この処理によりエラーなし(S209;Yes)と判断された場合には、ステップS201により解読されたコードデータは、通常のバーコードのデータであると判定されるので、ステップS215に処理を移行してその旨を明示するバーコードフラグをセットする(NRMフラグ設定処理)。
一方、ステップS209により演算エラーあり(S209;No)と判断された場合には、ステップS201により解読されたコードデータは、アクティブコードの要素コードでも通常のバーコードでもないと判定される。つまり、いずれかのデータキャラクタにデータ誤りがあると判断されるのでデータエラーの判定をして、続くステップS217で、その旨を明示するバーコードフラグをセットする(ERRフラグ設定処理)。
ステップS213、S215、S217のいずれかによってフラグ設定処理が完了すると、本キャラクタチェック処理が終了するので、図3に戻り読取処理のステップS105に処理を移行する。
再び図3を参照すると、ステップS105では、アクティブコードであるか否かを判定する処理が行われる。この処理は、前述した読取モード切替処理S30(図2)に相当するもので、ステップS103によるキャラクタチェック処理(図4)によって設定されたフラグを参照することにより、当該モードの切り替えを行う。
例えば、ADCフラグが設定されている場合には(S105;Yes)、ステップS101により取得された画像情報には、アクティブコードの要素コードが含まれていることになるので、「アクティブコード読取モード」として、続くステップS107に処理を移行し、当該コードデータをアクティブコードの要素コードとして所定のフォーマットに従ってホストコンピュータHSTに出力する(要素コードデータの出力処理)。なおこの要素コードデータの出力処理は、前述した出力処理S50(図2)に相当するものである。
一方、このようなフラグを参照することにより、NRMフラグやERRフラグが設定され、ADCフラグが設定されていない場合には(S105;No)、「通常ラベル読取モード」として、ステップS110に処理を移行し、当該コードデータを通常のバーコードのデータまたは対応するエラーコードをホストコンピュータHSTに出力する(バーコードデータ等の出力処理)。なお、このバーコードデータの出力処理は、前述した出力処理S40(図2)に相当するものである。
なお、ホストコンピュータHSTに出力する要素コードの出力フォーマットの例は、図5(B) に示すとおりで、順序データ部SQN 、総数データ部SUM 、種別データ部ID、送信データ部DAT 、桁数調整部PAD 、チェックキャラクタCHK から構成される。ここで、図5(B) を参照して要素コードの出力フォーマットを簡単に説明する。なお、図5(B) には、要素コードの総数が「5」の場合のアクティブコードが例示されている。
図5(B) に示すように、順序データ部SQN は、00〜99の2桁の数値により当該要素コードが何番目に該当するかを示すもので、先頭の要素コードには「00」、次の要素コードには「01」、その次の要素コードには「02」、というように順番に設定される。要素コードの総数が100である場合には、当該順序データ部SQN は「99」になる。
総数データ部SUM は、アクティブコードを分割した要素コードの総数を示すもので、順序データ部SQN が「00」の要素コードに設定される。設定位置は、順序データ部SQN の次で、先頭の要素コードを除いた数が設定される。そのため、例えば、要素コードの総数が5である場合には、5−1=4が設定される。
種別データ部IDは、アクティブコードの種別を6桁の数値で表すもので、順序データ部SQN が「00」の要素コードに設定される。設定位置は、総数データ部SUM の次で、出力データ部の総桁数が偶数である場合には、000000〜499999の値が設定され、出力データ部の総桁数が奇数である場合には、500000〜999999の値が設定される。
送信データ部DAT は、上位のホストコンピュータHSTに出力される実データで、全ての要素コードに設定される。設定位置は、順序データ部SQN が「00」の要素コードは、識別データ部IDの後に設定され、それ以外の要素コードは、順序データ部SQN の後に設定される。
桁数調整部PAD は、種別データ部IDの先頭桁が5〜9の場合、出力データ部の総桁数が奇数になるため、コード128では表示できない。このような場合にアクティブコード全体の総桁数を偶数にするため、最後の要素コードに「0」を付加する。このため、当該桁数調整部PAD は、末尾の要素コードに設定される。
チェックデジットCHK は、種別データ部ID+送信データ部DAT +桁数調整部PAD の全ての桁から所定演算によりチェックデジットを算出し、アクティブコードの総合チェックデジットとして設定されるものである。このため、当該チェックデジットCHK は、末尾の要素コードに設定される。なお、それぞれの要素コードには、図5(B) に破線枠で囲まれたS(スタートコード)、C(チェックデジット)、E(ストップコード)といったホストコンピュータHSTには出力されないデータが付加されている。
再度、図3に戻ると、ステップS107によってこのような出力フォーマットによりホストコンピュータHSTに要素コードが出力された場合には、続くステップS109では、アクティブコード読取設定処理が行われる。この処理では、例えば、アクティブコード読取モードにおける要素コードの読取条件の設定が行われる。この読取条件は、メモリ35に確保される読取条件テーブルに保持されており、例えば、アクティブコードの要素コードの読み取りを失敗した場合におけるリトライ回数(回数設定値)やタイムアウト時間(時間設定値)等が設定されている。また、このステップ109による処理では、例えば、ブザー44を鳴動させて「アクティブコード読取モード」に移行したこと、つまり通常のバーコードの読取はできないことを作業者に告知する。
次のステップS111では、アクティブコードを構成する要素コードの全てをホストコンピュータHSTに出力したか否かを判断する処理が行われる。この処理は、図5(B) を参照して説明したように、先頭の要素コード(順序データ部SQN が「00」の要素コード)には、総数データ部SUM が設定されているので、この値を参照して全ての要素コードをホストコンピュータHSTに出力したか否かを判断する。
そして、全ての要素コードをホストコンピュータHSTに出力したと判断した場合には(S111;Yes)、ステップS121に処理を移行して「アクティブコード読取モード」を解除して本読取処理を終了する。これに対し、全ての要素コードをホストコンピュータHSTに出力していない判断した場合には(S111;No)、次のステップS113に処理を移行して画像情報を取得する。なお、このステップS113による画像情報取得処理は、前述したステップS101による画像情報取得処理と同様であるので、ここでは説明を省略する。なお、このステップS111による画像情報取得処理は、前述した画像情報取得処理S10(図2)に相当するものである。
ステップS113により画像データを取得すると、続くステップS115によりコード種別判定処理が行われる。この処理も、前述したステップS103によるコード種別判定処理と同様であるので、説明を省略する。なお、このステップS115によるコード種別判定処理は、前述したコード種別判定処理S20(図2)に相当するものである。
続くステップS117では、ステップS113により解読されたコードデータは既にホストコンピュータHSTに出力済みのデータであるか否かを判断する処理が行われる。即ち、ステップS111による画像情報取得処理によって取得された画像データが、重複したものである場合には(S117;Yes)、そのようなデータはホストコンピュータHSTに出力しても無駄になるので、ステップS123により当該要素データをクリアする処理が行われる。そして、ステップS123の後、ステップS113に処理を移行し、次の画像データを取得する。
一方、そのような重複したものでない場合には(S117;No)、続くステップS119により当該コードデータをアクティブコードの要素コードとして所定のフォーマットに従ってホストコンピュータHSTに出力する(要素コードデータの出力処理)。なおこの要素コードデータの出力処理は、前述したステップS107による要素コードデータの出力処理と同様であるので、説明を省略する。なお、このステップS119による要素コードデータの出力処理は、前述した出力処理S50(図2)に相当するものである。
ステップS119による要素コードデータの出力処理が完了すると、ステップS111に処理を移行して、再度、アクティブコードを構成する要素コードの全てをホストコンピュータHSTに出力したか否かを判断する処理が行われる。そして、このようなループを繰り返し実行しているうちに、全ての要素コードをホストコンピュータHSTに出力したと判断され(S111;Yes)、本読取処理を終了する。
このように本実施形態に係るバーコードリーダ20によると、画像情報取得処理S10(S101)により、通常のバーコードまたはアクティブコードの要素コードが含まれる画像データを取得し、コード種別判定処理S20(S103)により、画像データに基づいて当該画像データにアクティブコードの要素コードが含まれているか否かを判定する。そして、コード種別判定処理S20(S103)により画像データに要素コードが含まれていると判定された場合、読取モード切替処理S30(S105)により、アクティブコードを読取可能なアクティブコード読取モードに切り替える。これにより、通常のバーコードを読取可能な通常ラベル読取モードにあっても、取得した画像データにアクティブコードの要素コードが含まれていれば、読取モード切替処理S30(S105)によって、当該通常ラベル読取モードから、アクティブコードを読取可能なアクティブコード読取モードに自動的に切り替えられる。したがって、煩雑な設定作業を行うことなく、通常のバーコードとアクティブコードの双方を読み取ることができる。
また、本実施形態に係るバーコードリーダ20では、コード種別判定処理S20(S103)は、キャラクタチェック処理によるデコード処理S201により、画像データに基づいて通常のバーコードまたはアクティブコードの要素コードを解読したコードデータを生成し、このコードデータが要素コードを解読したものであるか否かを判断し得る演算結果を算出可能なコード128に従ったモジュラス103+1の演算処理を「モジュラス103+1」演算処理S203によりコードデータに実施する。そして、この演算結果から、コードデータが要素コードを解読したものである場合(S205;Yes)、画像データにアクティブコードが含まれていることを判定し、コードデータが要素コードを解読したものでない場合(S205;No)、画像データにアクティブコードが含まれていないことを判定する。これにより、コード種別判定処理S20(S103)は、画像データにアクティブコードの要素コードが含まれているか否かを当該「モジュラス103+1」演算処理により容易に判定することができる。
なお、図3に示す読取処理では、アクティブコードの要素データを個々にホストコンピュータHSTに出力していたが(S107、S119)、例えば、これらの要素コードをメモリ35に確保される出力バッファに蓄積し当該アクティブコードを構成する要素コードの全てが揃ってから、ホストコンピュータHSTに出力するように処理しても良い。
具体的には、例えば、図6に示す改変例(その1)のように、ステップS107の要素コードデータ出力処理およびステップS119の要素コードデータ出力処理を、それぞれ要素コードデータ蓄積処理(S107’、S119’)に変更するとともに、新たにステップS120による要素コードデータ出力処理をステップS121の前に設ける。また、ステップS111による判断処理を要素コードを全て蓄積したか否かを判断し得るものに変更する(S111’)。
S107’およびS119’では、コード種別判定処理のキャラクタチェック処理(図4)によりデコードされて生成されたコードデータをアクティブコードの要素コードとして、メモリ35に確保される出力バッファに蓄積する処理が行われる。この処理では、図5(B) を参照して説明した要素コードの順序データ部SQN に基づいて、蓄積される要素コードが何番目のものであるかを把握し、蓄積されている要素コードを例えばフラグにより管理する。なお、要素コードの総数は、順序データ部SQN が「00」の要素コードに設定されている総数データ部SUM を参照することにより知ることができる。
そして、ステップS111’により、当該フラグが要素コードの総数分セットされたか否か、つまり要素コードを全て蓄積したか否かを判断することで、当該アクティブコードを構成する要素コードの全てが揃ったか否かが分かる。ステップS111’により要素コードを全てが蓄積されたと判断した場合には(S111’;Yes)、ステップS120によって当該出力バッファに蓄積された要素コードをひとまとめにホストコンピュータHSTに出力する。一方、ステップS111’により要素コードを全てが蓄積されたと判断されない場合には(S111’;No)、ステップS113に処理を移行して残りの要素コードを得るため、画像情報を取得する。
このようにアクティブコードの要素データを個々にホストコンピュータHSTに出力するのではなく、全ての要素コードが揃ってから、ホストコンピュータHSTに出力することで、当該バーコードリーダ20とホストコンピュータHSTとの間における通信回数が減少するので、ホストコンピュータHSTの通信処理の負担を軽減することができる。また、通信回数が減少することで、各送信データに付加される冗長データによるデータ量も減らせるので、全体の通信トラヒックを削減させることもできる。
次に、コード種別判定処理のバリエーション例を図7〜図10を参照して説明する。
図7に示すように、コード種別判定処理の一例である画素仕切枠判定処理は、まずステップS301により画像データ解析処理が行われる。この画像データ解析処理(S301)は、前述のA/D変換回路33からディジタルデータに変換された画像データに基づいて行われるもので、特許請求の範囲に記載の「画素仕切枠判断手段」に相当し得るものである。
例えば、例えば、カラー液晶表示装置の画面に表示されたアクティブコードを読み取った場合における波形として、図8(A) の上段に示すようなもの得られる。この図8(A) に示す波形は、横軸がバーコードの走査方向で、縦軸が受光センサ23に入射した光の強度に基づく電圧値で、破線Xの内側に存在する波形を拡大したものが同図の下段に示されている。これに対し、紙に印刷された通常のバーコードを読み取った場合における波形として、図8(B) の上段に示すようなものが得られ、破線Yの内側に存在する波形を拡大したものが同図の下段に示されている。
ここで、カラー液晶表示装置の画面に表示されたアクティブコードの場合には、間隔の狭い振幅による波形が楕円x内に発生していることがわかる(図8(A) 下段)。これに対し、紙に印刷された通常のバーコードの場合には、楕円xに対応する箇所の楕円y内の波形は比較的平坦であることがわかる(図8(B) 下段)。このような波形の差は、アクティブコードを読み取った波形の場合には(図8(A) )、アクティブコードの背景が当該表示画面を構成する画素の色(赤色、緑色、青色)とその画素間の仕切枠の色(一般に黒色)との2色以上になるので、画素と画素間の仕切枠との間で明度差が生じるのに対し、紙に印刷されたバーコードの場合には(図8(B) )、その背景が表示媒体である紙そのものの色(一般に白色)で明度がほぼ均一になることにより生じるものである。
したがって、ステップS301では、このような明度差を受光センサ23により検出された画像信号による画像データについて解析することで、当該画像データに画素間の仕切枠を含んでいるか否かを判断可能にしている。つまり、画素間の仕切枠による細かい黒色範囲が点在する場合には、情報コードQの背景に液晶画面が写っていることになるので、このような背景に表示される情報コードQは、アクティブコードを構成する要素コードである可能性が高い。
このため、ステップS303により、画素間の仕切枠がある判断された場合には(S303;Yes)、解析された画像データには、アクティブコードの要素コードが含まれる可能性が高いと判定されるので、ステップS311に処理を移行してその旨を明示する要素コードフラグをセットする(ADCフラグ設定処理)。これに対し、このような画素間の仕切枠がない判断された場合には(S303;No)、解析された画像データには、通常のバーコードが含まれている可能性が高いと判定されるので、ステップS313に処理を移行してその旨を明示するバーコードフラグをセットする(NMRフラグ設定処理)。
そして、ステップS320により画像データのデコード処理を行う。なお、このデコード処理は、当該画像データをコードデータ(コード情報)に解読するもので、図4を参照して説明したキャラクタチェック処理によるステップS201を同様に行われる。
このように図7に示す画素仕切枠判定処理では、情報コードQが表示されている背景の明度に基づいて、当該コードが通常のバーコードかアクティブコードの要素コードかを判断するので、情報コード表示装置200の表示画面201がカラー液晶装置で構成されている場合に特に有効なものとなる。
このような情報コードQが表示されている背景の明度に基づいて、情報コードQが通常のバーコードかアクティブコードの要素コードかを判定するものとして、ほかに図9に示す明暗判定処理もコード種別判定処理の一例として挙げられる。この明暗判定処理は、例えば、情報コード表示装置200の表示画面201が、その裏面から導光板を用いたバックライトで照らされるものである場合に特に有効なものとなる。
即ち、図9に示すように、明暗判定処理では、まずステップS401により光強度検出処理が行われる。この処理も、前述した画像データ解析処理(S301)と同様に、受光センサ23からの画像信号に基づく画像データを解析することによって、光の強さを検出し数値データを生成するものである。なお、この光強度検出処理(S401)は、特許請求の範囲に記載の「光強度情報生成手段」に相当し得るものである。
次のステップS403では、ステップS401により検出された光の強さから、情報コードQを含むその背景の明暗のばらつきを検出する処理が行われる。例えばこの処理では、ステップS401により数値化された光の強度に基づいて数値差の大小関係から、明暗のばらつきを分析して所定閾値以上のばらつきを検出する。なお、この明暗ばらつき検出処理(S403)は、特許請求の範囲に記載の「明暗判断手段」に相当し得るものである。
通常のバーコードの場合には、紙等の表示媒体に印刷されているので、一般に明暗のばらつきが少ないのに対し、アクティブコードを構成する要素コードの場合には、バックライトによる明暗のばらつきが存在する。例えば、当該バックライトがLEDとこのLEDの光を平面状に分散可能な導光板とにより構成されている場合には、当該光の分散が不均一なことによる微小な明暗のばらつきが生じる。したがって、所定閾値以上の明暗のばらつきがある場合には、当該画像データにアクティブコードの要素コードが含まれている可能性が高い。
このため、ステップS405により、明暗のばらつきがあると判断された場合には(S405;Yes)、当該画像データには、アクティブコードの要素コードが含まれる可能性が高いと判定されるので、ステップS411に処理を移行してその旨を明示する要素コードフラグをセットする(ADCフラグ設定処理)。これに対し、このような明暗のばらつきがない判断された場合には(S405;No)、当該画像データには、通常のバーコードが含まれている可能性が高いと判定されるので、ステップS413に処理を移行してその旨を明示するバーコードフラグをセットする(NMRフラグ設定処理)。
この後、ステップS420により当該画像データのデコード処理を行う。なお、このデコード処理は、当該画像データをコードデータ(コード情報)に解読するもので、図4を参照して説明したキャラクタチェック処理によるステップS201を同様に行われる。
このように図9に示す明暗判定処理では、情報コードQが表示されている背景のバックライトによる光の強度(明度)に基づいて、当該コードが通常のバーコードかアクティブコードの要素コードかを判断するので、情報コード表示装置200の表示画面201がその裏面からバックライトで照明されている場合、特にLEDによる照明の場合、有効なものとなる。
なお、当該バックライトがELによる照明の場合でも、その点灯を制御するスイッチング周波数が受光センサ23の露光タイミングよりも遅いかそれに近い場合には、情報コードQの背景が暗くなることから、明暗のばらつきでは、その背景全体の明暗を検出することで、アクティブコードか否かを判断することが可能となる。
次に、コード種別判定処理の一例として、画像切替時間判定処理の例を図10を参照して説明する。図10に示すように、画像切替時間判定処理は、まずステップS501により基準画像データがあるか否かを判断する処理が行われ、基準画像データがない場合には(S501;No)、続くステップS503により画像情報取得処理により画像データを取得し、さらにステップS505により当該画像データに含まれる情報コードQの画像、つまりコード画像を基準画像データとしてメモリ35の所定領域に登録する基準画像データ登録処理が行われる。なお、既に基準画像データが登録され存在する場合には(S501;Yes)、ステップS503、S505をスキップしてステップS507に処理を移る。なお、基準画像データ登録処理(S505)およびメモリ35の所定領域は、特許請求の範囲に記載の「基準画像情報保持手段」に相当し得るものである。
このステップS503による画像情報取得処理は、図2を参照して説明したステップS10の画像情報取得処理とほぼ同様であるが、ステップS503による画像情報取得処理では、当該画像データが取得された時刻t0を記録している。なお、この時刻t0は、制御回路40に内蔵されたクロック装置により計時された時間データに基づくものである。
次にステップS507により画像情報取得処理が行われる。この処理は、前述した基準画像データとは異なる時刻t1のコード画像を含む画像データを取得するもので、ステップS503と同様に、画像データが取得され、取得時の時刻t1も合わせて取得される。
続くステップS509では、ステップS507により取得された画像データによるコード画像を基準画像データによるコード画像と比較し、時刻t0から時刻t1までの間にコード画像が変化したか否かを判断する処理が行われる。そして、変化がある場合には(S509;Yes)、ステップS511による経過時間算出処理に移行して経過時間Δtを算出(Δt=t0−t1)する処理が行われ、変化がない場合には(S509;No)、ステップS507に移行して再度画像情報取得処理が行われる。つまり、ステップS507により取得された画像データのコード画像が基準画像データのコード画像と比較して変化するまで、繰り返しステップS507により画像データが取得される。なお、当該比較処理(S509)は、特許請求の範囲に記載の「コード画像比較手段」に相当し得るものである。
ステップS511により算出された経過時間Δtが、アクティブコードの要素コードを切り替える時間間隔にほぼ等しいか否かをステップS513により判断する処理が行われる。即ち、ステップS511による経過時間Δtが要素コードの表示切替時間(例えば0.1秒)とほぼ等しい場合には、当該コード画像は、アクティブコードの要素コードに該当し得る一方で、このような要素コードの表示切替時間相当の短時間に通常のバーコードが作業者による読取作業によって次々を読み込まれることは考え難い。
このような理由から、ステップS513により、経過時間Δtが要素コードの表示切替時間とほぼ等しいと判断された場合には(S513;Yes)、当該画像データに含まれるコード画像は、アクティブコードの要素コードである可能性が高いと判定されるので、ステップS515に処理を移行してその旨を明示する要素コードフラグをセットする(ADCフラグ設定処理)。これに対し、経過時間Δtが要素コードの表示切替時間とほぼ等しいと判断されない場合(S513;No)、当該画像データに含まれるコード画像は、通常のバーコードが含まれている可能性が高いと判定されるので、ステップS517に処理を移行しその旨を明示するバーコードフラグをセットする(NMRフラグ設定処理)。なお、この判断処理(S513)と経過時間算出処理(S511)とは、特許請求の範囲に記載の「切替間隔判断手段」に相当し得るものである。
この後、ステップS520により画像データのデコード処理を行う。なお、このデコード処理は、当該画像データをコードデータ(コード情報)に解読するもので、図4を参照して説明したキャラクタチェック処理によるステップS201を同様に行われる。
このように図10に示す画像切替時間判定処理では、任意時刻t0から時刻t1までの時間Δtが要素コードの切り替わる時間間隔とほぼ同等時間である場合(S513;Yes)、時刻t1に取得された画像情報にアクティブコードの要素コードが含まれていることを判定し、このような時間Δtが要素コードの切り替わる時間間隔とほぼ同等時間でない場合、時刻t1に取得された画像データにアクティブコードの要素コードが含まれていないことを判定する。つまり、コード画像が変化するのに要する時間に基づいて、アクティブコードか通常のバーコードかを判定している。
ここで、図3に示す読取処理の改変例(その2、その3)を図11に基づいて説明する。なお、図11では、それぞれの分図において、図3に示すフローチャートの一部を抜粋して処理の流れの相違を図示している。
まず、図11(A) に示す改変例(その2)について説明する。図11(A) に示すように、この改変例(その2)では、ステップS115によるコード種別判定処理とステップS117による出力済みの要素コードか否かを判断する処理との間に、アクティブコードか否かを判断する処理をステップS120として介在させる。
即ち、図3を参照して説明した読取処理では、アクティブコード読取モードにおいては、画像情報取得処理(S113)で取得された画像データには、アクティブコードを構成する要素コードが含まれることを前提に各処理を行っていた。しかし、当該画像データに要素コード以外のコード画像が含まれている場合もあるので、本改変例では、アクティブコード読取モードにおいても、画像情報取得処理(S113)で取得された画像データが要素コードであるか否かを判断することとした。
そして、アクティブコードであるか否かを判断するステップS131により、アクティブコードでない、つまりアクティブコードを構成する要素コードのデータでないと判断された場合には(S131;No)、ステップS133によりアクティブコード読取モードを解除する処理を行い、本読取処理を終了するようにした。なお、アクティブコードを構成する要素コードのデータであると判断された場合には(S131;Yes)、続くステップS117に移行して図3と同様の判断処理を行う。
これにより、一旦、アクティブコード読取モードに切り替わった後に通常のバーコードを読み込む場合、ステップS131による判断処理によって、当該アクティブコード読取モードから、通常のバーコードを読取可能な通常ラベルモードに自動的に切り替えられるので、煩雑な設定作業を行うことなく、通常のバーコードとアクティブコードの双方を読み取ることができる。
次に、図11(B) に示す改変例(その3)について説明する。図11(B) に示すように、この改変例(その3)は、前述した改変例(その2)にリトライ機能を付加したものである。即ち、図11(A) を参照して説明した改変例(その2)では、アクティブコード読取モードにおいても、画像情報取得処理(S113)で取得された画像データが要素コードであるか否かを判断することとしたが、一度でもアクティブコードでないと判断されると、アクティブコード読取モードを解除してしまう。そこで、本改変例(その3)では、アクティブコードでないと判断されても、所定時間を経過するまでは、画像情報取得処理(S113)およびコード種別判定処理(S115)をリトライするように構成した。
具体的には、図11(B) に示すように、ステップS115によるコード種別判定処理とステップS117による出力済みの要素コードか否かを判断する処理との間に、アクティブコードか否かを判断する処理をステップS141として介在させ、さらにアクティブコード読取モードを解除する処理(S147)の前に、タイマー値をカウントアップする処理(S143)とそのタイマー値を監視するタイムアップ判断処理(S145)とを介在させた。そして、まだタイムアップになっていない場合には(S145;No)、画像情報取得処理(S113)の直前に処理を移行するように設定した。
これにより、アクティブコード読取モードにおいて、要素コードの読み取りを所定時間内に完了できなかった場合には(S145;Yes)、当該アクティブコード読取モードから通常ラベル読取モードに切り替えられるが、要素コードの読み取りを所定時間内に完了できた場合には(S145;No、S141;Yes)、当該アクティブコード読取モードから通常ラベル読取モードには切り替えられない。このため、一旦、アクティブコード読取モードに切り替わった後に、誤読み込み等よって要素コード以外のコードが読み込まれた場合には、直ちに、通常ラベル読取モードに切り替わることなく、所定時間待ち、この間も引き続いて要素コード以外のコードが読み込まれるときに、当該アクティブコード読取モードから通常ラベル読取モードに自動的に切り替えられる。したがって、このような読み込みエラーによる無駄なモード切替を防止することができる。
なお、図11(B) に示す改変例(その3)では、タイマー値をカウントアップする処理(S143)とタイムアップ判断処理(S145)とによって、所定時間を計時したが、例えば、リトライ回数をカウントする処理とそのカウント値を監視するカウントアップ判断処理とによって、所定回数内にリトライを許容し、当該所定回数を超えた場合には、リトライを阻止してステップS147によるアクティブコード読取モードの解除処理に移行するように処理を構成しても良い。
続いて、アクティブコード読取モードの場合に実行される読取条件学習処理を図12に基づいて説明する。図12(A) には、当該処理の基本的なフローチャートが示され、また図12(B) には、その改変例が示されている。なお、この読取条件学習処理は、アクティブコードの要素コードを読み取った後に逐次実行されるもので、「読取条件」とは、図3を参照して説明したS109によるアクティブコード読取設定処理によって設定される「要素コードの読取条件」のことである。
図12(A) に示すように、読取条件学習処理では、まずステップS601により要素コードの読み取りが成功したか否かを判断する処理が行われる。そして、成功した場合には(S601;Yes)、ステップS603により現在の読取条件を読取条件テーブルに記憶(保持)する処理が行われ、成功しなかった(失敗した)場合には(S601;No)、ステップS605により現在の読取条件をそれよりも緩やかに設定する処理が行われる。そしてこれらの処理が完了すると、本読取条件学習処理が終了する。
ここで「現在の読取条件をそれよりも緩やかに設定する」とは、例えば、読み取った要素コードが複数回一致するように読取条件が設定されている場合には、その回数設定値を減少させることがこれに相当し、また読み取りに要する時間が読取条件に設定されている場合には、その時間設定値を増加させることがこれに相当する。さらに、読取条件として画像データによる2値データの閾値が設定されている場合には、当該閾値を増加または減少させることもこれに相当する。
これにより、読取条件テーブルには、要素コードの読み取りを所定時間内に完了できた場合の時間設定値や、要素コードの読み取りを所定回数内に完了できた場合の回数設定値が記憶(保持)されるので、アクティブコード読取モードでは、この記憶(保持)されている時間設定値や回数設定値に基づいて要素コードを読み取ることができる。したがって、アクティブコード読取モードでは、要素コードを読取可能な時間設定値や回数設定値に基づいて、要素コードを読み取ることができる。
続いて図12(B) を参照して読取条件学習処理の改変例を説明する。図12(B) に示すように、本改変例では、図12(A) を参照して説明した処理のステップS603の後に、ステップS607として読取条件を厳しく設定する処理を追加している。即ち、アクティブコードの要素コードの読み取りが成功しても、そのときの読取条件を読取条件テーブルに記憶(S603)した後、現在の読取条件をそれよりも厳しく設定する処理を設けた(S607)。
ここで「現在の読取条件をそれよりも厳しく設定する」とは、例えば、読み取った要素コードが複数回一致するように読取条件が設定されている場合には、その回数設定値を増加させることがこれに相当し、また読み取りに要する時間が読取条件に設定されている場合には、その時間設定値を減少させることがこれに相当する。さらに、読取条件として画像データによる2値データの閾値が設定されている場合には、当該閾値を増加または減少させることもこれに相当する。
これにより、図12(A) に示す読取条件学習処理では、一旦、読取条件が緩やかに設定されてしまうと、それ以上は厳しい読取条件が設定されることはなかったが、本改変例による処理では、ステップS607により読取条件を厳しい方向にも設定し直す。このため、ステップS605による読取条件の緩和処理とステップS607による読取条件の緊張処理とが相俟って当該読取条件の最適な設定が可能となる。したがって、アクティブコード読取モードでは、最適な読取条件で要素コードを読み取ることができる。
なお、上述した実施形態では、アクティブコードを構成する要素コードを順番に読み取るように設定したが、当該要素コードには、図5(B) を参照して説明したように、要素コードの順序データ部SQN に基づいて、蓄積される要素コードが何番目のものであるかを把握し、蓄積されている要素コードを例えばフラグにより管理することで、各要素コードを順番通りではなく順番を飛び越して、例えば2番目→4番目→5番目→3番目→というように飛び飛びに読取可能に構成しても良い。なお、要素コードの総数は、順序データ部SQN が「00」の要素コードに設定されている総数データ部SUM を参照することにより知ることができる。これにより、要素コードがランダムに表示されるアクティブコードも読み取ることが可能となる。
また、図示されていないが、アクティブコードを構成する要素コードの読み取りの進捗状況を、例えば棒の長さや数値(0%〜100%)等で、液晶表示器46に表示しても良い。これにより、作業者は、アクティブコード読取モードにおいて要素コードの読取状況を視覚的に把握することができるので、例えば、要素コードの読取途中であるにもかかわらず、バーコードリーダ20の読取方向を変えてしまったり、読取動作を中止したりするといった読取エラーに繋がる動作の誘因を抑制することができる。