(58)【調査した分野】(Int.Cl.,DB名)
コンピュータに、読取領域内の情報を入力情報として読み取る読取手段を備える読取装置を制御させて、前記コンピュータ及び前記読取装置に協働して請求項9乃至16のいずれか一項に記載の読取結果出力方法を実行させるためのプログラム。
【発明を実施するための形態】
【0016】
以下、この発明を実施するための形態を図面に基づいて具体的に説明する。
まず
図1に、この発明の読取装置の一実施形態の概略ハードウェア構成を示す。
この読取装置100は、読み取り対象物上に設けられた、光反射率が周囲と異なるモジュールが配列されたコード記号を読み取る装置であり、光学ヘッド部110、デコーダ部120、パネル基板131、インジケータ132、ブザー133を有する。これらに加え、ユーザの操作を受け付けるためのボタン等の操作部も有するが、その図示は省略する。なお、コード記号の形式は任意であり、1次元のバーコードや、2次元バーコード、QRコード(登録商標、以下同様)等、デコーダ部120の設定に応じて任意の形式のコードを読み取り可能である。
【0017】
また、光学ヘッド部110は、レンズ111、固体撮像素子の一例であるCMOS (Complementary Metal Oxide Semiconductor)イメージセンサ(以下単に「CMOS」という)112、投光LED(発光ダイオード)113及びエイミング光学系114を備える。
レンズ111は例えば光学レンズであり、読取対象物の画像を光学ヘッド部110に取り入れ、CMOS112の撮像エリア上に結像させるためのものである。
【0018】
CMOS112は、レンズ111が取り入れた読取対象物(コード記号を含むと想定される)からの反射光により、読取対象物を撮像し、その撮像で得たアナログの画像信号からデジタルの輝度値で表現される画像データを生成してデコーダ部120に出力する。
投光LED113は、照射する光により読取対象物を照明して、CMOS112により鮮明な画像を撮像できるようにするための照明手段である。ただし、装置の構造によってはLED113は設けなくてもよい。
【0019】
エイミング光学系114は、CMOS112により撮像可能な範囲、すなわちコード記号の読取領域の目印を、読取対象物への光の照射により表示する照射手段である。具体的には、
読取領域の中心、四隅、周囲等に可視光のビームを照射したり、これらの位置をビームにより走査したりする。
【0020】
なお、読取装置100の読取領域は、
図2に模式的に符号150で示すように、レンズ111の光軸を中心に広がる、CMOS112の撮像エリア内に読取対象物からの反射光を結像させることのできる範囲である。読み取りたいコード記号160がこの読取領域内に収まっていれば、その画像を撮像してデコードし、読み取ることができる。
読取領域の広さは、読取装置100から読取対象物までの距離や、相対的な向きなどにより変化する。
【0021】
次に、デコーダ部120は、第1入出力インタフェース(第1I/O)121,制御回路122,RAM123,不揮発メモリ124,第2入出力インタフェース(第2I/O)125を備える。
このうち第1I/O121は、光学ヘッド部110とデコーダ部120との間で、制御信号やCMOS112が出力する画像データなどを送受信するためのインタフェースである。
【0022】
制御回路122は、CMOS112及びLED113の制御、CMOS112から第1I/O121を介して入力される読取対象物の画像データに対し、ノイズ除去のためのフィルタ処理や、デコード準備のためのデータ加工処理、加工後の画像データに基づくコード記号のデコード処理、デコード後の読取結果の蓄積、加工及び出力処理等を行う。ハードウェアとしては、ASIC(Application Specific Integrated Circuit)やCPUにより構成することができる。なお、デコード処理の詳細については、例えば特開2005−25417号公報に記載の手法など、公知の任意の手法を採用すればよい。また、デコード後の読取結果の蓄積、加工及び出力処理は、この実施形態の特徴に係る処理であり、この処理の内容については後に詳述する。
【0023】
RAM123は、CMOS112から入力される画像データを一時的に記憶したり、デコード準備のためのデータ加工処理の際にワークメモリとして用いたり、デコード後の読取結果を一時的に蓄積したり、その他読取装置100の動作に必要なデータなど動的に変更するデータを記憶したりする記憶手段である。一部を不揮発性としてもよい。
【0024】
不揮発メモリ124は、読取装置100を起動させるプログラムや、制御回路122のCPUに実行させるためのプログラムなどを記憶する不揮発性の記憶手段である。また、読取装置100においては、デコード後の読取結果の蓄積、加工及び出力処理に関するアルゴリズムをユーザが任意に設定できるようにしており、この設定も、不揮発メモリ124に記憶させる。
第2I/O125は、不図示のホストコンピュータ等の外部装置とデータ通信を行うためのインタフェースであり、制御回路122によるデコード及び加工後の読取結果を第2I/O125を介して外部装置に出力することができる。また、制御回路122からの制御信号をパネル基板131へ送信するためのインタフェースも備える。
【0025】
パネル基板131は、読取装置100のユーザインタフェースとなる操作パネル(必ずしもパネル状でなくてもよい)を制御するための基板である。
インジケータ132は、制御回路122による制御に基づきLEDランプ等により読取装置100の動作状態を視覚的にユーザに通知するための表示手段である。
ブザー133は、制御回路122による制御に基づき音により読取装置100の動作状態をユーザに通知するための音声出力手段である。
【0026】
次に、以上のような構成を有する読取装置100において、制御回路122のCPUが、読取結果の出力のために実行する処理について説明する。
図3は、制御回路122のCPUが実行する読取結果の出力のための処理のフローチャートである。この処理は、主として複数項目の読取結果を一括して出力する一括出力のために実行するものである。
制御回路122のCPUは、外部装置からの信号あるいはユーザの操作等により、コード記号の読み取り開始を指示されると、
図3のフローチャートに示す処理を開始する。
【0027】
そしてまず、CMOS112が読取領域を撮像して得た1フレームの画像を取得して処理対象画像とする(S11)。次に、処理対象画像中の未デコードのコード記号を1つデコードする(S12)。このデコードの手法は、上述の通り公知のものを適宜採用すればよい。また、処理対象画像中に複数のコード記号が含まれる場合でも、それらの中でのデコードの順序は任意である。すなわち、画像のサーチで最初に発見したものから順番にデコードする等、自動で定めて構わない。
【0028】
そして、ステップS12でのデコードが成功した場合(S13のYes)、そのデコード結果に基づく読取結果の登録に関する処理を行うべく、ステップS14以下の処理(入力処理S
in)に進む。
この部分の処理ではまず、デコード結果が設定されている入力書式のいずれかを満たすか否か判断する(S14)。入力書式は例えば
図6に示すようなものであり、複数項目の読取結果を一括出力するために設定するものであるが、この点については後述する。
【0029】
そして、ステップS14でYesであれば、デコード結果から該当の入力書式により指定された1又は複数の箇所を取り出し(S15)、取り出した各箇所に、入力書式に基づいて定めたそれぞれ異なるIDを付して、そのIDの項目の読取結果として読取結果テーブルに登録する(S16)。読取結果テーブルは例えば
図4に示すものであるが、その内容やIDについては後述する。
【0030】
なお、ステップS15の取り出し処理と、ステップS16の登録処理と、ステップS14の判断とは、別々の処理として行ってもよいが、一つの処理としてまとめて行うようにしてもよい。例えば、デコード結果の文字列に対し、先頭から順に、入力書式の設定が示すアルゴリズムに従って所定箇所を取り出し、必要に応じて加工を行って読取結果テーブルへ登録する処理を行っていき、これが末尾まで正常に行えた場合に、デコード結果は入力書式を満たしていた、と判断する等である。入力書式を満たしていない場合には、それが判明した時点で、そこまでに読取結果テーブルに登録した文字列を削除すればよい。
このようにしても、別々に処理を行う場合と同様な結果を得ることができる。
【0031】
なお、ステップS14でNoの場合、制御回路122のCPUは、今回デコードしたコード記号は一括出力の対象となるものでないと判断する。そこで、このような場合に単独出力を行う旨の設定がなされているか否か判断する(S24)。そして、なされていれば、デコード結果を第2I/O125から接続先の外部装置へ出力する(S25)。その後、読取結果テーブルに登録されている読取結果をクリアして(S22)、ステップS11へ戻り処理を繰り返す。
【0032】
この処理により、特に動作モードを切り替えなくても、一括出力の対象外のコード記号については、読取結果をそのまま出力することができ、この点で高い操作性を得ることができる。
また、ステップS24でNoの場合には、一括出力に関する処理を続けるため、ステップS11に戻って処理を繰り返す。
【0033】
一方、ステップS16の後は、制御回路122のCPUは、読取結果テーブルに新たな項目のデータを登録したか否か判断する(S17)。そして、これがYesであれば、新たな項目のデータを読み取った旨を、所定の通知先へ通知する(S18)。通知の手法としては、通知先がユーザである場合には、読取装置100が備える不図示のスピーカにより確認音を鳴らしたり、不図示のランプを点灯や点滅させたりすることが考えられる。また、通知先が装置である場合には、その装置に対して所定のデータを送信することが考えられる。
なお、ステップS17の判断において、既に読取結果の登録されている項目にそれまでと異なる値を登録した場合にもYesと判断するようにするとよい。
【0034】
ステップS17でNoの場合あるいはステップS18の通知を行った後は、読取結果の出力に関するステップS19以下の処理(出力処理S
out)へ進む。
この部分の処理において、制御回路122のCPUはまず、設定されている出力書式が示す必須項目のデータが全て読取結果テーブルに登録されているか否か判断する(S19)。出力書式は例えば
図12に示すようなものであり、複数項目の読取結果を一括出力するために設定するものであるが、この点については後述する。
【0035】
そして、ステップS19でYesであれば、設定されている出力書式に従い、読取結果テーブルから必要な項目の読取結果を読み出して加工し、出力データを生成する(S20)。その後、生成した出力データを、第2I/O125から接続先の外部装置へ出力する(S21)。
以上で複数項目の読取結果の一括出力に関する一連の処理は完了である。そこで、次の出力に関する処理を行うべく、読取結果テーブルに登録されている読取結果をクリアして(S22)、ステップS11へ戻り処理を繰り返す。
【0036】
また、ステップS19でNoの場合、まだ必須項目の読取結果が揃っていない旨を、所定の通知先へ通知する(S23)。この通知の手法は、ステップS18の場合と同様でよい。また、ステップS18の通知と同時に行うようにしたり、両方の意味を合わせた1つの通知を行うようにしたりしてもよい。
ステップS23の後は、ステップS12に戻って処理を繰り返す。この場合、同じ処理対象画像中で未デコードのコード記号があれば、それをデコードすることになる。また、もしこのようなコード記号がない場合、ステップS13でNoとなり、ステップS11に戻って、次のフレームの画像を取得して処理対象とし、処理を繰り返す。
【0037】
以上の処理において、ステップS14乃至S16では、制御回路122のCPUが登録手段として機能する。ステップS19乃至S21では、同CPUが第1の出力手段として機能する。ステップS18では、同CPUが通知手段として機能する。ステップS25では、同CPUが第2の出力手段として機能する。
【0038】
以下、
図3の処理に従った読取結果の登録及び出力の処理について、具体例を用いてより詳細に説明する。
まず、
図4に、読取結果テーブルの例を示す。
図4に示す読取結果テーブルは、読取結果の項目を特定するための3種のIDと、そのIDが示す項目の読取結果とを登録するためのテーブルであり、RAM123に設ける。このテーブルのデータ形式は、読取装置100のファームウェアにより定めておき、入力処理S
inや出力処理S
outのアルゴリズムによらず、一定の形式のものを用いる。
【0039】
このようにすれば、入力処理S
inや出力処理S
outのアルゴリズムを設定するための入力書式及び出力書式の記述において、データ形式の定義を行う必要がない。従って、あまり知識のないユーザが入力書式及び出力書式を作成する場合でも、比較的簡単に書式を作成することができる。
また、設定の不備等により、読取結果テーブルのサイズが過大となることも防止できる。読取装置100においてメモリ容量の制約が大きい場合、登録可能な読取結果の個数や、格納可能な読取結果の最大容量を、予め定めておくようにしてもよい。
【0040】
読取結果テーブルに登録する3種のIDは、全て読取結果の項目を特定するための識別情報であり、
図4の例では入力書式ID、括弧ID及び取出IDとしている。
これらのうち入力書式IDは、ステップS14でデコード結果が満たした入力書式のIDである。
【0041】
括弧IDは、詳細については第2の例及び第3の例において後述するが、入力書式中の、文字の取り出しを指示する括弧のIDである。読取装置100においては、1つの入力書式に複数個の取り出し指示を含めることができるが、括弧IDは、取り出した各文字列が、どの指示により取り出したものかを区別するためのIDである。なお、この括弧IDの欄は、第3の例で説明するアプリケーションIDを登録する場合にも用いることができる。
【0042】
取出IDは、詳細については第2の例及び第3の例において後述するが、同じ入力書式の同じ括弧に係る取り出し指示に従って複数回の取り出しを行う場合に、取り出した各文字列が、当該指示により何度目に取り出したものかを区別するためのIDである。
【0043】
以下の説明及び図面において、特に断らない限り、読取結果の項目を特定するためのIDは、入力書式ID、括弧ID、取出IDの順で、「[1,2,3]」のように表記する。
読取結果の欄には、入力書式に従ってデコード結果から取り出された文字列を、そのまま、あるいは入力書式により加工が指示されている場合にはその加工を行って登録する。
【0044】
〔第1の例:
図5乃至
図15〕
次に、読取結果の登録及び出力の第1の例について説明する。
この第1の例は、
図5に示すような、4つのバーコード記号で表される情報を出力する例である。なお、コード記号の下に示した文字列は、そのコード記号をデコードして得られる文字列を示す。他の図についても同様である。
【0045】
図6に、第1の例においてデコード結果の照合及び読取結果の登録に用いる入力書式を示す。
読取装置100においては、
図6に示す通り、入力書式は、一般的な正規表現に一部機能を追加した書式を用いて記述するようにしている。また、複数の入力書式を登録可能である。また、
図6の例では、
図5に示した4つのバーコード記号それぞれと対応する入力書式を用意している。入力書式IDは、そのそれぞれの入力書式を区別するためのIDであり、
図4に示した読取結果テーブルにおいて読取結果の項目を特定するためのIDとしても用いる。
【0046】
そして、入力書式ID=0の入力書式において、「\SB」は、デコード結果がJANコードの形式であることを示す記号である。この記号は、デコード結果の形式を示すものであり、デコード結果に特定の文字が含まれることを示すものではない。次の「4」は、何ら修飾がなく、半角数字の「4」そのものを示す。次の「[0-9]」は、いずれかの半角数字を示し、「{12}」は、{}の中に記載した回数だけ直前の文字を繰り返すことを示す。「$」は文字列終端を示す。
【0047】
従って、この入力書式は、JANコードで、半角数字の「4」の後に半角数字12文字のみが記載されている、という書式を示すものである。これは、
図5の左上のコード記号と対応する書式である。
【0048】
次のID=1の入力書式において、「\ST」は、デコード結果がCode128の形式であることを示す記号である。この記号も、デコード結果の形式を示すものであり、デコード結果に特定の文字が含まれることを示すものではない。また、「"-"」は、読取結果を読取結果テーブルに登録する際に、""の中に記載した文字をデコード結果に追加することを示す。その他の記号は、ID=0の入力書式について述べたものと同様である。
【0049】
従って、この入力書式は、Code128で、半角数字で6文字、2文字、6文字、1文字の計15文字のみが記載されている、という書式を示すものである。また、読取結果を登録する際に、6文字目、8文字目及び14文字目の後ろに、それぞれ「-」を挿入することを示すものである。これは、
図5の右上のコード記号と対応する書式である。
【0050】
次のID=2の入力書式において、「<L>」は、<>内に記載した文字は、デコード結果には含まれているが、読取結果を読取結果テーブルに登録する際には、その文字を削除することを示す。また、「[0-9A-Z]」は、いずれかの半角数字又は半角英大文字を示す。その他の記号は、ID=0の入力書式について述べたものと同様である。
【0051】
従って、この入力書式は、Code128で、「L」の後に、半角数字又は半角英大文字8文字のみが記載されている、という書式を示すものである。また、読取結果を登録する際に、初めの「L」を削除することを示すものである。これは、
図5の左下のコード記号と対応する書式である。
【0052】
ID=3の入力書式において用いている記号も同様な意味であり、この入力書式は、Code128で、「S」の後に、半角数字又は半角英大文字14文字のみが記載されている、という書式を示すものである。また、読取結果を登録する際に、初めの「S」を削除することを示すものである。これは、
図5の右下のコード記号と対応する書式である。
【0053】
なお、以上の4つの入力書式において、文字の取り出しを指示する括弧は登場していない。しかし、削除を指定されていない文字については、括弧ID=0かつ取出ID=0の項目の読取結果として読取結果テーブルに登録することを指示しているものとする。これは、文字の取り出しを指示する括弧がある場合でも同様である。すなわち、この場合も、デコード結果から括弧に従って取り出した部分を、括弧と対応する括弧IDの項目の読取結果として登録すると同時に、デコード結果全体のうち削除を指定されていない文字を、括弧ID=0かつ取出ID=0の読取結果として登録する。
【0054】
以上のような入力書式は、
図7で示すように、「/」で区切って複数並べて記載することもできる。この場合、並べられた書式のうちいずれか1つを満たせば、デコード結果が入力書式を満たす、という判断となる。
ただし、説明を簡単にするため、読取装置100においては、このように「/」で区切られた入力書式が設定された場合、その区切られた1つ1つの入力書式に対してそれぞれ入力書式IDを付し、個別に照合を行うようにしている。
【0055】
また、読取装置100は、所定の入力設定モードが選択された状態で、
図7に示したような入力書式の文字列をコード化したコード記号を読み取った場合、その文字列に従って入力書式を設定する機能を備えている。「/」で区切られた入力書式が設定された場合には、各々の入力書式に対して自動で入力書式IDを付し、
図6に示す形式でそれらを登録する。なお、入力書式IDを付す順は、初めに記載されたものから昇順とする等、予め決めておくことが好ましい。出力データの生成の際に所望の項目を選択するために指定すべき入力書式IDを把握できるようにするためである。
【0056】
以上の機能により、読取装置100を操作するユーザは、
図5に示したような読み取り対象のコード記号を読み取る場合とほぼ同じ操作により、入力書式の文字列をコード化したコード記号を読み取るだけで、入力書式の設定を行うことができる。
なお、この設定は、外部装置からのデータ送信によって行うことができるようにしてもよい。
【0057】
次に、デコード記号と入力書式との照合処理について説明する。
図3に示した処理のうち入力処理S
inにおいて、制御回路122のCPUは、設定されている全ての入力書式について、デコード結果と入力書式との照合処理を行う。
図6のような入力書式が設定されている場合、ID=0からID=3の入力書式について、順次照合処理を行うことになる。
【0058】
ここで、
図8に、入力書式ID=0の入力書式について行う照合処理の例を示す。
この処理のアルゴリズムは、入力書式が設定されたとき、あるいは入力書式に基づいて
図3の処理を実行するときなど、適当なタイミングで、制御回路122のCPUが所定のファームウェアを実行することにより入力書式の文字列を解釈して、自動的に生成するものである。以降の例の照合処理についても同様である。また、
図8の処理は、照合と並行して、デコード結果からの読取結果の取り出しと、読取結果テーブルへの登録を行う処理である。
【0059】
図8の処理において、制御回路122のCPUはまず、デコード結果がJANコードの書式を満たしているか否か判断する(S31)。
ここでYesであれば、変数iの値を1に設定する(S32)と共に、デコード結果のi文字目(ここでは1文字目)が半角数字の「4」であるか否か判断する(S33)。これがYesであれば、ここまではデコード結果が入力書式を満たしていると判断し、i文字目(ここでは1文字目)を、IDが[0,0,0]の項目の読取結果として読取結果テーブルに記録する(S34)。ここで用いる項目のIDについて、入力書式ID=0は、照合に用いた入力書式のIDに従って定めたものであり、括弧ID=0と取出ID=0については、
図6の説明で述べた通りである。
【0060】
なお、読取結果テーブルに[0,0,0]の項目がなければ、新たにその項目を追加する。また、既に[0,0,0]の項目に確定した読取結果が登録されていれば、その読取結果を削除して、新たに記録を行う。ただし、ここで削除した読取結果は、後で復元できるように適当なメモリに待避させておくとよい。
【0061】
次に、制御回路122のCPUは、iの値をインクリメントしつつ(S35,S38)、デコード結果のi文字目が半角数字である場合にはその文字をIDが[0,0,0]の項目の読取結果として読取結果テーブルに記録する処理(S36,S37)を、iが2から13まで繰り返す。すなわち、「4」の後ろに半角数字が12文字あることを確認する。iは処理中の文字の位置を示すポインタとして機能する。
【0062】
そして、13文字目の処理が終了すると、iの値が14になるので、ステップS39でNoとなり、i文字目(14文字目)がデータ終端であるか否か判断する(S40)。
これがYesであれば、デコード結果はID=0の入力書式を満たすことがわかるので、ここまでに読取結果テーブルの各項目(ここでは[0,0,0]のみ)に記録した文字を、読取結果として確定させ(S41)、ID=0の入力書式に関する照合処理を終了する。
【0063】
一方、ステップS31、S33、S36及びS40のいずれかでNoの場合、デコード結果がID=0の入力書式を満たさないことがわかる。そこで、ここまでの処理(
図8の処理)で読取結果テーブルの各項目(ここでは[0,0,0]のみ)に記録した文字をクリアして(S42)、ID=0の入力書式に関する照合処理を終了する。なお、ここまでの処理で読取結果テーブルへの項目の追加を行っている場合には、その項目自体を削除する。また、確定した読取結果の削除を行っている場合には、これを復元する。
【0064】
また、ステップS42に進んだ場合は、次にID=1の入力書式に関する照合処理に進む。しかし、この実施形態では、デコード結果が2以上の入力書式を同時に満たすことはないことを前提とし、ステップS41に進んだ場合は、他の入力書式に関する照合処理は行わない。ただし、デコード結果が2以上の入力書式を同時に満たすこともあり得るとし、ステップS41に進んだ場合でも他の入力書式に関する照合処理をさらに行う構成も、採り得る。
【0065】
次に、
図9に、入力書式ID=1の入力書式について行う照合処理の例を示す。
図9の処理において、制御回路122のCPUはまず、デコード結果がCode128の書式を満たしているか否か判断する(S51)。
ここでYesであれば、変数iの値を1に設定する(S52)と共に、iの値をインクリメントしつつ(S55)、デコード結果のi文字目が半角数字である場合にはその文字をIDが[1,0,0]の項目の読取結果として読取結果テーブルに記録する処理(S53,S54)を、iが1から6まで繰り返す。すなわち、デコード結果の先頭6文字が半角数字であることを確認する(S56)。項目のIDについては、入力書式IDが1である点以外は、
図8の場合と同様である。
【0066】
次に、入力書式中の「"-"」と対応して、「-」をIDが[1,0,0]の項目の読取結果として読取結果テーブルに記録する(S57)。
次に、ステップS53乃至S56の場合と同様、i=7及び8について、デコード結果のi文字目が半角数字である場合にはその文字をIDが[1,0,0]の項目の読取結果として読取結果テーブルに記録する処理を行う(S58〜S61)。すなわち、デコード結果の7文字目及び8文字目が半角数字であることを確認する。
【0067】
その後、制御回路122のCPUはさらに、ステップS57と同様な「-」の記録(S62)、9文字目から14文字目の確認と記録(S63〜S66)、「-」の記録(S67)、および15文字目の確認と記録(S68〜S70)を行う。
その後、16文字目がデータ終端であることが確認できると(S71:この時点でi=16)、デコード結果はID=1の入力書式を満たすことがわかるので、ここまでに読取結果テーブルの各項目(ここでは[1,0,0]のみ)に記録した文字を、読取結果として確定させ(S72)、ID=1の入力書式に関する照合処理を終了する。
【0068】
一方、ステップS51、S53、S58、S63、S68及びS71のいずれかでNoの場合、デコード結果がID=1の入力書式を満たさないことがわかる。そこで、
図8のステップS42の場合と同様に、ここまでの処理(
図9の処理)で読取結果テーブルの各項目(ここでは[1,0,0]のみ)に記録した文字をクリアして(S73)、ID=1の入力書式に関する照合処理を終了する。
【0069】
以下、ID=2及び3の入力書式についての照合処理を順次行うが、その詳細についての説明は省略する。
いずれにせよ、制御回路122のCPUは、
図6に示した入力書式が設定されている場合、
図3のステップS14乃至S16の処理として、ステップS12で得られたデコード結果の文字列に対し、ID=0〜3の入力書式に関する照合処理を順次行う。そして、その結果、デコード結果が満たす入力書式に基づいて取り出した情報を、入力書式に基づいて特定したIDを持つ項目の読取結果として、読取結果テーブルに登録することができる。
【0070】
そして、この登録は、デコードしたコード記号1つ1つについて個別に行うため、
図5に符号Y及びZで示すように、読み取るべきコード記号を一度に全て読取領域に収めることができない場合でも、読取領域内に収まっているコード記号について、読取結果を登録することができる。
【0071】
例えば、制御回路122のCPUが
図3のステップS11で、符号Yで示す読取領域の画像を取得した場合、上側のコード記号のデコード結果はID=0の入力書式を満たし、下側のコード記号のデコード結果はID=2の入力書式を満たす。従って、読取結果テーブルに、
図10に示す状態でこれらのコード記号の読取結果を登録することができる。
【0072】
次に、符号Zで示す読取領域の画像を取得した場合、上側のコード記号のデコード結果はID=1の入力書式を満たし、下側のコード記号のデコード結果はID=3の入力書式を満たす。従って、これらのコード記号に関する読取結果を
図10に示した状態に追加して、
図11に示す状態で読取結果を登録することができる。
従って、読み取るべきコード記号を一度に全て読取領域に収めることができない場合でも、複数の読取領域における読取結果を合わせて、出力に必要な読取結果を揃えることができる。
【0073】
次に、
図12に、第1の例においてデコード結果の出力に用いる出力書式を示す。
読取装置100においては、出力書式には、出力データに含める固定の文字列、出力データに含める読取結果の項目の指定、及び特殊記号を記載することができる。
図12に示した例において、[]で囲まれた3つ組のIDが、出力データに含める読取結果の項目の指定である。該当の箇所に、3つ組のIDで示される項目の読取結果として読取結果テーブルに登録されている文字列を配置することを示す。例えば、読取結果テーブルが
図11に示す状態の場合、出力書式に[0,0,0]と記載された位置には、「4123456789018」の文字列を配置することになる。
【0074】
また、読取結果の項目を指定するデータは、読取装置100がどの項目の読取結果を出力し、またそのいずれが必須の項目であるかを定めるデータでもある。例えば、出力書式に[0,0,0]と記載されていれば、読取装置100はIDが[0,0,0]の項目の読取結果を出力し、また[0,0,0]の項目は必ず出力に含めるべき必須の項目であることがわかる。
出力に含まれる可能性はあるが必須ではない項目もあり得るが、この点については第3及び第4の例で説明する。
また、
図12に示した例において、「\x0D」は、改行コードを示す特殊記号である。
【0075】
以上の出力書式は、入力書式の場合と同様な手法により、設定することができる。
すなわち、読取装置100は、所定の出力設定モードが選択された状態で、
図12に示したような出力書式の文字列をコード化したコード記号を読み取った場合、その文字列に従って出力書式を設定する機能を備えている。
ここでは示していないが、入力書式の場合と同様、「/」で区切られた出力書式の設定が指示された場合には、各々の出力書式に対して自動で出力書式IDを付し、
図6と同様な形式でそれらを登録する。ただし、同時に使える出力書式は1つのみであり、複数の出力書式が設定された場合には、そのうち1つを、ユーザからの指示により使用する出力書式として選択する。
【0076】
以上の機能により、読取装置100を操作するユーザは、
図5に示したような読み取り対象のコード記号を読み取る場合とほぼ同じ操作により、出力書式の文字列をコード化したコード記号を読み取るだけで、出力書式の設定を行うことができる。
なお、この設定や使用する出力書式の選択は、外部装置からのデータ送信によって行うことができるようにしてもよい。
また、入力書式と出力書式を繋げた文字列を1つのコード記号としてコード化し、これを読取装置100に読み取らせて、入力書式と出力書式をまとめて設定させることができる。この場合、「/」で区切られた文字列のうち最初又は最後の1つを出力書式とするように予め規則を定めておいたり、各書式に、当該書式が入力書式であるか出力書式であるかを示す識別子を付したりして、これらを区別できるようにすることが考えられる。
【0077】
次に、以上の出力書式を用いた出力処理について説明する。
図3に示した処理のうち出力処理S
outにおいて、制御回路122のCPUは、設定されている出力書式に基づいて、ステップS19及びS20の処理を行う。これらの処理のアルゴリズムは、出力書式が設定されたとき、あるいは出力書式に基づいて
図3の処理を実行するときなど、適当なタイミングで、制御回路122のCPUが所定のファームウェアを実行することにより出力書式の文字列を解釈して、自動的に生成するものである。以降の例の場合についても同様である。
なお、以下に示す例は、ステップS19の処理とステップS20の処理とを別々に行う場合の例である。
【0078】
まず、
図13に、
図12に示した出力書式が設定されている場合の、ステップS19と対応する登録判定処理のフローチャートを示す。
図13の処理において、制御回路122のCPUは、出力書式に基づいて必須と認識する、IDが[0,0,0]、[1,0,0]、[2,0,0]、[3,0,0]の各項目について、当該項目の読取結果が読取結果テーブルに登録されているか否かをそれぞれ判断する(S81〜S84)。
【0079】
そして、全て登録されていれば、必須項目のデータが全て読取結果テーブルに登録されていると判断し(S85)、処理を終了する。この場合、
図3のステップS19の判断はYesとなる。一方、1つでも登録されていなければ、必須項目のデータが揃っていないと判断し(S86)、処理を終了する。この場合、
図3のステップS19の判断はNoとなる。
【0080】
図3からわかるように、
図13の処理がステップS85に進んだ場合のみ、次のステップS20と対応する処理に進む。
図14に、
図12に示した出力書式が設定されている場合の、ステップS20と対応する出力データ生成処理のフローチャートを示す。この処理は、出力データが空白の状態からスタートする。
【0081】
図14の処理において、制御回路122のCPUはまず、出力書式の先頭にある「商品コード:」の文字列を、出力データに追加する(S101)。次に、出力書式のうちステップS101で追加した文字列の次に記載されている読取結果の指定に対応して、読取結果テーブルに登録されている、IDが[0,0,0]の項目の読取結果の文字列を、出力データに追加する(S102)。次に、その後ろの特殊記号「\x0D」に対応して、改行コードを出力データに追加する(S103)。
【0082】
その後も、出力書式に記載されている順に、「IMEI:」の文字列(S104)、[1,0,0]の項目の読取結果の文字列(S105)、改行コード(S106)、「Lot No:」の文字列(S107)、[2,0,0]の項目の読取結果の文字列(S108)、改行コード(S109)、「Serial No:」の文字列(S110)、[3,0,0]の項目の読取結果の文字列(S111)、および改行コード(S112)を、順次出力データに追加して、処理を終了する。
【0083】
以上の
図13及び
図14に示した処理のアルゴリズムを生成する制御回路122のCPUが、出力項目特定手段として機能する。
また、読取結果テーブルが
図11に示す状態の場合、以上により生成される出力データは、
図15に示すものとなる。すなわち、出力を予定している項目のデータをコードするコード記号を一度に読取領域内に収められない場合でも、複数回に分けて必要なデータを読み取ることができれば、それらの読取結果を合わせて、予定している全ての項目の読取結果を含む出力データを生成することができる。
【0084】
制御回路122のCPUは、この出力データを、
図3のステップS21の処理により、所定の外部装置へ出力する。この出力は、RS−232CやUSB(Universal Serial Bus)やBluetooth(登録商標)等を用いて双方向通信によって行ってもよいし、USB−HID(Human Interface Device)やKeyboard Wedgeなどを用いて読取装置100から外部装置へ一方的に情報を送信するのみの単方向通信によって行ってもよい。
【0085】
〔第2の例:
図16乃至
図21〕
次に、読取結果の登録及び出力の第2の例について説明する。
この第2の例は、
図16に示すような、1つの2次元バーコード記号で表される情報を出力する例である。また、1つの入力書式に従い、複数項目の読取結果の取り出しを行う例である。
【0086】
なお、この例では説明を簡単にするために2次元バーコード記号を1つのみとし、これに対応して入力書式を1つのみ設定しているが、2次元バーコード記号複数で表される情報を出力することとし、それらに対応して入力書式を複数設定することも、当然可能である。
【0087】
図17に、第2の例においてデコード結果の照合及び読取結果の登録に用いる入力書式を示す。
この入力書式において、まず、丸括弧「()」は、
図4で説明した、文字の取り出しを指示する括弧である。すなわち、括弧内の記載に該当する箇所の文字列を、括弧の出現順に応じた括弧IDを有する項目の読取結果として登録する旨の指定である。ただし、「(?:)」のように、括弧内の文字列の先頭に「?:」がある場合、文字列の取り出し及び登録は行わない。従って、
図17に示す入力書式中で、実際に文字の取り出しを指示する括弧は、符号Aで示す部分のみである。
【0088】
なお、いずれの場合も、括弧内の文字列は、以下の繰り返し等を考慮する際に、ひとかたまりの文字列とみなす。
また、符号Aで示す括弧内の、「.」は、任意の1文字を、「*」は、直前の文字の0回以上の繰り返しを、「?」は、直前の文字の0又は1回の繰り返しを示す。さらに、符号Bで示す括弧内の、「,」は、特殊な意味はなく半角カンマという文字を、「|」は、その前後のいずれかが含まれていればよいということ(オア)を、「$」はデータ終端を示す。末尾の「+」は、直前の文字の1回以上の繰り返しを示す。
【0089】
以上から、
図17に示した入力書式のうち符号Bで示す部分は、カンマ又はデータ終端を示し、符号Aで示す部分は、そのカンマ又はデータ終端で区切られた任意の文字数(0でも可)の文字列を示す。そして、末尾の「+」により、これらのかたまりが1以上あることを示す。
【0090】
すなわち、
図17に示した入力書式は、デコード結果が、カンマで区切られた任意の数(1でもよい)の文字列であることを示す(カンマがない場合、全体として1つの文字列と認識する)。また、符号Aの部分の括弧により、その各文字列を、括弧IDが1の項目の読取結果として取り出すことを示す。さらに、その括弧に従って1度目に取り出した文字列(先頭の文字列)は取出ID=0、次に取り出した文字列は取出ID=1、というように文字列ごとに項目に昇順で取出IDを付すことも示す。
【0091】
次に、デコード記号と入力書式との照合処理について説明する。
図18に、
図17に示した入力書式と対応する照合処理の例を示す。
図18の処理において、制御回路122のCPUはまず、変数iの値を1に、変数jの値を0にそれぞれ設定する(S131)。iは処理中の文字の位置を示すポインタとして機能する。
【0092】
次に、デコード結果のi文字目がカンマ又はデータ終端であるか否か判断する(S132)。いずれでもなければ、そのi文字目を、IDが[0,1,j]の項目の読取結果として読取結果テーブルに記録する(S133)。項目のIDについて、入力書式ID=0は、照合に用いた入力書式のIDに従って定めたものであり、括弧ID=1は、該当文字の取り出しを指定する入力書式中の括弧の位置に従って定めたものであり、取出ID=jは、取り出しの回数に従って定めたものである。
【0093】
また、i文字目は、IDが[0,0,0]の項目の読取結果としても読取結果テーブルに記録する(S134)。これは、括弧による取り出しと関係なく、デコード結果全体を登録するためのものである。
以上の後、iの値をインクリメントして(S135)、ステップS132に戻り、処理を繰り返す。
【0094】
また、ステップS132でYesの場合も、i文字目がデータ終端でなければ(S136でNo)、すなわちカンマであれば、i文字目(すなわちカンマ)をIDが[0,0,0]の項目の読取結果として読取結果テーブルに記録する(S137)。そして、i及びjの値をインクリメントして(S138)、ステップS132に戻り、処理を繰り返す。この場合、ステップS133において文字を記録する項目のIDが変化するため、以後の文字列は、それまでの文字列と異なる項目の読取結果として登録することになる。
【0095】
そして、処理がデータ終端まで到達してステップS136でYesとなると、デコード結果がID=0の入力書式を満たすと判断し、ここまでに読取結果テーブルの各項目に記録した文字を、読取結果として確定させ(S139)、照合処理を終了する。
図18の処理においては、デコード結果に含まれているカンマで区切られた文字列を、それぞれ異なる項目の読取結果として登録することができる。すなわち、1つの入力書式に従い、複数項目の情報を取り出して、その項目の読取結果として登録することができる。
【0096】
なお、
図17に示した入力書式の場合、デコード結果がいかなる文字列であっても入力書式を満たすので、入力書式を満たさない場合の処理は設けていない。
また、
図16に示したコード記号を読み取って
図18に示した照合処理を行った場合、読取結果テーブルへの登録結果は、
図19に示すようになる。
図16に示したコード記号には、カンマで区切られた文字列が4つ含まれるため、そのそれぞれが、IDが[0,1,0-3]の項目の読取結果として登録される。また、デコード結果そのものが、IDが[0,0,0]の項目の読取結果として登録される。なお、[0,0,0]への登録は、<>による除外や""による挿入が指定されていればその影響は受ける。
【0097】
次に、
図20に、第2の例においてデコード結果の出力に用いる出力書式を示す。
この出力書式についても、記載形式は
図12に示したものと同様である。そして、制御回路122のCPUは、この出力書式に基づき、
図3のステップS19及びS20の処理と対応するアルゴリズムを生成する。
【0098】
その内容をフローチャートで示すことは省略するが、概要は以下の通りである。
まず、ステップS19と対応する登録判定処理においては、[0,1,0]、[0,1,1]、[0,1,2]、[0,1,3]の各項目が必須項目であるとする。
ステップS20と対応する出力データ生成処理においては、「POST:」の文字列、[0,1,0]の項目の読取結果の文字列、改行コード、[0,1,1]の項目の読取結果の文字列、改行コード、「TEL:」の文字列、[0,1,2]の項目の読取結果の文字列、改行コード、「FAX:」の文字列、[0,1,3]の項目の読取結果の文字列、および改行コードを、この順で含む出力データを生成する。
【0099】
[0,0,0]の項目の読取結果については、登録は行うが、出力データの生成には使用しない。
読取結果テーブルが
図19に示す状態の場合、以上により生成される出力データは、
図21に示すものとなる。その出力方式は、第1の例の場合と同様である。
【0100】
〔第3の例:
図22A乃至
図31〕
次に、読取結果の登録及び出力の第3の例について説明する。
この第3の例は、出力すべき情報を示すコード記号が
図22A乃至
図22Cに示すように場合によって異なる形式である場合の例である。また、読取結果の項目の特定に、括弧IDに代えてアプリケーション識別子(AI)を用いる例である。
【0101】
アプリケーション識別子とは、GS1という機関が定義した、商品情報の記載フォーマットで用いる識別子である。このフォーマットでは、
図23に示すように、コード記号で表現したい情報の内容毎に、アプリケーション識別子と、当該情報の記載に用いる文字種及び桁数が規定されている。
そして、使用するフォーマットについて
図23に示すようなアプリケーション識別子毎のデータの記載形式を示すテーブルを不揮発メモリ124に記憶させておけば、制御回路122のCPUは、コード記号をデコードして得た文字列にどのような情報がどのような記載形式で含まれているかを、当該テーブルと、文字列に含まれるアプリケーション識別子とに基づき把握することができる。
【0102】
ここで、
図24に、第3の例においてデコード結果の照合及び読取結果の登録に用いる入力書式を示す。
この第3の例においては、これらの入力書式も、上述のアプリケーション識別子を利用して記載している。具体的には、「\A」に続く半角数字2文字により、当該アプリケーション識別子で示されるデータがデコード結果に含まれるべきことを示している。例えば、「\A01」は、アプリケーション識別子が「01」のデータを示す。
【0103】
また、「\s80」は、可変長データの末尾を示す「<FNC1>」という特殊文字を示す。この特殊文字は、
図22A乃至21Cに示すコード記号の下側には記載していない。
「$」がデータ終端を示すことは、第1及び第2の例の場合と同様である。
【0104】
以上に基づけば、ID=0の入力書式は、アプリケーション識別子が「01」、「17」、「30」、「10」のデータがそれぞれこの順で並ぶことを示す。また、アプリケーション識別子が「30」のデータは可変長であるので、末端に<FNC1>が来る。アプリケーション識別子が「10」のデータも可変長であるが、これは文字列全体の末端に位置するため、可変長データの末尾は、データ終端により示すことができ、<FNC1>は用いない。
【0105】
また、データの特定にアプリケーション識別子を用いる場合、アプリケーション識別子の記載は、当該アプリケーション識別子と対応するデータ部分の文字列を取り出し、その文字列を読取結果として読取結果テーブルに登録することも示す。この場合、項目を特定するIDは、括弧IDとしてそのアプリケーション識別子を用い、取出IDは0とする。入力書式IDは、照合に用いている入力書式のIDに従う。
なお、この例では括弧IDとしてアプリケーション識別子を用いているが、アプリケーション識別子については先頭に「AI」を付すようにすれば、同じ「括弧ID」の項目を、第1及び第2の例におけるような括弧IDとアプリケーション識別子とで共用することができる。アプリケーション識別子が「01」の場合には「AI01」と記載する等である。
【0106】
次に、ID=1の入力書式は、アプリケーション識別子が「01」のデータのみが含まれることを示す。
ID=2の入力書式は、アプリケーション識別子が「17」、「30」、「10」のデータがそれぞれこの順で並ぶことを示す。
【0107】
ところで、詳しくは出力書式の説明で述べるが、第3の例は、アプリケーション識別子が「01」、「17」、「30」及び「10」のデータを出力する例である。
そして、ID=0の入力書式は、これらの全てのデータが1つのコード記号に記載されていることを想定した書式である。ただし、制御回路122においてデコード可能な形式であれば、コード記号の形式は問わない。
図22Aに示すようなバーコードであっても、
図22Cに示すような2次元コードであっても、デコード結果の文字列さえ得られれば、同じように入力書式と照合することができる。
【0108】
また、ID=1及びID=2の入力書式は、出力すべきデータが
図22Bに示すように複数のコード記号に分散して記載されていることを想定した書式である。ID=1の入力書式は下側のコード記号と対応し、ID=2の書式は上側のコード記号と対応する。
この第3の例においても、制御回路122のCPUは、入力処理S
inにおいて、設定されている全ての入力書式について順次照合処理を行う。
従って、
図22Aあるいは
図22Cに示すコード記号を読み取った場合には、ID=0の入力書式を満たすと判断し、1度の読み取りで、必要な4つの項目の読取結果が揃うことになる。
【0109】
一方、
図22Bの下側に示すコード記号を読み取った場合には、ID=1の入力書式を満たすと判断し、アプリケーション識別子が「01」の項目の読取結果のみ登録する。しかし、その後
図22Bの上側に示すコード記号を読み取れば、ID=2の入力書式を満たすと判断し、残り3つの項目の読取結果を登録し、必要な4つの項目の読取結果が揃うことになる。もちろん、一度の読み取りで
図22Bに示す2つのコード記号の双方が読取領域に収まっていれば、デコード結果との照合は個別に行うものの、1フレームの画像データにより、必要な4つの項目の読取結果が揃う。
そして、読取結果を1つのコード記号から得たか、2つのコード記号から得たかによらず、同じ出力を行うことができる。
【0110】
ここで、
図25に、第3の例におけるデコード記号と入力書式との照合処理について説明する。
図25には、代表としてID=2の入力書式と対応する処理を示し、他の入力書式と対応する処理については図示及び詳細な説明を省略する。
なお、制御回路122のCPUは、
図25に示すアルゴリズムを生成する際には、
図23に示したテーブルも参照する。
【0111】
図25の処理において、制御回路122のCPUはまず、初めの2文字が「17」であるか否か判断する(S151)。これは、先頭にアプリケーション識別子が「17」のデータがあることを示す記載と対応する処理である。
そして、これがYesであれば、その「17」を、IDが[2,0,0]の項目の読取結果として読取結果テーブルに記録する(S152)。これは、アプリケーション識別子による取り出しと関係なく、デコード結果全体を登録するためのものである。
【0112】
その後、制御回路122のCPUは、デコード結果において初めの2文字の次に6文字の数字が続くか否か判断する(S153)。これは、
図23のテーブルに、アプリケーション識別子が「17」は、6桁の数字である旨が登録されていることと対応する処理である。
【0113】
そして、これがYesであれば、アプリケーション識別子が「17」のデータが正しく含まれていたことがわかるので、その6文字の数字を、IDが[2,AI17,0]の項目の読取結果として読取結果テーブルに記録する(S154)。また、IDが[2,0,0]の項目の読取結果としても記録する(S155)。なお、ステップS154で用いる2番目のID「AI17」は、アプリケーション識別子である17に、当該文字列がアプリケーション識別子であることを示す符号として「AI」を付したものである。このようにしておけば、括弧IDの項目に登録されているIDが、括弧IDそのものであるのかアプリケーション識別子であるのかを、容易に識別することができる。
【0114】
以下、同様に、アプリケーション識別子が「30」のデータに関する処理(S156〜S160)と、プリケーション識別子が「10」のデータに関する処理(S161〜S165)を実行する。なお、ステップS159では<FNC1>は記録しない。
そして、処理がステップS165まで終わると、デコード結果がID=2の入力書式を満たすと判断し、ここまでの処理で読取結果テーブルの各項目に記録した文字を読取結果として確定させ(S166)、処理を終了する。
【0115】
一方、ステップS151、S153、S156、S158、S161及びS163のいずれかでNoの場合、デコード結果がID=2の入力書式を満たさないことがわかる。そこで、
図8のステップS42の場合と同様に、ここまでの処理(
図25の処理)で読取結果テーブルの各項目に記録した文字をクリアして(S167)、処理を終了する。
【0116】
以上のような照合処理を、他の入力書式と対応するものも合わせて適用すると、
図22A又は
図22Cに示すコード記号を読み取った場合の読取結果テーブルへの登録結果は、
図26に示すようになる。また、
図22Bに示す2つのコード記号を読み取った場合の登録結果は、
図27に示すようになる。
これらの登録結果について、各アプリケーション識別子と対応する読取結果は、適用した入力書式に応じて入力書式IDが異なるが、他のIDについては共通である。また、
図27では、デコード結果全体の登録もコード記号毎に行われるが、この登録内容は出力データには含めないので、この点での差異に特に意味はない。
【0117】
次に、
図28に、第3の例においてデコード結果の出力に用いる出力書式を示す。
この出力書式についても、記載形式は基本的に
図12に示したものと同様である。ただし、出力データに含める読取結果の指定について、3つ組のIDのうち、アプリケーション識別子(括弧ID)を、[]の外に出して、「\A」とこれに続く数字で示している。後ろの[]の中には、入力書式IDと取出IDを記載している。従って、例えば\A01[0,0]は、[0,AI01,0]の指定と同じ意味である。また、「\Dx」は、直前にアプリケーション識別子を用いて指定した項目のデータを出力する、という意味である。また、出力書式の記載に、
図17の説明で上述したオアの記号も用いている。
【0118】
次に、
図29に、
図28に示した出力書式と対応する登録判定処理のフローチャートを示す。
図29の処理において、制御回路122のCPUは、まず\A01[0,0]又は\A01[1,0]の項目の読取結果が読取結果テーブルに登録されているか否か判断する(S171)。これらは、出力書式中の最初の括弧内にオアの記号を挟んで列挙された項目である。これらのいずれかが登録されていれば、最初の括弧内の出力データを生成することができるので、次に進む。
【0119】
次のステップでは、\A10[0,0]又は\A10[2,0]の項目の読取結果が読取結果テーブルに登録されているか否か判断する(S172)。これは、出力書式中の2番目の括弧内の記載と対応するものである。
これがYesであれば、同様に、3番目及び4番目の括弧内の記載と対応させて、\A17[0,0]又は\A17[2,0]、及び\A30[0,0]又は\A30[2,0]の項目の読取結果が読取結果テーブルに登録されているか否か判断する(S173,S174)。
【0120】
そして、いずれもYesであれば、必須項目のデータが全て読取結果テーブルに登録されていると判断し(S175)、処理を終了する。この場合、
図3のステップS19の判断はYesとなる。一方、1つでもNoであれば、必須項目のデータが揃っていないと判断し(S176)、処理を終了する。この場合、
図3のステップS19の判断はNoとなる。
なお、必須項目について、
図29の処理では、オアで結ばれた項目のいずれかについて読取結果が登録されていることが必須、と考える。あるいは、特定のアプリケーション識別子と対応する項目が必須、と考えることもできる。
【0121】
次に、
図30に、
図28に示した出力書式と対応する出力データ生成処理のフローチャートを示す。この処理は、出力データが空白の状態からスタートする。
図30の処理において、制御回路122のCPUはまず、出力書式の先頭にある「GTIN:」の文字列を、出力データに追加する(S201)。
【0122】
次に、\A01[0,0]の項目の読取結果が読取結果テーブルに登録されているか否か判断する(S202)。そして、登録されていれば、その\A01[0,0]の項目の読取結果の文字列を、出力データに追加する(S203)。登録されていなければ、\A01[1,0]の項目の読取結果の文字列を、出力データに追加する(S204)。これらは、出力書式中の最初の括弧内の記載と対応する処理である。オアで結ばれた複数の書式については、初めに記載されている書式に従って出力データを生成可能な場合にはそちらを採用し、そうでない場合に次の書式にトライする。
【0123】
次に、その後ろの特殊記号「\x0D」に対応して、改行コードを出力データに追加する(S205)。
その後も、出力書式に記載されている順に、「ロット番号:」の文字列(S206)を追加し、\A10[0,0]の項目の読取結果が登録されていればそれを、無ければ\A10[2,0]の項目の読み取り結果を追加する(S207〜S209)。さらに改行コードを追加する(S210)。
【0124】
これより後ろの処理については図示を省略したが、「有効期限:」の文字列、\A17[0,0]の項目の読取結果が登録されていればそれ、無ければ\A17[2,0]の項目の読み取り結果、改行コード、「個数:」の文字列、\A30[0,0]の項目の読取結果が登録されていればそれ、無ければ\A30[2,0]の項目の読み取り結果、改行コード、の順で出力データに追加して、処理を終了する。
【0125】
読取結果テーブルが
図26又は
図27に示す状態の場合、以上により生成される出力データは、
図31に示すものとなる。読取結果テーブルの状態がどちらであっても、生成される出力データは同じである。
すなわち、読取結果を1つのコード記号から得たか、2つのコード記号から得たかによらず、同じ出力を行うことができる。
【0126】
なお、この例で用いるアプリケーション識別子については、読み取り対象のコード記号を作成する側と、読み取りに用いる読取装置100を設定する側とで、
図23に示したテーブルの内容が共有できていれば、広く世間で通用する識別子でなくても構わない。すなわち、ユーザが作成したオリジナルの識別子を用いることも考えられる。
【0127】
〔第4の例:
図32乃至
図37〕
次に、読取結果の登録及び出力の第4の例について説明する。
この第4の例は、出力すべき情報を示すコード記号は第3の例の場合と同じであり、用いる入力書式が異なる例である。そこで、第3の例と共通する部分については、説明を省略するか簡単にする。
【0128】
図32に、第4の例においてデコード結果の照合及び読取結果の登録に用いる入力書式を示す。
この入力書式で用いている記号の意味は、基本的にここまでの例で説明してきたものと同じであるが、「\Ax」は、任意のアプリケーション識別子と対応するデータを示す。従って、この入力書式は、デコード結果には任意のアプリケーション識別子と対応するデータが1以上並び、その各データの後ろには、<FNC1>が1つまであってもよい、ということを示している。
【0129】
図33に、第4の例におけるデコード記号と入力書式との照合処理について説明する。この処理の開始時点では、処理位置はデコード結果の1文字目であるとする。
図33の処理において、制御回路122のCPUはまず、現在の処理位置を基準にアプリケーション識別子の文字数を判別し、その文字数分を変数AIへ代入する(S221)。アプリケーション識別子の文字数は、ここまでに例示している2文字とは限らないが、先頭から1文字ずつ読んで行けば、何文字のIDかを識別できるようになっている。その後、AIの値をIDが[0,0,0]の項目の読取結果として読取結果テーブルに記録する(S222)。これは、アプリケーション識別子による取り出しと関係なく、デコード結果全体を登録するものである。
【0130】
その後、制御回路122のCPUは、AIの次に、ステップS221で代入したAIが示す書式の文字列が続くか否か判断する(S223)。例えば、ステップS221で「01」を代入していれば、その後に、アプリケーション識別子が「01」のデータ、すなわち14桁の数字が続くか否か判断する。
【0131】
ここでYesであれば、該当の文字列を、[0,AI,0]の項目の読取結果として読取結果テーブルに記録する(S224)。なお、2番目のIDは、図では単に「AI」と表記したが、これがアプリケーション識別子であることを示すため、変数AIの値の先頭に文字列「AI」を付したものを用いる。このステップS224では、<FNC1>のような特殊文字は記録から除外するとよい。また、該当の文字列は、IDが[0,0,0]の項目の読取結果としても記録する(S225)。
【0132】
そして、処理位置を、該当文字列の末端の次の文字まで進める(S226)と共に、処理位置の文字がデータ終端であるか否か判断する(S227)。ここでNoであれば、ステップS221に戻って処理を繰り返すが、Yesであれば、デコード結果がID=0の入力書式を満たすと判断し、ここまでに各項目に記録した文字を読取結果として確定させ(S228)、処理を終了する。
【0133】
一方、ステップS223でNoの場合、デコード結果がID=0の入力書式を満たさないことがわかる。そこで、
図8のステップS42の場合と同様に、ここまでの処理(
図33の処理)で読取結果テーブルの各項目に記録した文字をクリアして(S229)、処理を終了する。
なお、ステップS223では、AIの値がアプリケーション識別子として適当な値でない場合もNoとする。
【0134】
以上の入力書式及び照合処理を用いても、
図22A及び
図22Cのように4項目のデータを含むコード記号を読み取った場合、
図26に示した登録結果が得られる。
また、
図22Bのように2つのコード記号に分けて記載されている場合、まず上側のコード記号を読み取ると、
図34に示した登録結果が得られる。その状態でさらに下側のコード記号を読み取ると、
図35に示した登録結果が得られる。この状態では、[0,0,0]の項目の登録内容は、2度目に読み取った下側のコード記号の情報が、
図34で登録されていた情報に上書きされている。また、下側のコード記号に記載されている、アプリケーション識別子が「01」の情報が、
図34の状態から追加登録されている。
【0135】
結果的に、
図22Bの2つのコード記号を読み取った場合も、アプリケーション識別子と対応する読取結果としては、
図26に示したものと同じ文字列が登録される。項目を示すIDも、
図26に示したものと全く同じである。
このため、第4の例においては、出力書式は
図36のように記載することができる。すなわち、
図22A又は
図22Cのコード記号を読み取った場合も、
図22Bのコード記号を読み取った場合も、どちらも同じ入力書式に基づき読取結果を取り出すため、出力内容を記述する際に、第3の例の場合のようなオアを用いた記述が不要である。
【0136】
詳細な処理の説明は省略するが、読取結果テーブルの内容が
図26又は
図35に示す状態のとき、
図36の出力書式に基づき出力データを生成すると、
図31に示したものと同じ出力データが完成する。
【0137】
このように、入力書式や出力書式の記載内容を工夫することにより、同じコード記号から、より短い書式で同じ出力データを得られるようにすることができる。
なお、
図36の例では、アプリケーション識別子が「01」、「10」、「17」及び「30」の項目を、全て出力に必須の項目としている。しかし、例えば「30」の項目が必須でない場合、
図37に示すように、オア記号を用いてこれを表現することができる。
【0138】
図37に示す出力書式中の最後の括弧において、「??」は、単にクエスチョンマークを2つ出力することを示す。従って、
図37に示す出力書式を用いた場合、アプリケーション識別子が「30」の項目の読取結果がなければ代わりに「??」を入れた出力データを生成することになり、この項目が必須でないことを表現することができる。
【0139】
以上で実施形態の説明を終了するが、装置の構成、具体的な処理内容、データの形式、記載方法等が上述の実施形態で説明したものに限られないことはもちろんである。
例えば、上述した実施形態では、読取結果テーブルにおいて項目を特定するためのIDとして、3つのIDの組み合わせを用いたが、項目と直接対応する専用のIDを用いるようにしてもよい。
【0140】
また、上述した実施形態では、読取装置を、コード記号を読み取る装置として構成したが、OCR(Optical Character Recognition)によって文字を読み取る装置として構成してもよい。
また、出力データ(読取結果)の出力先は、別筐体の装置であることは必須ではない。例えば、読取装置を、光学ヘッド部とデータ処理用の小型チップとを備えた読取モジュールとして構成し、携帯型コンピュータや携帯電話装置等の基板上に搭載して、その携帯型コンピュータや携帯電話装置等の主制御部に対して出力データを出力するようにすることも考えられる。この場合、主制御部が出力先装置であると考えることができる。
【0141】
また、入力書式や出力書式の記載規則も、上述した実施形態のものに限られることはない。
また、この発明は、読取領域内の情報を読み取る装置であれば、携帯型、据え置き型、何らかの装置に内蔵されるもの、等を問わず、任意の装置に適用可能である。
【0142】
また、この発明のプログラムは、コンピュータに読取装置を制御させて、上述の実施形態において説明した機能を実現させるためのプログラムとして構成することができる。このようなプログラムは、予めコンピュータのメモリに記憶させておく他、記録媒体であるCD−ROMあるいはフレキシブルディスク,SRAM,EEPROM,メモリカード等の不揮発性記録媒体(メモリ)に記録したり、ネットワークを介してダウンロードできるようにしたりして提供することもできる。そして、そのプログラムをインストールしてCPUに実行させるか、CPUにメモリあるいはダウンロードサーバからこのプログラムを取得させて実行させることにより、上述した各機能を実現させることができる。
また、以上述べてきた構成及び変形例は、矛盾しない範囲で適宜組み合わせて適用することも可能である。