以下、図面を参照して、実施形態について説明する。実施形態では、リーダライタ装置がタグと非接触無線通信を行う一例を示している。リーダライタ装置は、タグに対してデータを書き込む機能(ライト機能)を有していればよく、実施形態ではタグからデータを読み出す機能(リード機能)は必須ではない。従って、タグとの非接触無線通信を行う装置としては、データを書き込む機能だけを有する装置を使用してもよい。
図1は、実施形態のシステム1の一例を示している。システム1は、図1の一例に限定されない。システム1は、情報処理装置2と通信制御装置3とリーダライタ装置4A〜4CとタグAとを備えている。なお、通信制御装置3は、図1の構成に限定されない。また、リーダライタ装置4A〜4C(総称して、リーダライタ装置4とする)の個数も3つには限定されない。
情報処理装置2は、例えばパーソナルコンピュータである。情報処理装置2ではアプリケーション(ソフトウェア)が動作している。アプリケーションの制御により、タグに対して所定のデータの書き込みが行われる。このため、情報処理装置2と通信制御装置3とは通信可能に接続されている。
通信制御装置3は、情報入出力部11と装置起動制御部12とタグ検索部13とコマンド決定部14とコマンド処理部15とタグリード部16とリーダライタ装置決定部17とリーダライタ装置制御部18と性能測定部19とエラー頻度検出部20とテーブル記憶部21とメモリ22とテーブル管理部23とを備えている。なお、図1において、リーダライタ装置を「R/W装置」と示している。
情報入出力部11は、情報処理装置2のアプリケーションと通信を行う。情報入出力部11はタグに対して書き込みを行うデータや種々の情報をアプリケーションから入力する。また、情報入出力部11はアプリケーションに対して所定の情報を出力する。
装置起動制御部12は、リーダライタ装置4A〜4Cの起動制御を行う。アプリケーションは何れのタグにデータの書き込みを行うかによって、タグと通信を行うリーダライタ装置を通信制御装置3に指示する。装置起動制御部12は、データの書き込みを行うタグに対応するリーダライタ装置を起動(オープン)する。
タグ検索部13は、タグを検索する制御を行う。タグの検索には、例えばタグ識別子が使用される。タグ識別子としては、例えばTID(Tag Identifier)やEPC(Electronic Product Code)等が使用される。
コマンド決定部14は、タグに書込みを行うコマンドを決定する。実施形態では、2種類の書き込みコマンドの何れかのコマンドを使用して、タグに対してデータの書き込みを行う。書き込みコマンドの種類としては、ワード単位の書き込みとブロック単位の書き込みとの2つがある。ただし、書き込みコマンドの種類は2種類には限定されない。
コマンド処理部15は、コマンド決定部14が決定した書き込みコマンドを使用して、タグに対してデータを書き込む種々の処理を行う。タグリード部16は、タグからデータを読み出す処理を行う。なお、上述したように、実施形態ではタグからデータを読み出すことは必須ではないため、タグリード部16は必須の要素ではない。
リーダライタ装置決定部17は、情報処理装置2のアプリケーションからの命令に基づいて、リーダライタ装置4A〜4Cのうち何れのリーダライタ装置を起動するかを決定する。実施形態では、タグAにデータを書き込む一例を示すため、リーダライタ装置4Aが起動するものとする。
リーダライタ装置制御部18は、リーダライタ装置4A〜4Cを制御する。リーダライタ装置制御部18は、リーダライタ装置決定部17が決定したリーダライタ装置4Aを起動させるように制御する。この制御に基づき、リーダライタ装置4Aは起動を開始する。リーダライタ装置制御部18は制御部とも称される。
性能測定部19は、リーダライタ装置4A〜4Cが対応するタグにデータを書き込むときの通信性能を測定する。ここでは、リーダライタ装置4A〜4Cが対応するタグにデータを書き込むのに要する時間を通信性能として測定する。
エラー頻度検出部20は、リーダライタ装置4A〜4Cが対応するタグに情報を書き込むときの書込みエラーの頻度を検出する。リーダライタ装置4A〜4Cがタグにデータを書込むときに、書き込みエラーが発生することがある。エラー頻度検出部20は、書き込みエラーの頻度を検出する。
テーブル記憶部21は、後述する図4に示すようなテーブルを記憶する。このテーブルには、性能測定部19が測定した書き込み時間やエラー頻度検出部20が検出したエラー頻度が反映される。テーブル記憶部21は、単に記憶部とも称される。
メモリ22は、テーブル記憶部21から読み出されたテーブルを一時的に記憶する。そして、テーブル管理部23がテーブルの各データの更新を行い、更新されたテーブルはテーブル記憶部21に記憶される。また、コマンド決定部14がコマンドを決定するときには、コマンド決定部14はメモリ22に読み出されたテーブルを参照して、コマンドを決定する。
実施形態では、テーブル記憶部21が記憶しているテーブルがメモリ22に読み出されるが、メモリ22は必須の要素ではない。テーブルの内容が変更されるときには、直接的にテーブル記憶部21のテーブルを更新し、コマンド決定部14がコマンドを決定するときには、直接的にテーブル記憶部21に記憶されているテーブルを参照してもよい。
テーブル管理部23は、テーブル記憶部21およびメモリ22を管理している。テーブル管理部23は、テーブル記憶部21からメモリ22にテーブルの読み出しを行う。また、テーブル管理部23は、メモリ22に読み出されたテーブルの内容の変更を行う。そして、テーブル管理部23は、メモリ22に読み出されたテーブルをテーブル記憶部21に記憶する。
次に、リーダライタ装置4A〜4Cを説明する。リーダライタ装置4A〜4Cは、それぞれに対応するタグと非接触無線通信を行う。図1に示した一例では、リーダライタ装置4AとタグAとが通信を行っている状態を示している。
リーダライタ装置4Aは所定範囲に存在しているタグAと通信を行う。リーダライタ装置4Aが無線通信可能な範囲は近距離であるため、タグAがリーダライタ装置4Aと無線通信可能な範囲から外れると、書込みエラーが生じる。
タグは、RFIDタグやICタグ、非接触ICカード、非接触ICチップ等と称されることもある。リーダライタ装置4AはタグAに無線通信を行い、データを書き込むことができる。図1には図示はしていないが、リーダライタ装置4Bに対応するタグB、リーダライタ装置4Cに対応するタグCも同様である。
次に、図2を参照して、通信制御装置3のハードウェアの構成を示す。図2に示すように、バス30にプロセッサ31とRAM(Random Access Memory)32とROM(Read Only Memory)33と記憶装置34と通信インタフェース35と入出力装置36とが接続されている。
プロセッサ31はCPU(Central Processing Unit)のような任意の処理回路である。プロセッサ31はRAM32に展開されたプログラムを実行する。ROM33はRAM32に展開されるプログラムを記憶する不揮発性の記憶装置である。RAM32に展開されるプログラムは記憶装置34に記憶されていてもよい。記憶装置34の一例としては、可搬型記録媒体や半導体メモリ、ハードディスクドライブ等を適用できる。なお記憶装置34は補助記憶装置とも称される。
RAM32、ROM33および記憶装置34は、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
一例として、装置起動制御部12、タグ検索部13、コマンド決定部14、コマンド処理部15、タグリード部16、リーダライタ装置決定部17、リーダライタ装置制御部18、性能測定部19、エラー頻度検出部20およびテーブル管理部23はプロセッサ31により実現されてもよい。
情報入出力部11は入出力装置36により実現されてもよい。メモリ22はRAM32により実現されてもよい。リーダライタ装置制御部18とリーダライタ装置4A〜4Cとの間の通信は通信インタフェース35により実現されてもよい。
次に、書込みコマンドについて説明する。上述したように、実施形態の書込みコマンドには、ブロック単位の書込みとワード単位の書込みとの2種類の書込みコマンドがある。実施形態では、2種類の書込みコマンドを例示しているが、他の種類の書込みコマンドを使用してもよい。
まず、タグのメモリ空間について説明する。タグに情報を記憶できる領域(メモリ空間)は、主にユーザ領域とシステム領域とに分かれている。システム領域はタグのシステムに関する情報が記憶されている。
一方、ユーザ領域には、任意のデータを書き込むことができる。ユーザ領域は所定数のブロックに分割されている。各ブロックは所定のデータ量を有する。例えば、ユーザ領域が2キロバイト、各ブロックは8バイトのデータを記憶することができる。
タグのユーザ領域に対して、リーダライタ装置はブロック単位またはワード単位でデータを書き込むことができる。ブロック単位での書込みはワード単位での書込みよりも高速にタグにデータを書き込むことができる場合が多い。従って、ブロック単位での書込みを使用することが好適な場合が多い。
しかしながら、ワード単位での書込みの方がブロック単位での書込みよりも高速になる場合がある。図3を用いて説明する。図3において、「タグ」と示しているのは、タグのユーザ領域を示している。タグの領域は複数のブロックに分割されており、図3で示しているのは、ブロック番号「5」とブロック番号「6」とである。各ブロックは8バイトの記憶領域を有しているものとする。
図3で「ブロック単位書込み1」と示しているのが、書込みコマンドがブロック単位書込みを指定した場合の一例である。書込みブロックはユーザ領域のブロックと同じく8バイトであるものとし、タグのブロック番号「5」と書込みブロックとは同じ位置となっている。例えば、書込みブロックが指定するタグのアドレスが、タグのブロック番号「5」の開始アドレスと一致している場合がある。
この場合、タグのブロック番号「5」と書込みブロックとは同じ位置(例えば、同じ開始アドレス)となっているため、1回の書込みで、書込みブロックをタグのブロック番号「5」に書き込むことができる。
一方、図3で「ブロック単位書込み2」と示しているのが、書込みコマンドがブロック単位書込みを指定した場合の他の例である。書込みブロックは「ブロック単位書込み1」と同じく8バイトであるものとする。
ただし、「ブロック単位書込み2」は「ブロック単位書込み1」と異なり、ブロックを書き込む位置が異なる。「ブロック単位書込み2」では、タグのブロック番号「5」の記憶領域の途中位置からブロック単位書込みを行う。タグに書き込むブロックは8バイトであるため、タグのブロック番号「5」の記憶領域だけでは全てのデータを書き込むことができない。
図3の一例では、タグのブロック番号「5」の記憶領域に4バイトのデータを書き込むことができたとする。タグに書き込むデータ量は8バイトであるため、残りの4バイトのデータはタグのブロック番号「6」の記憶領域に書き込まれる。
従って、図3の「ブロック単位書込み2」の場合は、タグの記憶領域のブロック番号「5」とブロック番号「6」とにまたがってデータのブロック単位書込みが行われる。このため、タグの記憶領域の異なるブロック番号にブロック単位書込みが行われるため、書込み速度が低速になる。
上述したように、書込みコマンドとしては、ワード単位の書込みよりもブロック単位の書込みの方が高速である場合が多い。しかしながら、上述したように、タグの記憶領域の異なるブロック番号にブロック単位書込みが行われるような場合には、ブロック単位の書込みよりもワード単位の書込みの方が高速になる場合がある。
従って、書込みコマンドとして、ワード単位の書込みを選択した方が高速にタグに書込みを行うことができる場合と、ブロック単位の書込みを選択した方が高速にタグに書込みを行うことができる場合とがある。
次に、図4を参照して、テーブル記憶部21に記憶されるテーブルについて説明する。テーブルの一例を図4に示す。なお、テーブルの形式や項目は、図4に示した例に限定されることはない。
図4のテーブルの項目について説明する。リーダライタ装置種別(図4ではR/W装置種別)は、リーダライタ装置の種別を示している。ここでは、リーダライタ装置4Aを「装置A」として示し、リーダライタ装置4Bを「装置B」として示している。図示はしていないが、リーダライタ装置種別に、リーダライタ装置4Cに対応する「装置C」もある。
RFIDタグ種別は、リーダライタ装置4ごとに非接触無線通信を行うタグを識別するタグ識別子(TID)を示している。図4では、「0x00112233」のタグ識別子を有するタグについてのテーブルのデータの中身を詳細に示している。図示はしていないが、「0x22334455」以外のタグについても同様である。
図4に示すように、コマンド動作には、大別して、ワード書込みとブロック単位書込みとがある。ワード書込みには、「Word書込最大サイズ」と「Word書込み性能」とがある。ブロック単位書込みには、「BlockWrite可否」と「Blockサイズ」と「Blockまたがり可否」と「Block書込み性能」とがある。
まず、ワード書込みについて説明する。「Word書込最大サイズ」は、タグにワード書込みを行うときに、書込み可能な最大サイズに関する情報である。図4の一例では、「128Word」になっている。つまり、ワード書込みを行うときには、1回の書込みコマンドで最大「128ワード」のデータの書込みを行うことが可能になっている。
図4の「Word書込み性能」の一例では、書込みサイズが1Word、2Word、4Word、8Word、16Word、32Wordについて、初期値性能と学習値性能とエラー頻度とエラー回数と書込み回数とを示している。なお、図4のテーブルの一例には示されていないが、64Word、128Wordについても、初期値性能と学習値性能とエラー頻度とエラー回数と書込み回数とが設けられていてもよい。
初期値性能の「性能」とは、リーダライタ装置がタグにデータを書き込むときに要する時間を示している。つまり、データの書き込み時間を「性能」という指標で表している。なお、「性能」を示す指標は上記の時間に限定されない。
初期値性能は、上記の時間の初期値である。初期値性能は、実際にシステム1を運用する前に、リーダライタ装置がタグにデータを書き込む時間を性能測定部19が測定し、その結果を初期値性能として記憶してもよい。また、リーダライタ装置とタグとの仕様に基づいて、初期値性能を記憶してもよい。
学習値性能は、システム1を運用した後に、リーダライタ装置がタグに書き込むのに要する時間を性能測定部19が測定し、その結果を反映した時間である。学習値性能は、データを書き込むときの実測時間を反映した書き込み時間とも称される。
例えば、リーダライタ装置がタグに書き込むごとに、上記の時間の平均値を演算して、演算した平均値の時間を学習値性能としてもよい。また、初期値性能に対して、リーダライタ装置がタグに書き込むごとに、性能測定部19が測定した時間と初期値性能の時間との差分を演算して、演算結果を学習値性能としてもよい。
エラー頻度は、リーダライタ装置がタグにデータの書込みを行うときに、エラーが発生する頻度を示している。エラー頻度は、リーダライタ装置がタグにデータの書込みを行った回数に対してエラーが発生した回数の割合で示してもよい。また、エラー頻度は、システム1を運用してから発生したエラーの総数で示してもよい。
次に、ブロック単位書込みについて説明する。図4のテーブルの一例では、「Blockwrite可否」、「Blockサイズ」、「Blockまたがり可否」および「Block書込み性能」が設けられている。
「Blockwrite可否」はブロック単位書込みが可能か否かを示している。タグによっては、ブロック単位書込みができない場合もあり、この場合は、「Blockwrite可否」は不能になる。図4のテーブルの一例において、「Blockwrite可否」が不能になっている場合には、ブロック単位書込みができない。このため、書込みコマンドとしては、ワード単位の書込みコマンドが選択されることになる。
「Blockサイズ」は書込みコマンドで書き込まれるブロックのサイズを示している。図4の一例では、8Wordになっている。従って、タグには8ワードを1つのブロックとして書込みが行われる。
「Blockまたがり可否」は、タグの記憶領域の複数のブロックをまたがって書き込むことができるか否かを示している。例えば、図3で示した「ブロック単位書込み2」は、タグの記憶領域のブロック番号「5」とブロック番号「6」とにまたがって、リーダライタ装置がタグに対して書込みを行う。
このとき、「Blockまたがり可否」が「否」であれば、図3で示した「ブロック単位書込み2」のような書込みを行うことはできない。従って、「Blockまたがり可否」が「否」のときには、書き込みを行うデータのブロックを分割してブロック単位書込みを行う。
「Block書込み性能」については、「ワード書込み性能」と同様である。すなわち、サイズと初期値性能と学習値性能とエラー回数と書き込み回数との項目を有している。各項目の内容は、「ワード書込み性能」の項目の内容と同じである。
図4のテーブルの一例では、「Block書込み性能」の16Wordおよび32Wordが「不可」になっている。これは、図4のテーブルの一例の「Blockまたがり可否」が「否」であり、「Blockサイズ」が8Wordになっているためである。
つまり、「Blockサイズ」が8Wordを超過するサイズについては、タグの記憶領域のブロックをまたがることになるため、8Wordのブロックを一括して書き込むことができない。このため、8Wordのブロックを2つのブロックに分割して書き込みを行う。
図4に示すテーブルの一例を参照すると、初期値性能と学習値性能とは異なる値になっている。これは、リーダライタ装置がタグに書込みが行われたときに、性能測定部19が書込みに要する時間を実際に測定し、その結果を学習値性能として反映させているためである。
つまり、リーダライタ装置がタグに書込みを行うごとに、書込みに要する時間を性能として学習していることになる。そして、学習した性能を反映することで、実際にシステム1を運用しているときの、学習値性能をテーブルに記憶させることができる。
性能測定部19が測定した時間をテーブルに反映させるのは、任意のタイミングごとでよい。つまり、リーダライタ装置がタグに1回の書き込みを行うごとに、実測した時間をテーブルに反映させるのではなく、例えば、2回の書き込みが行われるうちの1回の書き込みが行われたときに、性能測定部19が実測を行ってもよい。そして、2回の書き込みに対して1回の書き込みの割合で、実測した時間をテーブルに反映させてもよい。
エラー頻度検出部20は、リーダライタ装置がタグに書込みを行った回数を検出している。また、エラー頻度検出部20は、リーダライタ装置がタグに書込みを行ったときに、エラーが発生した回数を検出している。従って、エラー頻度検出部20は、リーダライタ装置がタグに書込みを行った回数に対するエラーの発生回数の割合を演算子、エラー頻度としてテーブルに記憶させる。
以上のテーブルは、リーダライタ装置からタグに書込みを行うときに、コマンド決定部14が参照する。コマンド決定部14は、上述したように、書込みコマンドを決定する。つまり、コマンド決定部14は、ワード単位の書込みコマンドまたはブロック単位の書込みコマンドの何れかを決定する。
コマンド決定部14がテーブル記憶部21に記憶されているテーブルを参照するときには、テーブル管理部23がメモリ22にテーブルを読み出す。読み出されたテーブルが図4に示す例のテーブルであったとする。
コマンド決定部14は、学習値性能とエラー頻度とに基づいて、ワード単位の書込みコマンドまたはブロック単位の書込みコマンドの何れにするかを決定する。コマンド決定部14は学習値性能が高く(タグに書き込むのに要する時間が少ない)、エラー頻度が少ない方の書込みコマンドを選択する。
例えば、図4に示した一例のテーブルにおいて、4ワードのサイズのデータを書き込むときに、コマンド決定部14はメモリ22に読み出されたテーブルを参照する。図4に示した一例のテーブルでは、ワード単位の書込みの4ワードのサイズについては、学習値性能が「200ms」であり、エラー頻度は「10%」である。一方、ブロック単位の書込みの4ワードのサイズについては、学習値性能が「160ms」であり、エラー頻度は「10%」である。
従って、ワード単位の書込みとブロック単位の書込みとでは、エラー頻度は同一である。この場合、ワード単位の書込みとブロック単位の書込みとの何れを選択するかは、学習値性能により決定される。
ワード単位の書込みの学習値性能は「200ms」であるのに対して、ブロック単位の書込みの学習値性能は「160ms」である。従って、ブロック単位の書込みの方が書き込みコマンドとして性能が高い。つまり、ブロック単位の書き込みの方が、タグAに対して高速にデータの書き込みを行うことができる。よって、コマンド決定部14は、書込みコマンドとしてブロック単位の書込みを選択する。
従って、コマンド決定部14は、学習値性能が優れ(高速に書き込みができ)、且つエラー頻度が少ない方の書き込みコマンドを選択する。また、コマンド決定部14は、ブロック単位の書き込みとワード単位の書き込みとの学習値性能が同一の場合には、エラー頻度が少ない方の書き込みコマンドを選択し、ブロック単位の書き込みとワード単位の書き込みとのエラー頻度が同一の場合には、学習値性能が優れている方の書き込みコマンドを選択する。
次に、性能予測値を用いた書き込みコマンドの決定について説明する。性能予測値は、学習値性能にエラー頻度を反映させた値である。上述した一例では、ブロック単位の書き込みとワード単位の書き込みとのうち、学習値性能が優れ、且つエラー頻度が少ない方の書き込みコマンドが選択される。
また、ブロック単位の書き込みとワード単位の書き込みとのうち、学習値性能が同一の場合には、エラー頻度が少ない方の書き込みコマンドが選択される。同様に、エラー頻度が同一の場合には、学習値性能が優れている方の書き込みコマンドが選択される。
しかしながら、書き込みコマンドを決定するときに、学習値性能は優れているが、エラー頻度が多い場合、およびエラー頻度は少ないが学習値性能は優れていない場合には、コマンド決定部14は単純には書き込みコマンドを決定することができない。
上述したように、学習値性能は、リーダライタ装置がタグにデータを書き込むのに要する時間を性能として示したものである。エラー頻度は、リーダ装置がタグに情報を書き込む回数に対するエラー発生回数の割合である。従って、学習値性能とエラー頻度とを単純に比較することはできない。
そこで、実施形態では、エラー頻度を学習値性能に反映した性能予測値を用いて書き込みコマンドを決定する。図5は、性能予測値について説明した図である。コマンド決定部14は、メモリ22に読み出されたテーブルのうち、エラー頻度と学習値性能との値を取得する。
図5の一例では、書き込み位置が8ワードになっている。実施形態では、上述したように、タグの記憶領域のブロックは8ワードである。従って、1回のブロック単位の書き込みで情報をタグに書き込むことができる。
図5の一例を参照すると、ワード単位の書き込みの学習値性能(図5では「性能」と示している)は「250ms」であり、ブロック単位の書き込みの学習値性能は「205ms」である。従って、学習値性能だけを基準とすると、書き込みコマンドはブロック単位の書き込みが選択される。
一方、図5の一例を参照すると、ワード単位の書き込みのエラー頻度は「10%」であり、ブロック単位の書き込みのエラー頻度は「15%」である。従って、エラー頻度だけを基準とすると、書き込みコマンドはワード単位の書き込みが選択される。
コマンド決定部14は、学習値性能とエラー頻度とに基づいて、適切な書き込みコマンドを選択するため、学習値性能とエラー頻度との値だけを基準にすると、ワード単位の書き込みとブロック単位の書き込みとの何れに決定するかを判断できない。
そこで、コマンド決定部14は、メモリ22に読み出されたテーブルの数値を用いて性能予測値を演算し、演算した性能予測値に基づいて、書き込みコマンドを決定する。以下、性能予測値について説明する。
コマンド決定部14が性能予測値を演算する一例としては、タグへの書き込みが所定の割合で正常となるまでのリトライ回数(所定の成功率となるまでのリトライ回数)を計算する。コマンド決定部14は、このリトライ回数を計算するために、メモリ22に読み出されたテーブルのうち、タグに書き込むサイズに対応するエラー頻度を読み出す。
コマンド決定部14は、ブロック単位の書き込みとワード単位の書き込みとの両者についてリトライ回数を計算する。図5の例では、書き込みサイズが8ワードであるため、コマンド決定部14は、メモリ22に読み出されたテーブルのうち、「Word書き込み性能」と「Block書き込み性能」との両者からサイズが「8ワード」に対応するエラー頻度を読み出す。
図5の一例では、エラー頻度を「n」としている。ワード単位の書き込みのエラー頻度nは、メモリ22に読み出されたテーブルに基づいて、「10%」となる。一方、ブロック単位の書き込みのエラー頻度nは、メモリ22に読み出されたテーブルに基づいて、「15%」となる。
図5の一例では、タグへの書き込みが「99%」の成功率となるまでのリトライ回数を計算している。この「99%」は、図5に一例として示す「x:書き込み正常となる確率」になる。
以上のエラー頻度nと書き込み正常となる確率xとを用いて、ワード単位の書き込みとブロック単位の書き込みとのそれぞれについて、コマンド決定部14はリトライ回数を演算する。演算されるリトライ回数は以下の式になる。
リトライ回数=(log(1-x))/log((1/(1-n)-1)/(1/(1-n))))・・・(式1)
コマンド決定部14は、上記の式1に基づいて、ワード単位の書き込みとブロック単位の書き込みとのそれぞれについて、リトライ回数を演算する。その結果、図5に示す一例のように、「99%」正常となるまでのリトライ回数(図5では「99%正常となるまでの回数」と示している)は、ワード単位の書き込みでは「2000回」、ブロック単位の書き込みでは「2427回」となる。
リトライ回数は、タグへの書き込みが「99%」の成功率となるまでリトライする回数である。このリトライ回数に学習値性能「t」を乗算する。上述したように、学習値性能は、リーダライタ装置がタグに書き込みを行うごとに、タグへの書き込みに要する時間を示している。コマンド決定部14は、メモリ22に読み出されたテーブルを参照して、「Word書き込み性能」と「Block書き込み性能」とのそれぞれについて、学習値性能「t」を取得する。
「Word書き込み性能」の「8ワード」に対応する学習値性能は「250ms」である。「Block書き込み性能」の「8ワード」に対応する学習値性能は「205ms」である。
コマンド決定部14は、テーブルから取得した学習値性能「t」と上述のリトライ回数との乗算を行い、性能予測値「y」を得る。従って、性能予測値「y」は以下の式2になる。
性能予測値y=リトライ回数×学習値性能「t」・・・(式2)
上述したように、ワード単位の書き込みにおける学習値性能は「250ms」である。そして、ワード単位の書き込みにおけるリトライ回数は「2000回」である。よって、コマンド決定部14は、式2に基づいて、性能予測値「y」を演算する。つまり、コマンド決定部14は、「2000×250ms=500s」の演算を行う。演算した結果得られた「500s」が、ワード単位の書き込みにおける性能予測値「y」になる。
また、ブロック単位の書き込みにおける学習値性能は「205ms」である。そして、ブロック単位の書き込みにおけるリトライ回数は「2427回」である。よって、コマンド決定部14は、式2に基づいて、性能予測値「y」の演算を行う。つまり、コマンド決定部14は、「2427×205s=497.535s」の演算を行う。ここでは、小数点以下を四捨五入して、「497.535s」は「498s」とする。演算した結果得られた「498s」が、ブロック単位の書き込みにおける性能予測値「y」になる。
コマンド決定部14は、ワード単位の書き込みにおける性能予測値「y」とブロック単位の書き込みにおける性能予測値「y」とを比較する。実施形態では、性能予測値「y」はブロック単位の書き込みの方が優れている。つまり、ブロック単位の書き込みの性能予測値「y=498s」はワード単位の書き込みの性能予測値「y=500s」よりも時間が短い。
従って、コマンド決定部14は、性能予測値「y」が優れている方のブロック単位の書き込みをコマンド書き込みとして決定する。この性能予測値「y」を得るために、式1と式2とを用いて説明したが、式1と式2とを合わせると、以下の式3になる。
y=(log(1-x))/log((1/(1-n)-1)/(1/(1-n))))*t・・・(式3)
性能予測値「y」は、リーダライタ装置がタグに情報を書き込むのに要する時間(学習値性能)に所定の成功率となるまでのリトライ回数を加味した時間になる。リトライ回数はエラー頻度「n」から得られるため、性能予測値「y」は学習値性能とエラー頻度との両者を反映した時間になる。つまり、性能予測値「y」は、所定の成功率で書き込みが行われるまでに、リーダライタ装置がタグに情報を書き込むのに要する時間になる。
このため、学習値性能は優れているがエラー頻度が多い場合、およびエラー頻度は少ないが学習値性能が優れていない場合においても、コマンド決定部14は性能予測値「y」に基づいて、書き込みコマンドを決定することができる。
次に、図6の他の例を用いて、性能予測値「y」に基づいて、書き込みコマンドの決定について説明する。この例では、書き込み位置は4ワードとなっている。従って、ワード単位の書き込みの場合は、リーダライタ装置がタグに1回で書き込みを行うことができるが、ブロック単位の書き込みの場合は、データのブロックを分割して書き込みを行う。
つまり、図3で示した一例と同様に、タグの記憶領域の4ワードから開始して8ワードのブロックを書き込むときには、2回に分けてブロック単位書込みが行われる。このため、図6に示した例では、1回目と2回目とに分けて図示を行っている。
ワード単位の書き込みの場合、エラー頻度「n」は「10%」である。よって、コマンド決定部14は、式1を用いて、リトライ回数の演算を行う。その結果、リトライ回数は「2000回」になる。そして、テーブルの8ワードに対応する学習値性能は「250ms」になっている。
よって、ワード単位の書き込みの性能予測値は「y」は「y=2000×250ms=500s」となる。コマンド決定部14は、ワード単位の書き込みの性能予測値「y=500s」を演算する。
次に、ブロック単位の書き込みの場合、4ワードずつ2回に分けて、リーダライタ装置はタグに書き込みを行う。従って、コマンド決定部14は、「Block書き込み性能」の4Wordに対応する学習値性能を取得する。取得された学習値性能は「160ms」である。また、コマンド決定部14は、「Block書き込み性能」の4Wordに対応するエラー頻度を取得する。取得されたエラー頻度は「10%」になる。
コマンド決定部14は、リトライ回数の演算を行う。ここでは、2回分のリトライ回数の演算が行われる。2回分のリトライ回数は「2773回」になる。また、2回分の学習値性能は「160ms×2=320ms」となる。よって、ブロック単位の書き込みの性能予測値「y」は「y=2773×320ms=887s」となる。
従って、コマンド決定部14は、性能予測値「y」が優れているワード単位の書き込みを書き込みコマンドとして決定する。図5の例では、コマンド単位の書き込みの性能予測値「y」が優れているため、コマンド決定部14は、コマンド単位の書き込みを書き込みコマンドとして決定している。一方、図6例では、ワード単位の書き込みの性能予測値「y」が優れているため、コマンド決定部14は、ワード単位の書き込みを書き込みコマンドとして決定している。
次に、フローチャートを用いて、動作について説明する。図7は、リーダライタ装置を起動するフローの一例を示している。最初に、情報処理装置2で動作しているアプリケーションがタグに対して所定のデータを書き込むように指示を出す(ステップS1)。
実施形態では、タグAに対してデータを書き込むものとするが、タグBやタグCにデータを書き込んでもよい。情報処理装置2で動作するアプリケーションは、何れのタグにデータを書き込むかを特定する情報(ここでは、タグA)やタグAの記憶領域に対して書き込むデータのデータ量、データの書き込みを行うブロック番号、書き込み位置等の情報についての指示を出す。
情報処理装置2で動作するアプリケーションは、上述の情報を含む指示を通信制御装置3の情報入出力部11に対して出力する。情報入出力部11がアプリケーションからの指示を入力すると、テーブル管理部23は、テーブル記憶部21からテーブルを読み出してメモリに記憶する(ステップS2)。なお、このステップS2は、後述するタグ書き込み処理の前であれば任意のタイミングで行われてもよい。
情報処理装置2のアプリケーションから出力された指示には、データを書き込むタグを特定する情報が含まれている。実施形態では、タグAが特定されているものとする。そして、タグAはリーダライタ装置4Aに対応している。
装置起動制御部12は、タグAを起動するように制御を行う。リーダライタ装置決定部17は、タグAが特定されているため、タグAに対応するリーダライタ装置4Aを決定する。そして、リーダライタ装置制御部18は、リーダライタ装置4Aを起動(オープン)する(ステップS3)。以上により、起動処理が終了する。
次に、図8に示すタグ検索処理が行われる。タグ検索部13は、リーダライタ装置制御部18を制御して、リーダライタ装置4AにタグAを検索させる(ステップS4)。リーダライタ装置4Aには所定の通信範囲があり、その通信範囲の中からタグAが見つかったか否かの判定が行われる(ステップS5)。
タグAが見つからなかった場合(ステップS5でNo)、処理を終了する。この場合、タグAが見つからなかった旨の情報を情報処理装置2のアプリケーションに通知してもよい。この場合、リーダライタ装置4AからタグAに対して、アプリケーションが指示したデータの書き込みは行われない。
一方、タグAが見つかった場合(ステップS5でYes)、タグAからリーダライタ装置4Aに対してタグ識別子を送信する(ステップS6)。リーダライタ装置4AはタグAからタグ識別子を受信したことを、通信制御装置3のタグ検索部13に通知する。そして、タグ検索部13は、情報入出力部11を介して、情報処理装置2のアプリケーションに対してタグAのタグ識別子を通知する。
これにより、リーダライタ装置4Aと通信可能なタグAが見つかったことをアプリケーションが認識する。以上により、リーダライタ装置4AがタグAにデータを書き込むことが可能になる。つまり、リーダライタ装置4AがタグAにデータを書き込む準備が完了したことになる。
次に、タグ書き込み処理について、図9Aおよび図9Bを用いて説明する。リーダライタ装置4AがタグAにデータを書き込むとき、ワード単位の書き込みとブロック単位の書き込みとの2つの書き込みコマンドがある。従って、リーダライタ装置4Aは2つの書き込みコマンドのうち何れを使用するかをして、タグAと非接触無線通信を行う。
そこで、コマンド決定部14は、メモリ22に読み出されたテーブルを参照する(ステップS11)。そして、コマンド決定部14は、ブロックライト(ブロック単位の書き込み)が可能であるか否かを判断する(ステップS12)。
テーブルの一例を図4に示したが、図4のテーブルの中に、「Blockwrite可否」という項目がある。この項目が「否」になっていれば(ステップS12でNo)、ブロック単位の書き込みはできない。従って、コマンド決定部14は、ワード単位の書き込みを使用してデータをタグAに書き込むことを決定する。従って、この場合は、後述するステップS15に進む。
一方、「Blockwrite可否」の項目が「可」になっていれば(ステップS12でYes)、ブロック単位の書き込みとワード単位の書き込みとの両方が可能である。このとき、コマンド処理部15は、ブロック単位の書き込みとワード単位の書き込みとに分けて性能予測値の計算を行う(ステップS13)。
ブロック単位の書き込みを行うときには、コマンド処理部15は、アプリケーションより指示された位置やサイズ情報、メモリ22に読み込まれたテーブルのBlockまたがり可否の情報等に基づいて、タグAへの書き込み回数やタグAにデータを1回書き込むときのサイズ等を演算する。
ワード単位の書き込みを行うときには、コマンド処理部15は、アプリケーションにより指示されたタグAへの書き込み回数やタグAにデータを1回書き込むときのサイズ等を演算する。
上述したように、ステップS12でNoと判定されたときには、コマンド決定部14は、ブロック単位の書き込みとワード単位の書き込みとの何れを使用するかを決定する。この決定を行うために、上述したように、コマンド決定部14は、性能予測値「y」を計算する。性能予測値「y」は、ワード単位の書き込みとブロック単位の書き込みとの両者について計算される。
コマンド決定部14は、ワード単位の書き込みについての性能予測値「y」の方がブロック単位の書き込みについての性能予測値「y」よりも優れている場合は、書き込みコマンドとしてワード単位の書き込みを決定する。
一方、コマンド決定部14は、ブロック単位の書き込みについての性能予測値「y」の方がワード単位の書き込みについての性能予測値「y」よりも優れている場合は、書き込みコマンドとしてブロック単位の書き込みを決定する。
これにより、コマンド決定部14は、タグAにデータの書き込みを行うときに使用する書き込みコマンドを選択する(ステップS14)。コマンド決定部14がブロック単位の書き込みを選択したときには、図9Aの「B」に処理が移行する。図9Aの「B」の処理については、後述する。
一方、コマンド決定部14がワード単位の書き込みを選択したときには、リーダライタ装置4AがタグAに対して、ワード単位でデータの書き込みを行う(ステップS15)。これにより、アプリケーションが指示したデータがタグAの所定領域に書き込まれる。
リーダライタ装置4AがタグAに対して、ワード単位でデータの書き込みを行ったときには、テーブル管理部23はメモリ22に読み出されたテーブルの「Word書き込み性能」のうち、タグAに書き込みを行ったデータのサイズに対応する書き込み回数をインクリメントする(ステップS16)。
リーダライタ装置4AはタグAにデータの書き込みを行う。このとき、データの書き込みが正常に行われる場合もあるが、正常に行われない場合もある。そこで、リーダライタ装置4Aは、タグAにデータの書き込みが正常に行われたか否かを判定する(ステップS17)。
リーダライタ装置4AからタグAへの書き込みが正常に行われなかった場合(ステップS17でNo)、テーブル管理部23は、エラー回数をインクリメントする(ステップS18)。メモリ22に読み出されたテーブルには書き込み回数の項目があり、テーブル管理部23は、ワード単位の書き込みの対応するサイズの書き込み回数を読み出す。
そして、テーブル管理部23は、読み出した書き込み回数に対するエラー回数の割合を演算する。これにより、ワード単位の書き込みの対応するサイズのエラー頻度が更新される(ステップS19)。
テーブル管理部23は、更新したエラー頻度を、ワード単位の書き込みの対応するサイズのエラー頻度に記憶する。これにより、メモリ22に読み出されているテーブルのエラー頻度が実測に基づいて更新されていく。
リーダライタ装置4AからタグAへの書き込みが正常でなかった場合には、再度の書き込み(リトライ)を行う。このリトライの回数(リトライ回数)には所定の上限値がある。リトライ回数が所定の上限値に達したか否かの判定が行われる(ステップS20)。リトライ回数が所定の上限値に達したときには、異常終了の処理を行う。一方、リトライ回数が所定の上限値に達していないときには、処理はステップS15に移行する。
ステップS17において、リーダライタ装置4AからタグAへの書き込みが正常に行われた場合には、性能測定部19は、リーダライタ装置4AがタグAにデータを書き込む時間を性能として測定する(ステップS21)。
テーブル管理部23は、性能測定部19が実測した時間を学習値性能に反映する。これにより、学習値性能が更新される(ステップS22)。そして、テーブルの「Word書き込み性能」の対応する学習値性能を更新する。これにより、メモリ22に読み出されているテーブルの学習値性能が実測に基づいて更新されていく。
アプリケーションの指定によっては、ワード単位の1回の書き込みで全てのデータをタグAに書き込むことができない場合がある。そこで、コマンド処理部15は、アプリケーションが指定したサイズ分のデータをタグAに書き込んだか否かを判定する(ステップS23)。
アプリケーションが指定したサイズ分のデータがタグAに書き込まれたときには(ステップS23でYes)、正常に終了する。一方、アプリケーションが指定したサイズ分のデータが全てタグAに書き込まれていないときには、処理がステップS15に移行する(図9Aの「A」)。
以上のように、ステップS14でワード単位の書き込みが選択されたときの処理が行われる。次に、ブロック単位の書き込みが選択されたときの処理について、図9Bを用いて説明する。
ブロック単位の書き込みが選択されたときには、リーダライタ装置4AがタグAに対して、データをブロック単位で書き込む(ステップS31)。そして、テーブル管理部23はメモリ22に読み出されたテーブルの「Block書き込み性能」のうち、タグAに書き込みを行ったデータのサイズに対応する書き込み回数をインクリメントする(ステップS32)。
上述したように、リーダライタ装置4AがタグAにデータの書き込みを行うときに、正常に書き込みが行われない場合がある。そこで、リーダライタ装置4Aは、タグAにデータの書き込みが正常に行われたか否かを判定する(ステップS33)。
リーダライタ装置4AからタグAへの書き込みが正常に行われなかった場合(ステップS33でNo)、テーブル管理部23は、エラー回数をインクリメントする(ステップS34)。上述したように、リーダライタ装置4AからタグAへの書き込みが正常でなかった場合には、リトライが行われる。このリトライ回数が上限値に達したか否かの判定が行われる(ステップS35)。
リトライ回数が所定の上限値に達したときには、異常終了の処理を行う。一方、リトライ回数が所定の上限値に達していないときには、エラー頻度の少ない書き込みコマンドはブロック単位の書き込みであるか、またはワード単位の書き込みであるかの判定が行われる(ステップS36)。
ステップS36の判定が行われているということは、ステップS33でリーダライタ装置4AからタグAへの書き込みが正常でなかったということになる。従って、コマンド決定部14はメモリ22に読み出されたテーブルを参照する。そして、コマンド決定部14は、アプリケーションが指示したサイズに対応する、エラー頻度を参照する。
このとき、ワード単位の書き込みのエラー頻度の方が少なければ、図9AのステップS15に処理を移行する。つまり、ブロック単位での書き込みでは、エラーを起こし、且つエラー頻度もワード単位の書き込みよりもブロック単位の書き込みの方が多いため、ワード単位の書き込みが選択される。一方、ステップS36の判定で、ブロック単位の書き込みのエラー頻度の方が少なければ、処理はステップS31に移行する。
ステップS33において、リーダライタ装置4AからタグAへの書き込みが正常に行われた場合には、性能測定部19は、リーダライタ装置4AがタグAにデータを書き込む時間を性能として測定する(ステップS37)。
テーブル管理部23は、性能測定部19が実測した時間を反映して学習値性能を更新する(ステップS38)。そして、テーブルの「Block書き込み性能」の対応する学習値性能を更新する。これにより、メモリ22に読み出されているテーブルの学習値性能が実測に基づいて更新されていく。
上述したように、アプリケーションの指定によっては、ブロック単位の1回の書き込みで全てのデータをタグAに書き込むことができない場合がある。そこで、コマンド処理部15は、アプリケーションが指定したサイズ分のデータをタグAに書き込んだか否かを判定する(ステップS39)。
アプリケーションが指定したサイズ分のデータがタグAに書き込まれたときには(ステップS39でYes)、正常に終了する。一方、アプリケーションが指定したサイズ分のデータが全てタグAに書き込まれていないときには、処理がステップS31に移行する(図9Bの「C」)。
以上がタグ書き込み処理である。リーダライタ装置4AがタグAに所定のデータを書き込んだ後には、書き込み処理を終了する必要がある。そのための処理を図10に示す。最初に、情報処理装置2のアプリケーションが通信制御装置3に対して終了の指示を出す(ステップS41)。
通信制御装置3のテーブル管理部23は、この指示に基づいて、メモリ22に読み出されていたテーブルをテーブル記憶部21に記憶させる。このときにテーブル記憶部21に記憶されるテーブルは、上述してきた種々の処理により更新がされている。従って、テーブル記憶部21には、更新後のテーブルが記憶される(ステップS42)。
そして、リーダライタ装置制御部18は、アプリケーションが指示したリーダライタ装置4Aを停止(クローズ)する(ステップS43)。これにより、リーダライタ装置4Aは起動状態を停止し、タグAと通信することがなくなる。以上により、終了処理が終了する。
従って、実施形態では、リーダライタ装置がタグに所定のデータを書き込むときに、学習値性能とエラー頻度とに基づいて、ブロック単位の書き込みコマンドとワード単位の書き込みコマンドとのうち適切な書き込みコマンドを選択している。これにより、リーダライタ装置がタグにデータを書き込むときの性能が向上する。
そして、リーダライタ装置がタグにデータを書き込むときの実測時間を反映した時間を学習値性能として、この学習値性能にエラー頻度を反映した性能予測値に基づいて、適切な書き込みコマンドを選択している。
エラー頻度は、所定の割合で書き込みが正常となるまでのリトライ回数にすることで、学習値性能とリトライ回数との乗算で性能予測値を得ることができる。つまり、エラー頻度を学習値性能に反映することができるようになる。従って、学習値性能とリトライ回数との両者を総合的に勘案した性能予測値に基づいて、適切な書き込みコマンドの選択が可能になる。
以上において、コマンド決定部14は、性能予測値に基づいて、適切な書き込みコマンドを選択している。例えば、ワード単位の書き込みとブロック単位の書き込みとで、性能予測値が僅差の場合であっても、性能予測値が優れている方の書き込みコマンドが選択される。
ここで、ワード単位の書き込みとブロック単位の書き込みとの何れか一方のみが常に性能予測値が優れている場合には、性能予測値の差が僅かであっても、他方の書き込みコマンドが選択されることはない。これにより、選択されなかった方の書き込みコマンドの学習値性能およびエラー頻度は実測されなくなる。このため、選択されなかった方の書き込みコマンドの学習値性能およびエラー頻度の値の信頼性が低下する。
従って、所定の割合で、コマンド決定部14は、性能予測値が優れていない書き込みコマンドを選択するようにしてもよい。例えば、ブロック単位の書き込みコマンドの性能予測値が常に優れているとしても、10回に1回程度の割合で、ワード単位の書き込みコマンドでタグAにデータの書き込みを行ってもよい。
また、コマンド決定部14は性能予測値に基づいて、書き込みコマンドをワード単位の書き込みにするか、またはブロック単位の書き込みにするかを決定している。性能予測値「y」は上述したように、所定の演算を行う必要がある。
そこで、コマンド決定部14は、図4に一例として示したテーブルの書き込みサイズに対応した学習値性能とエラー頻度とを、ワード単位の書き込みとブロック単位の書き込みとのそれぞれについて読み出す。コマンド決定部14は、学習値性能とエラー頻度とを参照して、学習値性能が優れ、且つエラー頻度が少ない書き込みコマンドがあれば、当該書き込みコマンドを選択するようにしてもよい。
つまり、学習値性能が優れ、且つエラー頻度が少ない書き込みコマンドが適切な書き込みコマンドである。この場合、性能予測値「y」を演算するまでもなく、コマンド決定部14は適切な書き込みコマンドを決定することができる。このため、性能予測値「y」を演算するための処理時間を削減することができる。
そして、学習値性能は優れているがエラー頻度が多い場合、またはエラー頻度は少ないが学習値性能が優れていない場合には、コマンド決定部14は性能予測値「y」を演算して、適切なコマンドを決定するようにしてもよい。
また、実施形態では、テーブルは、学習値性能とエラー頻度との両者を有していることが前提であるが、テーブルが何れか一方のみを有している場合には、他方を使用して、適切な書き込みコマンドを決定してもよい。
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。