以下に本発明の実施形態について図面を参照しながら詳細に説明する。図1は、本発明の実施形態のPOS端末の概要を説明する図である。POS端末21は、キャッシャユニット30と、チェッカユニット40を有する。
キャッシャユニット30は、主として販売代金の受領作業を行うためのユニットである。キャッシャユニット30は、制御ユニット31a、自動釣銭機32、キャッシュドロア33、自動釣札機34、キーボード35、タッチパネル36、ディスプレイ37、RFIDスキャナ38、プリンタ39を有する。
制御ユニット31aは、キャッシャユニット30を制御するとともに、POS端末21を統括的に制御するコンピュータである。自動釣銭機32は、顧客から受け取った硬貨の入金と、釣銭の出金とを行う。自動釣札機34は、顧客から受け取った紙幣の入金と、釣札の出金とを行う。キャッシュドロア33は、硬貨および紙幣を収納する収納庫である。ディスプレイ37は、取引作業を行うための所定のGUI(Graphical User Interface)を表示する。ディスプレイ37は、例えば、液晶ディスプレイである。ディスプレイ37は、タッチパネル36の下層に位置している。ディスプレイ37の表示する画像は、タッチパネル36を透過して、オペレータから視認可能である。オペレータは、ディスプレイ37によって表示された画像を見ながら、タッチパネル36に対するタッチ操作を行うことができる。キーボード35は、ディスプレイ37に表示されたGUIを操作するための入力装置である。RFIDスキャナ38は、商品に付されたRFタグから無線通信によってRFタグ内のバーコードデータを含む情報を読み取る装置である。RFIDスキャナ38は、RFタグに情報を記録可能なRFIDタグリーダライタ装置であってもよい。RFタグはRFタグ情報を記憶するRFIDタグ(ICタグ、RFタグともいう。)であり、バーコードデータを含む情報が記憶されている。RFタグ情報はRFタグに記録された情報である。RFIDスキャナ38は据え置きタイプであってもいし、ハンディタイプであってもよい。RFIDスキャナ38は、読み取ったバーコードデータを制御ユニット31aへ通知する。
チェッカユニット40は、主として商品コードの入力作業を行うためのユニットである。チェッカユニット40は、タッチパネル41、スピーカ42、レーン台43、支柱44、固定スキャナ45、多項目キーボード46、ディスプレイ47、タッチスキャナ48を有する。
レーン台43は、支柱44を支持する。また、レーン台43には、客が持参した買い物かごや、買い物かごに投入された商品が載置される。支柱44は、タッチパネル41、スピーカ42、固定スキャナ45、多項目キーボード46、ディスプレイ47、タッチスキャナ48を支持する。固定スキャナ45は、商品に付与されたバーコードを読み取るための据え置きタイプの装置である。オペレータは、商品に付されたバーコードを固定スキャナ45に向けてかざすことで、固定スキャナ45を入力装置とした商品コードの入力を行う。固定スキャナ45は、読み取ったバーコードデータを後述の制御ユニット31bへ通知する。タッチスキャナ48は、商品に付与されたバーコードを読み取るためのハンディタイプの装置である。オペレータは、タッチスキャナ48を商品に付されたバーコードに向けてかざすことで、タッチスキャナ48を入力装置とした商品コードの入力を行う。タッチスキャナ48は、読み取ったバーコードデータを後述の制御ユニット31bへ通知する。
上述したように、POS端末21は、3つのスキャナ(RFIDスキャナ38、固定スキャナ45、タッチスキャナ48)を有している。但し、RFIDスキャナ38、固定スキャナ45およびタッチスキャナ48は、入力装置の一例であり、バーコードを読取可能な他の端末であってもよい。商品コードの入力結果は、ディスプレイ47に表示されて、オペレータが商品コードの入力結果を確認することができる。また、タッチパネル41は、バーコードやRFタグの付されていない商品(例えば、ばら売りの野菜や魚等の生鮮食料品や、惣菜等)をディスプレイ47に表示される商品群から選択する入力装置である。スピーカ42は、音声で入力結果を報知する。多項目キーボード46は、オペレータによる各種入力操作を受け付ける。
次に、POS端末21のうちキャッシャユニット30のハードウェア構成について説明する。図2は、本発明の実施形態のキャッシャユニット30のハードウェア構成の一例を示す図である。
キャッシャユニット30は、制御ユニット31aに各種入出力装置を接続する。制御ユニット31aは、CPU131aによって装置全体が制御されている。CPU131aには、バス137aを介してRAM(Random Access Memory)132aと、HDD(Hard Disk Drive:ハードディスクドライブ)133a、通信インタフェース134a、グラフィック処理装置135a、入出力インタフェース136aが接続されている。
RAM132aには、CPU131aに実行させるOS(Operating System)のプログラム、POS業務を実行するためのアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM132aにはCPU131aによる処理に必要な各種データが格納される。HDD133aにはOS、アプリケーションプログラムが格納される。
グラフィック処理装置135aには、ディスプレイ37が接続されている。グラフィック処理装置135aはCPU131aからの命令に応じて、画像をディスプレイ37の画面に表示させる。
入出力インタフェース136aには、自動釣銭機32、キャッシュドロア33、自動釣札機34、キーボード35、タッチパネル36、RFIDスキャナ38、プリンタ39が接続されている。また、入出力インタフェース136aは、可搬型記録媒体138aへの情報の書込み、並びに、可搬型記録媒体138aからの情報の読出しが可能な可搬型記録媒体インタフェース(不図示)と接続可能になっている。入出力インタフェース136aは、キーボード35と、自動釣銭機32、キャッシュドロア33、自動釣札機34、タッチパネル36、RFIDスキャナ38、プリンタ39、可搬型記録媒体インタフェースからそれぞれ送られてくる信号をバス137aを介してCPU131aに送信する。
通信インタフェース134aは、例えば、RS−232C(Recommended Standard 232 version C)、USB(Universal Serial Bus)接続の接続形式でチェッカユニット40に接続されている。通信インタフェース134aは、チェッカユニット40との間でデータの送受信を行う。
次に、POS端末21のうちチェッカユニット40のハードウェア構成について説明する。図3は、本発明の実施形態のチェッカユニット40のハードウェア構成の一例を示す図である。
チェッカユニット40は、制御ユニット31bを備え、制御ユニット31bによって各種入出力装置を統括的に制御している。制御ユニット31bは、CPU131bによって装置全体が制御されている。CPU131bには、バス137bを介してRAM132bと、HDD133b、通信インタフェース134b、グラフィック処理装置135b、入出力インタフェース136bが接続されている。なお、RAM132bと、HDD133b、通信インタフェース134b、グラフィック処理装置135b、入出力インタフェース136bは、キャッシャユニット30が備えるRAM132aと、HDD133a、通信インタフェース134a、グラフィック処理装置135a、入出力インタフェース136aと同様の構成であるために、これらの詳細な説明については省略する。
但し、入出力インタフェース136bには、タッチパネル41、スピーカ42、固定スキャナ45、多項目キーボード46、タッチスキャナ48が接続されている。
固定スキャナ45およびタッチスキャナ48は、例えば、撮像素子(CCD(Charge Coupled Device)イメージセンサ、CMOS(Complementary Metal Oxide Semiconductor)イメージセンサ等)を備え、撮像素子が出力する画像情報から各種情報を取得する。また、入出力インタフェース136bは、可搬型記録媒体138bへの情報の書込み、および可搬型記録媒体138bからの情報の読出しが可能な可搬型記録媒体インタフェース(不図示)と接続可能になっている。入出力インタフェース136bは、固定スキャナ45、タッチスキャナ48、スピーカ42、多項目キーボード46、タッチパネル41、並びに、可搬型記録媒体インタフェースから送られてくる信号を、バス137bを介してCPU131bに送信する。
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。
また、キャッシャユニット30およびチェッカユニット40は、それぞれFPGA(Field Programmable Gate Array)やDSP(Digital Signal Processer)等からなるモジュールを含んで構成することもでき、CPU131a,131bを有しない構成とすることもできる。その場合、制御ユニット31a、31bは、それぞれ不揮発性メモリ(例えば、EEPROM(Electrically Erasable and Programmable Read Only Memory)、フラッシュメモリ、フラッシュメモリ型メモリカード等)を備え、モジュールのファームウェアを記憶する。不揮発性メモリは、可搬型記録媒体138a、138bあるいは通信インタフェース134a、134bを介してファームウェアを書き込むことができる。このように制御ユニット31a、31bは、不揮発性メモリに記憶されているファームウェアを書き換えることにより、ファームウェアの更新をすることもできる。
なお、キャッシャユニット30のCPU131aと、チェッカユニット40のCPU131bと、はそれぞれ分かれて構成されているが、本実施形態においては、どちらのCPUで制御しても構わない。従って、以後、特に区別して説明する必要がない場合には、CPU131aおよびCPU131bを合わせて「CPU131」と称する。
同様に、キャッシャユニット30のRAM132aと、チェッカユニット40のRAM132bと、はそれぞれ分かれて構成されているが、本実施形態においては、どちらのRAMに情報が格納されていても構わない。従って、以後、特に区別して説明する必要がない場合には、RAM132aおよびRAM132bを合わせて「RAM132」と称する。
同様に、キャッシャユニット30のHDD133aと、チェッカユニット40のHDD133bと、はそれぞれ分かれて構成されているが、本実施形態においては、どちらのHDDに情報が格納されていても構わない。従って、以後、特に区別して説明する必要がない場合には、HDD133aおよびHDD133bを合わせて「HDD133」と称する。
次に、POS端末21のソフトウェア構成について、説明する。図4は、本発明の実施形態のPOS端末21のソフトウェア構成の一例を示す図である。
POS端末21が実行するプログラムには、アプリケーション200と、複数バーコードスキャナ制御プログラム(複数スキャナ制御プログラム)300と、スキャナ制御プログラム400と、がある。アプリケーション200、複数バーコードスキャナ制御プログラム300、スキャナ制御プログラム400の処理は、何れもCPU131により実行される。アプリケーション200と、複数バーコードスキャナ制御プログラム300と、スキャナ制御プログラム400と、を含む複数のプログラムが協働することによりPOS端末21に接続されるスキャナに各種の処理を実行させる。本実施形態においては、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38を含む複数のスキャナがPOS端末21へ接続される。
スキャナ制御プログラム400は、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38を含む複数のスキャナから受信したバーコードデータ(識別情報)を受信した旨の受信通知や、バーコードデータの通知を複数バーコードスキャナ制御プログラム300へ通知する。
スキャナ制御プログラム400は、既存の規格により構成され、各スキャナに対応した制御プログラムを有している。例えば、スキャナ制御プログラム400は、固定スキャナ制御プログラム401、タッチスキャナ制御プログラム402、RFIDスキャナ制御プログラム403、を有している。固定スキャナ制御プログラム401は、固定スキャナ45の制御を行い、固定スキャナ45によるバーコードデータの取得、バーコードデータを受信した旨の受信通知、バーコードデータの通知等の制御を行う。タッチスキャナ制御プログラム402は、タッチスキャナ48の制御を行い、タッチスキャナ48によるバーコードデータの取得、バーコードデータを受信した旨の受信通知、バーコードデータの通知等の制御を行う。RFIDスキャナ制御プログラム403は、RFIDスキャナ38の制御を行い、RFIDスキャナ38によるバーコードデータの取得、バーコードデータを受信した旨の受信通知、バーコードデータの通知等の制御を行う。
複数バーコードスキャナ制御プログラム300は、スキャナ制御プログラム400がアプリケーション200へ提供するインタフェースと同様のインタフェースをアプリケーション200へ提供し、スキャナ制御プログラム400を介して各スキャナから通知された受信通知やバーコードデータの通知を、アプリケーション200へ通知する。具体的には、スキャナ制御プログラム400を介して複数のスキャナから通知された受信通知やバーコードデータの通知を、1つのスキャナから通知された情報として、各スキャナから通知された順にアプリケーション200へ通知する。
アプリケーション200は、POS端末21で実行するプログラムであり、スキャナ制御プログラム400により制御された複数のスキャナからの情報を、複数バーコードスキャナ制御プログラム300を介することで、1つのスキャナから依頼された処理として扱える。
アプリケーション200は、スキャナに対する処理を実行するための要求を複数バーコードスキャナ制御プログラム300に依頼する。アプリケーション200は、複数バーコードスキャナ制御プログラム300からの要求に対応する応答を通知する。
従って、複数バーコードスキャナ制御プログラム300を実行することにより、アプリケーション200は、擬似的に1つのスキャナとして処理を行うことができ、アプリケーション200、またはスキャナのハードウェアの改修を行わずに、複数のスキャナを制御することができる。
次に、複数バーコードスキャナ制御プログラム300のソフトウェア構成について説明する。図5は、複数バーコードスキャナ制御プログラム300のソフトウェア構成の一例を示す図である。
複数バーコードスキャナ制御プログラム300は、POS端末21に接続された固定スキャナ45、タッチスキャナ48、RFIDスキャナ38を含む複数のスキャナを制御する。具体的には、複数バーコードスキャナ制御プログラム300は、主制御部301と、受信処理中情報処理部302と、識別情報通知処理部303と、データ受信通知情報格納処理部304と、スキャナ状態監視部305と、動作情報処理部306と、を少なくとも有する。
RAM132は、受信処理中情報格納領域601と、データ受信通知情報格納領域602と、動作情報格納領域603と、を含む領域が設定されている。
受信処理中情報格納領域601には、データ受信処理中フラグ(ON/OFF)情報として、そのスキャナのスキャナ名称の文字列が格納されている。スキャナ名称が格納されている場合がデータ受信処理中フラグONを示す。
データ受信通知情報格納領域602には、アプリケーション200がバーコードデータの取得要求を行った場合に取得対象となるスキャナの情報として、そのスキャナのスキャナ名称の文字列が格納されている。
動作情報格納領域603には、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38を含む複数のスキャナの動作情報が格納されている。動作情報格納領域603の構成について説明する。図6は、RAM132に格納されている動作情報格納領域603の構成の一例を示す図である。
動作情報には、各スキャナの属性の情報、スキャナ名称の情報、OPEN状態の情報、接続状態の情報、排他制御待ちの情報が含まれる。
属性の情報とは、複数バーコードスキャナ制御プログラム300がアプリケーション200へ接続を通知するか否かを判断するための情報であり、必須の属性と、オプションの属性と、を有する。複数バーコードスキャナ制御プログラム300は、属性が必須のスキャナの全てが接続(オンライン)されている場合にPOS端末21のスキャナは接続状態であると判別する。これに対し、属性が必須のスキャナの1つでも未接続(オフライン)である場合には、POS端末21のスキャナは未接続状態であると判別する。なお、オプションの属性のスキャナが接続(オンライン)であっても、属性が必須のスキャナのうち1つでも未接続(オフライン)である場合には、複数バーコードスキャナ制御プログラム300は、未接続状態であると判別する。即ち、属性が必須に設定されたスキャナのすべてが接続されているか否かに応じて、複数バーコードスキャナ制御プログラム300は、スキャナの接続状態を判別する。複数のスキャナのうち、何れか1つ以上スキャナに対し必須の属性が設定される。以下、属性が必須に設定されているスキャナを「必須スキャナ」と称する。
スキャナ名称の情報には、該当のスキャナを示す固有の文字列が格納される。例えば、スキャナの名称の情報として、固定スキャナ、RFIDスキャナ、タッチスキャナ、を含むスキャナの名称が含まれる。
OPEN状態の情報には、各スキャナ名称のスキャナが未OPEN(CLOSE)の状態なのかOPEN済の状態なのかを示す情報が格納されている。後述のスキャナOPEN依頼があったスキャナのOPEN状態は、OPEN済となり、後述のスキャナCLOSE依頼があったスキャナのOPEN状態は、未OPEN(CLOSE)となる。
接続状態の情報には、各スキャナがオンラインなのかオフラインなのかを示す情報が格納される。対象のスキャナがPOS端末21に接続されている場合には、スキャナの接続情報はオンラインに設定される。これに対し、対象のスキャナがPOS端末21に接続されていない場合には、スキャナの接続情報はオフラインに設定される。
排他制御待ちの情報には、0(無)か、1以上(有)の値が含まれる。スキャナ名称が受信処理中情報格納領域601に格納されていないスキャナは、排他制御待ちの値が0に設定される。これに対し、スキャナ名称が受信処理中情報格納領域601に格納されているスキャナは、排他制御待ちの値が1以上に設定される。既に値が1の状態でさらに排他制御を待つ場合は2となり順次増加する。排他待ちが解除された際、数値の小さいスキャナの処理が実行される。
図5の説明に戻り、主制御部301は、複数バーコードスキャナ制御プログラム300を制御する。
受信処理中情報処理部302は、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38のうちいずれかのスキャナから、バーコードデータの受信通知を受けると、受信処理中情報格納領域601の内容を確認する。データ受信処理中フラグOFFの状態の場合、バーコードデータを取得したスキャナの情報を受信処理中情報格納領域601(第1の格納領域)に格納し、データ受信処理中フラグONの状態に遷移させる。
本実施形態においては、受信通知をしたスキャナのスキャナ名称をスキャナの情報として受信処理中情報格納領域601に格納し、後述するデータ受信通知情報格納処理部304を呼び出す。また、受信処理中情報処理部302は、アプリケーション200から、バーコードデータを受信したことの通知を受けると、受信処理中情報格納領域601に格納されているスキャナの情報をクリアする。
また、受信処理中情報処理部302は、バーコードデータの受信通知を受けると、受信通知をアプリケーション200へ通知する。但し、受信処理中情報格納領域601にスキャナの情報(スキャナ名称)が格納されている場合には、受信処理中情報処理部302は、受信処理中情報格納領域601に格納されている情報がクリアされるまで、受信処理中情報格納領域601に格納されているスキャナの情報以外のスキャナの受信通知をアプリケーション200へ通知しない。例えば、受信処理中情報格納領域601に、「固定スキャナ」のスキャナ名称が格納されている場合に、この「固定スキャナ」以外のスキャナである「RFIDスキャナ」から受信通知が来た場合であっても、受信処理中情報処理部302は、RFIDスキャナ38からの受信通知をアプリケーション200へ通知しない。
データ受信通知情報格納処理部304は、スキャナの情報としてスキャナ名称をデータ受信通知情報格納領域602(第2の格納領域)に格納する。そして、識別情報通知処理部303は、アプリケーション200から、受信通知に対応するバーコードデータの取得依頼を受けると、データ受信通知情報格納領域602に格納されたスキャナ名称のスキャナからバーコードデータを取得し、取得したバーコードデータをアプリケーション200へ通知する。
スキャナ状態監視部305は、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38を含む複数のスキャナのうち、必須の属性を有する必須スキャナの接続状態の通知を受けると、必須の属性を有する必須スキャナの接続状態をアプリケーション200へ通知する。一方で、スキャナ状態監視部305は、必須以外の属性(例えば、オプションの属性)を有するスキャナの接続状態の通知を受けた場合は、必須以外の属性を有するスキャナの接続状態をアプリケーション200へ通知しない。具体的には、スキャナ状態監視部305は、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38を含む複数のスキャナのうち、スキャナの接続状態の通知を受けると、スキャナの接続状態の情報を動作情報格納領域603に格納し、必須の属性を有するスキャナからの情報のみをアプリケーション200へ通知する。
動作情報処理部306は、受信処理中情報格納領域601にスキャナ名称が格納されている場合に、受信処理中情報格納領域601に格納されているスキャナ名称以外の別のスキャナの受信通知があった場合には、当該別のスキャナの排他制御待ちの情報として動作情報格納領域603(第3の格納領域)に所定値を設定する。一方で、受信処理中情報格納領域601にスキャナ名称が格納されていない場合には、動作情報処理部306は、当該別のスキャナの排他制御待ちの情報として動作情報格納領域603に0を設定する。
受信処理中情報処理部302は、動作情報格納領域603に格納されているスキャナ情報のうち、排他制御待ちの値が最小であるスキャナ情報を、受信処理中情報格納領域601に格納する。
次に、アプリケーション200、複数バーコードスキャナ制御プログラム300、スキャナ制御プログラム400の処理の流れについて説明する。本実施形態においては、固定スキャナ45、タッチスキャナ48、RFIDスキャナ38のうち、固定スキャナ45と、RFIDスキャナ38を対象とするスキャナ(以下、「対象スキャナ」とも称する)に設定する。そして、固定スキャナ45の属性は必須に設定されている。一方でRFIDスキャナ38の属性はオプションに設定されている。
複数のスキャナをOPENする処理の流れについて説明する。図7は、アプリケーション200からのスキャナOPEN依頼時に対象となる複数のスキャナをOPENする処理の流れの一例を示す図である。
はじめに、アプリケーション200は、複数バーコードスキャナ制御プログラム300に対し、スキャナOPEN依頼を行う(ステップS11)。複数バーコードスキャナ制御プログラム300は、固定スキャナ制御プログラム401に対し、必須の属性が設定されている固定スキャナ45のスキャナOPEN依頼を行う(ステップS12)。固定スキャナ制御プログラム401は、固定スキャナOPEN処理を行う(ステップS13)。固定スキャナ制御プログラム401は、複数バーコードスキャナ制御プログラム300に対し、OPEN処理結果の通知を行う(ステップS14)。
複数バーコードスキャナ制御プログラム300は、OPEN処理結果の判定を行う(ステップS15)。複数バーコードスキャナ制御プログラム300は、結果判定がNGである場合には、アプリケーション200は、異常復帰する(ステップS16)。
これに対し、結果判定がOKである場合には、複数バーコードスキャナ制御プログラム300は、RFIDスキャナ制御プログラム403に対し、オプションの属性が設定されているRFIDスキャナ38のスキャナOPEN依頼を行う(ステップS17)。
RFIDスキャナ制御プログラム403は、RFIDスキャナOPEN処理を行う(ステップS18)。RFIDスキャナ制御プログラム403は、複数バーコードスキャナ制御プログラム300に対し、OPEN処理結果の通知を行う(ステップS19)。複数バーコードスキャナ制御プログラム300は、RFIDスキャナ制御プログラム403から通知されたOPEN処理結果に関わらず、アプリケーション200に対し、正常を通知する(ステップS20)。アプリケーション200は、正常復帰する(ステップS21)。
次に、複数のスキャナをCLOSEする処理の流れについて説明する。
図8は、アプリケーション200からのスキャナCLOSE依頼時に対象となる複数のスキャナをCLOSEする処理の流れの一例を示す図である。
はじめに、アプリケーション200は、複数バーコードスキャナ制御プログラム300に対し、スキャナCLOSE依頼を行う(ステップS31)。複数バーコードスキャナ制御プログラム300は、スキャナ制御プログラム400に対し、必須の属性が設定されている固定スキャナ45のスキャナCLOSE依頼を行う(ステップS32)。
固定スキャナ制御プログラム401は、固定スキャナCLOSE処理を行う(ステップS33)。固定スキャナ制御プログラム401は、複数バーコードスキャナ制御プログラム300に対し、CLOSE処理結果の通知を行う(ステップS34)。
複数バーコードスキャナ制御プログラム300は、CLOSE処理結果をRAM132に保存する(ステップS35)。複数バーコードスキャナ制御プログラム300は、RFIDスキャナ制御プログラム403に対し、オプションの属性が設定されているRFIDスキャナ38のスキャナCLOSE依頼を行う(ステップS36)。
RFIDスキャナ制御プログラム403は、RFIDスキャナCLOSE処理を行う(ステップS37)。RFIDスキャナ制御プログラム403は、複数バーコードスキャナ制御プログラム300に対し、CLOSE処理結果の通知を行う(ステップS38)。複数バーコードスキャナ制御プログラム300は、保存した結果にて復帰する(ステップS39)。そして、アプリケーション200は、正常復帰または異常復帰する(ステップS40)。
次に、各スキャナの状態をアプリケーション200へ通知する処理の流れについて説明する。図9は、各スキャナの状態をアプリケーション200へ通知する処理の流れの一例を示す図である。
はじめに、必須スキャナである固定スキャナ45がPOS端末21に接続された場合について説明する。スキャナ制御プログラム400の固定スキャナ制御プログラム401は、固定スキャナ45が入出力インタフェース136bに接続されると、固定スキャナ45がPOS端末21に接続されていることを認識する(ステップS51)。固定スキャナ制御プログラム401は、複数バーコードスキャナ制御プログラム300に固定スキャナ45の接続の状態を通知する(ステップS52)。複数バーコードスキャナ制御プログラム300は、必須スキャナからの通知であるか否かを判定する(ステップS53)。固定スキャナ45は必須スキャナである(ステップS53のYES)ので、複数バーコードスキャナ制御プログラム300は、アプリケーション200にスキャナの接続の状態を通知する(ステップS54)。必須スキャナでない場合は、ステップS63で後述する。アプリケーション200は、複数バーコードスキャナ制御プログラム300からスキャナの接続の状態の通知を受けると、通知されたスキャナの状態を取得してRAM132に保存する割り込み処理を行う(ステップS55)。その後、アプリケーション200は、スキャナ状態を保存したことを複数バーコードスキャナ制御プログラム300へ通知する。通知を受けた複数バーコードスキャナ制御プログラム300は、状態通知の復帰を行う(ステップS56)。固定スキャナ制御プログラム401は、状態通知が復帰したことを認識し、この処理は終了となる(ステップS57)。
これに対し、必須スキャナではないRFIDスキャナ38がPOS端末21に接続された場合について説明する。RFIDスキャナ制御プログラム403は、RFIDスキャナ38が入出力インタフェース136aに接続されると、RFIDスキャナ38がPOS端末21に接続されていることを認識する(ステップS61)。RFIDスキャナ制御プログラム403は、複数バーコードスキャナ制御プログラム300にRFIDスキャナ38の接続の状態を通知する(ステップS62)。複数バーコードスキャナ制御プログラム300は、必須スキャナからの通知であるか否かを判定する(ステップS63)。RFIDスキャナ38は必須スキャナではなくオプションの属性のスキャナである(ステップS63のNO)ので、複数バーコードスキャナ制御プログラム300は、アプリケーション200に接続状態の通知を行わずに、状態通知の復帰を行う。RFIDスキャナ制御プログラム403は、状態通知が復帰したことを認識し、この処理は終了となる(ステップS64)。
次に、各スキャナから読み取ったバーコードデータをアプリケーション200へ通知する処理の流れについて説明する。
図10は、各スキャナから読み取ったバーコードデータをアプリケーション200へ通知する処理の流れの一例を示す図である。
はじめに、固定スキャナ制御プログラム401は、固定スキャナ45がバーコードデータを読取ると、データ受信イベントが発生する(ステップS71)。固定スキャナ制御プログラム401は、読み取ったバーコードデータを取得する(ステップS72)。固定スキャナ制御プログラム401は、データを受信したことを複数バーコードスキャナ制御プログラム300へ通知する(ステップS73)。
複数バーコードスキャナ制御プログラム300は、固定スキャナ制御プログラム401からデータ受信通知を受けると、データ受信処理中フラグがONであるか否かを判定する(ステップS74)。データ受信処理中フラグとは、CPU131がデータを受信処理中であることを示す情報である。具体的には、RAM132の受信処理中情報格納領域601にスキャナ名称が格納されている場合をデータ受信処理中フラグONと定義し、受信処理中情報格納領域601にスキャナ名称が格納されていない場合を、データ受信処理中フラグOFFと定義する。データ受信処理中フラグONである場合には、複数バーコードスキャナ制御プログラム300は、受信処理中フラグがOFFになるのを待つ。
これに対し、データ受信処理中フラグOFFである場合(ステップS74のNO)には、複数バーコードスキャナ制御プログラム300は、データ受信処理中フラグONにする(ステップS75)ため、RAM132の受信処理中情報格納領域601にスキャナ名称として「固定スキャナ」を格納する。複数バーコードスキャナ制御プログラム300は、データ受信処理中フラグONにした後、該当スキャナのスキャナ名称をRAM132のデータ受信通知情報格納領域602に格納する。そして、複数バーコードスキャナ制御プログラム300は、データを受信したことをアプリケーション200へ通知する(ステップS76)。
アプリケーション200は、複数バーコードスキャナ制御プログラム300からバーコードデータを受信すると、割り込み処理を開始する。そして、アプリケーション200は、複数バーコードスキャナ制御プログラム300にバーコードデータ取得依頼を行う(ステップS77)。アプリケーション200からバーコード取得依頼を受け付けると、複数バーコードスキャナ制御プログラム300は、スキャナ制御プログラム400に含まれる複数のスキャナ制御プログラムのうち、バーコードデータの受信通知を受けたスキャナ制御プログラムに対し、バーコードデータの取得依頼を行う(ステップS78)。この処理では、複数バーコードスキャナ制御プログラム300は、データ受信通知情報格納領域602に格納されているスキャナ名称のスキャナに対し、バーコードデータの取得依頼を行う。本例では、データ受信通知情報格納領域602には「固定スキャナ」の文字列が格納されているため、複数バーコードスキャナ制御プログラム300は、固定スキャナ45を制御する固定スキャナ制御プログラム401に対し、バーコードデータの取得依頼を行う。固定スキャナ制御プログラム401は、バーコードデータ取得依頼を受けると、複数バーコードスキャナ制御プログラム300へバーコードデータを通知する(ステップS79)。
複数バーコードスキャナ制御プログラム300は、バーコードデータの通知を受けると、アプリケーション200へバーコードデータを通知する(ステップS80)。アプリケーション200は、バーコードの通知を受けると、バーコードデータをRAM132へ保存する(ステップS81)。そして、アプリケーション200は、複数バーコードスキャナ制御プログラム300へデータ受信通知復帰を行う。この処理が終了すると、アプリケーション200の割り込み処理が終了する。複数バーコードスキャナ制御プログラム300は、アプリケーション200からデータ受信通知復帰を受けると、データ受信処理中フラグをOFFにし(ステップS82)、データ受信通知処理を復帰する。具体的には、複数バーコードスキャナ制御プログラム300は、後述の受信処理中情報にスキャナ名称として格納されていた固定スキャナ45の文字列をクリアする。そして、複数バーコードスキャナ制御プログラム300は、データ受信通知処理を復帰したことを固定スキャナ制御プログラム401へ通知する。固定スキャナ制御プログラム401は、データ受信通知処理が復帰した通知を受けると、データ受信通知を復帰し(ステップS83)、ステップS73のデータ受信通知を再開する。
なお、上述の実施形態では、固定スキャナ制御プログラム401により、固定スキャナ45が読み取ったバーコードデータをアプリケーション200に通知する例について説明したが、RFIDスキャナ38が読み取ったバーコードデータおよびタッチスキャナ48が読み取ったバーコードデータをアプリケーション200へ通知する例についても同様の処理で行われるため、説明を省略する。
次に、複数バーコードスキャナ制御プログラム300の詳細フローチャートについて説明する。図11A〜11Eは、複数バーコードスキャナ制御プログラム300の詳細フローチャートの一例を示す図である。
はじめに、主制御部301は、特定のファイルより動作情報を取得する(ステップS101)。特定のファイルは、例えばHDD133に記憶されている初期情報が記載されたファイルである。主制御部301は、取得した動作情報をRAM132に格納する(ステップS102)。主制御部301は、処理依頼待ちを行う(ステップS103)。主制御部301は、依頼処理判定を行う(ステップS104)。依頼処理判定の結果、アプリケーション200からスキャナOPEN依頼を受けた場合には、主制御部301は、RAM132の動作情報格納領域603に格納されている動作情報より必須の属性が設定された最初の対象スキャナ名称を取得する(ステップS105)。主制御部301は、ステップS105で取得した対象スキャナの属性に必須の設定が有るか否かを判定する(ステップS106)。対象スキャナの属性に必須の設定がない場合(ステップS106のNO)には、主制御部301は、復帰値に異常を格納し復帰する(ステップS107)。即ち、必須の属性が設定されているスキャナは1つ以上存在する必要があるため、必須の属性が設定されているスキャナがない場合には、主制御部301は異常と判断して処理を復帰する。この処理が終了すると、処理はステップS103へ戻る。
これに対し、対象スキャナの属性に必須の設定がある場合(ステップS106のYES)には、スキャナ名称をRAM132のデータ受信通知情報格納領域602に格納する(ステップS108)。主制御部301は、ステップS105で取得したスキャナ名称のスキャナにスキャナOPENを依頼する(ステップS109)。主制御部301は、対象のスキャナで行われたスキャナOPEN処理結果の判定を行う(ステップS110)。スキャナOPEN処理の結果判定がNGである場合(ステップS110のNG)には、主制御部301は、OPEN済の全てのスキャナに対してスキャナCLOSEを依頼する(ステップS111)。主制御部301は、RAM132の受信処理中情報格納領域601、データ受信通知情報格納領域602、動作情報格納領域603、に格納されている情報をクリアする(ステップS112)。主制御部301は、復帰値に異常を格納し、復帰する(ステップS113)。この処理が終了すると、処理はステップS103へ戻る。
これに対し、スキャナOPEN処理の結果判定がOKである場合(ステップS110のOK)には、主制御部301は、RAM132の動作情報格納領域603のOPEN状態にOPEN済、接続状態にオフライン、排他制御待ちに0、をそれぞれ設定する(ステップS114)。主制御部301は、RAM132の動作情報格納領域603より必須の属性が設定された次の対象スキャナ名称を取得する(ステップS115)。
主制御部301は、ステップS115で取得した対象スキャナの属性に必須の設定が有るか否かを判定する(ステップS116)。対象スキャナの属性に必須の設定が有る場合(ステップS116のYES)には、処理はステップS109に戻る。これに対し、対象スキャナの属性に必須の設定がない場合(ステップS116のNO)には、主制御部301は、RAM132の動作情報格納領域603より属性がオプションの最初の対象スキャナ名称を取得する(ステップS117)。例えば、図6の動作情報格納領域603の動作情報に基づいて、主制御部301は、属性がオプションに設定されているスキャナ名称のうち、最初の対象スキャナ名称として「RFIDスキャナ」を取得する。なお、属性がオプションの対象スキャナがない場合には、この処理は省略される。
主制御部301は、ステップS117で取得した対象スキャナの属性にオプションの設定が有るか否かを判定する(ステップS118)。対象スキャナの属性にオプションの設定が有る場合(ステップS118のYES)には、主制御部301は、取得した名称のスキャナにスキャナOPENを依頼する(ステップS119)。
主制御部301は、対象のスキャナで行われたスキャナOPEN処理結果の判定を行う(ステップS120)。スキャナOPEN処理の結果判定がNGである場合(ステップS120のNG)には、処理はステップS122に進む。
これに対し、結果判定がOKである場合(ステップS120のOK)には、主制御部301は、動作情報格納領域603のOPEN状態にOPEN済、接続状態にオフライン、排他制御待ちに0、をそれぞれ設定する(ステップS121)。
主制御部301は、RAM132の動作情報格納領域603より属性がオプションの次の対象スキャナ名称を取得する(ステップS122)。なお、オプションの属性が設定された対象スキャナ名称を最初に取得する場合には、主制御部301は、オプションの属性が設定された最初の対象スキャナ名称を取得する。この処理が終了すると、処理はステップS118に戻る。即ち、動作情報格納領域603内にあるオプションの属性が設定されている全てのスキャナに対して、ステップS118〜ステップS122の処理が繰り返し実行される。
そして、ステップS118〜ステップS122の処理が行われた結果、対象スキャナの属性にオプションの設定がなくなった場合(ステップS118のNO)には、主制御部301は、復帰値に正常を格納し、復帰する(ステップS123)。この処理が終了すると、処理はステップS103へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、終了指示を受けた場合には、主制御部301は、RAM132の受信処理中情報格納領域601、データ受信通知情報格納領域602、動作情報格納領域603、に格納されている情報をクリアする(ステップS124)。この処理が終了すると、複数バーコードスキャナ制御プログラム300の詳細フローチャートの処理は終了となる。
ステップS104の処理に戻り、依頼処理判定の結果、アプリケーション200からスキャナCLOSE依頼を受けた場合には、主制御部301は、RAM132の動作情報格納領域603より必須の属性が設定された最初の対象スキャナ名称を取得する(ステップS125)。主制御部301は、ステップS125で取得した対象スキャナの属性に必須の設定が有るか否かを判定する(ステップS126)。対象スキャナの属性に必須の設定がない場合(ステップS126のNO)には、主制御部301は、復帰値に異常を格納し復帰する(ステップS127)。即ち、必須の属性が設定されているスキャナは1つ以上存在する必要があるため、必須の属性が設定されたスキャナがない場合には、主制御部301は異常と判断して処理を復帰する。この処理が終了すると、処理はステップS103へ戻る。
これに対し、対象スキャナの属性に必須の設定がある場合(ステップS126のYES)には、主制御部301は、ステップS125で取得したスキャナ名称のスキャナのOPEN状態を取得する(ステップS128)。具体的には、主制御部301は、動作情報格納領域603のOPEN状態を参照して、取得したスキャナのOPEN状態を取得する。主制御部301は、ステップS128で取得したスキャナのOPEN状態がOPEN済であるか否かを判定する(ステップS129)。スキャナの状態がOPEN済ではない場合(ステップS129のNO)には、主制御部301は、復帰値に異常を格納し復帰する(ステップS130)。この処理が終了すると、処理はステップS103へ戻る。
これに対し、スキャナのOPEN状態がOPEN済である場合(ステップS129のYES)には、主制御部301は、取得したスキャナ名称のスキャナにスキャナCLOSEを依頼する(ステップS131)。主制御部301は、動作情報格納領域603のOPEN状態に未OPENを設定する(ステップS132)。主制御部301は、RAM132の動作情報格納領域603より必須の属性が設定された次の対象スキャナ名称を取得する(ステップS133)。
主制御部301は、ステップS133で取得した対象スキャナの属性に必須の設定が有るか否かを判定する(ステップS134)。対象スキャナの属性に必須の設定が有る場合(ステップS134のYES)には、処理はステップS128に戻る。これに対し、対象スキャナの属性に必須の設定がない場合(ステップS134のNO)には、主制御部301は、RAM132動作情報格納領域603より属性がオプションに設定されている最初の対象スキャナ名称を取得する(ステップS135)。
主制御部301は、ステップS135で取得した対象スキャナの属性にオプションの設定が有るか否かを判定する(ステップS136)。対象スキャナの属性にオプションの設定が有る場合(ステップS136のYES)には、主制御部301は、ステップS135で取得したスキャナ名称のスキャナのOPEN状態を取得する(ステップS137)。
主制御部301は、ステップS137で取得したスキャナのOPEN状態がOPEN済であるか否かを判定する(ステップS138)。スキャナの状態がOPEN済でない場合(ステップS138のNO)には、処理はステップS141に進む。
これに対し、スキャナのOPEN状態がOPEN済である場合(ステップS138のYES)には、主制御部301は、取得したスキャナ名称のスキャナにスキャナCLOSEを依頼する(ステップS139)。主制御部301は、動作情報格納領域603のOPEN状態に未OPENを設定する(ステップS140)。
主制御部301は、RAM132に格納されている動作情報格納領域603よりオプションの属性が設定されている次の対象スキャナ名称を取得する(ステップS141)。この処理が終了すると、処理はステップS136に戻る。即ち、動作情報格納領域603内にあるオプションの属性が設定されている全てのスキャナに対して、ステップS136〜ステップS141の処理が繰り返し実行される。
そして、ステップS136〜ステップS141の処理が行われた結果、対象スキャナの属性にオプションの設定がなくなった場合(ステップS136のNO)には、主制御部301は、復帰値に正常を格納し復帰する(ステップS142)。この処理が終了すると、処理はステップS103へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、該当スキャナからの状態通知を受けた場合には、スキャナ状態監視部305は、依頼のあったスキャナ名称のスキャナの接続状態を動作情報格納領域603に格納する(ステップS143)。例えば、該当スキャナが接続されている場合には、動作情報格納領域603に接続状態としてオンラインの情報が格納される。また、該当スキャナが接続されていない場合には、動作情報格納領域603に接続状態としてオフラインの情報が格納される。スキャナ状態監視部305は、依頼のあったスキャナ名称のスキャナの属性をRAM132の動作情報格納領域603より取得する(ステップS144)。
スキャナ状態監視部305は、ステップS144で取得したスキャナの属性に必須の属性の設定が有るか否かを判定する(ステップS145)。取得したスキャナの属性に必須の設定が有る場合(ステップS145のYES)には、スキャナ状態監視部305は、依頼のあったスキャナの接続状態をアプリケーション200へ通知する(ステップS146)。この処理が終了すると、処理はステップS103へ戻る。これに対し、取得したスキャナの属性に必須の設定が無い場合(ステップS145のNO)には、スキャナ状態監視部305は、依頼のあったスキャナの接続状態をアプリケーション200へ通知しない。この処理が終了すると、処理はステップS103へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、アプリケーション200からの状態通知復帰の通知を受けた場合には、スキャナ状態監視部305は、状態通知処理を復帰する(ステップS147)。即ち、アプリケーション200において、通知されたスキャナの状態が保存されると、アプリケーション200から状態通知復帰の通知がされる。その通知を受けると、スキャナ状態監視部305は状態通知処理を復帰する。その後、スキャナ状態監視部305は、状態通知が復帰したことをスキャナ制御プログラム400へ通知する。この処理が終了すると、処理はステップS103へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、アプリケーション200からのバーコードデータ取得依頼を受けると、識別情報通知処理部303は、バーコードデータ取得依頼を受け付け、RAM132に格納されているデータ受信通知情報格納領域602からスキャナ名称を取得する(ステップS148)。識別情報通知処理部303は、ステップS148の処理で取得したスキャナ名称のスキャナに対し、バーコードデータの取得依頼を行う(ステップS149)。識別情報通知処理部303は、取得したバーコードデータをRAM132に格納して、アプリケーション200へバーコードデータを通知する(ステップS150)。この処理が終了すると、処理はステップS130へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、該当スキャナからのバーコードデータの受信通知を受けた場合には、動作情報処理部306は、RAM132の動作情報格納領域603に格納されている属性が必須のスキャナの接続状態を取得する(ステップS151)。
動作情報処理部306は、ステップS151で取得した属性が必須のスキャナの接続状態がオンラインであるか否かを判定する(ステップS152)。属性が必須のスキャナの接続状態がオンラインではない場合(ステップS152のNO)には、スキャナ状態監視部305は、該当スキャナから受信通知を破棄し、処理はステップS103へ戻る。
これに対し、属性が必須のスキャナの接続状態がオンラインである場合(ステップS152のYES)には、受信処理中情報処理部302は、RAM132の受信処理中情報格納領域601にスキャナ名称が格納されているか否かを判定する(ステップS153)。受信処理中情報格納領域601にスキャナ名称が格納されている場合には、該当スキャナのデータを受信処理中であることを示し、受信処理中情報格納領域601にスキャナ名称が格納されていない場合には、該当スキャナのデータを受信処理中ではないことを示す。受信処理中情報格納領域601にスキャナ名称が格納されていない場合(ステップS153のスキャナ名称無)には、受信処理中情報処理部302は、該当スキャナのスキャナ名称を受信処理中情報格納領域601に格納し、データ受信処理中フラグONの状態に遷移させる(ステップS154)。
動作情報処理部306は、動作情報格納領域603に格納されている該当スキャナの排他制御待ちに0を設定する(ステップS155)。受信処理中情報処理部は、該当スキャナのスキャナ名称をRAM132のデータ受信通知情報格納領域602に格納する(ステップS156)。受信処理中情報処理部302は、データを受信したことをアプリケーション200へ通知する(ステップS157)。この処理が終了すると、処理はステップS103へ戻る。
ステップS153の処理に戻り、受信処理中情報格納領域601にスキャナ名称が格納されている場合(ステップS153のスキャナ名称有)には、動作情報処理部306は、該当スキャナの動作情報格納領域603の排他制御待ちの最大値を獲得する(ステップS158)。動作情報処理部306は、動作情報格納領域603の排他制御待ちに最大値+1の値を設定する(ステップS159)。動作情報処理部306は、設定した排他制御待ちの値でタイマーを起動する(ステップS160)。これにより、受信処理中情報格納領域601に格納されているスキャナ名称以外の他のスキャナは排他制御される。この処理が終了すると、処理はステップS103へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、アプリケーション200からのデータ受信通知復帰を受けた場合には、受信処理中情報処理部302は、RAM132に格納されている受信処理中情報格納領域601の文字列をクリアする(ステップS161)。即ち、受信処理中情報処理部302は、データ受信処理中フラグをOFFに設定する。そして、受信処理中情報処理部302は、データ受信通知処理を復帰する(ステップS162)。この処理が終了すると、処理はステップS103へ戻る。
ステップS104の処理に戻り、依頼処理判定の結果、排他制御待ちがタイムアウトである通知を受けると、動作情報処理部306は、排他制御待ちタイマーを停止する(ステップS163)。この処理では、ステップS160で起動した排他制御待ちタイマーを停止する処理が行われる。
動作情報処理部306は、RAM132の受信処理中情報格納領域601にスキャナ名称が格納されているか否かを判定する(ステップS164)。受信処理中情報格納領域601にスキャナ名称が格納されていない場合(ステップS164のスキャナ名称無)には、受信処理中情報処理部302は、RAM132に格納されている動作情報格納領域603の排他制御待ちの最小値を獲得する(ステップS165)。この処理では、動作情報格納領域603に格納されているスキャナのうち、排他制御待ちの値が最小であるスキャナ名称のスキャナを取得する。
受信処理中情報処理部302は、ステップS165で獲得した排他制御待ちが最小値のスキャナ名称をRAM132の受信処理中情報格納領域601に格納する(ステップS166)。受信処理中情報処理部302は、排他制御待ちが最小値のスキャナの動作情報格納領域603の排他制御待ちに0を設定する(ステップS167)。受信処理中情報処理部302は、排他制御待ちが最小値のスキャナのスキャナ名称をデータ受信通知情報格納領域602に格納する(ステップS168)。受信処理中情報処理部302は、データを受信したことをアプリケーション200へ通知する(ステップS169)。この処理が終了すると、処理はステップS103へ戻る。
ステップS164において、受信処理中情報格納領域601にスキャナ名称が格納されている場合(ステップS164のスキャナ名称有)には、動作情報処理部306は、排他制御待ちタイマーを起動する(ステップS170)。この処理では、ステップS163の処理において停止していた排他制御待ちタイマーが再開される。この処理が終了すると、処理はステップS103へ戻る。
このようにして、複数バーコードスキャナ制御プログラム300は、複数のスキャナから通知された受信通知やバーコードデータの通知を、1つのスキャナから通知された情報として、各スキャナから通知された順にアプリケーション200へ通知することができる。
従って、アプリケーション200側では、擬似的に1つのスキャナとして処理を行うことができ、アプリケーション200およびスキャナ側のハードウェアの双方の改修を行わずに、複数のスキャナを制御することができる。従って、コストを抑えて精算業務の効率化を図ることができる。
上述の実施形態では、複数バーコードスキャナ制御プログラム300は、受信通知やバーコードデータの通知を各スキャナから通知された順にアプリケーション200へ通知しているがこの限りではない。例えば、各スキャナに優先度をつけて、優先度の高いスキャナからの受信通知やバーコードデータの通知を優先してアプリケーション200へ通知することもできる。
また、上述の実施形態では、複数のスキャナ(固定スキャナ45、タッチスキャナ48、RFIDスキャナ38)は、POS端末21に接続されているがこの限りではない。例えば、複数バーコードスキャナ制御プログラム300は、ネットワークを介して接続されたスキャナも同時に制御することができる。
なお、本発明は上述した実施形態そのままに限定されるものではなく、実施段階でのその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施形態に示される全構成要素を適宜組み合わせても良い。更に、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。このような、発明の趣旨を逸脱しない範囲内において種々の変形や応用が可能であることはもちろんである。