以下、図面を参照して本発明の実施形態について説明する。
図1は、本実施形態に係るPOS(Point of Sales)システム1(制御システム)の概略構成ブロック図である。また、図2は、POSシステム1を構成するタブレット端末10(端末)、制御装置11、及び、POSサーバー17の機能的構成を示すブロック図である。
POSシステム1は、ショッピングセンターや、百貨店、コンビニエンスストア等の小売店、レストランや、喫茶店、居酒屋等の飲食店、その他の店舗、施設に適用されるシステムである。POSシステム1の機能としては、例えば、店舗における商品の販売状況、商品の在庫の状況、売上の状況等を管理する機能が挙げられる。また、店舗に設けられたレジカウンターLにおいて、顧客が購入した商品に応じた会計を実行する機能、顧客による代金の支払いに応じてレシートを発行する機能、顧客に対し会計に関する情報を提供する機能等が挙げられる。
本実施形態に係るPOSシステム1が適用される店舗には、会計処理を実行するレジカウンターLが設けられる。そして、1つのレジカウンターLには、1台の制御装置11と、制御装置11と無線通信可能に接続されたタブレット端末10とが設けられる。
タブレット端末10は、レジカウンターLにおいて、会計を担当するレジ担当者が使用する端末であり、例えば携帯型のコンピューターである。本実施形態では、タブレット型(板状)のコンピューターであるタブレット端末10を用いる例を示す。タブレット端末10の前面には、画面表示およびタッチ操作の検出が可能なタッチパネル30が配置され、タッチパネル30に対するタッチ操作によって各種入力が可能である。
タブレット端末10は、レジカウンターLにおける会計に際し、レジ担当者にユーザーインターフェースを提供する。
制御装置11は、デバイス制御装置としての機能を有する装置である。図2に示すように、制御装置11には、少なくとも1のデバイスが接続される。デバイスは、商品又は商品の包装に付されたバーコードを読み取るバーコードスキャナー12(デバイス)を含んでも良い。また、紙幣や、貨幣、金券等を収容し、管理するキャッシュチェンジャー13(デバイス)を含んでもよい。また、会計に関する情報を顧客に対して表示するディスプレー14(デバイス)を含んでもよい。バーコードスキャナー12、キャッシュチェンジャー13、及びディスプレー14を区別しない場合はデバイスと総称する。また、後述するプリンターユニット21をデバイスに含めてもよい。
図2に示すように、制御装置11は、制御部20と、プリンターユニット21(プリンター、印刷部、デバイス)と、記憶部22と、通信モジュール23と、を備える。
制御部20は、制御装置11の各部を制御するものであり、CPU等のプロセッサーを有する。制御部20は、プロセッサーが実行するプログラムやデータを不揮発的に記憶するROM、プロセッサーのためのワークエリアを形成するRAM等を備えてもよい。また、制御部20は、その他のプロセッサーの周辺回路を備えてもよい。制御部20は、デバイス制御部20aを備える。デバイス制御部20aについては後述する。
プリンターユニット21は、ロール紙を搬送する搬送機構、サーマルヘッドによってロール紙に文字や画像を印刷する印刷機構、ロール紙を切断する切断機構等を備える。プリンターユニット21は、レジカウンターLでレシートを発行するための印刷装置であり、制御装置11の制御に従って、レシートに係る画像をロール紙に印刷する。
記憶部22は、半導体メモリーデバイス、磁気的記録装置、光学的記録装置などで構成される記憶装置である。記憶部22は、制御部20が実行するプログラム及び/または制御部20が処理するデータを、書き換え可能に、不揮発的に記憶する。
通信モジュール23は、所定の通信規格に準拠したネットワークカード等のタブレット端末10との間で無線通信するモジュール、回路等を備え、制御部20の制御の下、タブレット端末10との間で所定の通信規格に準拠した無線通信を実現する。
また、タブレット端末10は、端末記憶部25と、端末制御部26と、通信モジュール27と、入力検出部29と、タッチパネル30と、を備える。また、端末制御部26は表示制御部28を備える。
端末記憶部25は、例えば、EEPROM等の半導体メモリーデバイスにより構成され、各種データを書き換え可能に不揮発的に記憶する。
タッチパネル30は、タブレット端末10の前面に配置された表示パネル30aと、表示パネル30aに重ねて配置されたタッチセンサー30bとが一体となって構成される。
表示パネル30aは、液晶表示パネル、有機ELパネル、電子ペーパー等のディスプレーであり、表示制御部28によって駆動される。タッチセンサー30bは、表示パネル30aに重ねて配置され、接触操作及び/または押圧操作を検出するセンサーである。タッチセンサー30bは、例えば、静電容量式もしくは感圧式のセンサーで構成できる。タッチセンサー30bは、ユーザーの手指やペン型操作デバイスによるタッチ操作を検出して、タッチ操作を検出した位置を示す信号を入力検出部29に出力する。タッチパネル30は、「ブラウザーを表示する表示部」に該当する。
表示制御部28は、後述するブラウザー実行部26aから入力される表示用のデータに基づいて、表示パネル30aを駆動し、表示パネル30aに文字や画像等を含む画面を表示する。
入力検出部29は、タッチセンサー30bが出力する信号に基づいて、タッチパネル30に対するタッチ操作を検出する。このタッチ操作を検出した場合、入力検出部29は、操作位置を表示パネル30aの表示位置に対応する座標によって示す座標データを生成し、端末制御部26に出力する。
通信モジュール27は、所定の通信規格に準拠したネットワークカード等の制御装置11、及び、POSサーバー17との間で無線通信するモジュール、回路等を備える。通信モジュール27は、端末制御部26の制御の下、制御装置11、及び、POSサーバー17との間で所定の通信規格に準拠した無線通信を実現する。
端末制御部26は、タブレット端末10の各部を制御するものであり、CPU等のプロセッサーを有する。端末制御部26は、プロセッサーが実行するプログラムやデータを不揮発的に記憶するROM、プロセッサーのためのワークエリアを形成するRAM等を備えてもよい。また、端末制御部26は、その他のプロセッサーの周辺回路を備えてもよい。端末制御部26は、ブラウザープログラムを実行することにより、ブラウザーの機能を実現するブラウザー実行部26aを備える。
ブラウザー実行部26aは、ウェブブラウザーの機能により、HTTP等のプロトコルによる通信を実行し、HTML等のマークアップ言語やスクリプト言語で記述されたウェブページ(HTMLファイル等)を、POSサーバー17からダウンロードする。ダウンロードされたウェブページのデータは、例えば図示しないRAMに記憶される。ブラウザー実行部26aは、ダウンロードされたウェブページのデータを読み込み、このウェブページを表示させる表示データを生成して、表示制御部28に出力する。表示制御部28は、入力された表示データに基づいて、表示パネル30aに表示データに係るウェブページの画像を表示する。
ブラウザー実行部26aは、入力検出部29によってタッチセンサー30bへのタッチ操作が検出された場合、このタッチ操作に対応して入力検出部29から入力される座標データ、及び、表示制御部28に出力した表示用のデータに基づき、入力内容を特定する。ブラウザー実行部26aは、適宜、特定した入力内容に基づいて、例えばスクリプトの機能によって適切な処理を実行する。
POSサーバー17は、商品に関する情報を格納したデータベース、売上を管理するデータベース、在庫を管理するデータベース等を記憶するサーバー記憶部36を備え、これらデータベースを利用して、POSシステム1全体を管理する。
POSサーバー17は、サーバー制御部37と、サーバー記憶部36と、通信モジュール38と、を備える。
サーバー制御部37は、POSサーバー17の各部を制御するものであり、CPU等のプロセッサーを有する。サーバー制御部37は、プロセッサーが実行するプログラムやデータを不揮発的に記憶するROM、プロセッサーのためのワークエリアを形成するRAM等を備えてもよい。また、サーバー制御部37は、その他のプロセッサーの周辺回路を備えてもよい。
サーバー記憶部31は、半導体メモリーデバイス、磁気的記録装置、光学的記録装置などで構成される記憶装置である。サーバー記憶部31は、サーバー制御部37が実行するプログラム及び/またはサーバー制御部37が処理するデータを、書き換え可能に、不揮発的に記憶する。
通信モジュール38は、所定の通信規格に準拠したネットワークカード等のタブレット端末10との間で無線通信するモジュール、回路等を備え、サーバー制御部37の制御の下、タブレット端末10との間で所定の通信規格に準拠した無線通信を実現する。
POSサーバー17には、POSアプリケーション35が、インストールされている。
タブレット端末10のブラウザー実行部26aは、このPOSサーバー17上のPOSアプリケーション35の機能を利用して、各種処理を実行する。
具体例を挙げて詳述すると、ブラウザー実行部26aは、適宜、POSサーバー17に演算処理の要求を実行し、POSアプリケーション35の機能によって演算処理を実行させ、処理結果を受け取り、適切な処理を実行する。例えば、ブラウザー実行部26aは、バーコードスキャナー12の読み取り結果をPOSサーバー17に出力して、POSアプリケーション35の機能により商品検索を実行させる。ブラウザー実行部26aは、検索結果を受け取った上で、制御装置11を制御して商品情報をディスプレー14に表示させる。また、会計の合計金額の算出を要求して、POSアプリケーション35の機能により合計金額の算出を実行させ、算出結果を受け取った上で、制御装置11を制御して合計金額を含む情報が印刷されたレシートを発行させたりする。
ここで、「ブラウザーで動作するアプリケーション」とは、ブラウザー実行部26aが通信可能な他の機器にインストールされたアプリケーションであって、ブラウザー実行部26aが、その機能を利用可能なアプリケーションを含む概念である。例えば、POSアプリケーション35が該当する。この場合のアプリケーションは、上記通信可能な他の機器上で実行され動作するものであってもよく、当該他の機器からダウンロードして、タブレット端末10上で実行され動作するものであってもよい。さらに、「ブラウザーで動作するアプリケーション」は、ブラウザー実行部26aが読み出すウェブページ(HTMLファイル)に実装されたスクリプト等、ブラウザー実行部26aがその機能を利用可能なプログラム、ソフトウェアを含む概念である。
図3は、タブレット端末10のブラウザー実行部26a(「端末制御部」に対応する機能ブロック)、及び、制御装置11のデバイス制御部20aの機能ブロック図をより詳細に示す図である。また、図3には、デバイス制御部20aに関する理解の便宜のため記憶部22を合わせて図示する。
図3では、説明の便宜のため、プログラム自体や、ソフトウェア的なオブジェクト、プログラムによって実現される機能を概念的に表わすブロック、デバイス等の物理的な装置等を、同一のレベルで表現している。
なお、以下の説明において、「オブジェクト」とは、オブジェクト指向プログラミングにおけるインスタンスを指す。すなわち、データ、及び、メソッドの集合として定義されたソフトウェア的な対象を意味する。この説明は一例であり、「オブジェクト」は、オブジェクト指向プログラミングにおけるインスタンスに限らず、何らかの機能を実現できるソフトウェア的な対象であればよい。
図3に示すように、タブレット端末10のブラウザー実行部26aでは、アプリケーションAPが動作する。アプリケーションAPは、ブラウザー実行部26aが、その機能を利用可能なプログラム、ソフトウェアを含む概念である。具体的には、上述したように、POSアプリケーション35のように他の機器で動作し、又は、他の機器からダウンロードしたアプリケーションや、ブラウザー実行部26aが読み出すHTMLファイルに実装されたスクリプト等を含む。
ブラウザー実行部26aでは、制御オブジェクト41が動作可能である。
制御オブジェクト41は、制御装置11に接続されたデバイスを制御するオブジェクトである。例えば、バーコードスキャナー12を制御するバーコードスキャナーI/F(インターフェース)オブジェクト、キャッシュチェンジャー13を制御するキャッシュチェンジャーI/Fオブジェクトが挙げられる。また、ディスプレー14を制御するディスプレーI/Fオブジェクト、プリンターユニット21を制御するプリンターI/Fオブジェクト等が挙げられる。制御オブジェクト41は、上述した各オブジェクトの少なくともいずれかを含む。これらのオブジェクトは、タブレット端末10に対する操作または制御装置11とタブレット端末10との間の通信に対応して、適宜生成される。
以下において、「アプリケーションAPは、・・・」のように、アプリケーションAPを動作の主体とする表現は、アプリケーションAPを読み出して実行するプロセッサーが、アプリケーションAPの機能を利用して、処理を実行することを意味する。プロセッサーとは、例えば、端末制御部26、ブラウザー実行部26a等である。同様に、「オブジェクトは、・・・」のように、オブジェクトを動作の主体として処理を説明する場合、プロセッサー(対応する制御部)が、オブジェクトの機能を利用して、処理を実行することを意味する。後述するスクリプトを動作の主体として説明する場合、及び、デバイスドライバー等のプログラムモジュールを動作の主体として説明する場合も同様である。
また、ブラウザー実行部26aでは、HTTPクライアント42が動作可能である。HTTPクライアント42は、デバイス制御部20aが有するHTTPサーバー61との間で、通信経路K1を確立する。HTTPクライアント42は、通信経路K1を介してHTTPサーバー61との間で所定の通信プロトコル(HTTP)を実行し、各種データを送受信する。HTTPクライアント42とHTTPサーバー61との間の通信は、WebSocket通信を採用してもよい。例えば、ブラウザー実行部26aは、制御装置11との通信を行うためにHTTPクライアント42により通信経路確立要求をHTTPサーバー61に送信する。HTTPクライアント42及びHTTPサーバー61は、協働して、WebSocketの規格に準拠してコネクションを張り、通信経路K1を確立する。
アプリケーションAPは、レジカウンターLにおける会計処理のための各種機能を有する。例えば、アプリケーションAPは、POSサーバー17から提供される商品の価格等に関する情報を取得する。また、アプリケーションAPは、商品の会計に関する処理を実行し、実行結果をPOSサーバー17に送信する。
アプリケーションAPが実行する会計処理において、制御装置11に接続されるデバイスを動作させる場合、アプリケーションAPは、デバイスの制御の要求を出力する。詳細は後述するが、アプリケーションAPは、制御装置11に対してデバイスの制御の開始を要求し、デバイスを使用可能とする。その後、アプリケーションAPは、制御装置11に対し、デバイスを動作させる制御を要求する。また、アプリケーションAPは、デバイスの動作によって得られるデータが制御装置11から出力された場合に、このデータを取得して処理を行う。デバイスが必要な動作を行った後、アプリケーションAPは、デバイスの制御の終了を要求する。
ブラウザー実行部26aでは、アプリケーションAPが、動作させるデバイス、すなわち制御対象のデバイスに対応するオブジェクトを呼び出し、呼び出されたオブジェクトが制御装置11に対する処理を行う。
制御オブジェクト41は、アプリケーションAPが指定した制御対象のデバイスを示すデータを送信する。このデータはHTTPクライアント42及びHTTPサーバー61を介してデバイス制御部20aに伝達される。デバイスを指定するデータは、例えば、制御装置11に接続されたデバイスに固有の識別子であるデバイス識別子を用いることができる。デバイス識別子は、適宜に付与されるものであってもよい。また、例えば、デバイス識別子として、OLE for Retail POS Committeeにおいて標準化されたOPOS(OLE for Retail POS)の仕様に準拠するOPOS論理名を用いることができる。
また、制御オブジェクト41は、アプリケーションAPが要求したデバイスの動作を示すデータをHTTPクライアント42によって送信させる。また、制御オブジェクト41は、デバイスの動作により得られたデータを制御装置11が送信した場合、このデータを、HTTPクライアント42を介して受信し、取得する。制御オブジェクト41が取得したデータはアプリケーションAPに渡され、アプリケーションAPによる会計処理に利用される。
POSシステム1の具体的な動作の一例として、会計処理の概要を説明する。
会計に係る処理が行われる前に、タブレット端末10は、それぞれ、以下の処理を実行する。すなわち、レジの担当者、その他の作業に従事する者は、タブレット端末10のブラウザーを起動させ、タッチパネル30へのユーザーインターフェースの表示を指示する。当該指示に応じて、端末制御部26のブラウザー実行部26aは、POSサーバー17上の所定のアドレスにアクセスし、HTMLファイル等のウェブページのデータを取得し、当該データに基づいてユーザーインターフェースをタッチパネル30に表示する。
タッチパネル30に表示されるユーザーインターフェースは、顧客が購入した商品の名称、商品の単価、及び、商品の数量が一覧表示される表示エリアを有する。また、顧客が購入した商品の合計金額、会計に際して顧客から預かった金銭の金額、及び、顧客に渡すべきお釣りの金額が表示される表示エリアを有する。また、ユーザーインターフェースには、バーコードスキャナー12によって読み取られたバーコードが表す情報(以下、「バーコード情報」という)が入力され表示されるフィールドが配置される。バーコード情報は、基本的には、商品の種類毎に一意に割り当てられた識別情報である。また、ユーザーインターフェースには、数値をタッチ入力するためのソフトウェアテンキーが配置される。また、ユーザーインターフェースには、タブレット端末10のアクセス先のアドレスが表示されるフィールドが配置されてもよい。
会計処理では、バーコードスキャナー12によるバーコードの読み取りが実行された後、読み取られたバーコード情報がユーザーインターフェースのフィールドに表示される。この処理では、バーコード情報をアプリケーションAPが取得するために、アプリケーションAPにより、制御オブジェクト41においてバーコードスキャナー12を制御するオブジェクトが呼び出される。レジカウンターLにおいて、レジの担当者であるユーザーがバーコードスキャナー12を操作して、顧客が購入した1の商品に付されたバーコードを読み取る操作を行う。この操作に応じて、読み取ったバーコードに関するバーコード情報が、制御装置11により制御オブジェクト41に出力される。制御オブジェクト41は、制御装置11が出力するバーコード情報を取得して、アプリケーションAPにバーコード情報を出力する。このバーコード情報は、ユーザーインターフェースの所定のフィールドに表示され、アプリケーションAPの機能により会計処理に用いられる。
また、会計処理において、キャッシュチェンジャー13を動作させる場合、アプリケーションAPは、キャッシュチェンジャー13を制御するためのオブジェクトを呼び出す。これに対応して制御オブジェクト41がキャッシュチェンジャー13を制御する要求を生成して制御装置11に送信し、制御装置11がキャッシュチェンジャー13を動作させる。また、会計処理において、ディスプレー14に、合計金額等を表示する場合、アプリケーションAPは、ディスプレー14を制御するためのオブジェクトを呼び出す。これに対応して制御オブジェクト41がディスプレー14を制御する要求を生成し、制御装置11に出力する。制御装置11は、制御オブジェクト41が生成した要求に対応して、ディスプレー14による表示を実行させる。
アプリケーションAPがプリンターユニット21にレシートを発行させる場合、アプリケーションAPは、実装された機能により、レシートに印刷する画像を生成する。アプリケーションAPは、生成した画像に基づいて、プリンターユニット21によって発行させるレシートに関する情報が含まれたXMLドキュメント(データ)を生成する。このXMLドキュメントには、XMLに係るフォーマットに準拠して、レシートに印刷する文字や画像の情報等、レシートを発行する情報が所定の形式で含まれる。
アプリケーションAPは、プリンターユニット21のデバイス識別子、及び、プリンターを制御するためのオブジェクトに実行させる関数を指定する情報、生成したXMLドキュメント等を含むデータを、制御オブジェクト41に出力する。これに応じて、制御オブジェクト41は、アプリケーションAPから入力されたデータに基づき制御装置11に対する要求を送信する。この要求に対応して、制御装置11がプリンターユニット21を制御してレシートの印刷を実行させ、実行結果を制御オブジェクト41に出力する。制御オブジェクト41は、レシートの印刷結果をアプリケーションAPに出力する。
上記の動作において、制御装置11が、キャッシュチェンジャー13、ディスプレー14、プリンターユニット21等の動作状態を示すステータスデータを出力してもよい。この場合、制御オブジェクト41は、制御装置11が出力するステータスデータを取得して、アプリケーションAPに渡す。
制御オブジェクトとは、デバイスの制御に係る各種メソッドが実装されたオブジェクトであり、対応するハンドラーの機能を利用して、対応するデバイスの制御を実行する。例えば、制御オブジェクト41がキャッシュチェンジャー13を制御する制御オブジェクトを生成する。この制御オブジェクトには、キャッシュチェンジャー13の制御に係る処理を実行するメソッドが実装され、当該オブジェクトは、キャッシュチェンジャーハンドラーの機能を利用して、キャッシュチェンジャー13の制御を実行する。ハンドラーは、要求に応じて、対応するデバイスに係る処理を実行する関数、サブルーチンを指す。例えば、制御オブジェクト41がバーコードスキャナー12を制御する制御オブジェクトを生成した場合、バーコードスキャナーハンドラーが、バーコードスキャナー12によるバーコードの読み取りが実行された場合に、読み取り結果の入力を受ける。さらに、バーコードスキャナーハンドラーは、割り込み処理を実行して、読み取り結果(例えば、数字の文字列からなるデータ)をバーコードスキャナーの制御オブジェクトに受け渡す。他のデバイスを制御する場合も同様に、制御オブジェクトとハンドラーとが機能する。
また、制御装置11では、デバイスとのインターフェースであるデバイスインターフェース81と、各ハンドラーとが協働して、「デバイスと通信する第2通信部」として機能する。
デバイス制御部20aは、HTTPサーバー61、ポート制御部62、処理部70、及びデバイスインターフェース81を備える。
HTTPサーバー61は、ブラウザー実行部26aのHTTPクライアント42と協働して、通信経路K1を介して通信を実行する。HTTPサーバー61は、処理部70の制御に従ってHTTPクライアント42と通信し、HTTPクライアント42から受信した要求やデータを処理部70に出力する。HTTPサーバー61は第1通信部として機能する。
処理部70は、HTTPサーバー61を介して受信した要求に応じて、デバイスインターフェース81に接続されるデバイスを制御する。
デバイスインターフェース81は、バーコードスキャナー12、キャッシュチェンジャー13、ディスプレー14、及びプリンターユニット21を含むデバイスが接続されるインターフェースである。デバイスインターフェース81は、図において一つの機能ブロックとして示しているが、複数のインターフェースを含んでもよい。例えば、デバイスインターフェース81は、バーコードスキャナー12が接続されるUSBインターフェース、キャッシュチェンジャー13及びディスプレー14がそれぞれ接続されるシリアルインターフェース等を含んでもよい。また、デバイスインターフェース81は、同種のインターフェースを複数備えてもよく、具体的な構成は任意に選択されればよい。
また、図中のデバイスインターフェース81は、各デバイスが接続されるハードウェアとしてのコネクターや信号処理回路に加えて、これらのハードウェアにより各デバイスと信号を入出力する機能を示す。デバイスインターフェース81は、上述したようにソフトウェアの機能であるハンドラーと協働して、或いは単独で、第2通信部に相当する。
デバイスインターフェース81においてデバイスが接続されるインターフェースは、ソフトウェア的にポートとして区別される。例えば、デバイスインターフェース81は、バーコードスキャナー12が接続されたUSBポート、キャッシュチェンジャー13が接続されたCOMポート、及び、ディスプレー14が接続されたCOMポートを有する構成とすることができる。また、デバイスインターフェース81は、プリンターユニット21が接続されたUSBポートを有する構成としてもよい。デバイスインターフェース81が備える各々のポートは、例えば、ポートに付与された番号や記号により識別可能であり、同じ種類の複数のポートを識別および特定できる。
ポート制御部62は、デバイスインターフェース81に接続されたデバイスと、各デバイスが接続されたポートを識別する。ポート制御部62は、処理部70がデバイスを制御するためにコマンド等を出力する場合に、デバイスインターフェース81において制御対象のデバイスが接続されたポートを選択し、選択したポートにコマンド等を出力する。ポート制御部62は、デバイスが出力するデータを取得し、取得したデータを、データを取得したポートを識別(特定)するデータとともに処理部70に出力する。
処理部70は、デバイスを制御する制御手段として、第1デバイス制御部71を有する。第1デバイス制御部71は、デバイス制御スクリプト72、及び、デバイスドライバー73を有する。デバイス制御スクリプト72はデバイスを制御する場合に呼び出されて実行されるスクリプト(プログラムモジュール)である。
デバイスドライバー73は、デバイスを制御するためのドライバープログラムであって、デバイス及び制御装置11の仕様に対応するドライバーである。処理部70は、デバイスの種類毎に、複数の第1デバイス制御部71を有する。
例えば、処理部70が、デバイスドライバー73によってバーコードスキャナー12、キャッシュチェンジャー13、ディスプレー14及びプリンターユニット21の各々を制御する場合、これらの各デバイスに対応する第1デバイス制御部71を備える。この場合、処理部70は、バーコードスキャナー12を制御するためのデバイスドライバー73を有する第1デバイス制御部71を有する。同様に、処理部70は、キャッシュチェンジャー13、ディスプレー14、及び、プリンターユニット21を制御するためのデバイスドライバー73を有する第1デバイス制御部71を有する。換言すれば、処理部70は、制御するデバイスの種類のそれぞれに対応するデバイスドライバー73を備える必要がある。本実施形態では、後述するように、バーコードスキャナー12、キャッシュチェンジャー13、ディスプレー14、及びプリンターユニット21の少なくとも一部を、ドライバー68により制御する。このため、処理部70は、ドライバー68で制御しないデバイスに対応するデバイスドライバー73を備える第1デバイス制御部71を有している。
また、処理部70は、デバイスインターフェース81に接続されていないデバイスに対応する第1デバイス制御部71を有していてもよい。例えば、磁気カードリーダーを制御するデバイスドライバー73を備える第1デバイス制御部71を、処理部70が有していてもよい。
デバイスドライバー73は、デバイス制御スクリプト72が出力するデータに基づき、デバイスに適合するコマンドやパラメーターを生成して、出力する。デバイスドライバー73は、生成したコマンドやパラメーターを、ポート制御部62によって選択されたポートに出力する。デバイスドライバー73により制御されるデバイスがデータを出力した場合、このデータは、ポート制御部62によって、当該デバイスを制御するデバイスドライバー73に転送される。デバイスドライバー73は、デバイスが出力したデータを、デバイス制御スクリプト72の仕様に対応するデータ形式で、デバイス制御スクリプト72に出力する。このように、デバイスドライバー73は、デバイスに対応したコマンドやデータ(パラメーター)の生成、出力、及び、デバイス制御スクリプト72に対応したデータの生成、変換、出力を実行する。
デバイス制御スクリプト72が入出力するコマンドやデータ形式は、制御装置11の仕様として予め決められている。デバイスドライバー73は、制御装置11の仕様に対応するように作成されている。別の表現では、デバイスドライバー73は、デバイス制御スクリプト72と他のプログラムとのインターフェースの仕様に対応している。デバイスドライバー73は、例えば、制御装置11を製造した製造事業者が提供するSDK(Software Development Kit)を用いて作成される。
換言すれば、デバイスドライバー73は、制御装置11の仕様に対応した、制御装置11専用のドライバープログラムである。また、デバイスドライバー73は、制御対象のデバイスの種類に対応する専用のドライバープログラムである。さらに、多くの場合、デバイスドライバー73は、デバイスの種類だけでなく、デバイスの機種、製造事業者、あるいは、デバイスのシリーズ(複数の機種の集合)に対応した専用のドライバープログラムである。
例えば、バーコードスキャナー12を制御するデバイスドライバー73は、特定の機種のバーコードスキャナー12が実行及び/または処理可能なコマンドやデータ形式に対応する。或いは、特定の事業者が販売し、共通する仕様を有する複数種類のバーコードスキャナー12が実行及び/または処理可能なコマンドやデータ形式に対応する。また、このデバイスドライバー73は、デバイス制御スクリプト72が入出力するコマンド及びデータ形式に準拠する。
キャッシュチェンジャー13、ディスプレー14、及びプリンターユニット21を、デバイスドライバー73により制御する場合も同様である。
一方、処理部70は、第1デバイス制御部71とは異なる第1デバイス制御部75を備える。第1デバイス制御部75は、デバイス制御スクリプト76を有する。デバイス制御スクリプト76は、第1デバイス制御部75がデバイスを制御する場合に呼び出されて起動される。デバイス制御スクリプト76は、共通通信ライブラリー65、第2デバイス制御部66、ヘッダー67、及びドライバー68を利用してデバイスを制御するためのプログラムモジュールである。
ヘッダー67及びドライバー68は、デバイスを制御するプログラムモジュールであり、制御装置11に接続されるデバイスに対応するドライバープログラムである。ドライバー68は、制御対象のデバイスに対してコマンドを出力し、デバイスが出力するデータを取得する。ヘッダー67は、アプリケーションAPの要求に対応してドライバー68を呼び出し、アプリケーションAPが要求するデバイスの動作に対応するコマンドをドライバー68により生成させる。ドライバー68は、コマンドをデバイスに送信してデバイスを動作させる。また、ドライバー68は、デバイスのステータスを監視する。ヘッダー67は、ドライバー68により監視中のデバイスのステータスを示すデータを出力する。また、ドライバー68は、デバイスがデータを出力した場合に、このデータを取得して、ヘッダー67へ出力する。
ヘッダー67は、制御装置11の仕様に限定されない汎用のプログラムモジュールである。例えば、ヘッダー67は、同一種類のデバイスに対して共通して使用でき、特定のデバイスの機種、製造事業者等に依存しない汎用性を有する。
例えば、POSシステム1で使用されるデバイスを、デバイスクラスに分類し、ヘッダー67を、デバイスクラスに対応するドライバープログラムとして設けることができる。具体的には、バーコードスキャナー12に対して一組のヘッダー67を設けることができる。この場合、制御装置11は、様々な製造事業者が製造した複数のバーコードスキャナー12を、一組のヘッダー67により制御できる。キャッシュチェンジャー13、ディスプレー14、及びプリンターユニット21についても同様である。また、磁気カードリーダー、キャッシュドロワー、非接触ICカードリーダー等のデバイスクラスに対しても同様である。従って、同一のデバイスクラスに属する複数のデバイスを、一つの、或いは少数のヘッダー67により制御することができる。
ヘッダー67及びドライバー68の具体的な例として、OPOS仕様に準拠するものが挙げられる。この種のヘッダー67及びドライバー68は、デバイスを制御するためのプロパティ、メソッド、イベントをセットで提供する。ここで、プロパティ、メソッド、イベントのそれぞれの語はオブジェクト指向プログラミングで使用される意味に用いられる。
ヘッダー67は、デバイスクラスごとに、プロパティ、メソッド、イベントのセットを提供するコントロールオブジェクト(CO)である。ドライバー68は、ヘッダー67により呼び出され、OPOSにより規定される各種機能をデバイス毎に実行するサービスオブジェクト(SO)である。ドライバー68は、ヘッダー67により呼び出されて、デバイスに対するコマンドの出力やデバイスが出力するデータの取得を実行する。ドライバー68は、API(Application Programming Interface)を実装した構成とすることも可能である。
第2デバイス制御部66は、汎用のヘッダー67を動作させるためのプログラムモジュールであり、具体的には実行ファイルである。第2デバイス制御部66は、アプリケーションAPが出力する要求に対応してヘッダー67を呼び出す。第2デバイス制御部66は、アプリケーションAPが出力する要求を、ヘッダー67が処理可能なコマンドやデータに変換して、ヘッダー67に出力する。また、第2デバイス制御部66は、ドライバー68により取得されたデータを、アプリケーションAPが処理可能なデータ形式に変換して出力する。
第2デバイス制御部66が実行する変換処理の内容は、例えばXMLで記述された変換テーブル82(テーブル)により設定できる。変換テーブル82は、例えば、制御装置11が有するヘッダー67が処理可能なデータ形式等を規定する情報を含み、制御装置11が複数のヘッダー67を有する場合は第2デバイス制御部66毎の情報を含む。第2デバイス制御部66に対して変換テーブル82を与えることにより、第2デバイス制御部66は、変換テーブル82に記述された設定に従って、コマンドの変換やデータ形式の変換を行う。これにより、第1デバイス制御部75が出力する制御情報を、ヘッダー67が処理可能なデータに変換して、ヘッダー67によりコマンドの生成等を実行させることができる。また、ヘッダー67が出力するデータ等を、第2デバイス制御部66により変換して第1デバイス制御部75へ出力できる。
第1デバイス制御部75は、アプリケーションAPに対しては第1デバイス制御部71と同様に動作し、アプリケーションAPの要求を受信し、アプリケーションAPに対してデータを出力する。第1デバイス制御部75は、第2デバイス制御部66によってデバイスを制御するためのデバイス制御スクリプト76を有する。デバイス制御スクリプト76は、アプリケーションAPの要求に応じて、第2デバイス制御部66を呼び出して実行させる。
共通通信ライブラリー65(通信モジュール)は、第1デバイス制御部75と第2デバイス制御部66との間の通信を仲介する。共通通信ライブラリー65は、処理部70と第2デバイス制御部66との間のプロセス間通信を実行させるためのライブラリーであり、例えばDLL(ダイナミックリンクライブラリー)で構成される。共通通信ライブラリー65は、第1デバイス制御部75と第2デバイス制御部66との間の通信手順をモジュール化したものである。共通通信ライブラリー65は、第2デバイス制御部66のラッパーとして機能し、処理部70と第2デバイス制御部66との間でソケットによるプロセス間通信を実行する。
共通通信ライブラリー65は、第1デバイス制御部75とソケット通信を実行し、タブレット端末10が送信した情報に基づき第1デバイス制御部75が出力する情報を受信する。この受信した情報に基づき、共通通信ライブラリー65は、第2デバイス制御部66に情報を送信する。共通通信ライブラリー65が送信する情報は、第2デバイス制御情報に相当する。
共通通信ライブラリー65は、複数の第2デバイス制御部66から利用される。すなわち、制御装置11が、異なるデバイスクラスに対応する複数の第2デバイス制御部66を有する場合に、これら複数の第2デバイス制御部66は、共通の共通通信ライブラリー65を介して第1デバイス制御部75と通信する。共通通信ライブラリー65を利用することで、第2デバイス制御部66と第1デバイス制御部75との間の通信手順を共通化することができる。このため、各々の第2デバイス制御部66が第1デバイス制御部75との通信手順を実装する必要がなく、第2デバイス制御部66の実装をより容易にする効果がある。
処理部70は、記憶部22が記憶するデバイス制御部管理テーブル22aにより、第1デバイス制御部71及び第2デバイス制御部66を管理する。また、処理部70は、デバイスの制御を要求したタブレット端末10と、制御対象のデバイスと、制御対象のデバイスが接続されたポートとを、記憶部22に記憶されるデバイス通信管理テーブル22b(デバイス通信管理情報)により管理する。
図4は、制御装置11の動作を示す模式図であり、特に、デバイス制御部20aの動作を示す。
処理部70(図3)は、選択部70aを有する。選択部70aは処理部70の機能の一部を構成するブロックであり、HTTPサーバー61(図3)によりタブレット端末10と通信する。
選択部70aは、タブレット端末10が制御を要求した場合に、タブレット端末10が送信するデバイス識別子に基づいて制御対象のデバイスを特定する。選択部70aは、特定したデバイスに対応して、制御に使用するデバイス制御部を、第1デバイス制御部71及び第2デバイス制御部66の中から選択する。
以下の説明において、第1デバイス制御部71及び第2デバイス制御部66を区別せず総称する場合、「デバイス制御部」と記載する。
選択部70aは、第1デバイス制御部71を選択した場合、第1デバイス制御部71のデバイス制御スクリプト72(図3)を呼び出す。呼び出されたデバイス制御スクリプト72は、ポート制御部62と通信して、制御対象のデバイスが接続されたポートを特定し、特定した結果を戻り値として選択部70aに返す。選択部70aは、第1デバイス制御部71の戻り値に基づきポート制御部62と通信して、デバイスインターフェース81に接続されたデバイスを制御する。
また、選択部70aは、第2デバイス制御部66を選択した場合、第2デバイス制御部66に対応する第1デバイス制御部75のデバイス制御スクリプト76(図3)を呼び出す。デバイス制御スクリプト76は、制御対象のデバイスを制御するための情報を第2デバイス制御部66に対して出力する。
選択部70aは、第1デバイス制御部71及び第2デバイス制御部66を管理するため、上述したように、デバイス制御部管理テーブル22a(デバイス制御管理情報)を利用する。
図5は、デバイス制御部管理テーブル22aの構成例を示す模式図である。
図5に示すように、デバイス制御部管理テーブル22aは、デバイス識別子と、デバイス識別子に対応するデバイス制御部を構成するファイルとを対応づける。
デバイス制御部管理テーブル22aには、複数の一意のデバイス識別子を設定でき、一つのデバイス識別子に対して、複数のデバイス制御部を登録することができる。デバイス制御部は1つ以上の実行可能なプログラムを含んで構成され、例えば、複数個の実行可能なプログラムを含む構成とすることもできる。この場合、デバイス制御部管理テーブル22aによって、デバイス制御部を構成するプログラムのうち、最初に起動すべきプログラムが指定される。具体的には、デバイス制御部管理テーブル22aには、デバイス制御部を構成するプログラムである実行ファイルのパスが含まれる。
デバイス制御部管理テーブル22aは、デバイス制御部として、プログラムライブラリーや設定ファイルを登録可能な構成であってもよい。例えば、デバイス制御部として機能するプログラムが実行される際に、当該プログラムが、設定ファイルや、二次的に実行されるプログラムのファイルを所定の記憶領域にコピーして実行することがある。このような場合に、設定ファイルや二次的に実行されるプログラムをデバイス制御部管理テーブル22aにデバイス制御部として登録することで、必要なファイルを速やかに処理できるという利点がある。デバイス制御部を構成するプログラム、すなわち実行ファイルが、設定ファイル等のコピーを行わない場合には、デバイス制御部管理テーブル22aに、最初に呼び出されるプログラム(実行ファイル)の絶対パスのみを登録する構成としてもよい。
選択部70aは、アプリケーションAPによりデバイスの制御が要求された場合に、制御対象のデバイスのデバイス識別子に対応するファイルをデバイス制御部管理テーブル22aにより特定し、特定したファイルを実行させる。これにより、アプリケーションAPが指定したデバイスに対応するデバイス制御部を即座に起動できる。
また、デバイス制御部管理テーブル22aは、各デバイス制御部を構成する実行ファイルの可否を示すフラグを有する。すなわち、デバイス制御部管理テーブル22aにより、制御装置11にインストールされたデバイス制御部について、実行しない設定とすることが可能である。
図6は、デバイス通信管理テーブル22bの構成例を示す模式図である。
デバイス通信管理テーブル22bは、デバイス制御部によりデバイスを制御する場合の通信先を管理するためのテーブルである。デバイス通信管理テーブル22bは、制御対象のデバイスのデバイス識別子と、デバイスの制御を要求したタブレット端末10のアドレス(例えば、IPアドレス)とを対応づけて格納する。デバイスの制御を要求したタブレット端末10は、アプリケーションAPを実行したタブレット端末10を意味する。さらに、デバイス通信管理テーブル22bは、デバイス識別子に対応づけて、デバイス制御部の応答ポート番号(ソケット通信の応答ポート)を格納する。デバイス通信管理テーブル22bに設定されるタブレット端末10のアドレス(クライアントアドレス)は、タブレット端末10を特定できればよく、IPアドレスに限定されない。
デバイス通信管理テーブル22bの情報は、デバイスの制御を開始する際に登録され、デバイスの制御が終了すると削除される。このため、デバイス通信管理テーブル22bに登録されたデバイス識別子に対応するデバイスは、タブレット端末10により制御されている。このため、当該デバイスに対する制御を他のタブレット端末10が要求しても、選択部70aは要求を実行しない。これにより、1つのデバイスに対する制御の重複を防止できる。
第1デバイス制御部71及び第2デバイス制御部66は、常時実行されるものではなく、アプリケーションAPの要求に応じて、選択部70aが第1デバイス制御部71または第2デバイス制御部66を選択して起動させる。このため、処理部70を構成するプロセッサーやメモリー等の制御装置11のリソースを効率よく利用できる。
図5に示すデバイス制御部管理テーブル22aに登録される情報は、詳細は後述するが、選択部70aの機能によって追加、更新、或いは削除される。また、デバイス制御部管理テーブル22aに登録される情報を、タブレット端末10が送信する管理情報に基づいて、制御装置11が追加、更新、或いは削除する構成であってもよい。この場合、タブレット端末10が、デバイス制御部管理テーブル22aに対する処理(追加、更新、削除等)と処理する情報とを含む管理情報を制御装置11に送信する。処理部70は、タブレット端末10が送信する管理情報に従って、記憶部22が記憶するデバイス制御部管理テーブル22aに対して処理を行い、デバイス制御部管理テーブル22aを更新する。
図6に示すデバイス通信管理テーブル22bについても同様である。デバイス通信管理テーブル22bに登録される情報は、詳細は後述するが、選択部70aの機能によって追加、更新、或いは削除される。デバイス通信管理テーブル22bに登録される情報を、タブレット端末10が送信する管理情報に基づいて、制御装置11が追加、更新、或いは削除する構成であってもよい。この場合、タブレット端末10が、デバイス通信管理テーブル22bに対する処理(追加、更新、削除等)と処理する情報とを含む管理情報を制御装置11に送信する。処理部70は、タブレット端末10が送信する管理情報に従って、記憶部22が記憶するデバイス通信管理テーブル22bに対して処理を行い、デバイス通信管理テーブル22bを更新する。
図7は、POSシステム1の動作を示すシーケンス図である。図7において、制御装置11に接続される制御対象のデバイスを、「デバイス」と表記する。図7の「デバイス」は、具体的には、バーコードスキャナー12、キャッシュチェンジャー13、ディスプレー14、及びプリンターユニット21のいずれかである。
図7には、タブレット端末10が制御を要求したデバイスが、第2デバイス制御部66により制御されるデバイスである場合の動作を示す。すなわち、選択部70aが、デバイスに対応するデバイス制御部として、第2デバイス制御部66を選択する場合の動作を示す。
タブレット端末10は、HTTPクライアント42の機能によりHTTPサーバー61とTCP通信を確立する(ステップSA1)。ステップSA1の処理は、タブレット端末10と制御装置11との間に通信経路K1を形成するステップを含んでもよい。或いは、形成済みの通信経路K1においてTCPのコネクションを確立する処理であってもよい。
タブレット端末10は、ユーザーの操作に応じてアプリケーションAPを実行し、会計処理を行う。この処理で、タブレット端末10は、制御装置11に接続されたデバイスの制御を開始するデバイス制御開始要求を、制御装置11に送信する(ステップSA2)。デバイス制御開始要求は、バーコードスキャナー12、キャッシュチェンジャー13、ディスプレー14またはプリンターユニット21のいずれかに対する制御の開始を、制御装置11に要求するメッセージである。デバイス制御開始要求は、制御対象のデバイスを指定するデバイス識別子を含む。
HTTPサーバー61は、タブレット端末10が送信するデバイス制御開始要求を受信して転送する(ステップSA3)。HTTPサーバー61がデバイス制御開始要求を転送する送信先は、選択部70aが、デバイス制御開始要求に含まれるデバイス識別子に基づいて選択する。選択部70aは、デバイス識別子に対応する第1デバイス制御部71または第2デバイス制御部66を選択する。選択部70aは、デバイス識別子に対応する第2デバイス制御部66を選択した場合、この第2デバイス制御部66と通信する第1デバイス制御部75を、HTTPサーバー61の通信先として選択する。図7の動作例では、選択部70aにより第1デバイス制御部75が選択され、HTTPサーバー61から第1デバイス制御部75にデバイス制御開始要求が転送される。
第1デバイス制御部75は、デバイス制御スクリプト76を起動し(ステップSA4)、デバイス制御スクリプト76の機能により第2デバイス制御部66に対してデバイス制御開始要求を送信する(ステップSA5)。第2デバイス制御部66は、デバイス制御スクリプト76が送信するデバイス制御開始要求に応じて起動し(ステップSA6)、ヘッダー67を介してドライバー68を呼び出して、ドライバー68を初期化する(ステップSA7)。これによりドライバー68が初期化され(ステップSA8)、ドライバー68が制御対象のデバイスを初期化するための初期化コマンドを、デバイスに送信する(ステップSA9)。制御対象のデバイスは、初期化コマンドに基づき初期化され(ステップSA10)、この制御対象のデバイスを制御装置11が制御可能となる。
ステップSA2〜SA10の一連の動作において、デバイスの初期化が完了したことをドライバー68が検出し、ドライバー68から第2デバイス制御部66へデバイスの初期化完了の通知を送信してもよい。この場合、第2デバイス制御部66が第1デバイス制御部75に対し、デバイスの制御開始が完了したことを通知し、この通知を第1デバイス制御部75がHTTPサーバー61を介してタブレット端末10へ転送してもよい。
続いて、デバイスを動作させる必要に応じて、タブレット端末10が、デバイス制御要求を送信する(ステップSB1)。デバイス制御要求は、制御対象のデバイスのデバイス識別子、及び、デバイスに実行させる動作の内容を指定するデータを含む。
HTTPサーバー61は、タブレット端末10が送信するデバイス制御要求を受信して転送する(ステップSB2)。HTTPサーバー61がデバイス制御要求を転送する送信先は、デバイス識別子に対応して選択部70aがステップSA2〜SA3で選択した送信先である。図7の動作例では、HTTPサーバー61から第1デバイス制御部75にデバイス制御要求が転送される。
第1デバイス制御部75は、ステップSA4で起動したデバイス制御スクリプト76により、第2デバイス制御部66に対してデバイス制御要求を送信する(ステップSB3)。第2デバイス制御部66は、デバイス制御要求に含まれるデータを、ドライバー68のAPIに渡すデータに変換する(ステップSB4)。第2デバイス制御部66は、ドライバー68のAPIにデバイスを制御する内容を示すデータを渡す(ステップSB5)。
ドライバー68は、デバイスを動作させるコマンドを生成してデバイスに実行させ(ステップSB6)、これによりデバイスが、アプリケーションAPにより要求された動作を実行する(ステップSB7)。
ステップSB1〜SB7の一連の動作において、ドライバー68がデバイスの監視を実行し、デバイスの動作が完了したことを、デバイスのステータスとしてドライバー68から第2デバイス制御部66へ通知してもよい。この場合、第2デバイス制御部66が第1デバイス制御部75に対し、デバイスの動作が完了したことを通知し、この通知を第1デバイス制御部75がタブレット端末10へ転送してもよい。
タブレット端末10がデバイスを使用しない状態となった場合(例えば、会計処理のアプリケーションAPが終了した場合)、タブレット端末10は、デバイスの制御を終了するため、デバイス制御解除要求を送信する(ステップSC1)。HTTPサーバー61は、デバイス制御解除要求を転送する(ステップSC2)。図7の例では、デバイス制御解除要求は、選択部70aが選択した第1デバイス制御部75へ転送される。
第1デバイス制御部75は、デバイス制御解除要求を、第2デバイス制御部66に転送し(ステップSC3)、第2デバイス制御部66はドライバー68に対し、デバイス制御の解除を要求する(ステップSC4)。これにより、ドライバー68は、デバイスの制御を終了する処理を行い(ステップSC5)、デバイスが動作を停止する(ステップSC6)。
ステップSC1〜SC6の一連の動作において、ドライバー68がデバイスの監視を実行し、デバイスが停止したことを、デバイスのステータスとしてドライバー68から第2デバイス制御部66へ通知してもよい。この場合、第2デバイス制御部66が第1デバイス制御部75に対し、デバイスの制御が解除されたことを通知し、この通知を第1デバイス制御部75がタブレット端末10へ転送してもよい。
続いて、制御装置11にデバイス制御部を登録(インストール)及び削除する動作、デバイス制御部を利用する動作等について説明する。
図8は、POSシステム1の動作を示すフローチャートであり、デバイス制御部を制御装置11に登録する動作を示す。図8の符号Aはタブレット端末10の動作を示し、符号Bは制御装置11の動作を示す。
タブレット端末10が、デバイス制御部の登録を求める登録要求を制御装置11に送信すると(ステップS11)、制御装置11は、登録要求を受信して、選択部70aからタブレット端末10に登録フォームを送信する(ステップS21)。登録フォームは、登録に必要な情報を送信するためのテンプレートであり、登録フォームに基づき入力用のユーザーインターフェースをタブレット端末10が表示することにより、ユーザーが、情報を容易に入力できる。登録に必要な情報は、登録するデバイス制御部により制御されるデバイスのデバイス識別子、デバイス制御部を構成するファイルのパスを含む。
タブレット端末10は、登録フォームに基づいて入力された情報を制御装置11に送信する(ステップS12)。制御装置11は、タブレット端末10から送信される情報を受信して、受信した情報を選択部70aにより取得する(ステップS22)。選択部70aは、ステップS22で取得した情報が、すでに登録されているデバイス制御部と重複するか否かを判定する(ステップS23)。選択部70aは、ステップS23で、例えばデバイス制御部管理テーブル22aを参照して、登録済みのデバイス制御部と重複するか否かを判定する。例えば、選択部70aは、ステップS22で取得したファイル名やパス等の情報が、デバイス制御部管理テーブル22aに登録されている情報と一致するか否かに基づき、判定を行う。
登録済みのデバイス制御部と重複すると判定した場合(ステップS23;Yes)、選択部70aはステップS21に戻る。
登録済みのデバイス制御部と重複しないと判定した場合(ステップS23;No)、選択部70aは、取得したデバイス識別子に対応して実行可能なデバイス制御部が1つであるか否かを判定する(ステップS24)。例えば、選択部70aは、ステップS24で、デバイス制御部管理テーブル22aにおいて、実行可能フラグがONに設定されたデバイス制御部に対応するデバイス識別子を参照することにより、判定を行う。
デバイス識別子に対応するデバイス制御部が1つでない場合(ステップS24;No)、選択部70aはステップS21に戻る。これにより、1つのデバイス識別子に対応づけて複数のデバイス制御部が登録される状態を防ぐことができる。
デバイス識別子に対応するデバイス制御部が1つある場合(ステップS24;Yes)、選択部70aは、デバイス制御部を構成するファイルを格納するためのフォルダーを、記憶部22に作成する(ステップS25)。ステップS25で作成されるフォルダーには、ステップS22で取得したファイルのファイル名やパスに関連づけたフォルダー名等が付与される。
続いて、選択部70aは、ステップS25で作成したフォルダーに、デバイス制御部を構成するファイルを移動する(ステップS26)。選択部70aは、デバイス制御部管理テーブル22aに、登録したデバイス制御部に関する情報を登録する(ステップS27)。すなわち、選択部70aは、デバイス制御部管理テーブル22aに、デバイス識別子と、デバイス制御部を構成するファイルの情報とを登録する。また、ステップS27で、デバイス制御部の実行可能フラグをONに設定してもよい。
図9は、POSシステム1の動作を示すフローチャートであり、制御装置11からデバイス制御部を削除する動作を示す。図9において、符号Aはタブレット端末10の動作を示し、符号Bは制御装置11の動作を示す。
タブレット端末10が、削除するデバイス制御部に対応するデバイス識別子を制御装置11に送信すると(ステップS31)、制御装置11は、デバイス識別子を受信し、選択部70aにより取得する(ステップS41)。選択部70aは、ステップS41で取得したデバイス識別子がデバイス制御部管理テーブル22aに登録されていることを確認する(ステップS42)。
ステップS41で取得したデバイス識別子がデバイス制御部管理テーブル22aに登録されていない場合(ステップS43;No)、選択部70aは、タブレット端末10に対しデバイス識別子が存在しないことを通知し(ステップS44)、本処理を終了する。
デバイス識別子がデバイス制御部管理テーブル22aに登録されている場合(ステップS43;Yes)、選択部70aは、対象のデバイス識別子に対応づけてデバイス制御部管理テーブル22aに登録されたデバイス制御部を削除する(ステップS45)。ステップS45では、デバイス制御部を構成するファイルを削除する。
続いて、選択部70aは、対象のデバイス識別子に対応するデバイス制御部のファイルを格納していたフォルダーを、記憶部22から削除する(ステップS46)。さらに、選択部70aは、デバイス制御部管理テーブル22aから、対象のデバイス識別子、デバイス制御部のファイル名やパス等の情報を削除する(ステップS47)。ステップS47で、選択部70aは、実行可能フラグ等、デバイス識別子に対応づけてデバイス制御部管理テーブル22aに登録された各種の情報を削除してもよい。選択部70aは、削除を実行したことをタブレット端末10に通知し(ステップS48)、本処理を終了する。
図8及び図9に示す動作は、デバイス制御部を構成するプログラムやデータのファイルを、タブレット端末10から制御装置11に送信(アップロード)して制御装置11に登録する構成を例示した。この方法では、図8の動作でデバイス制御部を登録する際に、制御装置11が、ファイルを取得して記憶部22に記憶する。
POSシステム1の態様としては、上記の構成のほかに、デバイス制御部を構成するファイルを予め記憶部22に記憶しておき、この予め記憶されたファイルを用いてデバイス制御部を登録する構成が挙げられる。
この場合、図8の動作において、ステップS25〜S26の処理が省略される。また、図8のステップS12で、タブレット端末10は、デバイス制御部を構成するファイルのパス等の情報を送信し、ファイルは送信しない。また、図9の動作においてはステップS46の処理が省略される。この構成では、デバイス制御部を構成するファイルを移動することなく、デバイス制御部の登録および削除を行うことができる。また、デバイス制御部を削除してもデバイス制御部を構成するファイルが記憶部22に記憶されているので、削除されたデバイス制御部を再び登録する処理が容易になる。
図10は、POSシステム1の動作を示すフローチャートであり、制御装置11のデバイスの利用を開始する動作を示す。図10において、符号Aはタブレット端末10の動作を示し、符号Bは制御装置11の動作を示す。
タブレット端末10が、アプリケーションAPの動作に基づき、利用開始するデバイス識別子を制御装置11に送信すると(ステップS51)、制御装置11は、デバイス識別子を受信し、選択部70aにより取得する(ステップS61)。選択部70aは、ステップS61で取得したデバイス識別子がデバイス制御部管理テーブル22aに登録されていることを確認する(ステップS62)。
ステップS61で取得したデバイス識別子がデバイス制御部管理テーブル22aに登録されていない場合(ステップS63;No)、選択部70aはタブレット端末10に対し、デバイス識別子が存在しないことを通知し(ステップS64)、本処理を終了する。
デバイス識別子がデバイス制御部管理テーブル22aに登録されている場合(ステップS63;Yes)、選択部70aは、対象のデバイス識別子に対応づけてデバイス制御部管理テーブル22aに登録されたデバイス制御部を起動する(ステップS65)。ここで、選択部70aがデバイス制御部を起動する際に、選択部70aに引数が与えられる構成としてもよい。例えば、選択部70aが複数のデバイス制御部と通信する場合に、デバイス制御部を識別する情報(例えばソケット通信のポート番号が与えられる構成とすることができる。また、一つのデバイス制御部が異なる複数のデバイスを制御する場合に、ステップS65で、デバイスを識別するための情報(デバイス識別子等)が引数として選択部70aに与えられる構成であってもよい。これらの構成によれば、選択部70aが複数のデバイス制御部、或いは複数のデバイスの中から、制御対象のデバイスと、そのデバイスを制御するデバイス制御部とを特定できる。
選択部70aは、起動したデバイス制御部の機能により、デバイスの初期化を実行する(ステップS66)。デバイス制御部(例えば、第2デバイス制御部66)は、デバイスの初期化が完了した場合に、初期化の完了を示す通知を行う(ステップS67)。ステップS67では、選択部70aがデバイス制御部と通信するポート宛てに通知が行われる。例えば、デバイスの初期化が完了した場合、初期化完了から一定時間内に、デバイス制御部が選択部70aに対して通信を実行する構成とし、この通信の実行を、初期化完了の通知とみなす構成であってもよい。この構成では、例えば、共通通信ライブラリー65を初期化する処理を行うことにより、デバイスの初期化完了を通知できる。従って、デバイス初期化完了を示す電文を選択部70aに送信する必要がなく、手順を簡略化できる。
選択部70aは、初期化完了の通知を受け取った後、デバイス制御部に応答通信を行い(ステップS68)、デバイス通信管理テーブル22bに情報を登録する(ステップS69)。ステップS69では、例えば、ステップS61で取得したデバイス識別子、起動したデバイス制御部が通信するタブレット端末10のアドレス、及び、ポート番号をデバイス通信管理テーブル22bに登録する。
その後、選択部70aは、ステップS51で送信されたデバイス識別子に対応するデバイスが利用可能であることを、タブレット端末10に通知し(ステップS70)、本処理を終了する。
図11は、POSシステム1の動作を示すフローチャートであり、制御装置11のデバイス制御部を利用する動作を示す。図11において、符号Aはタブレット端末10の動作を示し、符号Bは制御装置11の動作を示す。
タブレット端末10は、アプリケーションAPの動作に基づき、制御対象のデバイス識別子と、デバイスに実行させる動作内容を示す情報とを含む電文を制御装置11に送信する(ステップS71)。ステップS71で送信される電文は、例えば、HTTPクライアント42とHTTPサーバー61とが送受信するXML形式のデータである。
制御装置11は、デバイス識別子を受信し、選択部70aにより取得する(ステップS81)。選択部70aは、ステップS81で取得したデバイス識別子がデバイス通信管理テーブル22bに登録されていることを確認する(ステップS82)。
ステップS81で取得したデバイス識別子がデバイス通信管理テーブル22bに登録されていない場合(ステップS83;No)、選択部70aは、タブレット端末10に対し、デバイスが利用可能でないことを通知し(ステップS84)、本処理を終了する。
ステップS81で取得したデバイス識別子がデバイス通信管理テーブル22bに登録されている場合(ステップS83;Yes)、選択部70aは、デバイス制御部の通信ポートを取得する(ステップS85)。詳細には、選択部70aは、対象のデバイス識別子に対応づけてデバイス制御部管理テーブル22aに登録されたデバイス制御部の通信ポートの情報を取得する。
選択部70aは、取得した通信ポートあてに、ステップS81で受信した電文を送信する(ステップS86)。デバイス制御部は、選択部70aから送信された電文を、デバイスを制御するためのデバイス制御命令に変換する(ステップS87)。そして、変換されたデバイス制御命令に従って、デバイスドライバー73或いはドライバー68が、デバイスに対応するコマンドを生成して、デバイスを制御する(ステップS88)。
デバイス制御部は、デバイスの制御の結果を検出または取得し、制御の結果を示す電文を生成して、選択部70aに送信する(ステップS89)。選択部70aは、デバイスの制御の結果をタブレット端末10に通知し(ステップS90)、本処理を終了する。
図12は、制御装置11の動作を示すフローチャートである。図12は、特に、制御装置11がデバイスのイベントを検出する動作を示す。
図12の動作は、選択部70aにより起動されたデバイス制御部が実行する。デバイス制御部は、図10に示した動作により起動され、制御対象のデバイスを初期化した後、デバイスのイベントを待ち受けする(ステップS101)。デバイス制御部は、デバイスで発生したイベントを受信すると(ステップS102)、イベント内容を、選択部70aが読み取り可能な電文に変換して、選択部70aに送信する(ステップS103)。選択部70aは、デバイス通信管理テーブル22bを参照し(ステップS104)、デバイス通信管理テーブル22bに設定されたタブレット端末10のアドレス宛に、電文を送信する(ステップS105)。これにより、利用可能なデバイスでイベントが発生した場合に、イベントの内容を、タブレット端末10に対して通知できる。
図13は、POSシステム1の動作を示すフローチャートであり、制御装置11のデバイスの利用を停止する動作を示す。図13において、符号Aはタブレット端末10の動作を示し、符号Bは制御装置11の動作を示す。
タブレット端末10が、アプリケーションAPの動作に基づき、利用停止するデバイス識別子を制御装置11に送信すると(ステップS111)、制御装置11は、デバイス識別子を受信し、選択部70aにより取得する(ステップS121)。選択部70aは、ステップS121で取得したデバイス識別子に基づき、デバイス通信管理テーブル22bを参照する(ステップS122)。
選択部70aは、ステップS121で取得したデバイス識別子に対応するデバイス制御部に対し、利用停止を指示する電文を送信する(ステップS123)。
デバイス制御部は、デバイスを制御して利用を停止する処理を行い(ステップS124)、デバイス制御部から選択部70aへ通信する通信経路を閉じる処理を行う(ステップS125)。ここで、デバイス制御部は、デバイスの利用停止をする処理の結果に関わらず、デバイス制御部と選択部70aとの通信を切断してもよい。具体的には、共通通信ライブラリー65が、デバイス制御部からデバイスの利用停止を示す通知を受け取ったときに、デバイス選択部への通信を切断する仕様により実現できる。
選択部70aは、デバイス通信管理テーブル22bにおいて、利用停止したデバイス識別子に対応づけて登録されている情報を削除する(ステップS126)。例えば、選択部70aは、対象のデバイス識別子に対応づけてデバイス通信管理テーブル22bに登録されたアドレスやパスを削除する。
このように、制御装置11は、ヘッダー67及びドライバー68のような汎用のデバイスドライバーを、第2デバイス制御部66により利用可能としている。このため、デバイスドライバープログラムが公開されているデバイスを制御装置11に接続する場合、このデバイスを速やかに利用でき、例えばデバイスの仕様に合わせて専用のデバイスドライバー73を用意する手間を省略できる。また、デバイスドライバー73を作成するための仕様が公開されていないデバイスであっても、制御装置11に接続して利用できる。
また、制御装置11が、汎用API仕様に適合する第2デバイス制御部66を用いれば、このAPI仕様に適合するデバイスを制御できる。例えば、第2デバイス制御部66が、OPOSバーコードスキャナーAPIに対応する構成である場合、異なる製造事業者(ベンダー)から提供されるバーコードスキャナーを、OPOSバーコードスキャナーAPIにより利用できる。すなわち、製造事業者A社が製造または販売するバーコードスキャナー「A」と、製造事業者B社が製造または販売するバーコードスキャナー「B」との両方を、第2デバイス制御部66、及びOPOSバーコードスキャナーAPIにより制御できる。さらに、制御装置11により制御可能なデバイスは、デバイスのインターフェースに依存しないので、デバイスを制御装置11に接続する方法は限定されず、様々なデバイスを利用できるという利点がある。
以上説明したように、本発明を適用した実施形態に係る制御装置11は、タブレット端末10と通信する第1通信部としてのHTTPサーバー61と、デバイスと通信する第2通信部としてのデバイスインターフェース81と、を備える。制御装置11は、デバイスに対応する第1制御モジュールを実装した第1デバイス制御部71と、デバイスに対応可能な第2制御モジュールを利用する第2デバイス制御部66と、を備える。第1制御モジュールは、例えば、デバイスドライバー73であり、第2制御モジュールは、例えばドライバー68、または、ヘッダー67とドライバー68の組合せである。制御装置11は、HTTPサーバー61によりタブレット端末10から受信する制御情報に基づき、第1デバイス制御部71または第2デバイス制御部66を選択する処理部70を備える。処理部70は、制御情報に基づきコマンドを生成して、生成したコマンドをデバイスインターフェース81によりデバイスに送信する。
タブレット端末10が送信する制御情報は、制御対象のデバイスを示すデバイス識別子を含む。また、制御情報は、制御開始の要求、制御終了の要求、デバイス識別子で指定されるデバイスに対する制御の内容等のいずれかを含んでもよい。
本発明のデバイス制御装置、及び、デバイス制御装置の制御方法を適用した構成によれば、デバイスを制御する際に、第1制御モジュールを実装した第1デバイス制御部71と、第2制御モジュールを利用する第2デバイス制御部66とを選択できる。第1制御モジュールは、デバイスドライバー73について上述したように、デバイスに対応する制御モジュールであり、デバイスの機種、種類、製造事業者等に対応する、いわば専用の制御プログラムである。これに対し、第2制御モジュールはデバイスに対応可能な制御モジュールであって、このデバイスを含む複数の機種または複数種類のデバイスを制御できる汎用的なプログラムであってもよい。例えば、デバイスクラスに対応して提供される、公知の汎用制御モジュールとすることができる。
従って、デバイスを制御するために、例えば汎用のプログラムモジュールである第2制御モジュールと、第1制御モジュールとを利用可能である。容易に入手可能な汎用の第2制御モジュールを実装可能であれば、専用の第1制御モジュールが開発中であるなどの未対応の場合、必ずしも専用の第1制御モジュールを実装しなくて済む。このため、デバイスに対応する制御モジュールを調達するための負担を軽減でき、様々なデバイスを利用することが可能となる。
制御装置11は、デバイスを識別するデバイス識別子と第1デバイス制御部71または第2デバイス制御部66との対応を示すデバイス制御部管理テーブル22aを記憶する記憶部22を備える。処理部70は、タブレット端末10から受信した制御情報に含まれるデバイス識別子に基づき、記憶部22のデバイス制御部管理テーブル22aを参照して、第1デバイス制御部71または第2デバイス制御部66を選択する。処理部70は、選択したデバイス制御部により、制御情報に含まれるデバイス識別子により指定されるデバイスにコマンドを送信する。この構成によれば、デバイス制御部管理テーブル22aに基づき、第1制御モジュールを実装した第1デバイス制御部71と、第2制御モジュールを利用する第2デバイス制御部66とを、デバイスに対応して適切に選択できる。
記憶部22は、デバイス識別子とタブレット端末10との対応を示すデバイス通信管理テーブル22bを有する。処理部70は、タブレット端末10から受信した制御情報に含まれるデバイス識別子に基づき、記憶部22のデバイス通信管理テーブル22bを参照して、制御情報に含まれるデバイス識別子により指定されるデバイスが通信可能か否かを判定する。処理部70は、通信可能と判定した場合に、第1デバイス制御部71または第2デバイス制御部66を選択する。この構成によれば、タブレット端末10が指定したデバイスが通信可能である場合に、第1デバイス制御部71または第2デバイス制御部66を選択してコマンドを送信するので、デバイスの制御を効率化できる。
処理部70は、HTTPサーバー61によりタブレット端末10から受信する管理情報に基づき、デバイス制御部管理テーブル22a、及び/または、デバイス通信管理テーブル22bの追加、更新、及び削除の少なくともいずれかを実行可能であってもよい。この構成によれば、制御対象のデバイスに関する情報に対する追加、更新、削除等が可能であるため、デバイスを効率よく制御できる。
処理部70は、第1デバイス制御部71及び第2デバイス制御部66を選択する選択部70aを有する。また、処理部70は、選択部70aにより第1デバイス制御部71が選択された場合に、第1デバイス制御部71が実装する第1制御モジュールの処理結果に基づき、デバイスにコマンドを送信する第1処理部としてのポート制御部62を有する。また、処理部70は、選択部70aにより第2デバイス制御部66が選択された場合に、タブレット端末10から受信した制御情報に基づく第2デバイス制御情報を第2デバイス制御部66に送信する共通通信ライブラリー65を備える。第2デバイス制御部66は、共通通信ライブラリー65から受信した第2デバイス制御情報に基づき、第2制御モジュールに対応する制御データを生成する。この構成によれば、第2デバイス制御部66が通信モジュールを介して第2デバイス制御情報を受け取るので、第2制御モジュールが第1制御モジュールとは異なる仕様であっても、確実に第2制御モジュールを機能させることができる。
制御装置11は、ドライバー68毎の制御データを規定する変換テーブル82を有する。第2デバイス制御部66は、変換テーブル82を参照して、共通通信ライブラリー65から受信した第2デバイス制御情報をドライバー68に対応する制御データに変換する。この構成によれば、複数の第2制御モジュールの各々について、制御データを対応するデータに変換できる。このため、様々な仕様の第2制御モジュールを機能させることができ、多様なデバイスを制御できる。
第2制御モジュールとしてのドライバー68は、第2デバイス制御部66から入力される制御データに基づき、デバイスに固有のコマンドを生成する。この構成によれば、固有のコマンドを必要とするデバイスを制御できるので、より幅広い種類のデバイスを利用できる。
また、共通通信ライブラリー65は処理部70と第2デバイス制御部66との間の通信を仲介するラッパーとして構成されるので、第2デバイス制御部66に対し、第2制御情報をより適切に入力させることができる。
なお、上述した実施の形態は、あくまでも本発明の一態様を示すものであり、本発明の範囲内で任意に変形および応用が可能である。
例えば、上述した実施形態では、レジカウンターLを有する店舗に、POSシステム1が適用された場合を例にして、本発明を説明した。POSシステムの使用の態様はこの例に限らず、例えば、喫茶店や、レストラン等の飲食店に対して適用することも可能である。また例えば、制御装置11と、POSサーバー17とは、別個の装置であったが、制御装置11にPOSサーバー17の機能を持たせてもよい。また例えば、制御装置11はサーマルプリンターであったが、記録形式は何であってもよい。
また例えば、図2〜図4に示す各機能ブロックはハードウェアとソフトウェアの協働により任意に実現可能であり、特定のハードウェア構成を示唆するものではない。また、各機器は、外部接続される記憶媒体に記憶させたプログラムを実行することにより、各種動作を実行してもよい。