(57)【特許請求の範囲】
【請求項１】
タグにデータを書き込む制御を行う通信制御装置であって、
前記タグに前記データを書き込むときの実測時間を反映した書き込み時間と前記タグに前記データを書き込むときに発生するエラー頻度とを、それぞれ異なるコマンドごとに記憶する記憶部と、
前記書き込み時間と前記エラー頻度とに基づいて、前記タグに前記データを書き込むときの前記コマンドを決定するコマンド決定部と、
前記コマンド決定部が決定した前記コマンドを使用して、前記タグに前記データを書き込むように制御を行う制御部と、
を備える通信制御装置。
【請求項２】
前記コマンド決定部は、前記エラー頻度を前記書き込み時間に反映させた性能予測値に基づいて、前記コマンドを決定する、
請求項１記載の通信制御装置。
【請求項３】
前記コマンド決定部は、所定の成功率となるまで前記タグに前記データを書き込むリトライ回数を前記エラー頻度として、前記書き込み時間に反映させる、
請求項２記載の通信制御装置。
【請求項４】
前記成功率をｘ、前記エラー頻度をｎ、前記書き込み時間をｔとしたときに、前記性能予測値ｙは
y＝(log(1-x))/(log((1/(1-n)-1)/(1/(1-n))))*t
である、
請求項３記載の通信制御装置。
【請求項５】
前記コマンド決定部は、前記書き込み時間が短く且つ前記エラー頻度が少ないコマンドがあるときには、当該コマンドを使用して前記タグに書き込みを行うように決定し、それ以外の場合には、前記性能予測値に基づいて前記コマンドを決定する、
請求項３または４記載の通信制御装置。
【請求項６】
前記コマンド決定部は、所定の割合で、前記性能予測値が優れていない方の前記コマンドを使用するように決定する、
請求項２乃至５のうち何れか１項に記載の通信制御装置。
【請求項７】
タグにデータを書き込む制御を行うときの通信制御方法であって、
前記タグに前記データを書き込むときの実測時間を反映した書き込み時間と前記タグに前記データを書き込むときに発生するエラー頻度とを、それぞれ異なるコマンドごとに記憶する記憶部の前記書き込み時間と前記エラー頻度とに基づいて、前記タグに前記データを書き込むときの前記コマンドを決定し、
決定された前記コマンドを使用して、前記タグに前記データを書き込むように制御を行う、
通信制御方法。
【請求項８】
コンピュータに、
タグにデータを書き込むときの実測時間を反映した書き込み時間と前記タグに前記データを書き込むときに発生するエラー頻度とを、それぞれ異なるコマンドごとに記憶する記憶部の前記書き込み時間と前記エラー頻度とに基づいて、前記タグに前記データを書き込むときの前記コマンドを決定し、
決定された前記コマンドを使用して、前記タグに前記データを書き込むように制御を行う、
処理を実行させる通信制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信制御装置、通信制御方法および通信制御プログラムに関する。
【背景技術】
【０００２】
ＲＦＩＤ（Radio Frequency Identification）タグ（以下、タグとする）とリーダライタ装置とが非接触無線通信を行う技術が知られている。リーダライタ装置がタグと通信を行うことにより、リーダライタ装置がタグに対してデータを書き込むことができ、リーダライタ装置はタグからデータを読み出すことができる。リーダライタ装置とタグとの通信において、タグのリードライトエラーの軽減を目的とした技術が提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２４５９５１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
リーダライタ装置からタグにデータの書込みを行うときには、書込みコマンドを使用する。書込みコマンドとしては、ブロック単位の書込みとワード単位の書込みとが知られている。従って、ブロック単位とワード単位とのうち何れかの書込みコマンドを使用して、リーダライタ装置がタグにデータの書込みを行う。
【０００５】
リーダライタ装置からタグにデータを書き込むときには、高速にデータの書込みが行われることが望ましい。従って、リーダライタ装置は、ブロック単位の書き込みとワード単位の書き込みとのうち高速に書込みができる書込みコマンドを選択することが好ましい。
【０００６】
しかしながら、リーダライタ装置からタグに書き込むデータのサイズや位置、タグの種類、リーダライタ装置とタグとの相性等の種々の条件によっては、高速にデータの書き込みを行う書き込みコマンドが変化する。ある条件下では、ブロック単位の書き込みの方がワード単位の書き込みよりも高速になり、別の条件下では、ワード単位の書き込みの方がブロック単位の書き込みよりも高速になる。
【０００７】
また、書込みコマンドの種類とタグとの相性によっては、タグにデータを書き込むときに、書込みエラーが発生することがある。書込みエラーが発生すると、書込みのリトライを行うため、リトライを行うことに起因して書込み速度が低速になる。
【０００８】
本発明は、１つの側面では、タグにデータを書き込むときに、適切な書き込みコマンドを使用して、高速にデータを書き込むことを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、タグにデータを書き込む制御を行う通信制御装置であって、前記タグに前記データを書き込むときの実測時間を反映した書き込み時間と前記タグに前記データを書き込むときに発生するエラー頻度とを、それぞれ異なるコマンドごとに記憶する記憶部と、前記書き込み時間と前記エラー頻度とに基づいて、前記タグに前記データを書き込むときの前記コマンドを決定するコマンド決定部と、前記コマンド決定部が決定した前記コマンドを使用して、前記タグに前記データを書き込むように制御を行う制御部と、を備える。
【００１０】
また、別の案では、タグにデータを書き込む制御を行うときの通信制御方法であって、前記タグに前記データを書き込むときの実測時間を反映した書き込み時間と前記タグに前記データを書き込むときに発生するエラー頻度とを、それぞれ異なるコマンドごとに記憶する記憶部の前記書き込み時間と前記エラー頻度とに基づいて、前記タグに前記データを書き込むときの前記コマンドを決定し、決定された前記コマンドを使用して、前記タグに前記データを書き込むように制御を行う。
【００１１】
また、別の案では、通信制御プログラムであって、コンピュータに、タグにデータを書き込むときの実測時間を反映した書き込み時間と前記タグに前記データを書き込むときに発生するエラー頻度とを、それぞれ異なるコマンドごとに記憶する記憶部の前記書き込み時間と前記エラー頻度とに基づいて、前記タグに前記データを書き込むときの前記コマンドを決定し、決定された前記コマンドを使用して、前記タグに前記データを書き込むように制御を行う、処理を実行させる。
【発明の効果】
【００１２】
タグに情報を書き込むときに、適切な書き込みコマンドを使用して、高速にデータを書き込むことができる。
【図面の簡単な説明】
【００１３】
【図１】システムの全体構成の一例を示すブロック図である。
【図２】通信制御装置のハードウェア構成の一例を示す図である。
【図３】ブロック単位書き込みの一例を説明する図である。
【図４】テーブル記憶部に記憶されるテーブルの一例を示す図である。
【図５】性能予測値を算出する一例を説明する図（その１）である。
【図６】性能予測値を算出する一例を説明する図（その２）である。
【図７】起動処理の一例を示すフローチャートである。
【図８】タグ検索処理の一例を示すフローチャートである。
【図９Ａ】タグ書き込み処理の一例を示すフローチャート（その１）である。
【図９Ｂ】タグ書き込み処理の一例を示すフローチャート（その２）である。
【図１０】終了処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、実施形態について説明する。実施形態では、リーダライタ装置がタグと非接触無線通信を行う一例を示している。リーダライタ装置は、タグに対してデータを書き込む機能（ライト機能）を有していればよく、実施形態ではタグからデータを読み出す機能（リード機能）は必須ではない。従って、タグとの非接触無線通信を行う装置としては、データを書き込む機能だけを有する装置を使用してもよい。
【００１５】
図１は、実施形態のシステム１の一例を示している。システム１は、図１の一例に限定されない。システム１は、情報処理装置２と通信制御装置３とリーダライタ装置４Ａ〜４ＣとタグＡとを備えている。なお、通信制御装置３は、図１の構成に限定されない。また、リーダライタ装置４Ａ〜４Ｃ（総称して、リーダライタ装置４とする）の個数も３つには限定されない。
【００１６】
情報処理装置２は、例えばパーソナルコンピュータである。情報処理装置２ではアプリケーション（ソフトウェア）が動作している。アプリケーションの制御により、タグに対して所定のデータの書き込みが行われる。このため、情報処理装置２と通信制御装置３とは通信可能に接続されている。
【００１７】
通信制御装置３は、情報入出力部１１と装置起動制御部１２とタグ検索部１３とコマンド決定部１４とコマンド処理部１５とタグリード部１６とリーダライタ装置決定部１７とリーダライタ装置制御部１８と性能測定部１９とエラー頻度検出部２０とテーブル記憶部２１とメモリ２２とテーブル管理部２３とを備えている。なお、図１において、リーダライタ装置を「Ｒ／Ｗ装置」と示している。
【００１８】
情報入出力部１１は、情報処理装置２のアプリケーションと通信を行う。情報入出力部１１はタグに対して書き込みを行うデータや種々の情報をアプリケーションから入力する。また、情報入出力部１１はアプリケーションに対して所定の情報を出力する。
【００１９】
装置起動制御部１２は、リーダライタ装置４Ａ〜４Ｃの起動制御を行う。アプリケーションは何れのタグにデータの書き込みを行うかによって、タグと通信を行うリーダライタ装置を通信制御装置３に指示する。装置起動制御部１２は、データの書き込みを行うタグに対応するリーダライタ装置を起動（オープン）する。
【００２０】
タグ検索部１３は、タグを検索する制御を行う。タグの検索には、例えばタグ識別子が使用される。タグ識別子としては、例えばＴＩＤ（Tag Identifier)やＥＰＣ（Electronic Product Code)等が使用される。
【００２１】
コマンド決定部１４は、タグに書込みを行うコマンドを決定する。実施形態では、２種類の書き込みコマンドの何れかのコマンドを使用して、タグに対してデータの書き込みを行う。書き込みコマンドの種類としては、ワード単位の書き込みとブロック単位の書き込みとの２つがある。ただし、書き込みコマンドの種類は２種類には限定されない。
【００２２】
コマンド処理部１５は、コマンド決定部１４が決定した書き込みコマンドを使用して、タグに対してデータを書き込む種々の処理を行う。タグリード部１６は、タグからデータを読み出す処理を行う。なお、上述したように、実施形態ではタグからデータを読み出すことは必須ではないため、タグリード部１６は必須の要素ではない。
【００２３】
リーダライタ装置決定部１７は、情報処理装置２のアプリケーションからの命令に基づいて、リーダライタ装置４Ａ〜４Ｃのうち何れのリーダライタ装置を起動するかを決定する。実施形態では、タグＡにデータを書き込む一例を示すため、リーダライタ装置４Ａが起動するものとする。
【００２４】
リーダライタ装置制御部１８は、リーダライタ装置４Ａ〜４Ｃを制御する。リーダライタ装置制御部１８は、リーダライタ装置決定部１７が決定したリーダライタ装置４Ａを起動させるように制御する。この制御に基づき、リーダライタ装置４Ａは起動を開始する。リーダライタ装置制御部１８は制御部とも称される。
【００２５】
性能測定部１９は、リーダライタ装置４Ａ〜４Ｃが対応するタグにデータを書き込むときの通信性能を測定する。ここでは、リーダライタ装置４Ａ〜４Ｃが対応するタグにデータを書き込むのに要する時間を通信性能として測定する。
【００２６】
エラー頻度検出部２０は、リーダライタ装置４Ａ〜４Ｃが対応するタグに情報を書き込むときの書込みエラーの頻度を検出する。リーダライタ装置４Ａ〜４Ｃがタグにデータを書込むときに、書き込みエラーが発生することがある。エラー頻度検出部２０は、書き込みエラーの頻度を検出する。
【００２７】
テーブル記憶部２１は、後述する図４に示すようなテーブルを記憶する。このテーブルには、性能測定部１９が測定した書き込み時間やエラー頻度検出部２０が検出したエラー頻度が反映される。テーブル記憶部２１は、単に記憶部とも称される。
【００２８】
メモリ２２は、テーブル記憶部２１から読み出されたテーブルを一時的に記憶する。そして、テーブル管理部２３がテーブルの各データの更新を行い、更新されたテーブルはテーブル記憶部２１に記憶される。また、コマンド決定部１４がコマンドを決定するときには、コマンド決定部１４はメモリ２２に読み出されたテーブルを参照して、コマンドを決定する。
【００２９】
実施形態では、テーブル記憶部２１が記憶しているテーブルがメモリ２２に読み出されるが、メモリ２２は必須の要素ではない。テーブルの内容が変更されるときには、直接的にテーブル記憶部２１のテーブルを更新し、コマンド決定部１４がコマンドを決定するときには、直接的にテーブル記憶部２１に記憶されているテーブルを参照してもよい。
【００３０】
テーブル管理部２３は、テーブル記憶部２１およびメモリ２２を管理している。テーブル管理部２３は、テーブル記憶部２１からメモリ２２にテーブルの読み出しを行う。また、テーブル管理部２３は、メモリ２２に読み出されたテーブルの内容の変更を行う。そして、テーブル管理部２３は、メモリ２２に読み出されたテーブルをテーブル記憶部２１に記憶する。
【００３１】
次に、リーダライタ装置４Ａ〜４Ｃを説明する。リーダライタ装置４Ａ〜４Ｃは、それぞれに対応するタグと非接触無線通信を行う。図１に示した一例では、リーダライタ装置４ＡとタグＡとが通信を行っている状態を示している。
【００３２】
リーダライタ装置４Ａは所定範囲に存在しているタグＡと通信を行う。リーダライタ装置４Ａが無線通信可能な範囲は近距離であるため、タグＡがリーダライタ装置４Ａと無線通信可能な範囲から外れると、書込みエラーが生じる。
【００３３】
タグは、ＲＦＩＤタグやＩＣタグ、非接触ＩＣカード、非接触ＩＣチップ等と称されることもある。リーダライタ装置４ＡはタグＡに無線通信を行い、データを書き込むことができる。図１には図示はしていないが、リーダライタ装置４Ｂに対応するタグＢ、リーダライタ装置４Ｃに対応するタグＣも同様である。
【００３４】
次に、図２を参照して、通信制御装置３のハードウェアの構成を示す。図２に示すように、バス３０にプロセッサ３１とＲＡＭ（Random Access Memory）３２とＲＯＭ（Read Only Memory)３３と記憶装置３４と通信インタフェース３５と入出力装置３６とが接続されている。
【００３５】
プロセッサ３１はＣＰＵ（Central Processing Unit)のような任意の処理回路である。プロセッサ３１はＲＡＭ３２に展開されたプログラムを実行する。ＲＯＭ３３はＲＡＭ３２に展開されるプログラムを記憶する不揮発性の記憶装置である。ＲＡＭ３２に展開されるプログラムは記憶装置３４に記憶されていてもよい。記憶装置３４の一例としては、可搬型記録媒体や半導体メモリ、ハードディスクドライブ等を適用できる。なお記憶装置３４は補助記憶装置とも称される。
【００３６】
ＲＡＭ３２、ＲＯＭ３３および記憶装置３４は、何れもコンピュータ読み取り可能な有形の記憶媒体の一例である。これらの有形な記憶媒体は、信号搬送波のような一時的な媒体ではない。
【００３７】
一例として、装置起動制御部１２、タグ検索部１３、コマンド決定部１４、コマンド処理部１５、タグリード部１６、リーダライタ装置決定部１７、リーダライタ装置制御部１８、性能測定部１９、エラー頻度検出部２０およびテーブル管理部２３はプロセッサ３１により実現されてもよい。
【００３８】
情報入出力部１１は入出力装置３６により実現されてもよい。メモリ２２はＲＡＭ３２により実現されてもよい。リーダライタ装置制御部１８とリーダライタ装置４Ａ〜４Ｃとの間の通信は通信インタフェース３５により実現されてもよい。
【００３９】
次に、書込みコマンドについて説明する。上述したように、実施形態の書込みコマンドには、ブロック単位の書込みとワード単位の書込みとの２種類の書込みコマンドがある。実施形態では、２種類の書込みコマンドを例示しているが、他の種類の書込みコマンドを使用してもよい。
【００４０】
まず、タグのメモリ空間について説明する。タグに情報を記憶できる領域（メモリ空間）は、主にユーザ領域とシステム領域とに分かれている。システム領域はタグのシステムに関する情報が記憶されている。
【００４１】
一方、ユーザ領域には、任意のデータを書き込むことができる。ユーザ領域は所定数のブロックに分割されている。各ブロックは所定のデータ量を有する。例えば、ユーザ領域が２キロバイト、各ブロックは８バイトのデータを記憶することができる。
【００４２】
タグのユーザ領域に対して、リーダライタ装置はブロック単位またはワード単位でデータを書き込むことができる。ブロック単位での書込みはワード単位での書込みよりも高速にタグにデータを書き込むことができる場合が多い。従って、ブロック単位での書込みを使用することが好適な場合が多い。
【００４３】
しかしながら、ワード単位での書込みの方がブロック単位での書込みよりも高速になる場合がある。図３を用いて説明する。図３において、「タグ」と示しているのは、タグのユーザ領域を示している。タグの領域は複数のブロックに分割されており、図３で示しているのは、ブロック番号「５」とブロック番号「６」とである。各ブロックは８バイトの記憶領域を有しているものとする。
【００４４】
図３で「ブロック単位書込み１」と示しているのが、書込みコマンドがブロック単位書込みを指定した場合の一例である。書込みブロックはユーザ領域のブロックと同じく８バイトであるものとし、タグのブロック番号「５」と書込みブロックとは同じ位置となっている。例えば、書込みブロックが指定するタグのアドレスが、タグのブロック番号「５」の開始アドレスと一致している場合がある。
【００４５】
この場合、タグのブロック番号「５」と書込みブロックとは同じ位置（例えば、同じ開始アドレス）となっているため、１回の書込みで、書込みブロックをタグのブロック番号「５」に書き込むことができる。
【００４６】
一方、図３で「ブロック単位書込み２」と示しているのが、書込みコマンドがブロック単位書込みを指定した場合の他の例である。書込みブロックは「ブロック単位書込み１」と同じく８バイトであるものとする。
【００４７】
ただし、「ブロック単位書込み２」は「ブロック単位書込み１」と異なり、ブロックを書き込む位置が異なる。「ブロック単位書込み２」では、タグのブロック番号「５」の記憶領域の途中位置からブロック単位書込みを行う。タグに書き込むブロックは８バイトであるため、タグのブロック番号「５」の記憶領域だけでは全てのデータを書き込むことができない。
【００４８】
図３の一例では、タグのブロック番号「５」の記憶領域に４バイトのデータを書き込むことができたとする。タグに書き込むデータ量は８バイトであるため、残りの４バイトのデータはタグのブロック番号「６」の記憶領域に書き込まれる。
【００４９】
従って、図３の「ブロック単位書込み２」の場合は、タグの記憶領域のブロック番号「５」とブロック番号「６」とにまたがってデータのブロック単位書込みが行われる。このため、タグの記憶領域の異なるブロック番号にブロック単位書込みが行われるため、書込み速度が低速になる。
【００５０】
上述したように、書込みコマンドとしては、ワード単位の書込みよりもブロック単位の書込みの方が高速である場合が多い。しかしながら、上述したように、タグの記憶領域の異なるブロック番号にブロック単位書込みが行われるような場合には、ブロック単位の書込みよりもワード単位の書込みの方が高速になる場合がある。
【００５１】
従って、書込みコマンドとして、ワード単位の書込みを選択した方が高速にタグに書込みを行うことができる場合と、ブロック単位の書込みを選択した方が高速にタグに書込みを行うことができる場合とがある。
【００５２】
次に、図４を参照して、テーブル記憶部２１に記憶されるテーブルについて説明する。テーブルの一例を図４に示す。なお、テーブルの形式や項目は、図４に示した例に限定されることはない。
【００５３】
図４のテーブルの項目について説明する。リーダライタ装置種別（図４ではＲ／Ｗ装置種別）は、リーダライタ装置の種別を示している。ここでは、リーダライタ装置４Ａを「装置Ａ」として示し、リーダライタ装置４Ｂを「装置Ｂ」として示している。図示はしていないが、リーダライタ装置種別に、リーダライタ装置４Ｃに対応する「装置Ｃ」もある。
【００５４】
ＲＦＩＤタグ種別は、リーダライタ装置４ごとに非接触無線通信を行うタグを識別するタグ識別子（ＴＩＤ）を示している。図４では、「０ｘ００１１２２３３」のタグ識別子を有するタグについてのテーブルのデータの中身を詳細に示している。図示はしていないが、「０ｘ２２３３４４５５」以外のタグについても同様である。
【００５５】
図４に示すように、コマンド動作には、大別して、ワード書込みとブロック単位書込みとがある。ワード書込みには、「Ｗｏｒｄ書込最大サイズ」と「Ｗｏｒｄ書込み性能」とがある。ブロック単位書込みには、「ＢｌｏｃｋＷｒｉｔｅ可否」と「Ｂｌｏｃｋサイズ」と「Ｂｌｏｃｋまたがり可否」と「Ｂｌｏｃｋ書込み性能」とがある。
【００５６】
まず、ワード書込みについて説明する。「Ｗｏｒｄ書込最大サイズ」は、タグにワード書込みを行うときに、書込み可能な最大サイズに関する情報である。図４の一例では、「１２８Ｗｏｒｄ」になっている。つまり、ワード書込みを行うときには、１回の書込みコマンドで最大「１２８ワード」のデータの書込みを行うことが可能になっている。
【００５７】
図４の「Ｗｏｒｄ書込み性能」の一例では、書込みサイズが１Ｗｏｒｄ、２Ｗｏｒｄ、４Ｗｏｒｄ、８Ｗｏｒｄ、１６Ｗｏｒｄ、３２Ｗｏｒｄについて、初期値性能と学習値性能とエラー頻度とエラー回数と書込み回数とを示している。なお、図４のテーブルの一例には示されていないが、６４Ｗｏｒｄ、１２８Ｗｏｒｄについても、初期値性能と学習値性能とエラー頻度とエラー回数と書込み回数とが設けられていてもよい。
【００５８】
初期値性能の「性能」とは、リーダライタ装置がタグにデータを書き込むときに要する時間を示している。つまり、データの書き込み時間を「性能」という指標で表している。なお、「性能」を示す指標は上記の時間に限定されない。
【００５９】
初期値性能は、上記の時間の初期値である。初期値性能は、実際にシステム１を運用する前に、リーダライタ装置がタグにデータを書き込む時間を性能測定部１９が測定し、その結果を初期値性能として記憶してもよい。また、リーダライタ装置とタグとの仕様に基づいて、初期値性能を記憶してもよい。
【００６０】
学習値性能は、システム１を運用した後に、リーダライタ装置がタグに書き込むのに要する時間を性能測定部１９が測定し、その結果を反映した時間である。学習値性能は、データを書き込むときの実測時間を反映した書き込み時間とも称される。
【００６１】
例えば、リーダライタ装置がタグに書き込むごとに、上記の時間の平均値を演算して、演算した平均値の時間を学習値性能としてもよい。また、初期値性能に対して、リーダライタ装置がタグに書き込むごとに、性能測定部１９が測定した時間と初期値性能の時間との差分を演算して、演算結果を学習値性能としてもよい。
【００６２】
エラー頻度は、リーダライタ装置がタグにデータの書込みを行うときに、エラーが発生する頻度を示している。エラー頻度は、リーダライタ装置がタグにデータの書込みを行った回数に対してエラーが発生した回数の割合で示してもよい。また、エラー頻度は、システム１を運用してから発生したエラーの総数で示してもよい。
【００６３】
次に、ブロック単位書込みについて説明する。図４のテーブルの一例では、「Ｂｌｏｃｋｗｒｉｔｅ可否」、「Ｂｌｏｃｋサイズ」、「Ｂｌｏｃｋまたがり可否」および「Ｂｌｏｃｋ書込み性能」が設けられている。
【００６４】
「Ｂｌｏｃｋｗｒｉｔｅ可否」はブロック単位書込みが可能か否かを示している。タグによっては、ブロック単位書込みができない場合もあり、この場合は、「Ｂｌｏｃｋｗｒｉｔｅ可否」は不能になる。図４のテーブルの一例において、「Ｂｌｏｃｋｗｒｉｔｅ可否」が不能になっている場合には、ブロック単位書込みができない。このため、書込みコマンドとしては、ワード単位の書込みコマンドが選択されることになる。
【００６５】
「Ｂｌｏｃｋサイズ」は書込みコマンドで書き込まれるブロックのサイズを示している。図４の一例では、８Ｗｏｒｄになっている。従って、タグには８ワードを１つのブロックとして書込みが行われる。
【００６６】
「Ｂｌｏｃｋまたがり可否」は、タグの記憶領域の複数のブロックをまたがって書き込むことができるか否かを示している。例えば、図３で示した「ブロック単位書込み２」は、タグの記憶領域のブロック番号「５」とブロック番号「６」とにまたがって、リーダライタ装置がタグに対して書込みを行う。
【００６７】
このとき、「Ｂｌｏｃｋまたがり可否」が「否」であれば、図３で示した「ブロック単位書込み２」のような書込みを行うことはできない。従って、「Ｂｌｏｃｋまたがり可否」が「否」のときには、書き込みを行うデータのブロックを分割してブロック単位書込みを行う。
【００６８】
「Ｂｌｏｃｋ書込み性能」については、「ワード書込み性能」と同様である。すなわち、サイズと初期値性能と学習値性能とエラー回数と書き込み回数との項目を有している。各項目の内容は、「ワード書込み性能」の項目の内容と同じである。
【００６９】
図４のテーブルの一例では、「Ｂｌｏｃｋ書込み性能」の１６Ｗｏｒｄおよび３２Ｗｏｒｄが「不可」になっている。これは、図４のテーブルの一例の「Ｂｌｏｃｋまたがり可否」が「否」であり、「Ｂｌｏｃｋサイズ」が８Ｗｏｒｄになっているためである。
【００７０】
つまり、「Ｂｌｏｃｋサイズ」が８Ｗｏｒｄを超過するサイズについては、タグの記憶領域のブロックをまたがることになるため、８Ｗｏｒｄのブロックを一括して書き込むことができない。このため、８Ｗｏｒｄのブロックを２つのブロックに分割して書き込みを行う。
【００７１】
図４に示すテーブルの一例を参照すると、初期値性能と学習値性能とは異なる値になっている。これは、リーダライタ装置がタグに書込みが行われたときに、性能測定部１９が書込みに要する時間を実際に測定し、その結果を学習値性能として反映させているためである。
【００７２】
つまり、リーダライタ装置がタグに書込みを行うごとに、書込みに要する時間を性能として学習していることになる。そして、学習した性能を反映することで、実際にシステム１を運用しているときの、学習値性能をテーブルに記憶させることができる。
【００７３】
性能測定部１９が測定した時間をテーブルに反映させるのは、任意のタイミングごとでよい。つまり、リーダライタ装置がタグに１回の書き込みを行うごとに、実測した時間をテーブルに反映させるのではなく、例えば、２回の書き込みが行われるうちの１回の書き込みが行われたときに、性能測定部１９が実測を行ってもよい。そして、２回の書き込みに対して１回の書き込みの割合で、実測した時間をテーブルに反映させてもよい。
【００７４】
エラー頻度検出部２０は、リーダライタ装置がタグに書込みを行った回数を検出している。また、エラー頻度検出部２０は、リーダライタ装置がタグに書込みを行ったときに、エラーが発生した回数を検出している。従って、エラー頻度検出部２０は、リーダライタ装置がタグに書込みを行った回数に対するエラーの発生回数の割合を演算子、エラー頻度としてテーブルに記憶させる。
【００７５】
以上のテーブルは、リーダライタ装置からタグに書込みを行うときに、コマンド決定部１４が参照する。コマンド決定部１４は、上述したように、書込みコマンドを決定する。つまり、コマンド決定部１４は、ワード単位の書込みコマンドまたはブロック単位の書込みコマンドの何れかを決定する。
【００７６】
コマンド決定部１４がテーブル記憶部２１に記憶されているテーブルを参照するときには、テーブル管理部２３がメモリ２２にテーブルを読み出す。読み出されたテーブルが図４に示す例のテーブルであったとする。
【００７７】
コマンド決定部１４は、学習値性能とエラー頻度とに基づいて、ワード単位の書込みコマンドまたはブロック単位の書込みコマンドの何れにするかを決定する。コマンド決定部１４は学習値性能が高く（タグに書き込むのに要する時間が少ない）、エラー頻度が少ない方の書込みコマンドを選択する。
【００７８】
例えば、図４に示した一例のテーブルにおいて、４ワードのサイズのデータを書き込むときに、コマンド決定部１４はメモリ２２に読み出されたテーブルを参照する。図４に示した一例のテーブルでは、ワード単位の書込みの４ワードのサイズについては、学習値性能が「２００ｍｓ」であり、エラー頻度は「１０％」である。一方、ブロック単位の書込みの４ワードのサイズについては、学習値性能が「１６０ｍｓ」であり、エラー頻度は「１０％」である。
【００７９】
従って、ワード単位の書込みとブロック単位の書込みとでは、エラー頻度は同一である。この場合、ワード単位の書込みとブロック単位の書込みとの何れを選択するかは、学習値性能により決定される。
【００８０】
ワード単位の書込みの学習値性能は「２００ｍｓ」であるのに対して、ブロック単位の書込みの学習値性能は「１６０ｍｓ」である。従って、ブロック単位の書込みの方が書き込みコマンドとして性能が高い。つまり、ブロック単位の書き込みの方が、タグＡに対して高速にデータの書き込みを行うことができる。よって、コマンド決定部１４は、書込みコマンドとしてブロック単位の書込みを選択する。
【００８１】
従って、コマンド決定部１４は、学習値性能が優れ（高速に書き込みができ）、且つエラー頻度が少ない方の書き込みコマンドを選択する。また、コマンド決定部１４は、ブロック単位の書き込みとワード単位の書き込みとの学習値性能が同一の場合には、エラー頻度が少ない方の書き込みコマンドを選択し、ブロック単位の書き込みとワード単位の書き込みとのエラー頻度が同一の場合には、学習値性能が優れている方の書き込みコマンドを選択する。
【００８２】
次に、性能予測値を用いた書き込みコマンドの決定について説明する。性能予測値は、学習値性能にエラー頻度を反映させた値である。上述した一例では、ブロック単位の書き込みとワード単位の書き込みとのうち、学習値性能が優れ、且つエラー頻度が少ない方の書き込みコマンドが選択される。
【００８３】
また、ブロック単位の書き込みとワード単位の書き込みとのうち、学習値性能が同一の場合には、エラー頻度が少ない方の書き込みコマンドが選択される。同様に、エラー頻度が同一の場合には、学習値性能が優れている方の書き込みコマンドが選択される。
【００８４】
しかしながら、書き込みコマンドを決定するときに、学習値性能は優れているが、エラー頻度が多い場合、およびエラー頻度は少ないが学習値性能は優れていない場合には、コマンド決定部１４は単純には書き込みコマンドを決定することができない。
【００８５】
上述したように、学習値性能は、リーダライタ装置がタグにデータを書き込むのに要する時間を性能として示したものである。エラー頻度は、リーダ装置がタグに情報を書き込む回数に対するエラー発生回数の割合である。従って、学習値性能とエラー頻度とを単純に比較することはできない。
【００８６】
そこで、実施形態では、エラー頻度を学習値性能に反映した性能予測値を用いて書き込みコマンドを決定する。図５は、性能予測値について説明した図である。コマンド決定部１４は、メモリ２２に読み出されたテーブルのうち、エラー頻度と学習値性能との値を取得する。
【００８７】
図５の一例では、書き込み位置が８ワードになっている。実施形態では、上述したように、タグの記憶領域のブロックは８ワードである。従って、１回のブロック単位の書き込みで情報をタグに書き込むことができる。
【００８８】
図５の一例を参照すると、ワード単位の書き込みの学習値性能（図５では「性能」と示している）は「２５０ｍｓ」であり、ブロック単位の書き込みの学習値性能は「２０５ｍｓ」である。従って、学習値性能だけを基準とすると、書き込みコマンドはブロック単位の書き込みが選択される。
【００８９】
一方、図５の一例を参照すると、ワード単位の書き込みのエラー頻度は「１０％」であり、ブロック単位の書き込みのエラー頻度は「１５％」である。従って、エラー頻度だけを基準とすると、書き込みコマンドはワード単位の書き込みが選択される。
【００９０】
コマンド決定部１４は、学習値性能とエラー頻度とに基づいて、適切な書き込みコマンドを選択するため、学習値性能とエラー頻度との値だけを基準にすると、ワード単位の書き込みとブロック単位の書き込みとの何れに決定するかを判断できない。
【００９１】
そこで、コマンド決定部１４は、メモリ２２に読み出されたテーブルの数値を用いて性能予測値を演算し、演算した性能予測値に基づいて、書き込みコマンドを決定する。以下、性能予測値について説明する。
【００９２】
コマンド決定部１４が性能予測値を演算する一例としては、タグへの書き込みが所定の割合で正常となるまでのリトライ回数（所定の成功率となるまでのリトライ回数）を計算する。コマンド決定部１４は、このリトライ回数を計算するために、メモリ２２に読み出されたテーブルのうち、タグに書き込むサイズに対応するエラー頻度を読み出す。
【００９３】
コマンド決定部１４は、ブロック単位の書き込みとワード単位の書き込みとの両者についてリトライ回数を計算する。図５の例では、書き込みサイズが８ワードであるため、コマンド決定部１４は、メモリ２２に読み出されたテーブルのうち、「Ｗｏｒｄ書き込み性能」と「Ｂｌｏｃｋ書き込み性能」との両者からサイズが「８ワード」に対応するエラー頻度を読み出す。
【００９４】
図５の一例では、エラー頻度を「ｎ」としている。ワード単位の書き込みのエラー頻度ｎは、メモリ２２に読み出されたテーブルに基づいて、「１０％」となる。一方、ブロック単位の書き込みのエラー頻度ｎは、メモリ２２に読み出されたテーブルに基づいて、「１５％」となる。
【００９５】
図５の一例では、タグへの書き込みが「９９％」の成功率となるまでのリトライ回数を計算している。この「９９％」は、図５に一例として示す「ｘ：書き込み正常となる確率」になる。
【００９６】
以上のエラー頻度ｎと書き込み正常となる確率ｘとを用いて、ワード単位の書き込みとブロック単位の書き込みとのそれぞれについて、コマンド決定部１４はリトライ回数を演算する。演算されるリトライ回数は以下の式になる。
リトライ回数＝(log(1-x))/(log((1/(1-n)-1)/(1/(1-n))))・・・（式１）
【００９７】
コマンド決定部１４は、上記の式１に基づいて、ワード単位の書き込みとブロック単位の書き込みとのそれぞれについて、リトライ回数を演算する。その結果、図５に示す一例のように、「９９％」正常となるまでのリトライ回数（図５では「９９％正常となるまでの回数」と示している）は、ワード単位の書き込みでは「２０００回」、ブロック単位の書き込みでは「２４２７回」となる。
【００９８】
リトライ回数は、タグへの書き込みが「９９％」の成功率となるまでリトライする回数である。このリトライ回数に学習値性能「ｔ」を乗算する。上述したように、学習値性能は、リーダライタ装置がタグに書き込みを行うごとに、タグへの書き込みに要する時間を示している。コマンド決定部１４は、メモリ２２に読み出されたテーブルを参照して、「Ｗｏｒｄ書き込み性能」と「Ｂｌｏｃｋ書き込み性能」とのそれぞれについて、学習値性能「ｔ」を取得する。
【００９９】
「Ｗｏｒｄ書き込み性能」の「８ワード」に対応する学習値性能は「２５０ｍｓ」である。「Ｂｌｏｃｋ書き込み性能」の「８ワード」に対応する学習値性能は「２０５ｍｓ」である。
【０１００】
コマンド決定部１４は、テーブルから取得した学習値性能「ｔ」と上述のリトライ回数との乗算を行い、性能予測値「ｙ」を得る。従って、性能予測値「ｙ」は以下の式２になる。
性能予測値ｙ＝リトライ回数×学習値性能「ｔ」・・・（式２）
【０１０１】
上述したように、ワード単位の書き込みにおける学習値性能は「２５０ｍｓ」である。そして、ワード単位の書き込みにおけるリトライ回数は「２０００回」である。よって、コマンド決定部１４は、式２に基づいて、性能予測値「ｙ」を演算する。つまり、コマンド決定部１４は、「２０００×２５０ｍｓ＝５００ｓ」の演算を行う。演算した結果得られた「５００ｓ」が、ワード単位の書き込みにおける性能予測値「ｙ」になる。
【０１０２】
また、ブロック単位の書き込みにおける学習値性能は「２０５ｍｓ」である。そして、ブロック単位の書き込みにおけるリトライ回数は「２４２７回」である。よって、コマンド決定部１４は、式２に基づいて、性能予測値「ｙ」の演算を行う。つまり、コマンド決定部１４は、「２４２７×２０５ｓ＝４９７．５３５ｓ」の演算を行う。ここでは、小数点以下を四捨五入して、「４９７．５３５ｓ」は「４９８ｓ」とする。演算した結果得られた「４９８ｓ」が、ブロック単位の書き込みにおける性能予測値「ｙ」になる。
【０１０３】
コマンド決定部１４は、ワード単位の書き込みにおける性能予測値「ｙ」とブロック単位の書き込みにおける性能予測値「ｙ」とを比較する。実施形態では、性能予測値「ｙ」はブロック単位の書き込みの方が優れている。つまり、ブロック単位の書き込みの性能予測値「ｙ＝４９８ｓ」はワード単位の書き込みの性能予測値「ｙ＝５００ｓ」よりも時間が短い。
【０１０４】
従って、コマンド決定部１４は、性能予測値「ｙ」が優れている方のブロック単位の書き込みをコマンド書き込みとして決定する。この性能予測値「ｙ」を得るために、式１と式２とを用いて説明したが、式１と式２とを合わせると、以下の式３になる。
y＝(log(1-x))/(log((1/(1-n)-1)/(1/(1-n))))*t・・・（式３）
【０１０５】
性能予測値「ｙ」は、リーダライタ装置がタグに情報を書き込むのに要する時間（学習値性能）に所定の成功率となるまでのリトライ回数を加味した時間になる。リトライ回数はエラー頻度「ｎ」から得られるため、性能予測値「ｙ」は学習値性能とエラー頻度との両者を反映した時間になる。つまり、性能予測値「ｙ」は、所定の成功率で書き込みが行われるまでに、リーダライタ装置がタグに情報を書き込むのに要する時間になる。
【０１０６】
このため、学習値性能は優れているがエラー頻度が多い場合、およびエラー頻度は少ないが学習値性能が優れていない場合においても、コマンド決定部１４は性能予測値「ｙ」に基づいて、書き込みコマンドを決定することができる。
【０１０７】
次に、図６の他の例を用いて、性能予測値「ｙ」に基づいて、書き込みコマンドの決定について説明する。この例では、書き込み位置は４ワードとなっている。従って、ワード単位の書き込みの場合は、リーダライタ装置がタグに１回で書き込みを行うことができるが、ブロック単位の書き込みの場合は、データのブロックを分割して書き込みを行う。
【０１０８】
つまり、図３で示した一例と同様に、タグの記憶領域の４ワードから開始して８ワードのブロックを書き込むときには、２回に分けてブロック単位書込みが行われる。このため、図６に示した例では、１回目と２回目とに分けて図示を行っている。
【０１０９】
ワード単位の書き込みの場合、エラー頻度「ｎ」は「１０％」である。よって、コマンド決定部１４は、式１を用いて、リトライ回数の演算を行う。その結果、リトライ回数は「２０００回」になる。そして、テーブルの８ワードに対応する学習値性能は「２５０ｍｓ」になっている。
【０１１０】
よって、ワード単位の書き込みの性能予測値は「ｙ」は「ｙ＝２０００×２５０ｍｓ＝５００ｓ」となる。コマンド決定部１４は、ワード単位の書き込みの性能予測値「ｙ＝５００ｓ」を演算する。
【０１１１】
次に、ブロック単位の書き込みの場合、４ワードずつ２回に分けて、リーダライタ装置はタグに書き込みを行う。従って、コマンド決定部１４は、「Ｂｌｏｃｋ書き込み性能」の４Ｗｏｒｄに対応する学習値性能を取得する。取得された学習値性能は「１６０ｍｓ」である。また、コマンド決定部１４は、「Ｂｌｏｃｋ書き込み性能」の４Ｗｏｒｄに対応するエラー頻度を取得する。取得されたエラー頻度は「１０％」になる。
【０１１２】
コマンド決定部１４は、リトライ回数の演算を行う。ここでは、２回分のリトライ回数の演算が行われる。２回分のリトライ回数は「２７７３回」になる。また、２回分の学習値性能は「１６０ｍｓ×２＝３２０ｍｓ」となる。よって、ブロック単位の書き込みの性能予測値「ｙ」は「ｙ＝２７７３×３２０ｍｓ＝８８７ｓ」となる。
【０１１３】
従って、コマンド決定部１４は、性能予測値「ｙ」が優れているワード単位の書き込みを書き込みコマンドとして決定する。図５の例では、コマンド単位の書き込みの性能予測値「ｙ」が優れているため、コマンド決定部１４は、コマンド単位の書き込みを書き込みコマンドとして決定している。一方、図６例では、ワード単位の書き込みの性能予測値「ｙ」が優れているため、コマンド決定部１４は、ワード単位の書き込みを書き込みコマンドとして決定している。
【０１１４】
次に、フローチャートを用いて、動作について説明する。図７は、リーダライタ装置を起動するフローの一例を示している。最初に、情報処理装置２で動作しているアプリケーションがタグに対して所定のデータを書き込むように指示を出す（ステップＳ１）。
【０１１５】
実施形態では、タグＡに対してデータを書き込むものとするが、タグＢやタグＣにデータを書き込んでもよい。情報処理装置２で動作するアプリケーションは、何れのタグにデータを書き込むかを特定する情報（ここでは、タグＡ）やタグＡの記憶領域に対して書き込むデータのデータ量、データの書き込みを行うブロック番号、書き込み位置等の情報についての指示を出す。
【０１１６】
情報処理装置２で動作するアプリケーションは、上述の情報を含む指示を通信制御装置３の情報入出力部１１に対して出力する。情報入出力部１１がアプリケーションからの指示を入力すると、テーブル管理部２３は、テーブル記憶部２１からテーブルを読み出してメモリに記憶する（ステップＳ２）。なお、このステップＳ２は、後述するタグ書き込み処理の前であれば任意のタイミングで行われてもよい。
【０１１７】
情報処理装置２のアプリケーションから出力された指示には、データを書き込むタグを特定する情報が含まれている。実施形態では、タグＡが特定されているものとする。そして、タグＡはリーダライタ装置４Ａに対応している。
【０１１８】
装置起動制御部１２は、タグＡを起動するように制御を行う。リーダライタ装置決定部１７は、タグＡが特定されているため、タグＡに対応するリーダライタ装置４Ａを決定する。そして、リーダライタ装置制御部１８は、リーダライタ装置４Ａを起動（オープン）する（ステップＳ３）。以上により、起動処理が終了する。
【０１１９】
次に、図８に示すタグ検索処理が行われる。タグ検索部１３は、リーダライタ装置制御部１８を制御して、リーダライタ装置４ＡにタグＡを検索させる（ステップＳ４）。リーダライタ装置４Ａには所定の通信範囲があり、その通信範囲の中からタグＡが見つかったか否かの判定が行われる（ステップＳ５）。
【０１２０】
タグＡが見つからなかった場合（ステップＳ５でＮｏ）、処理を終了する。この場合、タグＡが見つからなかった旨の情報を情報処理装置２のアプリケーションに通知してもよい。この場合、リーダライタ装置４ＡからタグＡに対して、アプリケーションが指示したデータの書き込みは行われない。
【０１２１】
一方、タグＡが見つかった場合（ステップＳ５でＹｅｓ）、タグＡからリーダライタ装置４Ａに対してタグ識別子を送信する（ステップＳ６）。リーダライタ装置４ＡはタグＡからタグ識別子を受信したことを、通信制御装置３のタグ検索部１３に通知する。そして、タグ検索部１３は、情報入出力部１１を介して、情報処理装置２のアプリケーションに対してタグＡのタグ識別子を通知する。
【０１２２】
これにより、リーダライタ装置４Ａと通信可能なタグＡが見つかったことをアプリケーションが認識する。以上により、リーダライタ装置４ＡがタグＡにデータを書き込むことが可能になる。つまり、リーダライタ装置４ＡがタグＡにデータを書き込む準備が完了したことになる。
【０１２３】
次に、タグ書き込み処理について、図９Ａおよび図９Ｂを用いて説明する。リーダライタ装置４ＡがタグＡにデータを書き込むとき、ワード単位の書き込みとブロック単位の書き込みとの２つの書き込みコマンドがある。従って、リーダライタ装置４Ａは２つの書き込みコマンドのうち何れを使用するかをして、タグＡと非接触無線通信を行う。
【０１２４】
そこで、コマンド決定部１４は、メモリ２２に読み出されたテーブルを参照する（ステップＳ１１）。そして、コマンド決定部１４は、ブロックライト（ブロック単位の書き込み）が可能であるか否かを判断する（ステップＳ１２）。
【０１２５】
テーブルの一例を図４に示したが、図４のテーブルの中に、「Ｂｌｏｃｋｗｒｉｔｅ可否」という項目がある。この項目が「否」になっていれば（ステップＳ１２でＮｏ）、ブロック単位の書き込みはできない。従って、コマンド決定部１４は、ワード単位の書き込みを使用してデータをタグＡに書き込むことを決定する。従って、この場合は、後述するステップＳ１５に進む。
【０１２６】
一方、「Ｂｌｏｃｋｗｒｉｔｅ可否」の項目が「可」になっていれば（ステップＳ１２でＹｅｓ）、ブロック単位の書き込みとワード単位の書き込みとの両方が可能である。このとき、コマンド処理部１５は、ブロック単位の書き込みとワード単位の書き込みとに分けて性能予測値の計算を行う（ステップＳ１３）。
【０１２７】
ブロック単位の書き込みを行うときには、コマンド処理部１５は、アプリケーションより指示された位置やサイズ情報、メモリ２２に読み込まれたテーブルのＢｌｏｃｋまたがり可否の情報等に基づいて、タグＡへの書き込み回数やタグＡにデータを１回書き込むときのサイズ等を演算する。
【０１２８】
ワード単位の書き込みを行うときには、コマンド処理部１５は、アプリケーションにより指示されたタグＡへの書き込み回数やタグＡにデータを１回書き込むときのサイズ等を演算する。
【０１２９】
上述したように、ステップＳ１２でＮｏと判定されたときには、コマンド決定部１４は、ブロック単位の書き込みとワード単位の書き込みとの何れを使用するかを決定する。この決定を行うために、上述したように、コマンド決定部１４は、性能予測値「ｙ」を計算する。性能予測値「ｙ」は、ワード単位の書き込みとブロック単位の書き込みとの両者について計算される。
【０１３０】
コマンド決定部１４は、ワード単位の書き込みについての性能予測値「ｙ」の方がブロック単位の書き込みについての性能予測値「ｙ」よりも優れている場合は、書き込みコマンドとしてワード単位の書き込みを決定する。
【０１３１】
一方、コマンド決定部１４は、ブロック単位の書き込みについての性能予測値「ｙ」の方がワード単位の書き込みについての性能予測値「ｙ」よりも優れている場合は、書き込みコマンドとしてブロック単位の書き込みを決定する。
【０１３２】
これにより、コマンド決定部１４は、タグＡにデータの書き込みを行うときに使用する書き込みコマンドを選択する（ステップＳ１４）。コマンド決定部１４がブロック単位の書き込みを選択したときには、図９Ａの「Ｂ」に処理が移行する。図９Ａの「Ｂ」の処理については、後述する。
【０１３３】
一方、コマンド決定部１４がワード単位の書き込みを選択したときには、リーダライタ装置４ＡがタグＡに対して、ワード単位でデータの書き込みを行う（ステップＳ１５）。これにより、アプリケーションが指示したデータがタグＡの所定領域に書き込まれる。
【０１３４】
リーダライタ装置４ＡがタグＡに対して、ワード単位でデータの書き込みを行ったときには、テーブル管理部２３はメモリ２２に読み出されたテーブルの「Ｗｏｒｄ書き込み性能」のうち、タグＡに書き込みを行ったデータのサイズに対応する書き込み回数をインクリメントする（ステップＳ１６）。
【０１３５】
リーダライタ装置４ＡはタグＡにデータの書き込みを行う。このとき、データの書き込みが正常に行われる場合もあるが、正常に行われない場合もある。そこで、リーダライタ装置４Ａは、タグＡにデータの書き込みが正常に行われたか否かを判定する（ステップＳ１７）。
【０１３６】
リーダライタ装置４ＡからタグＡへの書き込みが正常に行われなかった場合（ステップＳ１７でＮｏ）、テーブル管理部２３は、エラー回数をインクリメントする（ステップＳ１８）。メモリ２２に読み出されたテーブルには書き込み回数の項目があり、テーブル管理部２３は、ワード単位の書き込みの対応するサイズの書き込み回数を読み出す。
【０１３７】
そして、テーブル管理部２３は、読み出した書き込み回数に対するエラー回数の割合を演算する。これにより、ワード単位の書き込みの対応するサイズのエラー頻度が更新される（ステップＳ１９）。
【０１３８】
テーブル管理部２３は、更新したエラー頻度を、ワード単位の書き込みの対応するサイズのエラー頻度に記憶する。これにより、メモリ２２に読み出されているテーブルのエラー頻度が実測に基づいて更新されていく。
【０１３９】
リーダライタ装置４ＡからタグＡへの書き込みが正常でなかった場合には、再度の書き込み（リトライ）を行う。このリトライの回数（リトライ回数）には所定の上限値がある。リトライ回数が所定の上限値に達したか否かの判定が行われる（ステップＳ２０）。リトライ回数が所定の上限値に達したときには、異常終了の処理を行う。一方、リトライ回数が所定の上限値に達していないときには、処理はステップＳ１５に移行する。
【０１４０】
ステップＳ１７において、リーダライタ装置４ＡからタグＡへの書き込みが正常に行われた場合には、性能測定部１９は、リーダライタ装置４ＡがタグＡにデータを書き込む時間を性能として測定する（ステップＳ２１）。
【０１４１】
テーブル管理部２３は、性能測定部１９が実測した時間を学習値性能に反映する。これにより、学習値性能が更新される（ステップＳ２２）。そして、テーブルの「Ｗｏｒｄ書き込み性能」の対応する学習値性能を更新する。これにより、メモリ２２に読み出されているテーブルの学習値性能が実測に基づいて更新されていく。
【０１４２】
アプリケーションの指定によっては、ワード単位の１回の書き込みで全てのデータをタグＡに書き込むことができない場合がある。そこで、コマンド処理部１５は、アプリケーションが指定したサイズ分のデータをタグＡに書き込んだか否かを判定する（ステップＳ２３）。
【０１４３】
アプリケーションが指定したサイズ分のデータがタグＡに書き込まれたときには（ステップＳ２３でＹｅｓ）、正常に終了する。一方、アプリケーションが指定したサイズ分のデータが全てタグＡに書き込まれていないときには、処理がステップＳ１５に移行する（図９Ａの「Ａ」）。
【０１４４】
以上のように、ステップＳ１４でワード単位の書き込みが選択されたときの処理が行われる。次に、ブロック単位の書き込みが選択されたときの処理について、図９Ｂを用いて説明する。
【０１４５】
ブロック単位の書き込みが選択されたときには、リーダライタ装置４ＡがタグＡに対して、データをブロック単位で書き込む（ステップＳ３１）。そして、テーブル管理部２３はメモリ２２に読み出されたテーブルの「Ｂｌｏｃｋ書き込み性能」のうち、タグＡに書き込みを行ったデータのサイズに対応する書き込み回数をインクリメントする（ステップＳ３２）。
【０１４６】
上述したように、リーダライタ装置４ＡがタグＡにデータの書き込みを行うときに、正常に書き込みが行われない場合がある。そこで、リーダライタ装置４Ａは、タグＡにデータの書き込みが正常に行われたか否かを判定する（ステップＳ３３）。
【０１４７】
リーダライタ装置４ＡからタグＡへの書き込みが正常に行われなかった場合（ステップＳ３３でＮｏ）、テーブル管理部２３は、エラー回数をインクリメントする（ステップＳ３４）。上述したように、リーダライタ装置４ＡからタグＡへの書き込みが正常でなかった場合には、リトライが行われる。このリトライ回数が上限値に達したか否かの判定が行われる（ステップＳ３５）。
【０１４８】
リトライ回数が所定の上限値に達したときには、異常終了の処理を行う。一方、リトライ回数が所定の上限値に達していないときには、エラー頻度の少ない書き込みコマンドはブロック単位の書き込みであるか、またはワード単位の書き込みであるかの判定が行われる（ステップＳ３６）。
【０１４９】
ステップＳ３６の判定が行われているということは、ステップＳ３３でリーダライタ装置４ＡからタグＡへの書き込みが正常でなかったということになる。従って、コマンド決定部１４はメモリ２２に読み出されたテーブルを参照する。そして、コマンド決定部１４は、アプリケーションが指示したサイズに対応する、エラー頻度を参照する。
【０１５０】
このとき、ワード単位の書き込みのエラー頻度の方が少なければ、図９ＡのステップＳ１５に処理を移行する。つまり、ブロック単位での書き込みでは、エラーを起こし、且つエラー頻度もワード単位の書き込みよりもブロック単位の書き込みの方が多いため、ワード単位の書き込みが選択される。一方、ステップＳ３６の判定で、ブロック単位の書き込みのエラー頻度の方が少なければ、処理はステップＳ３１に移行する。
【０１５１】
ステップＳ３３において、リーダライタ装置４ＡからタグＡへの書き込みが正常に行われた場合には、性能測定部１９は、リーダライタ装置４ＡがタグＡにデータを書き込む時間を性能として測定する（ステップＳ３７）。
【０１５２】
テーブル管理部２３は、性能測定部１９が実測した時間を反映して学習値性能を更新する（ステップＳ３８）。そして、テーブルの「Ｂｌｏｃｋ書き込み性能」の対応する学習値性能を更新する。これにより、メモリ２２に読み出されているテーブルの学習値性能が実測に基づいて更新されていく。
【０１５３】
上述したように、アプリケーションの指定によっては、ブロック単位の１回の書き込みで全てのデータをタグＡに書き込むことができない場合がある。そこで、コマンド処理部１５は、アプリケーションが指定したサイズ分のデータをタグＡに書き込んだか否かを判定する（ステップＳ３９）。
【０１５４】
アプリケーションが指定したサイズ分のデータがタグＡに書き込まれたときには（ステップＳ３９でＹｅｓ）、正常に終了する。一方、アプリケーションが指定したサイズ分のデータが全てタグＡに書き込まれていないときには、処理がステップＳ３１に移行する（図９Ｂの「Ｃ」）。
【０１５５】
以上がタグ書き込み処理である。リーダライタ装置４ＡがタグＡに所定のデータを書き込んだ後には、書き込み処理を終了する必要がある。そのための処理を図１０に示す。最初に、情報処理装置２のアプリケーションが通信制御装置３に対して終了の指示を出す（ステップＳ４１）。
【０１５６】
通信制御装置３のテーブル管理部２３は、この指示に基づいて、メモリ２２に読み出されていたテーブルをテーブル記憶部２１に記憶させる。このときにテーブル記憶部２１に記憶されるテーブルは、上述してきた種々の処理により更新がされている。従って、テーブル記憶部２１には、更新後のテーブルが記憶される（ステップＳ４２）。
【０１５７】
そして、リーダライタ装置制御部１８は、アプリケーションが指示したリーダライタ装置４Ａを停止（クローズ）する（ステップＳ４３）。これにより、リーダライタ装置４Ａは起動状態を停止し、タグＡと通信することがなくなる。以上により、終了処理が終了する。
【０１５８】
従って、実施形態では、リーダライタ装置がタグに所定のデータを書き込むときに、学習値性能とエラー頻度とに基づいて、ブロック単位の書き込みコマンドとワード単位の書き込みコマンドとのうち適切な書き込みコマンドを選択している。これにより、リーダライタ装置がタグにデータを書き込むときの性能が向上する。
【０１５９】
そして、リーダライタ装置がタグにデータを書き込むときの実測時間を反映した時間を学習値性能として、この学習値性能にエラー頻度を反映した性能予測値に基づいて、適切な書き込みコマンドを選択している。
【０１６０】
エラー頻度は、所定の割合で書き込みが正常となるまでのリトライ回数にすることで、学習値性能とリトライ回数との乗算で性能予測値を得ることができる。つまり、エラー頻度を学習値性能に反映することができるようになる。従って、学習値性能とリトライ回数との両者を総合的に勘案した性能予測値に基づいて、適切な書き込みコマンドの選択が可能になる。
【０１６１】
以上において、コマンド決定部１４は、性能予測値に基づいて、適切な書き込みコマンドを選択している。例えば、ワード単位の書き込みとブロック単位の書き込みとで、性能予測値が僅差の場合であっても、性能予測値が優れている方の書き込みコマンドが選択される。
【０１６２】
ここで、ワード単位の書き込みとブロック単位の書き込みとの何れか一方のみが常に性能予測値が優れている場合には、性能予測値の差が僅かであっても、他方の書き込みコマンドが選択されることはない。これにより、選択されなかった方の書き込みコマンドの学習値性能およびエラー頻度は実測されなくなる。このため、選択されなかった方の書き込みコマンドの学習値性能およびエラー頻度の値の信頼性が低下する。
【０１６３】
従って、所定の割合で、コマンド決定部１４は、性能予測値が優れていない書き込みコマンドを選択するようにしてもよい。例えば、ブロック単位の書き込みコマンドの性能予測値が常に優れているとしても、１０回に１回程度の割合で、ワード単位の書き込みコマンドでタグＡにデータの書き込みを行ってもよい。
【０１６４】
また、コマンド決定部１４は性能予測値に基づいて、書き込みコマンドをワード単位の書き込みにするか、またはブロック単位の書き込みにするかを決定している。性能予測値「ｙ」は上述したように、所定の演算を行う必要がある。
【０１６５】
そこで、コマンド決定部１４は、図４に一例として示したテーブルの書き込みサイズに対応した学習値性能とエラー頻度とを、ワード単位の書き込みとブロック単位の書き込みとのそれぞれについて読み出す。コマンド決定部１４は、学習値性能とエラー頻度とを参照して、学習値性能が優れ、且つエラー頻度が少ない書き込みコマンドがあれば、当該書き込みコマンドを選択するようにしてもよい。
【０１６６】
つまり、学習値性能が優れ、且つエラー頻度が少ない書き込みコマンドが適切な書き込みコマンドである。この場合、性能予測値「ｙ」を演算するまでもなく、コマンド決定部１４は適切な書き込みコマンドを決定することができる。このため、性能予測値「ｙ」を演算するための処理時間を削減することができる。
【０１６７】
そして、学習値性能は優れているがエラー頻度が多い場合、またはエラー頻度は少ないが学習値性能が優れていない場合には、コマンド決定部１４は性能予測値「ｙ」を演算して、適切なコマンドを決定するようにしてもよい。
【０１６８】
また、実施形態では、テーブルは、学習値性能とエラー頻度との両者を有していることが前提であるが、テーブルが何れか一方のみを有している場合には、他方を使用して、適切な書き込みコマンドを決定してもよい。
【０１６９】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【符号の説明】
【０１７０】
１    システム
２    情報処理装置
３    通信制御装置
４    リーダライタ装置
１１  情報入出力部
１２  装置起動制御部
１３  タグ検索部
１４  コマンド決定部
１５  コマンド処理部
１６  タグリード部
１７  リーダライタ装置決定部
１８  リーダライタ装置制御部
１９  性能測定部
２０  エラー検出部
２１  テーブル記憶部
２２  メモリ
２３  テーブル管理部
３０  バス
３１  プロセッサ
３２  ＲＡＭ
３３  ＲＯＭ
３４  記憶装置
３５  通信インタフェース
３６  入出力装置
【図１】
0006005615.tif 000002
【図２】
0006005615.tif 000003
【図３】
0006005615.tif 000004
【図４】
0006005615.tif 000005
【図５】
0006005615.tif 000006
【図６】
0006005615.tif 000007
【図７】
0006005615.tif 000008
【図８】
0006005615.tif 000009
【図９Ａ】
0006005615.tif 000010
【図９Ｂ】
0006005615.tif 000011
【図１０】
0006005615.tif 000012