(57)【要約】【課題】理解するコマンドが異なる複数種類の記憶装置が混在する状況であっても、そのことを意識せずに、記憶装置が記憶したデータを操作できるようにする。【解決手段】識別取得指示部１７１が、記憶装置（ＩＣタグ）に対して識別取得コマンドを送信し、識別受信部１８１が、記憶装置の識別情報を受信する。プロトコル判定部１３０が、記憶装置の識別情報に基づいて、記憶装置が理解するコマンド群（プロトコル）を判定し、共通コマンド取得部１６１が取得した共通コマンドを、拡張コマンド変換部１４０が拡張コマンドに変換して、コマンド送信部１７２が、記憶装置に対して送信する。【選択図】図３
2010108157.tif 000002
【特許請求の範囲】
【請求項１】
制御装置からの指示にしたがって記憶装置と通信し、上記記憶装置が記憶したデータを操作するデータ操作装置において、
データを処理する処理装置と、上記記憶装置に対してデータを送信する送信装置と、上記記憶装置からデータを受信する受信装置と、共通コマンド取得部と、識別取得指示部と、識別受信部と、コマンド群判定部と、拡張コマンド変換部と、拡張コマンド送信部と、応答受信部と、応答変換部と、応答通知部とを有し、
上記共通コマンド取得部は、上記処理装置を用いて、上記制御装置からの指示を表わす共通コマンドを取得し、
上記識別取得指示部は、上記送信装置を用いて、上記記憶装置に対して、上記記憶装置の識別情報を送信するよう指示する識別取得コマンドを送信し、
上記識別受信部は、上記受信装置を用いて、上記識別取得指示部が送信した識別取得コマンドに対する応答として、上記記憶装置が送信した識別情報を受信し、
上記コマンド群判定部は、上記処理装置を用いて、上記識別受信部が受信した識別情報に基づいて、複数の拡張コマンド群のなかから、上記記憶装置が理解する拡張コマンド群を判定し、
上記拡張コマンド変換部は、上記処理装置を用いて、上記コマンド群判定部が判定した拡張コマンド群に基づいて、上記共通コマンド取得部が取得した共通コマンドを、上記記憶装置が理解する拡張コマンドに変換し、
上記拡張コマンド送信部は、上記送信装置を用いて、上記記憶装置に対して、上記拡張コマンド変換部が変換した拡張コマンドを送信し、
上記応答受信部は、上記受信装置を用いて、上記拡張コマンド送信部が送信した拡張コマンドに対する応答として、上記記憶装置が送信した応答データを受信し、
上記応答変換部は、上記処理装置を用いて、上記応答受信部が受信した応答データのデータ形式を、所定の形式に変換して、変換データを生成し、
上記応答通知部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドに対する応答として、上記応答変換部が生成した変換データを、上記制御装置に対して通知することを特徴とするデータ操作装置。
【請求項２】
上記データ操作装置は、更に、コマンド判定部と、基本コマンド変換部とを有し、
上記コマンド判定部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドが、上記記憶装置の種別にかかわらず理解する基本コマンドに変換可能なコマンドか否かを判定し、
上記基本コマンド変換部は、上記共通コマンド取得部が取得した共通コマンドが上記基本コマンドに変換可能なコマンドであると、上記コマンド判定部が判定した場合に、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドを、上記基本コマンドに変換し、
上記拡張コマンド送信部は、上記共通コマンド取得部が取得した共通コマンドが基本コマンドであると、上記コマンド判定部が判定した場合に、上記送信装置を用いて、上記記憶装置に対して、上記基本コマンド変換部が変換した基本コマンドを送信し、上記共通コマンド取得部が取得した共通コマンドが基本コマンドに変換可能なコマンドでないと、上記コマンド判定部が判定した場合に、上記送信装置を用いて、上記記憶装置に対して、上記拡張コマンド変換部が変換した拡張コマンドを送信することを特徴とする請求項１に記載のデータ操作装置。
【請求項３】
上記データ操作装置は、更に、データを記憶する内部記憶装置と、プロトコル記憶部とを有し、
上記プロトコル記憶部は、上記内部記憶装置を用いて、上記コマンド群判定部が判定する拡張コマンド群のそれぞれについて、上記記憶装置が記憶したデータを複数まとめて操作する単位である一つの操作ブロックに含まれるデータの数を表わすブロックサイズを記憶し、
上記拡張コマンド変換部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドが、上記記憶装置が記憶したデータを複数まとめて操作するよう指示する共通ブロック操作コマンドであるか否かを判定し、上記共通コマンドが上記共通ブロック操作コマンドであると判定した場合に、上記コマンド群判定部が判定した拡張コマンド群について上記プロトコル記憶部が記憶したブロックサイズに基づいて、上記共通コマンドを拡張コマンドに変換することを特徴とする請求項１または請求項２に記載のデータ操作装置。
【請求項４】
上記拡張コマンド変換部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドが上記共通ブロック操作コマンドであると判定した場合に、上記共通コマンド取得部が取得した共通コマンドから、まとめて操作する対象となる複数の操作対象データを指示する操作指示データを取得し、上記コマンド群判定部が判定した拡張コマンド群について上記プロトコル記憶部が記憶したブロックサイズに基づいて、取得した操作指示データにより指示された複数の操作対象データを、上記操作対象データを含む操作ブロックごとに分割し、分割した操作ブロックごとの操作対象データのそれぞれについて、上記操作対象データを操作する拡張コマンドを生成することを特徴とする請求項３に記載のデータ操作装置。
【請求項５】
上記プロトコル記憶部は、複数のテーブル記憶部と、有効フラグ記憶部と、テーブル更新部と、テーブル切替部とを有し、
上記複数のテーブル記憶部のそれぞれは、上記内部記憶装置を用いて、上記コマンド群判定部が判定する拡張コマンド群のそれぞれについて、上記記憶装置が理解する拡張コマンドと、上記ブロックサイズとを含むプロトコルテーブルを記憶し、
上記有効フラグ記憶部は、上記内部記憶装置を用いて、上記複数のテーブル記憶部のうち、いずれが有効であるかを表わす有効フラグを記憶し、
上記テーブル更新部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドが、プロトコルテーブルの更新を指示するコマンドである場合に、上記有効フラグ記憶部が記憶した有効フラグに基づいて、有効でないテーブル記憶部が記憶したプロトコルテーブルを更新し、
上記テーブル切替部は、上記処理装置を用いて、上記有効フラグ記憶部が記憶した有効フラグを更新して、上記テーブル更新部が更新したテーブル記憶部を有効にすることを特徴とする請求項３または請求項４に記載のデータ操作装置。
【請求項６】
上記データ操作装置は、更に、データを記憶する不揮発性の不揮発内部記憶装置を有し、
上記プロトコル記憶部は、複数のマスター記憶部と、マスター有効フラグ記憶部と、テーブル更新部と、テーブル切替部と、テーブル記憶部とを有し、
上記複数のマスター記憶部のそれぞれは、上記不揮発内部記憶装置を用いて、上記コマンド群判定部が判定する拡張コマンド群のそれぞれについて、上記記憶装置が理解する拡張コマンドと、上記ブロックサイズとを含むプロトコルテーブルを記憶し、
上記マスター有効フラグ記憶部は、上記内部記憶装置を用いて、上記複数のマスター記憶部のうち、いずれが有効であるかを表わすマスター有効フラグを記憶し、
上記テーブル更新部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドが、プロトコルテーブルの更新を指示するコマンドである場合に、上記マスター有効フラグ記憶部が記憶したマスター有効フラグに基づいて、有効でないマスター記憶部が記憶したプロトコルテーブルを更新し、
上記テーブル切替部は、上記処理装置を用いて、上記マスター有効フラグ記憶部が記憶したマスター有効フラグを更新して、上記テーブル更新部が更新したマスター記憶部を有効にし、
上記テーブル記憶部は、上記内部記憶装置を用いて、上記マスター有効フラグ記憶部が記憶したマスター有効フラグに基づいて、有効なマスター記憶部が記憶したプロトコルテーブルを読み込んで、記憶することを特徴とする請求項３乃至請求項５のいずれかに記載のデータ操作装置。
【請求項７】
上記データ操作装置は、更に、通信成否判定部を有し、
上記通信成否判定部は、上記処理装置を用いて、上記応答受信部が受信した応答データに基づいて、上記記憶装置との通信が成功したか失敗したかを判定し、
上記拡張コマンド変換部は、上記処理装置を用いて、上記記憶装置との通信が失敗したと上記通信成否判定部が判定した場合に、上記共通コマンドを、変換した拡張コマンドよりも一回の通信で送受信するデータ長が短い拡張コマンドに再変換し、
上記拡張コマンド送信部は、上記送信装置を用いて、上記記憶装置に対して、上記拡張コマンド変換部が再変換した拡張コマンドを送信することを特徴とする請求項１乃至請求項６のいずれかに記載のデータ操作装置。
【請求項８】
上記データ操作装置は、更に、通信成否判定部を有し、
上記通信成否判定部は、上記処理装置を用いて、上記拡張コマンド変換部が変換した一以上の拡張コマンドのそれぞれについて、上記応答受信部が受信した応答データに基づいて、上記記憶装置との通信が成功したか失敗したかを判定し、
上記拡張コマンド変換部は、上記処理装置を用いて、上記拡張コマンド変換部が変換した一以上の拡張コマンドのいずれかについて、上記記憶装置との通信が失敗したと上記通信成否判定部が判定した場合に、上記記憶装置との通信が失敗したと上記通信成否判定部が判定した拡張コマンドについて、操作する操作対象データを複数に分割し、分割した操作対象データのそれぞれについて、拡張コマンドを生成することにより、通信に失敗した拡張コマンドを、複数の拡張コマンドに変換し、
上記拡張コマンド送信部は、上記送信装置を用いて、上記記憶装置に対して、上記拡張コマンド変換部が変換した複数の拡張コマンドを送信することを特徴とする請求項４乃至請求項６のいずれかに記載のデータ操作装置。
【請求項９】
上記拡張コマンド変換部は、上記処理装置を用いて、上記共通コマンド取得部が取得した一つの共通コマンドを一以上の拡張コマンドに変換し、
上記応答変換部は、上記処理装置を用いて、上記拡張コマンド変換部が一つの共通コマンドを変換した一以上の拡張コマンドのそれぞれに対して上記応答受信部が受信した応答データに基づいて、一つの変換データを生成することを特徴とする請求項１乃至請求項８のいずれかに記載のデータ操作装置。
【請求項１０】
複数の記憶装置と、請求項１乃至請求項９のいずれかに記載のデータ操作装置とを有し、
上記複数の記憶装置は、それぞれ、複数の拡張コマンド群のうちいずれかの拡張コマンド群を理解することを特徴とするデータ操作システム。
【請求項１１】
データを処理する処理装置を有するコンピュータが実行することにより、上記コンピュータが、請求項１乃至請求項９のいずれかに記載のデータ操作装置として機能することを特徴とするコンピュータプログラム。
【請求項１２】
データを処理する処理装置と、記憶装置に対してデータを送信する送信装置と、上記記憶装置からデータを受信する受信装置とを有するデータ操作装置が、制御装置からの指示にしたがって上記記憶装置と通信し、上記記憶装置が記憶したデータを操作するデータ操作方法において、
上記処理装置が、上記制御装置からの指示を表わす共通コマンドを取得し、
上記送信装置が、上記記憶装置に対して、上記記憶装置の識別情報を送信するよう指示する識別取得コマンドを送信し、
上記受信装置が、上記送信装置が送信した識別取得コマンドに対する応答として、上記記憶装置が送信した識別情報を受信し、
上記処理装置が、上記受信装置が受信した識別情報に基づいて、複数の拡張コマンド群のなかから、上記記憶装置が理解する拡張コマンド群を判定し、
上記処理装置が、判定した拡張コマンド群に基づいて、取得した共通コマンドを、上記記憶装置が理解する拡張コマンドに変換し、
上記送信装置が、上記記憶装置に対して、上記処理装置が変換した拡張コマンドを送信し、
上記受信装置が、上記送信装置が送信した拡張コマンドに対する応答として、上記記憶装置が送信した応答データを受信し、
上記処理装置が、上記受信装置が受信した応答データのデータ形式を、所定の形式に変換して、変換データを生成し、
上記処理装置が、取得した共通コマンドに対する応答として、生成した変換データを、上記制御装置に対して通知することを特徴とするデータ操作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）タグなどの記憶装置と通信をして、記憶装置が記憶したデータを操作するデータ操作装置に関する。
【背景技術】
【０００２】
イーピーシーグローバル（ＥＰＣ  Ｇｌｏｂａｌ）は、ＩＣタグとの通信に用いる通信プロトコルを規格化している。このうち、非特許文献１に記載されている規格（以下「Ｃ１Ｇ２」と呼ぶ。）が、よく使われている。
Ｃ１Ｇ２において、ＩＣタグは、ＴＩＤなどを記憶する通常のメモリ領域のほかに、ユーザが自由に書き込むことができるメモリ領域（ユーザメモリ）を持つことができる。近年、数キロビット〜数百キロビットのユーザメモリを有する大容量のＩＤタグが販売されるようになっている。Ｃ１Ｇ２では、このような大容量のユーザメモリを効率的に操作することのできるエアコマンドが用意されていないため、ＩＣタグを製造するメーカーなどが独自にエアコマンドを拡張している。拡張されたエアコマンドは、統一されておらず、同一あるいは類似の機能を実現するものであっても、メーカーごとに異なっている。
【特許文献１】特開２００８−９０４０５号公報
【特許文献２】特開２００７−３１８３２３号公報
【特許文献３】特開２００５−２８４４５５号公報
【特許文献４】特開平１１−１８４６４９号公報
【非特許文献１】「ＥＰＣ  Ｒａｄｉｏ−Ｆｒｅｑｕｅｎｃｙ  Ｉｄｅｎｔｉｔｙ  Ｐｒｏｔｏｃｏｌｓ  Ｃｌａｓｓ−１  Ｇｅｎｅｒａｔｉｏｎ−２  ＵＨＦ  ＲＦＩＤ    Ｐｒｏｔｏｃｏｌ  ｆｏｒ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ａｔ  ８６０ＭＨｚ−９６０ＭＨｚ  Ｖｅｒｓｉｏｎ  １．１．０」ＥＰＣｇｌｏｂａｌ、２００６年。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＩＣタグを利用した流通システムなどにおいては、大量のＩＣタグが必要となる。このようなシステムにおいて、特定のメーカーが拡張したエアコマンドを使うアプリケーションを使用すると、他のメーカー製のＩＣタグを利用することができない。このため、ひとたびシステムを構築した後は、特定のメーカーから大量のＩＣタグを購入する必要が生じ、自由な価格競争によるシステムのコストダウンを期待することができない。
この発明は、例えば、上記のような課題を解決するためになされたものであり、アプリケーションなどを実行する制御装置からの指示にしたがって、ＩＣタグなどの記憶装置に対してコマンドを送信することにより、記憶装置が記憶したデータを操作するデータ操作装置において、理解するコマンドが異なる複数種類の記憶装置が混在した状況であっても、制御装置の側ではそのことを意識せずに、データを操作できるようにすることを目的とする。
【課題を解決するための手段】
【０００４】
この発明にかかるデータ操作装置は、
制御装置からの指示にしたがって記憶装置と通信し、上記記憶装置が記憶したデータを操作するデータ操作装置において、
データを処理する処理装置と、上記記憶装置に対してデータを送信する送信装置と、上記記憶装置からデータを受信する受信装置と、共通コマンド取得部と、識別取得指示部と、識別受信部と、コマンド群判定部と、拡張コマンド変換部と、拡張コマンド送信部と、応答受信部と、応答変換部と、応答通知部とを有し、
上記共通コマンド取得部は、上記処理装置を用いて、上記制御装置からの指示を表わす共通コマンドを取得し、
上記識別取得指示部は、上記送信装置を用いて、上記記憶装置に対して、上記記憶装置の識別情報を送信するよう指示する識別取得コマンドを送信し、
上記識別受信部は、上記受信装置を用いて、上記識別取得指示部が送信した識別取得コマンドに対する応答として、上記記憶装置が送信した識別情報を受信し、
上記コマンド群判定部は、上記処理装置を用いて、上記識別受信部が受信した識別情報に基づいて、複数の拡張コマンド群のなかから、上記記憶装置が理解する拡張コマンド群を判定し、
上記拡張コマンド変換部は、上記処理装置を用いて、上記コマンド群判定部が判定した拡張コマンド群に基づいて、上記共通コマンド取得部が取得した共通コマンドを、上記記憶装置が理解する拡張コマンドに変換し、
上記拡張コマンド送信部は、上記送信装置を用いて、上記記憶装置に対して、上記拡張コマンド変換部が変換した拡張コマンドを送信し、
上記応答受信部は、上記受信装置を用いて、上記拡張コマンド送信部が送信した拡張コマンドに対する応答として、上記記憶装置が送信した応答データを受信し、
上記応答変換部は、上記処理装置を用いて、上記応答受信部が受信した応答データのデータ形式を、所定の形式に変換して、変換データを生成し、
上記応答通知部は、上記処理装置を用いて、上記共通コマンド取得部が取得した共通コマンドに対する応答として、上記応答変換部が生成した変換データを、上記制御装置に対して通知することを特徴とする。
【発明の効果】
【０００５】
この発明にかかるデータ操作装置によれば、異なる拡張コマンド群を理解する記憶装置が混在する場合であっても、そのことを制御装置の側で意識する必要がなく、同じ共通コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを操作することができる。
【発明を実施するための最良の形態】
【０００６】
実施の形態１．
実施の形態１について、図１〜図１１を用いて説明する。
【０００７】
図１は、この実施の形態におけるＩＣタグ読取システム８００の全体構成の一例を示すシステム構成図である。
ＩＣタグ読取システム８００（データ操作システムの一例）は、ＰＣ８１０、ＲＦＩＤリーダライタ装置１００、複数のＩＣタグ８２０を有する。
ＲＦＩＤ（Ｒａｄｉｏ  Ｆｒｅｑｕａｎｃｙ  Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）リーダライタ装置１００（データ操作装置の一例）は、アンテナから送信した電波によりＩＣタグ８２０に対して電力を供給するとともに、ＩＣタグ８２０に対してコマンドを送信し、ＩＣタグ８２０からの応答を受信する装置である。
ＲＦＩＤリーダライタ装置１００は、ＰＣ（パーソナルコンピュータ）８１０（制御装置の一例）と接続している。ＲＦＩＤリーダライタ装置１００は、ＰＣ８１０からの指示にしたがって、ＩＣタグ８２０に対してコマンドを送信し、ＩＣタグ８２０からの応答をＰＣ８１０に通知する。
【０００８】
ＩＣタグ８２０（記憶装置の一例）は、ＩＣタグ８２０自身の識別情報や、その他のデータを記憶する記憶領域を有する。ＩＣタグ８２０は、ＲＦＩＤリーダライタ装置１００が発信した電波により電力の供給を受けて動作する。ＩＣタグ８２０は、ＲＦＩＤリーダライタ装置１００が発信した電波を復調して、ＲＦＩＤリーダライタ装置１００が送信したコマンドを受信し、受信したコマンドにしたがって、要求されたデータをＲＦＩＤリーダライタ装置１００に対して送信したり、ＲＦＩＤリーダライタ装置１００から受信したデータを指定された記憶領域に記憶したりなどの動作をする。
ＩＣタグ８２０は、例えばＣ１Ｇ２などの規格により定められたコマンド（以下「基本コマンド」と呼ぶ。）を理解するほか、ＩＣタグ８２０のメーカーごとに独自に拡張したコマンド（以下「拡張コマンド」と呼ぶ。）を理解して、理解したコマンドが指示する動作をする。
基本コマンドには、例えば、通信するＩＣタグのグループを選択する「Ｓｅｌｅｃｔコマンド」、通信対象となるＩＣタグを一つのＩＣタグに決定する「Ｑｕｅｒｙコマンド」、ＩＣタグのＩＤを読み出す「Ａｃｋコマンド」などがある。
【０００９】
図２は、この実施の形態におけるＲＦＩＤリーダライタ装置１００のハードウェア構成の一例を示すハードウェア構成図である。
ＲＦＩＤリーダライタ装置１００は、ＲＯＭ９１３、ＲＡＭ９１４、フラッシュメモリ９２０、ＣＰＵ９１１、通信装置９１５、送信装置９１７、受信装置９１８、アンテナ９１９を有する。
【００１０】
ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、フラッシュメモリ９２０は、プログラムやデータなどを記憶する装置である。
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１１（処理装置の一例）は、例えばＲＯＭ９１３などが記憶したプログラムを実行することにより、例えばＲＡＭ９１４などが記憶したデータを処理する装置である。
通信装置９１５は、ＣＰＵ９１１からの指示により、ＰＣ８１０と通信する装置である。通信装置９１５は、例えばＲＡＭ９１４などが記憶したデータをＰＣ８１０に対して送信し、ＰＣ８１０からデータを受信して、例えばＲＡＭ９１４などに記憶させる。
送信装置９１７は、ＣＰＵ９１１からの指示により、アンテナ９１９を介して、ＩＣタグ８２０に対してコマンドやその他のデータを送信する装置である。送信装置９１７は、例えばＲＡＭ９１４などが記憶したデータをＩＣタグ８２０に対して送信する。
受信装置９１８は、ＣＰＵ９１１からの指示により、アンテナ９１９を介して、ＩＣタグ８２０が送信したデータを受信する装置である。送信装置９１７は、受信したデータを、例えばＲＡＭ９１４などに記憶させる。
【００１１】
図３は、この実施の形態におけるＲＦＩＤリーダライタ装置１００の機能ブロックの構成の一例を示すブロック構成図である。
以下に説明する機能ブロックは、例えばＲＯＭ９１３が記憶したプログラムを、ＣＰＵ９１１が実行することにより実現する。あるいは、専用のデジタル回路やアナログ回路を用いて実現してもよい。特に、速い処理速度が要求されるブロックは、ＣＰＵ９１１を用いてソフトウェア的に実現するよりも、専用の回路を用いて実現するほうが好ましい。
【００１２】
ＲＦＩＤリーダライタ装置１００は、コマンド判定部１１０、基本コマンド変換部１１５、プロトコル記憶部１２０、プロトコル判定部１３０、拡張コマンド変換部１４０、応答変換部１５０、共通コマンド取得部１６１、応答通知部１６２、識別取得指示部１７１、コマンド送信部１７２、識別受信部１８１、応答受信部１８２を有する。
【００１３】
共通コマンド取得部１６１は、通信装置９１５を用いて、ＰＣ８１０が送信した共通コマンドを取得する。「共通コマンド」には、ＩＣタグ８２０に対する指示などを表わすコマンドである。共通コマンドによる指示は、ＲＦＩＤリーダライタ装置１００が、ＩＣタグ８２０が理解する一以上のコマンドに変換することにより実現される。共通コマンドには、基本コマンドにより提供される機能だけで実現可能なコマンドだけでなく、拡張コマンドにより提供される機能を使う必要のあるコマンドも含まれる。共通コマンド取得部１６１は、ＣＰＵ９１１を用いて、取得した共通コマンドを出力する。
【００１４】
例えば、メーカーＡのＩＣタグ８２０は、２５６バイトを一つのブロックとして、２５６×１６＝４０９６バイトの記憶領域を有する。メーカーＡのＩＣタグ８２０は、０〜１５のブロック番号を指定して、ブロック単位でデータを読み出す拡張コマンド「ブロック読み出しＡ」や、０〜１５のブロック番号を指定して、ブロック単位でデータを書き込む拡張コマンド「ブロック書き込みＡ」を理解する。
これに対し、メーカーＢのＩＣタグ８２０は、１２８バイトを一つのブロックとして、１２８×５０＝６４００バイトの記憶領域を有する。メーカーＢのＩＣタグ８２０は、１〜５０のブロック番号を指定して、ブロック単位でデータを読み出す拡張コマンド「ブロック読み出しＢ」や、１〜５０のブロック番号を指定して、ブロック単位でデータを書き込む拡張コマンド「ブロック書き込みＢ」を理解する。
更に、メーカーＣのＩＣタグ８２０は、１０２４バイトを一つのブロックとして、１０２４×８＝８１９２バイトの記憶領域を有する。メーカーＣのＩＣタグ８２０は、０〜７のブロック番号を指定して、ブロック単位でデータを読み出す拡張コマンド「ブロック読み出しＣ」や、０〜７のブロック番号を指定して、ブロック単位でデータを読み出す拡張コマンド「ブロック書き込みＣ」を理解する。
【００１５】
これらメーカーの違いによる拡張コマンドの違いを吸収するため、共通コマンドには、例えば、ブロックサイズと０から始まるブロック番号とを指定して、ブロック単位でデータを読み出す「共通ブロック読み出し」コマンドや、ブロックサイズと０から始まるブロック番号とを指定して、ブロック単位でデータを読み出す「共通ブロック書き込み」コマンドが含まれる。
【００１６】
プロトコル記憶部１２０は、フラッシュメモリ９２０を用いて、あらかじめ、プロトコルテーブルを記憶している。プロトコルテーブルとは、各メーカー独自の拡張コマンドのプロトコルを表わすテーブルである。
【００１７】
図４は、この実施の形態における共通コマンドと各メーカー独自の拡張コマンドとにおけるブロック操作コマンドのブロック番号の対応の一例を示す図である。
この例において、三種類のＩＣタグがあるものとする。一つは、メーカーＡが製造し、ＴＩＤが「ＴＩＤＡ」であるＩＣタグ。もう一つは、メーカーＢが製造し、ＴＩＤが「ＴＩＤＢ」であるＩＣタグ、他の一つは、メーカーＣが製造し、ＴＩＤが「ＴＩＤＣ」であるＩＣタグである。三種類のＩＣタグは、それぞれ異なる拡張コマンドを理解する。
ブロックサイズとして１２８を指定した場合、ＴＩＤが「ＴＩＤＡ」のＩＣタグが理解する拡張コマンド（以下「拡張コマンドＡ」と呼ぶ。）のブロックサイズは２５６であるから、共通コマンドにおけるブロック番号０及び１が、拡張コマンドＡにおけるブロック番号０に対応する。ＴＩＤが「ＴＩＤＢ」のＩＣタグが理解する拡張コマンド（以下「拡張コマンドＢ」と呼ぶ。）のブロックサイズは１２８だが、開始番号が１なので、共通コマンドにおけるブロック番号０は、拡張コマンドＢにおけるブロック番号１に対応する。ＴＩＤが「ＴＩＤＣ」のＩＣタグが理解する拡張コマンド（以下「拡張コマンドＣ」と呼ぶ。）のブロックサイズは１０２４なので、共通コマンドにおけるブロック番号０〜７が、メーカーＣの拡張コマンドにおけるブロック番号０に対応する。
ブロックサイズとして５１２を指定した場合は、共通コマンドにおけるブロック番号０が、拡張コマンドＡにおけるブロック番号０及び１に対応し、拡張コマンドＢにおけるブロック番号１〜８に対応する。また、共通コマンドにおけるブロック番号０及び１が、拡張コマンドＣにおけるブロック番号０に対応する。
【００１８】
図５は、この実施の形態におけるプロトコル記憶部１２０が記憶したプロトコルテーブル５２０の一例を示す図である。
プロトコルテーブル５２０は、例えば、共通コマンド５２１、プロトコル５２２、拡張コマンド５２３、ブロックサイズ５２４、ブロック数５２５、開始ブロック番号５２６からなるデータの組（レコード）を複数有する。
共通コマンド５２１は、拡張コマンドにより提供される機能に相当する共通コマンドを表わす。
プロトコル５２２は、ＩＣタグ８２０が理解する拡張コマンド群を表わすデータであり、例えばＩＣタグ８２０のＴＩＤである。あるいは、プロトコル５２２は、ＩＣタグ８２０のメーカーを表わす識別情報であってもよい。ＩＣタグのメーカーを表わす識別情報は、ＩＣタグ８２０のＴＩＤのうち、ＩＣタグのメーカーを表わす部分以外をマスクすることにより抽出することができる。
拡張コマンド５２３は、各メーカーが独自に拡張した拡張コマンドを表わす。ブロックサイズ５２４は、拡張コマンドがブロック操作コマンドである場合に、１つのコマンドで操作できる記憶領域の大きさを表わす。ブロック数５２５は、ブロック操作コマンドで操作できる記憶領域のブロックの数を表わす。開始ブロック番号５２６は、最初のブロックのブロック番号を表わす。
なお、ＩＣタグの種別にかかわらず、最初のブロック番号が「０」である場合には、プロトコルテーブル５２０は、開始ブロック番号５２６がなくてもよい。
【００１９】
図３に戻り、ＲＦＩＤリーダライタ装置１００の機能ブロックの説明を続ける。
【００２０】
コマンド判定部１１０は、ＣＰＵ９１１を用いて、共通コマンド取得部１６１が出力した共通コマンドを入力する。コマンド判定部１１０は、ＣＰＵ９１１を用いて、入力した共通コマンドが、基本コマンドにより提供される機能だけで実現可能なコマンドであるか、拡張コマンドにより提供される機能を使うコマンドであるかを判定する。コマンド判定部１１０は、ＣＰＵ９１１を用いて、判定した判定結果を出力する。
【００２１】
基本コマンド変換部１１５は、ＣＰＵ９１１を用いて、コマンド判定部１１０が出力した判定結果を入力する。基本コマンド変換部１１５は、入力した判定結果に基づいて、共通コマンド取得部１６１が取得した共通コマンドが、基本コマンドにより実現できるコマンドであるとコマンド判定部１１０が判定した場合、ＣＰＵ９１１を用いて、共通コマンド取得部１６１が出力した共通コマンドを入力する。基本コマンド変換部１１５は、ＣＰＵ９１１を用いて、入力した共通コマンドを、一以上の基本コマンドに変換する。基本コマンド変換部１１５は、ＣＰＵ９１１を用いて、変換した基本コマンドを出力する。
【００２２】
識別取得指示部１７１は、ＣＰＵ９１１を用いて、コマンド判定部１１０が出力した判定結果を入力する。識別取得指示部１７１は、入力した判定結果に基づいて、共通コマンド取得部１６１が取得した共通コマンドが、拡張コマンドを使うコマンドであるとコマンド判定部１１０が判定した場合、送信装置９１７を用いて、ＩＣタグ８２０に対して、識別取得コマンドを送信する。識別取得コマンドとは、ＩＣタグ８２０に対して、ＴＩＤ（タグＩＤ、識別情報の一例）を送信するよう指示するコマンドであり、例えば、基本コマンドである「Ｓｅｌｅｃｔコマンド」「Ｑｕｅｒｙコマンド」「Ａｃｋコマンド」「ＲｅｑＲＮコマンド（ハンドルナンバーの取得）」「Ｒｅａｄコマンド（読み出し）」を組み合わせたものである。したがって、ＩＣタグ８２０のメーカー如何に関わらず、ＩＣタグ８２０は、識別取得コマンドを理解する。
【００２３】
識別受信部１８１は、受信装置９１８を用いて、識別取得指示部１７１が送信した識別取得コマンドに対する応答として、ＩＣタグ８２０が送信したＴＩＤを受信する。識別受信部１８１は、ＣＰＵ９１１を用いて、受信したＴＩＤを出力する。
【００２４】
プロトコル判定部１３０（コマンド群判定部の一例）は、ＣＰＵ９１１を用いて、識別受信部１８１が出力したＴＩＤを入力する。プロトコル判定部１３０は、ＣＰＵ９１１を用いて、入力したＴＩＤを、そのＩＣタグ８２０のプロトコルとして取得する。あるいは、プロトコル判定部１３０は、ＣＰＵ９１１を用いて、ＴＩＤからＩＣタグ８２０のメーカーを表わす識別情報を取得する。
プロトコル判定部１３０は、ＣＰＵ９１１を用いて、共通コマンド取得部１６１が出力した共通コマンドを入力する。プロトコル判定部１３０は、取得したプロトコルと、入力した共通コマンドとに基づいて、プロトコル記憶部１２０が記憶したプロトコルテーブル５２０のなかから、共通コマンド５２１が、入力した共通コマンドと一致し、かつ、プロトコル５２２が、取得したプロトコルと一致するレコードを検索して、拡張コマンド５２３、ブロックサイズ５２４、ブロック数５２５、開始ブロック番号５２６を取得する。プロトコル判定部１３０は、ＣＰＵ９１１を用いて、入力した共通コマンドと、取得したプロトコルと、取得した拡張コマンド５２３とブロックサイズ５２４とブロック数５２５と開始ブロック番号５２６とを出力する。
【００２５】
拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンドとプロトコルと拡張コマンド５２３とブロックサイズ５２４とブロック数５２５と開始ブロック番号５２６とを入力する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドを、入力したプロトコルにおける拡張コマンドに変換する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、変換した拡張コマンドを出力する。
【００２６】
コマンド送信部１７２は、ＣＰＵ９１１を用いて、コマンド判定部１１０が出力した判定結果を入力する。コマンド送信部１７２は、入力した判定結果に基づいて、共通コマンド取得部１６１が取得した共通コマンドが基本コマンドで実現できるコマンドであるとコマンド判定部１１０が判定した場合、基本コマンド変換部１１５が出力した基本コマンドを入力する。コマンド送信部１７２は、ＣＰＵ９１１を用いて、共通コマンド取得部１６１が取得した共通コマンドが拡張コマンドを使うコマンドであるとコマンド判定部１１０が判定した場合、拡張コマンド変換部１４０が出力した拡張コマンドを入力する。
コマンド送信部１７２は、送信装置９１７を用いて、ＩＣタグ８２０に対して、入力したコマンドを送信する。
【００２７】
応答受信部１８２は、受信装置９１８を用いて、コマンド送信部１７２が送信したコマンドに対する応答として、ＩＣタグ８２０が送信したデータ（以下「応答データ」と呼ぶ。）を受信する。コマンド送信部１７２は送信したコマンドが読み出しコマンドであれば、応答データは、例えば、記憶領域から読み出したデータである。あるいは、コマンド送信部１７２が送信したコマンドが書き込みコマンドであれば、応答データは、例えば、書き込みに成功したか否かを表わすステータスデータである。応答受信部１８２は、ＣＰＵ９１１を用いて、受信した応答データを出力する。
【００２８】
応答変換部１５０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が共通コマンド等を出力した場合、プロトコル判定部１３０が出力した共通コマンド、プロトコル、拡張コマンド５２３、ブロックサイズ５２４、ブロック数５２５、開始ブロック番号５２６を入力する。
応答変換部１５０は、ＣＰＵ９１１を用いて、応答受信部１８２が出力した応答データを入力する。応答変換部１５０は、ＣＰＵ９１１を用いて、応答データの形式を、共通コマンドに対する応答としてあらかじめ定められている所定の形式に変換する。応答変換部１５０は、ＣＰＵ９１１を用いて、変換した応答データ（以下「変換データ」と呼ぶ。）を出力する。
【００２９】
応答通知部１６２は、ＣＰＵ９１１を用いて、応答変換部１５０が出力した変換データを入力する。応答通知部１６２は、ＣＰＵ９１１を用いて、入力した変換データを、共通コマンド取得部１６１が取得した共通コマンドに対する応答として、ＰＣ８１０に対して通知する。
【００３０】
次に、動作の詳細について、具体的なコマンドの例をいくつか挙げて、説明する。
【００３１】
図６は、この実施の形態における拡張コマンド変換部１４０が、ブロック読み出しコマンドを変換するブロック読み出しコマンド変換処理の流れの一例を示すフローチャート図である。
【００３２】
拡張コマンド変換部１４０は、入力した共通コマンドが、ブロック読み出しコマンドである場合に、ブロック読み出しコマンド変換処理をする。
ブロック読み出しコマンド変換処理は、例えば、ブロックサイズ比算出工程Ｓ６１２、ブロック番号算出工程Ｓ６１３、拡張コマンド生成工程Ｓ６１４、読み出しサイズ判定工程Ｓ６１５を有する。
【００３３】
ブロックサイズ比算出工程Ｓ６１２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロックサイズを、入力したブロックサイズ５２４で割った比を算出する。
【００３４】
ブロック番号算出工程Ｓ６１３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロック番号と、ブロックサイズ比算出工程Ｓ６１２で算出した比との積を算出する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積と、入力したブロック数５２５とを比較する。算出した積がブロック数５２５以上の場合、そのブロックはＩＣタグ８２０に存在しないので、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック読み出しコマンド変換処理を終了する。
算出した積がブロック数５２５より小さい場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積と、入力した開始ブロック番号５２６との和を算出し、ブロック番号とする。
【００３５】
拡張コマンド生成工程Ｓ６１４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３と、ブロック番号算出工程Ｓ６１３で算出したブロック番号とに基づいて、変換した拡張コマンドを生成する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、生成した拡張コマンドを出力する。
【００３６】
読み出しサイズ判定工程Ｓ６１５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロックサイズと、拡張コマンド生成工程Ｓ６１４で生成した拡張コマンドにおけるブロックサイズの累計とを比較する。
共通コマンドのブロックサイズが、拡張コマンドのブロックサイズの累計以下である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック読み出しコマンド変換処理を終了する。
共通コマンドのブロックサイズが、拡張コマンドのブロックサイズの累計より大きい場合、拡張コマンド変換部１４０は、ブロック番号増加工程Ｓ６１６へ進む。
【００３７】
ブロック番号増加工程Ｓ６１６において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック番号算出工程Ｓ６１３で算出したブロック番号と１との和を算出し、新しいブロック番号とする。
その後、拡張コマンド変換部１４０は、拡張コマンド生成工程Ｓ６１４に戻る。
【００３８】
図７は、この実施の形態における共通コマンド取得部１６１が取得する共通コマンドと、拡張コマンド変換部１４０が変換する拡張コマンドとの関係の具体例を示す図である。
例えば、共通コマンド取得部１６１が入力した共通コマンドが、２５６バイトを１ブロックとして、５番ブロックの読み出しを指示するブロック読み出しコマンドであるとする。また、プロトコル記憶部１２０は、図５に示したプロトコルテーブル５２０を記憶しているものとする。
【００３９】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＡ」である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンド「ブロック読み出し」、プロトコル「ＴＩＤＡ」、拡張コマンド５２３「ブロック読み出しＡ」、ブロックサイズ５２４「２５６」、ブロック数５２５「１６」、開始ブロック番号５２６「０」を入力する。
【００４０】
ブロックサイズ比算出工程Ｓ６１２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」と、入力したブロックサイズ５２４「２５６」との比「１」を算出する。
ブロック番号算出工程Ｓ６１３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロック番号「５」と、算出した比「１」との積「５」を算出する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「５」が、入力したブロック数５２５「１６」より小さいことを判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「５」と、入力した開始ブロック番号５２６「０」とを加算して、ブロック番号「５」を算出する。
拡張コマンド生成工程Ｓ６１４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック読み出しＡ」と、算出したブロック番号「５」とに基づいて、拡張コマンド「ブロック読み出しＡ  ＃５」を生成して、出力する。
読み出しサイズ判定工程Ｓ６１５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「２５６」以下であることを判定して、ブロック読み出しコマンド変換処理を終了する。
【００４１】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＢ」である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンド「ブロック読み出し」、プロトコル「ＴＩＤＢ」、拡張コマンド５２３「ブロック読み出しＢ」、ブロックサイズ５２４「１２８」、ブロック数５２５「５０」、開始ブロック番号５２６「１」を入力する。
【００４２】
ブロックサイズ比算出工程Ｓ６１２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」と、入力したブロックサイズ５２４「１２８」との比「２」を算出する。
ブロック番号算出工程Ｓ６１３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロック番号「５」と、算出した比「２」との積「１０」を算出する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１０」が、入力したブロック数５２５「５０」より小さいことを判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１０」と、入力した開始ブロック番号５２６「１」とを加算して、ブロック番号「１１」を算出する。
拡張コマンド生成工程Ｓ６１４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック読み出しＢ」と、算出したブロック番号「１１」とに基づいて、拡張コマンド「ブロック読み出しＢ  ＃１１」を生成する。
読み出しサイズ判定工程Ｓ６１５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「１２８」より大きいことを判定し、ブロック番号増加工程Ｓ６１６へ進む。
ブロック番号増加工程Ｓ６１６において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出したブロック番号「１１」に１を加えて、ブロック番号「１２」を算出する。
拡張コマンド生成工程Ｓ６１４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック読み出しＢ」と、算出したブロック番号「１２」とに基づいて、拡張コマンド「ブロック読み出しＢ  ＃１２」を生成して、出力する。
読み出しサイズ判定工程Ｓ６１５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「２５６」以下であることを判定し、ブロック読み出しコマンド変換処理を終了する。
【００４３】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＣ」である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンド５２１「ブロック読み出し」、プロトコル「ＴＩＤＣ」、拡張コマンド５２３「ブロック読み出しＣ」、ブロックサイズ５２４「１０２４」、ブロック数５２５「８」、開始ブロック番号５２６「０」を入力する。
【００４４】
ブロックサイズ比算出工程Ｓ６１２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」と、入力したブロックサイズ５２４「１０２４」との比「１／４」を算出する。
ブロック番号算出工程Ｓ６１３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロック番号「５」と、算出した比「１／４」との積「５／４」を算出し、小数部分を切り捨てて「１」とする。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１」が、入力したブロック数５２５「８」より小さいことを判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１」と、入力した開始ブロック番号５２６「０」とを加算して、ブロック番号「１」を算出する。
拡張コマンド生成工程Ｓ６１４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック読み出しＣ」と、算出したブロック番号「１」とに基づいて、拡張コマンド「ブロック読み出しＣ  ＃１」を生成し、出力する。
読み出しサイズ判定工程Ｓ６１５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「１０２４」以下であることを判定し、ブロック読み出しコマンド変換処理を終了する。
【００４５】
図８は、この実施の形態における拡張コマンド変換部１４０が、ブロック書き込みコマンドを変換するブロック書き込みコマンド変換処理の流れの一例を示すフローチャート図である。
【００４６】
拡張コマンド変換部１４０は、入力した共通コマンドが、ブロック書き込みコマンドである場合に、ブロック書き込みコマンド変換処理をする。
ブロック書き込みコマンド変換処理は、例えば、ブロックサイズ比算出工程Ｓ６２２、ブロック番号算出工程Ｓ６２３、ブロックサイズ比較工程Ｓ６２４、読み出しコマンド生成工程Ｓ６２５、書き込みデータ生成工程Ｓ６２６、拡張コマンド生成工程Ｓ６２７、書き込みサイズ判定工程Ｓ６２８、ブロック番号増加工程Ｓ６２９を有する。
【００４７】
ブロックサイズ比算出工程Ｓ６２２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロックサイズを、入力したブロックサイズ５２４で割った比を算出する。
【００４８】
ブロック番号算出工程Ｓ６２３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロック番号と、ブロックサイズ比算出工程Ｓ６２２で算出した比との積を算出する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積と、入力したブロック数５２５とを比較する。算出した積がブロック数５２５以上の場合、そのブロックはＩＣタグ８２０に存在しないので、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック書き込みコマンド変換処理を終了する。
算出した積がブロック数５２５より小さい場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積と、入力した開始ブロック番号５２６との和を算出し、ブロック番号とする。
【００４９】
ブロックサイズ比較工程Ｓ６２４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロックサイズと、入力したブロックサイズ５２４とを比較する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、共通コマンドにおけるブロックサイズが、入力したブロックサイズ５２４以上である場合、拡張コマンド生成工程Ｓ６２７へ進む。
なお、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロックサイズ比算出工程Ｓ６２２で算出した比が１以上であるか否かに基づいて、共通コマンドにおけるブロックサイズが、入力したブロックサイズ５２４以上であるか否かを判定してもよい。
【００５０】
読み出しコマンド生成工程Ｓ６２５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力したプロトコルにおける拡張コマンドを生成する。ここで生成する拡張コマンドは、データをブロックに書き込む際、書き換えない部分のデータを、ＩＣタグ８２０から読み出すためのブロック読み出しコマンドである。
拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル記憶部１２０が記憶したプロトコルテーブル５２０のなかから、共通コマンド５２１が「ブロック読み出し」と一致し、プロトコル５２２が、入力したプロトコルと一致するレコードを検索して、拡張コマンド５２３を取得する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、取得した拡張コマンド５２３と、ブロック番号算出工程Ｓ６２３で算出したブロック番号とに基づいて、拡張コマンドを生成する。
【００５１】
書き込みデータ生成工程Ｓ６２６において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、読み出しコマンド生成工程Ｓ６２５で生成した拡張コマンドに対する応答としてＩＣタグ８２０が送信し、応答受信部１８２が受信して出力した応答データを入力する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した応答データのうち、入力した共通コマンドにより書き換えられるべき部分に、入力した共通コマンドにおける書き込みデータを上書きして、書き込みデータを生成する。
【００５２】
拡張コマンド生成工程Ｓ６２７において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３と、ブロック番号算出工程Ｓ６２３で算出したブロック番号と、書き込みデータとに基づいて、変換した拡張コマンドを生成する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、生成した拡張コマンドを出力する。
【００５３】
書き込みサイズ判定工程Ｓ６２８において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロックサイズと、拡張コマンド生成工程Ｓ６２７で生成した拡張コマンドにおけるブロックサイズの累計とを比較する。
共通コマンドのブロックサイズが、拡張コマンドのブロックサイズの累計以下である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック読み出しコマンド変換処理を終了する。
共通コマンドのブロックサイズが、拡張コマンドのブロックサイズの累計より大きい場合、拡張コマンド変換部１４０は、ブロック番号増加工程Ｓ６２９へ進む。
【００５４】
ブロック番号増加工程Ｓ６２９において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック番号算出工程Ｓ６２３で算出したブロック番号と１との和を算出し、新しいブロック番号とする。
その後、拡張コマンド変換部１４０は、拡張コマンド生成工程Ｓ６２７に戻る。
【００５５】
図９は、この実施の形態における共通コマンド取得部１６１が取得する共通コマンドと、拡張コマンド変換部１４０が変換する拡張コマンドとの関係の具体例を示す図である。
例えば、共通コマンド取得部１６１が入力した共通コマンドが、２５６バイトを１ブロックとして、６番ブロックへの書き込みを指示するブロック書き込みコマンドであるとする。また、プロトコル記憶部１２０は、図５に示したプロトコルテーブル５２０を記憶しているものとする。
【００５６】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＡ」である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンド「ブロック書き込み」、プロトコル「ＴＩＤＡ」、拡張コマンド５２３「ブロック書き込みＡ」、ブロックサイズ５２４「２５６」、ブロック数５２５「１６」、開始ブロック番号５２６「０」を入力する。
【００５７】
ブロックサイズ比算出工程Ｓ６２２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」と、入力したブロックサイズ５２４「２５６」との比「１」を算出する。
ブロック番号算出工程Ｓ６２３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロック番号「６」と、算出した比「１」との積「６」を算出する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「６」が、入力したブロック数５２５「１６」より小さいことを判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「６」と、入力した開始ブロック番号５２６「０」とを加算して、ブロック番号「６」を算出する。
ブロックサイズ比較工程Ｓ６２４において、拡張コマンド変換部１４０は、入力した共通コマンドのブロックサイズ「２５６」が、入力したブロックサイズ５２４「２５６」以上であることを判定する。
拡張コマンド生成工程Ｓ６２７において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック書き込みＡ」と、算出したブロック番号「６」と、入力した共通コマンドにおける２５６バイトの書き込みデータとに基づいて、拡張コマンド「ブロック書き込みＡ  ＃６」を生成し、出力する。
書き込みサイズ判定工程Ｓ６２８において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「２５６」以下であることを判定して、ブロック書き込みコマンド変換処理を終了する。
【００５８】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＢ」である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンド「ブロック書き込み」、プロトコル「ＴＩＤＢ」、拡張コマンド５２３「ブロック書き込みＢ」、ブロックサイズ５２４「１２８」、ブロック数５２５「５０」、開始ブロック番号５２６「１」を入力する。
【００５９】
ブロックサイズ比算出工程Ｓ６２２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」と、入力したブロックサイズ５２４「１２８」との比「２」を算出する。
ブロック番号算出工程Ｓ６２３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロック番号「６」と、算出した比「２」との積「１２」を算出する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１２」が、入力したブロック数５２５「５０」より小さいことを判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１０」と、入力した開始ブロック番号５２６「１」とを加算して、ブロック番号「１３」を算出する。
ブロックサイズ比較工程Ｓ６２４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、入力したブロックサイズ５２４「１２８」以上であることを判定する。
拡張コマンド生成工程Ｓ６２７において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック書き込みＢ」と、算出したブロック番号「１３」と、入力した共通コマンドにおける２５６バイトの書き込みデータのうち最初の１２８バイトの書き込みデータとに基づいて、拡張コマンド「ブロック書き込みＢ  ＃１３」を生成し、出力する。
書き込みサイズ判定工程Ｓ６２８において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「１２８」より大きいことを判定し、ブロック番号増加工程Ｓ６２９へ進む。
ブロック番号増加工程Ｓ６２９において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出したブロック番号「１３」に１を加えて、ブロック番号「１４」を算出する。
拡張コマンド生成工程Ｓ６２７において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック書き込みＢ」と、算出したブロック番号「１４」と、入力した共通コマンドにおける２５６バイトの書き込みデータのうち後の１２８バイトの書き込みデータとに基づいて、拡張コマンド「ブロック書き込みＢ  ＃１４」を生成し、出力する。
書き込みサイズ判定工程Ｓ６２８において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、生成した拡張コマンドのブロックサイズの累計「２５６」以下であることを判定し、ブロック書き込みコマンド変換処理を終了する。
【００６０】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＣ」である場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンド「ブロック書き込み」、プロトコル「ＴＩＤＣ」、拡張コマンド５２３「ブロック書き込みＣ」、ブロックサイズ５２４「１０２４」、ブロック数５２５「８」、開始ブロック番号５２６「０」を入力する。
【００６１】
ブロックサイズ比算出工程Ｓ６２２において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」と、入力したブロックサイズ５２４「１０２４」との比「１／４」を算出する。
ブロック番号算出工程Ｓ６２３において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロック番号「６」と、算出した比「１／４」との積「３／２」を算出し、小数部分を切り捨てて「１」とする。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、小数部分を切り捨てた積「１」が、入力したブロック数５２５「８」より小さいことを判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、算出した積「１」と、入力した開始ブロック番号５２６「０」とを加算して、ブロック番号「１」を算出する。
ブロックサイズ比較工程Ｓ６２４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、入力したブロックサイズ５２４「１０２４」より小さいことを判定する。
読み出しコマンド生成工程Ｓ６２５において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル記憶部１２０が記憶したプロトコルテーブル５２０のなかから、共通コマンド５２１が「ブロック読み出し」であり、かつ、プロトコル５２２が「ＴＩＤＣ」であるレコードを検索して、拡張コマンド５２３「ブロック読み出しＣ」を取得する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、取得した拡張コマンド５２３「ブロック読み出しＣ」と、算出したブロック番号「１」とに基づいて、拡張コマンド「ブロック読み出しＣ  ＃１」を生成し、出力する。
書き込みデータ生成工程Ｓ６２６において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、生成した拡張コマンド「ブロック読み出しＣ  ＃１」に対する応答として、ＩＣタグ８２０が送信した１０２４バイトのデータを入力する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック番号算出工程Ｓ６２３で算出した積「３／２」のうち小数部分のみを取り出して「１／２」とする。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した１０２４バイトのデータのうち、「１／２」の位置に当たる５１３バイト目から始まる７６８バイト目までの２５６バイトのデータを、入力した共通コマンドにおける２５６バイトの書き込みデータで上書きして、１０２４バイトの書き込みデータを生成する。
拡張コマンド生成工程Ｓ６２７において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３「ブロック書き込みＣ」と、算出したブロック番号「１」と、生成した１０２４バイトの書き込みデータとに基づいて、拡張コマンド「ブロック書き込みＣ  ＃１」を生成し、出力する。
書き込みサイズ判定工程Ｓ６２８において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズ「２５６」が、拡張コマンド生成工程Ｓ６２７で生成した拡張コマンドのブロックサイズの累計「１０２４」以下であることを判定し、ブロック書き込みコマンド変換処理を終了する。
【００６２】
図１０は、この実施の形態における応答変換部１５０が、ブロック読み出しコマンドに対する応答を変換するブロック読み出し応答変換処理の流れの一例を示すフローチャート図である。
【００６３】
応答変換部１５０は、入力した共通コマンドが、ブロック読み出しコマンドである場合に、ブロック読み出し応答変換処理をする。
ブロック読み出し応答変換処理は、例えば、応答データ入力工程Ｓ６３１、読み出し異常判定工程Ｓ６３２、ブロックサイズ比較工程Ｓ６３３、応答データ蓄積工程Ｓ６３４、読み出しサイズ判定工程Ｓ６３５、応答データ抽出工程Ｓ６３６、変換データ出力工程Ｓ６３７を有する。
【００６４】
応答データ入力工程Ｓ６３１において、応答変換部１５０は、ＣＰＵ９１１を用いて、応答受信部１８２が出力した応答データを入力する。
【００６５】
読み出し異常判定工程Ｓ６３２において、応答変換部１５０は、ＣＰＵ９１１を用いて、応答データ入力工程Ｓ６３１で入力した応答データを解析して、読み出し異常か否かを判定する。応答変換部１５０は、例えば、ＣＰＵ９１１を用いて、入力した応答データの誤り検出符号を検査し、読み出し異常か否かを判定する。
応答変換部１５０は、ＣＰＵ９１１を用いて、読み出し異常であると判定した場合、ブロック読み出し応答変換処理を終了する。
応答変換部１５０は、ＣＰＵ９１１を用いて、読み出し異常でないと判定した場合、ブロックサイズ比較工程Ｓ６３３へ進む。
なお、応答変換部１５０が読み出し異常であると判定した場合、応答変換部１５０は、ＣＰＵ９１１を用いて、読み出し異常であることを表わすデータを生成し、出力する構成としてもよい。あるいは、コマンド送信部１７２が拡張コマンドをＩＣタグ８２０に対して再送し、応答受信部１８２が応答データを再び受信する構成としてもよい。
【００６６】
ブロックサイズ比較工程Ｓ６３３において、応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロックサイズと、入力したブロックサイズ５２４とを比較する。
応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズが、入力したブロックサイズ５２４より大きいと判定した場合、応答データ蓄積工程Ｓ６３４へ進む。
応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズが、入力したブロックサイズ５２４より小さいと判定した場合、応答データ抽出工程Ｓ６３６へ進む。
応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通コマンドのブロックサイズが、入力したブロックサイズ５２４と等しいと判定した場合、応答データ入力工程Ｓ６３１で入力した応答データを変換前データとして、変換データ出力工程Ｓ６３７へ進む。
【００６７】
応答データ蓄積工程Ｓ６３４において、応答変換部１５０は、ＣＰＵ９１１を用いて、応答データ入力工程Ｓ６３１で入力した応答データを蓄積する。
【００６８】
読み出しサイズ判定工程Ｓ６３５において、応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通データにおけるブロックサイズと、応答データ蓄積工程Ｓ６３４で蓄積した読み出しデータのサイズの累計とを比較する。
応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通データにおけるブロックサイズが、蓄積した読み出しデータのサイズの累計より大きいと判定した場合、応答データ入力工程Ｓ６３１に戻る。
応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通データにおけるブロックサイズが、蓄積した読み出しデータのサイズの累計以下であると判定した場合、蓄積した応答データを変換前データとして、変換データ出力工程Ｓ６３７へ進む。
【００６９】
応答データ抽出工程Ｓ６３６において、応答変換部１５０は、ＣＰＵ９１１を用いて、応答データ入力工程Ｓ６３１で入力した応答データのなかから、出力すべき部分を抽出して、変換前データとする。
例えば、応答変換部１５０は、ＣＰＵ９１１を用いて、入力したブロックサイズ５２４を、入力した共通コマンドにおけるブロックサイズで割った商を算出する。応答変換部１５０は、ＣＰＵ９１１を用いて、入力した共通コマンドにおけるブロック番号を、算出した商で割った余りを算出する。応答変換部１５０は、ＣＰＵ９１１を用いて、入力した応答データを、入力した共通コマンドにおけるブロックサイズごとに分割する。応答変換部１５０は、ＣＰＵ９１１を用いて、分割した応答データのなかから、「算出した余り＋１」番目の応答データを選択して、変換前データとする。
【００７０】
変換データ生成工程Ｓ６３７において、応答変換部１５０は、ＣＰＵ９１１を用いて、変換前データを所定の形式に変換して、変換データを生成する。
【００７１】
変換データ出力工程Ｓ６３８において、応答変換部１５０は、ＣＰＵ９１１を用いて、変換データを出力する。
【００７２】
図１１は、この実施の形態における応答受信部１８２が受信した応答データと、応答変換部１５０が変換した変換データとの関係の具体例を示す図である。
【００７３】
拡張コマンド変換部１４０が、２５６バイトを１つのブロックとして５番ブロックを読み出す共通コマンド「ブロック読み出し  ２５６，＃５」を、２５６バイトを１つのブロックとして５番ブロックを読み出す拡張コマンド「ブロック読み出しＡ  ＃５」に変換した場合、ＩＣタグ８２０は、これに対する応答データとして、読み出した２５６バイトのデータを送信する。応答変換部１５０は、ＣＰＵ９１１を用いて、応答受信部１８２が受信した応答データを変換前データとし、変換前データを所定の形式に変換して変換データとする。
【００７４】
拡張コマンド変換部１４０が共通コマンド「ブロック読み出し  ２５６，＃５」を、１２８バイトを１つのブロックとして１１番ブロックを読み出す拡張コマンド「ブロック読み出しＢ  ＃１１」と、１２番ブロックを読み出す拡張コマンド「ブロック読み出しＢ  ＃１２」とに変換した場合、ＩＣタグ８２０は、「ブロック読み出しＢ  ＃１１」に対する応答データとして、読み出した１２８バイトのデータを送信し、「ブロック読み出しＢ  ＃１２」に対する応答データとして、読み出した１２８バイトのデータを送信する。応答変換部１５０は、ＣＰＵ９１１を用いて、応答受信部１８２が受信した２つの応答データを蓄積して結合して２５６バイトのデータを生成して変換前データとし、変換前データを所定の形式に変換して変換データとする。
【００７５】
拡張コマンド変換部１４０が共通コマンド「ブロック読み出し  ２５６，＃５」を、１０２４バイトを１つのブロックとして１番ブロックを読み出す拡張コマンド「ブロック読み出しＣ  ＃１」に変換した場合、ＩＣタグ８２０は、これに対する応答データとして、読み出した１０２４バイトのデータを送信する。応答変換部１５０は、ＣＰＵ９１１を用いて、応答受信部１８２が受信した応答データのなかから、５番ブロックに相当する２５６バイトのデータを抽出して変換前データとし、変換前データを所定の形式に変換して変換データとする。
【００７６】
なお、以上の説明では、１つのプロトコルに「ブロック読み出しコマンド」や「ブロック書き込みコマンド」が１種類しかない場合について説明したが、１つのプロトコルに複数種類の「ブロック読み出しコマンド」や「ブロック書き込みコマンド」がある場合も想定される。例えば、ブロックサイズが２５６バイトのブロック読み出しコマンド「ブロック読み出し小」と、ブロックサイズが１０２４バイトのブロック読み出しコマンド「ブロック読み出し大」とを含むプロトコルがあってもよい。
その場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、入力した共通コマンド「ブロック読み出し」を、効率のよいほうの拡張コマンドに変換する。例えば、拡張コマンド変換部１４０は、共通コマンドのブロックサイズが５１２バイト以下である場合、拡張コマンド「ブロック読み出し小」に変換する。拡張コマンド「ブロック読み出し大」に変換すると、１０２４バイトを読み出すため、通信時間が長くなり、読み出したデータのうち５１２バイト以上が無駄になるからである。逆に、共通コマンドのブロックサイズが５１２バイトより大きい場合、拡張コマンド「ブロック読み出し大」に変換する。拡張コマンド「ブロック読み出し小」に変換すると、ＩＣタグ８２０に対してコマンドを３回以上送信するので、コマンド送信応答受信に時間がかかり、逆に通信時間が長くなるからである。
【００７７】
また、以上の説明では、「ブロック読み出しコマンド」「ブロック書き込みコマンド」について説明したが、共通コマンド・拡張コマンドは、これに限らず、他の機能を実現するコマンドであってもよい。
【００７８】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、制御装置（ＰＣ８１０）からの指示にしたがって記憶装置（ＩＣタグ８２０）と通信し、上記記憶装置（ＩＣタグ８２０）が記憶したデータを操作するデータ操作装置である。
データ操作装置（ＲＦＩＤリーダライタ装置１００）は、データを処理する処理装置（ＣＰＵ９１１）と、上記記憶装置（ＩＣタグ８２０）に対してデータを送信する送信装置９１７と、上記記憶装置（ＩＣタグ８２０）からデータを受信する受信装置９１８と、共通コマンド取得部１６１と、識別取得指示部１７１と、識別受信部１８１と、コマンド群判定部（プロトコル判定部１３０）と、拡張コマンド変換部１４０と、拡張コマンド送信部（コマンド送信部１７２）と、応答受信部１８２と、応答変換部１５０と、応答通知部１６２とを有する。
上記共通コマンド取得部１６１は、上記処理装置（ＣＰＵ９１１）を用いて、上記制御装置（ＰＣ８１０）からの指示を表わす共通コマンドを取得する。
上記識別取得指示部１７１は、上記送信装置９１７を用いて、上記記憶装置（ＩＣタグ８２０）に対して、上記記憶装置の識別情報（ＴＩＤ）を送信するよう指示する識別取得コマンドを送信する。
上記識別受信部１８１は、上記受信装置９１８を用いて、上記識別取得指示部１７１が送信した識別取得コマンドに対する応答として、上記記憶装置（ＩＣタグ８２０）が送信した識別情報（ＴＩＤ）を受信する。
上記コマンド群判定部（プロトコル判定部１３０）は、上記処理装置（ＣＰＵ９１１）を用いて、上記識別受信部１８１が受信した識別情報（ＴＩＤ）に基づいて、複数の拡張コマンド群（プロトコル）のなかから、上記記憶装置（ＩＣタグ８２０）が理解する拡張コマンド群（プロトコル）を判定する。
上記拡張コマンド変換部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記コマンド群判定部（プロトコル判定部１３０）が判定した拡張コマンド群（プロトコル）に基づいて、上記共通コマンド取得部１６１が取得した共通コマンドを、上記記憶装置（ＩＣタグ８２０）が理解する拡張コマンドに変換する。
上記拡張コマンド送信部（コマンド送信部１７２）は、上記送信装置９１７を用いて、上記記憶装置（ＩＣタグ８２０）に対して、上記拡張コマンド変換部１４０が変換した拡張コマンドを送信する。
上記応答受信部１８２は、上記受信装置９１８を用いて、上記拡張コマンド送信部（コマンド送信部１７２）が送信した拡張コマンドに対する応答として、上記記憶装置（ＩＣタグ８２０）が送信した応答データを受信する。
上記応答変換部１５０は、上記処理装置（ＣＰＵ９１１）を用いて、上記応答受信部１８２が受信した応答データのデータ形式を、所定の形式に変換して、変換データを生成する。
上記応答通知部１６２は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドに対する応答として、上記応答変換部１５０が生成した変換データを、上記制御装置（ＰＣ８１０）に対して通知する。
【００７９】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、異なる拡張コマンド群（プロトコル）を理解する記憶装置（ＩＣタグ８２０）が混在する場合であっても、そのことを制御装置（ＰＣ８１０）の側で意識する必要がなく、同じ共通コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを操作することができる。
【００８０】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、更に、コマンド判定部１１０と、基本コマンド変換部１１５とを有する。
上記コマンド判定部１１０は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドが、上記記憶装置（ＩＣタグ８２０）の種別にかかわらず理解する基本コマンドに変換可能なコマンドか否かを判定する。
上記基本コマンド変換部１１５は、上記共通コマンド取得部１６１が取得した共通コマンドが上記基本コマンドに変換可能なコマンドであると、上記コマンド判定部１１０が判定した場合に、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドを、上記基本コマンドに変換する。
上記拡張コマンド送信部（コマンド送信部１７２）は、上記共通コマンド取得部１６１が取得した共通コマンドが基本コマンドに変換可能なコマンドであると、上記コマンド判定部１１０が判定した場合に、上記送信装置９１７を用いて、上記記憶装置（ＩＣタグ８２０）に対して、上記基本コマンド変換部１１５が変換した基本コマンドを送信し、上記共通コマンド取得部１６１が取得した共通コマンドが基本コマンドに変換可能なコマンドでないと、上記コマンド判定部１１０が判定した場合に、上記送信装置９１７を用いて、上記記憶装置（ＩＣタグ８２０）に対して、上記拡張コマンド変換部１４０が変換した拡張コマンドを送信する。
【００８１】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、記憶装置（ＩＣタグ８２０）が理解するコマンドに、規格などにより定められ、記憶装置の種別にかかわらずすべての記憶装置が理解する基本コマンドと、記憶装置の製造メーカーなどが独自に拡張したコマンドとがある場合において、基本コマンドにより実現される機能を使う場合は、記憶装置（ＩＣタグ８２０）の種別にかかわらず、基本コマンド変換部１１５が、共通コマンドを基本コマンドに変換するので、既存のアプリケーションなどに変更を加える必要がない。
【００８２】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、更に、データを記憶する内部記憶装置（フラッシュメモリ９２０）と、プロトコル記憶部１２０とを有する。
上記プロトコル記憶部１２０は、上記内部記憶装置を用いて、上記コマンド群判定部（プロトコル判定部１３０）が判定する拡張コマンド群（プロトコル）のそれぞれについて、上記記憶装置（ＩＣタグ８２０）が記憶したデータを複数まとめて操作する単位である一つの操作ブロックに含まれるデータの数を表わすブロックサイズ５２４を記憶する。
上記拡張コマンド変換部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドが、上記記憶装置（ＩＣタグ８２０）が記憶したデータを複数まとめて操作するよう指示する共通ブロック操作コマンド（ブロック読み出しコマンド・ブロック書き込みコマンド）であるか否かを判定し、上記共通コマンドが上記共通ブロック操作コマンドであると判定した場合に、上記コマンド群判定部（プロトコル判定部１３０）が判定した拡張コマンド群（プロトコル）について上記プロトコル記憶部１２０が記憶したブロックサイズ５２４に基づいて、上記共通コマンドを拡張コマンドに変換する。
【００８３】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、記憶装置（ＩＣタグ８２０）の種別によって、複数のデータをまとめて操作する単位であるブロックサイズが異なる場合であっても、制御装置（ＰＣ８１０）の側は、ブロックサイズを意識する必要がなく、同じ共通ブロック操作コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを複数まとめて操作することができる。
【００８４】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）において、上記拡張コマンド変換部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した一つの共通コマンドを一以上の拡張コマンドに変換する。
上記応答変換部１５０は、上記処理装置（ＣＰＵ９１１）を用いて、上記拡張コマンド変換部１４０が一つの共通コマンドを変換した一以上の拡張コマンドのそれぞれに対して上記応答受信部１８２が受信した応答データに基づいて、一つの変換データを生成する。
【００８５】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、制御装置（ＰＣ８１０）から取得した一つの共通コマンドを、拡張コマンド変換部１４０が複数の拡張コマンドに変換した場合であっても、記憶装置（ＩＣタグ８２０）が複数の拡張コマンドそれぞれに対して送信した応答データに基づいて、応答変換部１５０が一つの変換データを生成するので、制御装置（ＰＣ８１０）の側から見ると、記憶装置（ＩＣタグ８２０）が一つの共通コマンドに対して、一つの応答をしているように見え、異なる拡張コマンド群（プロトコル）を理解する記憶装置（ＩＣタグ８２０）が混在する場合であっても、そのことを制御装置（ＰＣ８１０）の側で意識する必要がなく、同じ共通コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを操作することができる。
【００８６】
この実施の形態におけるデータ操作システム（ＩＣタグ読取システム８００）は、複数の記憶装置（ＩＣタグ８２０）と、上記データ操作装置（ＲＦＩＤリーダライタ装置１００）とを有する。
上記複数の記憶装置（ＩＣタグ８２０）は、それぞれ、複数の拡張コマンド群（プロトコル）のうちいずれかの拡張コマンド群を理解する。
【００８７】
この実施の形態におけるデータ操作システム（ＩＣタグ読取システム８００）によれば、異なる拡張コマンド群（プロトコル）を理解する記憶装置（ＩＣタグ８２０）が混在する場合であっても、そのことを制御装置（ＰＣ８１０）の側で意識する必要がなく、同じ共通コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを操作することができる。
【００８８】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、データを処理する処理装置（ＣＰＵ９１１）を有するコンピュータが実行することにより、上記コンピュータが、上記データ操作装置として機能するコンピュータプログラムを用いて、実現することができる。
【００８９】
この実施の形態におけるコンピュータプログラムによれば、異なる拡張コマンド群（プロトコル）を理解する記憶装置（ＩＣタグ８２０）が混在する場合であっても、そのことを制御装置（ＰＣ８１０）の側で意識する必要がなく、同じ共通コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを操作することができるデータ操作装置（ＲＦＩＤリーダライタ装置１００）を実現することができる。
【００９０】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）が、制御装置（ＰＣ８１０）からの指示にしたがって上記記憶装置（ＩＣタグ８２０）と通信し、上記記憶装置が記憶したデータを操作するデータ操作方法は、以下の工程を有する。
上記処理装置（ＣＰＵ９１１）が、上記制御装置（ＰＣ８１０）からの指示を表わす共通コマンドを取得する。
上記送信装置９１７が、上記記憶装置（ＩＣタグ８２０）に対して、上記記憶装置の識別情報（ＴＩＤ）を送信するよう指示する識別取得コマンドを送信する。
上記受信装置９１８が、上記送信装置９１７が送信した識別取得コマンドに対する応答として、上記記憶装置（ＩＣタグ８２０）が送信した識別情報（ＴＩＤ）を受信する。
上記処理装置（ＣＰＵ９１１）が、上記受信装置９１８が受信した識別情報（ＴＩＤ）に基づいて、複数の拡張コマンド群（プロトコル）のなかから、上記記憶装置（ＩＣタグ８２０）が理解する拡張コマンド群（プロトコル）を判定する。
上記処理装置（ＣＰＵ９１１）が、判定した拡張コマンド群（プロトコル）に基づいて、取得した共通コマンドを、上記記憶装置（ＩＣタグ８２０）が理解する拡張コマンドに変換する。
上記送信装置９１７が、上記記憶装置（ＩＣタグ８２０）に対して、上記処理装置（ＣＰＵ９１１）が変換した拡張コマンドを送信する。
上記受信装置９１８が、上記送信装置９１７が送信した拡張コマンドに対する応答として、上記記憶装置（ＩＣタグ８２０）が送信した応答データを受信する。
上記処理装置（ＣＰＵ９１１）が、上記受信装置９１８が受信した応答データのデータ形式を、所定の形式に変換して、変換データを生成する。
上記処理装置（ＣＰＵ９１１）が、取得した共通コマンドに対する応答として、生成した変換データを、上記制御装置（ＰＣ８１０）に対して通知する。
【００９１】
この実施の形態におけるデータ操作方法によれば、異なる拡張コマンド群（プロトコル）を理解する記憶装置（ＩＣタグ８２０）が混在する場合であっても、そのことを制御装置（ＰＣ８１０）の側で意識する必要がなく、同じ共通コマンドで、異なる拡張コマンド群を理解する記憶装置が記憶したデータを操作することができる。
【００９２】
以上説明したＲＦＩＤリーダライタ装置１００は、アンテナ９１９、ユーザコマンド送受信制御部（通信装置９１５）、ユーザコマンド取得部（共通コマンド取得部１６１）、拡張エアコマンド判定部（コマンド判定部１１０）、ＴＩＤ取得指示部（識別取得指示部１７１）、エアコマンド送受信制御部（送信装置９１７、受信装置９１８）、ＴＩＤ取得部（識別受信部１８１）、プロトコル選択部（プロトコル判定部１３０）、エアコマンド整形部（拡張コマンド変換部１４０）、プロトコルテーブル（プロトコル記憶部１２０）、タグレスポンス取得部（応答受信部１８２）、レスポンス整形部（応答変換部１５０）を有する。
【００９３】
以上説明したＩＣタグ読取システム８００の動作の概要は、次のとおりである。
ＰＣ８１０で動作するアプリケーションで使用したユーザコマンド（共通コマンド）を、リーダ（ＲＦＩＤリーダライタ装置１００）が受信する。リーダは、そのユーザコマンドを、標準エアコマンド（基本コマンド）を実行するためのものか、拡張エアコマンド（拡張コマンド）を実行するものかで、分類する。
拡張エアコマンドを実行するためのものであれば、リーダは、まず標準エアコマンドを利用してＣ１Ｇ２のタグ（ＩＣタグ８２０）が標準で記憶している情報であるＴＩＤ（識別情報）を取得する。ＴＩＤは、タグメーカＩＤ、モデルＩＤなどで構成される情報である。
リーダは、取得したＴＩＤに基づき、当該タグに適したエアコマンド（拡張コマンド）を選択する。リーダは、タグに対してこのエアコマンドを送信して、ユーザが実行したい機能を実現する。
リーダは、送信したエアコマンドに対するタグからの応答信号（タグレスポンス）（応答データ）から、情報を抽出・整形して、送信されたユーザコマンドに対する応答（ユーザコマンドレスポンス）を作成し、ＰＣ８１０に返信する。
【００９４】
ＰＣ８１０とリーダ（ＲＦＩＤリーダライタ装置１００）とは、ネットワークケーブルなどにより接続されている。リーダ（ＲＦＩＤリーダライタ装置１００）とタグ（ＩＣタグ８２０）とは、無線により通信を行う。
【００９５】
ＰＣ８１０において動作するアプリケーションが、拡張エアコマンドを実行することで機能を実現するようなユーザコマンド（共通コマンド）を実行する。例えば、ユーザメモリの特定ブロックを保護するための「ＢｌｏｃｋＬｏｃｋ」がある。
ＰＣ８１０においてユーザコマンドが実行されると、ＰＣ８１０は、ネットワークケーブルなどを介してリーダ（ＲＦＩＤリーダライタ装置１００）にユーザコマンドを送信する。
リーダは、ユーザコマンドを、ユーザコマンド送受信制御部（通信装置９１５）にて、受信する。
ユーザコマンド取得部（共通コマンド取得部１６１）は、ユーザコマンド送受信制御部からユーザコマンドを取得し、保持する。ユーザコマンド取得部は、拡張エアコマンド判定部（コマンド判定部１１０）に対して、ユーザコマンドを送信する。
【００９６】
拡張エアコマンド判定部（コマンド判定部１１０）は、ユーザコマンド（共通コマンド）が拡張エアコマンド（拡張コマンド）の実行を指示するものであるか否かを判定する。ユーザコマンドが拡張エアコマンドの実行を指示するものであれば、拡張エアコマンド判定部は、ＴＩＤ取得指示部（識別取得指示部１７１）に対して通知する。拡張エアコマンドの実行を指示するものでなければ、標準エアコマンド（基本コマンド）を実行するためのユーザコマンドなので、コマンド送信部１７２は、タグ（ＩＣタグ８２０）と通信し、応答受信部１８２が受信したユーザコマンドレスポンス（応答データ）を、応答通知部１６２がアプリケーションに応答する。
【００９７】
ＴＩＤ取得指示部（識別取得指示部１７１）は、拡張エアコマンド判定部（コマンド判定部１１０）からユーザコマンドが拡張エアコマンドを実行するものであることを通知されると、タグ（ＩＣタグ８２０）からＴＩＤを取得するようにエアコマンド送受信制御部（送信装置９１７）に指示を送る。
エアコマンド送受信制御部（送信装置９１７）は、標準エアコマンドをタグに送信して、タグのＴＩＤが保持されている領域を読み出す。タグが読み出したＴＩＤを、エアコマンド送受信制御部（受信装置９１８）が受信する。
ＴＩＤ取得部（識別受信部１８１）は、エアコマンド送受信制御部（受信装置９１８）からＴＩＤを取得し、保持する。
【００９８】
プロトコル選択部（プロトコル判定部１３０）は、ユーザコマンド取得部（共通コマンド取得部１６１）からユーザコマンドを入力し、ＴＩＤ取得部（識別受信部１８１）からＴＩＤを入力する。プロトコル選択部は、それらにより、プロトコルテーブル５２０からエアコマンド（拡張コマンド）を選択する。例えば、プロトコル選択部は、ユーザコマンドＢ、ＴＩＤ＿Ｂならば、エアコマンドＢ１、タグのメモリブロックサイズ２５６ビット、タグのメモリブロック数１２を設定する。
エアコマンド整形部（拡張コマンド変換部１４０）は、プロトコル選択部（プロトコル判定部１３０）から入力したエアコマンド、タグのメモリブロックサイズ、タグのメモリブロック数と、ユーザコマンド取得部から入力したエアコマンドで使用するパラメータを入力し、エアコマンドを整形し、エアコマンド送受信制御部（送信装置９１７）に送信する。
エアコマンド送受信制御部（送信装置９１７）は、送信されたエアコマンド（拡張コマンド）を、タグ（ＩＣタグ８２０）に対して送信する。
【００９９】
タグ（ＩＣタグ８２０）は、リーダ（ＲＦＩＤリーダライタ装置１００）から送信されたエアコマンド（拡張コマンド）を受けると、エアコマンドで規定される処理を実行し、タグレスポンス（応答データ）を応答する。
エアコマンド送受信制御部（受信装置９１８）は、タグレスポンスを受信する。
タグレスポンス取得部（応答受信部１８２）は、エアコマンド送受信制御部（受信装置９１８）からタグレスポンス（応答データ）を取得し、保持する。
レスポンス整形部（応答変換部１５０）は、プロトコル選択部（プロトコル判定部１３０）から選択したエアコマンド（拡張コマンド）が何であるかの通知を受ける。それに基づき、レスポンス整形部は、タグレスポンスからユーザコマンドレスポンスに必要な情報を切り出す。レスポンス整形部は、あわせてフィールドの順序の入れ替え、ビット数あわせなどを行い、ユーザコマンドレスポンスデータを生成する。
レスポンス整形部（応答変換部１５０）は、生成したユーザコマンドレスポンスデータ（変換データ）をユーザコマンド送受信制御部（通信装置９１５）に対して送信する。
ユーザコマンド送受信制御部（通信装置９１５）は、レスポンス整形部（応答変換部１５０）から送信されたデータを、ユーザコマンドレスポンスとして、ＰＣ８１０に対して送信する。
【０１００】
これにより、タグ（ＩＣタグ８２０）の種類により、類似または同一機能のエアコマンドが、同一でない場合であっても、ユーザはタグの種類を意識せずに、タグとの通信を行うことが可能となる。これにより、システムに数種類のタグが混在することも可能となり、システムの構築が容易になる。
【０１０１】
以上説明したＲＦＩＤリーダライタ装置１００において、プロトコル記憶部１２０は、プロトコルテーブル５２０を、不揮発性の記憶装置（フラッシュメモリ９２０）上に設ける。プロトコル判定部１３０は、エアコマンド（拡張コマンド）を選択する場合、プロトコル記憶部１２０が不揮発性の記憶装置上に記憶したプロトコルテーブル５２０を参照する。
【０１０２】
なお、プロトコル記憶部１２０は、ＲＡＭ９１４などの揮発性の記憶装置を用いて、プロトコルテーブル５２０を記憶する構成であってもよい。例えば、プロトコル記憶部１２０は、起動時などに、ＣＰＵ９１１を用いて、フラッシュメモリ９２０などの不揮発性の記憶装置が記憶したプロトコルテーブルを読み込み、ＲＡＭ９１４などの揮発性の記憶装置に複製する。プロトコル判定部１３０などは、プロトコル記憶部１２０がＲＡＭ９１４などに記憶したプロトコルテーブルを検索する。
【０１０３】
以上説明したＲＦＩＤリーダライタ装置１００において、プロトコルテーブル５２０が不揮発性の記憶装置（フラッシュメモリ９２０など）上に設けられ、プロトコル記憶部１２０は、起動時または指示のあったときに、プロトコルテーブルを、揮発性の記憶装置（ＲＡＭ９１４など）上にコピーする。プロトコル判定部１３０は、エアコマンド（拡張コマンド）を選択する場合、プロトコル記憶部１２０が揮発性の記憶装置上にコピーしたプロトコルテーブルを参照する。
【０１０４】
いずれの構成の場合であっても、プロトコルテーブル５２０を更新するだけで、すでに実装してある拡張エアプロトコルを使用するタグを追加することができる。
【０１０５】
以上説明したＲＦＩＤリーダライタ装置１００によれば、拡張エアコマンド（拡張コマンド）を判別して、ユーザコマンド（共通コマンド）を、標準エアコマンド（基本コマンド）と拡張エアコマンドとに分類するので、それぞれ異なる処理をすることができる。
【０１０６】
また、プロトコルテーブル（プロトコル記憶部１２０）がブロックサイズ５２４を記憶しているので、タグ（ＩＣタグ８２０）の種類ごとにブロックサイズが異なる場合であっても、制御装置（ＰＣ８１０）の側は、ブロックサイズを意識する必要がなく、ＲＦＩＤリーダライタ装置１００が、タグのブロックサイズに適合したコマンドを生成することができる。また、プロトコルテーブル（プロトコル記憶部１２０）がブロック数５２５も備えているので、ＲＦＩＤリーダライタ装置１００は、不正な空間指定に対処することができる。
【０１０７】
ＴＩＤは、すべてのＩＣタグ８２０が有し、標準エアコマンドで読み出すことができ、タグの種類によりユニークなので、これを識別情報として利用し、プロトコル判定部１３０が、ＴＩＤに基づいて、テーブルを引くなどして、ＩＣタグ８２０がどの拡張エアコマンドを理解するかを判定する。したがって、ＩＣタグ８２０からどの種類の拡張コマンドを使うかという情報を取得する必要がなく、ＩＣタグ８２０に特別な機能を準備する必要がないので、既存のＩＣタグ８２０をそのまま使用することができ、ＩＣタグ読取システム８００（データ操作システム）を、安価に実現することができる。
【０１０８】
また、拡張コマンド変換部１４０が、１つのユーザコマンド（共通コマンド）を受けて複数のエアコマンド（拡張コマンド）に展開し、レスポンス整形部（応答変換部１５０）が、戻ってきたレスポンス（応答データ）のうち必要なレスポンスだけを切り出してユーザコマンドレスポンス（変換データ）を生成するので、ユーザは、一つのユーザコマンド（共通コマンド）が、実際にはいくつのエアコマンド（拡張コマンド）に展開されているのかを意識する必要がない。
【０１０９】
なお、プロトコル記憶部１２０は、ＩＣタグ８２０が理解するすべての拡張コマンドを記憶する必要はなく、ＩＣタグ８２０が理解する拡張コマンドのうちの一部だけを記憶する構成としてもよい。これにより、例えばライセンス制限などにより、ＩＣタグ８２０が理解する独自の拡張エアコマンドを実行してはいけない場合には、プロトコル記憶部１２０が、実行してはいけない拡張コマンドをプロトコルテーブルから削除すれば、容易に、通信の制約を行うことができる。
【０１１０】
実施の形態２．
実施の形態２について、図１２〜図１３を用いて説明する。
なお、実施の形態１で説明したＩＣタグ読取システム８００と共通する部分については、同一の符号を付し、説明を省略する。
【０１１１】
図１２は、この実施の形態におけるＲＦＩＤリーダライタ装置１００の機能ブロックの構成の一例を示すブロック構成図である。
ＲＦＩＤリーダライタ装置１００は、実施の形態１で説明した機能ブロックに加えて、更に、プロトコル更新部１９０を有する。
【０１１２】
この実施の形態におけるＲＦＩＤリーダライタ装置１００は、共通コマンドとして、基本コマンドなどＩＣタグ８２０に対する指示を表わすコマンドのほか、ＲＦＩＤリーダライタ装置１００自身に対する指示を表わす制御コマンドを処理する。
【０１１３】
コマンド判定部１１０は、ＣＰＵ９１１を用いて、共通コマンド取得部１６１が出力した共通コマンドを入力する。コマンド判定部１１０は、ＣＰＵ９１１を用いて、入力した共通コマンドが制御コマンドか、基本コマンドか、拡張コマンドに対応するコマンドかを判定する。コマンド判定部１１０は、ＣＰＵ９１１を用いて、判定した判定結果を出力する。
【０１１４】
プロトコル更新部１９０は、ＣＰＵ９１１を用いて、コマンド判定部１１０が出力した判定結果を入力する。プロトコル更新部１９０は、ＣＰＵ９１１を用いて、共通コマンド取得部１６１が取得した共通コマンドが制御コマンドであると、コマンド判定部１１０が判定した場合に、共通コマンド取得部１６１が出力した共通コマンドを入力する。プロトコル更新部１９０は、ＣＰＵ９１１を用いて、入力した共通コマンドがプロトコルテーブル５２０の更新を指示するコマンド（以下「更新コマンド」と呼ぶ。）か否かを判定する。
プロトコル更新部１９０は、ＣＰＵ９１１を用いて、入力した共通コマンドが更新コマンドであると判定した場合、プロトコル更新部１９０は、プロトコル記憶部１２０が記憶したプロトコルテーブル５２０を更新する。
【０１１５】
図１３は、この実施の形態におけるプロトコル記憶部１２０の詳細ブロックの構成の一例を示すブロック構成図である。
プロトコル記憶部１２０は、マスター記憶部１２１、二つのテーブル記憶部１２２，１２３、有効フラグ記憶部１２４、テーブル検索部１２５、テーブル更新部１２６、テーブル切替部１２７を有する。
【０１１６】
マスター記憶部１２１は、フラッシュメモリ９２０を用いて、プロトコルテーブルを記憶する。
二つのテーブル記憶部１２２，１２３は、それぞれ、ＲＡＭ９１４を用いて、プロトコルテーブルを記憶する。
有効フラグ記憶部１２４は、ＲＡＭ９１４を用いて、二つのテーブル記憶部１２２，１２３のうちどちらが有効であるかを表わすフラグ（以下「有効フラグ」と呼ぶ。）を記憶する。
【０１１７】
テーブル検索部１２５は、ＣＰＵ９１１を用いて、プロトコル判定部１３０などからの要求にしたがって、二つのテーブル記憶部１２２，１２３のうち有効なほうのテーブル記憶部が記憶したプロトコルテーブルを検索し、検索した結果を返す。
テーブル検索部１２５は、ＣＰＵ９１１を用いて、有効フラグ記憶部１２４が記憶した有効フラグを入力する。テーブル検索部１２５は、ＣＰＵ９１１を用いて、入力した有効フラグに基づいて、二つのテーブル記憶部１２２，１２３のうち、どちらが有効であるかを判定する。テーブル検索部１２５は、ＣＰＵ９１１を用いて、有効であると判定したほうのテーブル記憶部が記憶したプロトコルテーブルを検索する。
【０１１８】
テーブル更新部１２６は、ＣＰＵ９１１を用いて、プロトコル更新部１９０からの指示にしたがって、マスター記憶部１２１やテーブル記憶部１２２，１２３が記憶したプロトコルテーブルを更新する。
テーブル更新部１２６は、ＣＰＵ９１１を用いて、マスター記憶部１２１が記憶したプロトコルテーブルを入力する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、マスター記憶部１２１が記憶したプロトコルテーブルを、プロトコル更新部１９０からの指示にしたがって更新する。マスター記憶部１２１は、フラッシュメモリ９２０を用いて、更新されたプロトコルテーブルを記憶する。
テーブル更新部１２６は、ＣＰＵ９１１を用いて、有効フラグ記憶部１２４が記憶した有効フラグを入力する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、入力した有効フラグに基づいて、二つのテーブル記憶部１２２，１２３のうち、どちらが有効であるかを判定する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、有効でないと判定したほうのテーブル記憶部１２２が記憶したプロトコルテーブルを、マスター記憶部１２１が記憶したプロトコルテーブルと同じ内容に更新する。有効でないと判定されたほうのテーブル記憶部は、ＲＡＭ９１４を用いて、更新されたプロトコルテーブルを記憶する。
【０１１９】
テーブル切替部１２７は、ＣＰＵ９１１を用いて、テーブル更新部１２６によるプロトコルテーブルの更新が完了した場合に、有効フラグ記憶部１２４が記憶した有効フラグを書き換えて、有効と無効とを反転させる。すなわち、テーブル切替部１２７は、それまでテーブル記憶部１２２が有効だった場合であれば、テーブル記憶部１２３が有効であることを表わす有効フラグに書き換え、逆に、テーブル記憶部１２３が有効だった場合であれば、テーブル記憶部１２２が有効であることを表わす有効フラグに書き換える。有効フラグ記憶部１２４は、ＲＡＭ９１４を用いて、書き換えられた有効フラグを記憶する。
なお、テーブル切替部１２７は、ＣＰＵ９１１を用いて、テーブル検索部１２５がプロトコルテーブルを検索中であるか否かを判定し、テーブル検索部１２５がプロトコルテーブルを検索中であると判定した場合、テーブル検索部１２５による検索が完了するのを待ってから、有効フラグ記憶部１２４が記憶した有効フラグを書き換える構成としてもよい。
【０１２０】
また、テーブル更新部１２６は、ＣＰＵ９１１を用いて、電源投入直後など初期化が必要な場合に、テーブル記憶部１２２が記憶したプロトコルテーブルを初期化する。
テーブル更新部１２６は、ＣＰＵ９１１を用いて、マスター記憶部１２１が記憶したプロトコルテーブルを入力する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、テーブル記憶部１２２が記憶したプロトコルテーブルを、入力したプロトコルテーブルと同じ内容に初期化する。テーブル記憶部１２２は、ＲＡＭ９１４を用いて、初期化されたプロトコルテーブルを記憶する。
テーブル切替部１２７は、ＣＰＵ９１１を用いて、テーブル更新部１２６によるプロトコルテーブルの初期化が完了した場合に、有効フラグ記憶部１２４が記憶した有効フラグを、テーブル記憶部１２２が有効であることを表わす有効フラグに初期化する。有効フラグ記憶部１２４は、ＲＡＭ９１４を用いて、初期化された有効フラグを記憶する。
【０１２１】
プロトコルテーブルの更新の途中の時点において、更新途中のテーブル記憶部が記憶したプロトコルテーブルは、整合が取れていない可能性がある。しかし、テーブル検索部１２５は、テーブル更新部１２６が更新しているプロトコルテーブルを記憶しているテーブル記憶部とは異なるテーブル記憶部を検索するので、整合が取れていないプロトコルテーブルにはアクセスしない。
テーブル更新部１２６によるプロトコルテーブルの更新が完了したのち、有効フラグ記憶部１２４が記憶した有効フラグを、テーブル切替部１２７が書き換えると、テーブル検索部１２５は、その後、更新されたプロトコルテーブルを検索する。
【０１２２】
これにより、ＩＣタグ読取システム８００の運用中であっても、プロトコル記憶部１２０が記憶したプロトコルテーブルを更新することができる。
【０１２３】
例えば、ＩＣタグ読取システム８００に、異なるメーカーのＩＣタグ８２０や、同じメーカーのバージョンアップされたＩＣタグ８２０を導入したことにより、ＩＣタグ８２０が理解するプロトコルが増えた場合、プロトコル記憶部１２０が記憶したプロトコルテーブルを更新する必要が生じる。そのような場合であっても、ＩＣタグ読取システム８００の運用を停止する必要はなく、ＰＣ８１０が、ＲＦＩＤリーダライタ装置１００に対して、プロトコルテーブルの更新を指示する制御コマンドを共通コマンドとして与えることにより、プロトコルテーブルを更新することができる。
【０１２４】
なお、プロトコルテーブルの更新が完了したらすぐに有効フラグを書き換えるのではなく、共通コマンド取得部１６１が、プロトコルテーブルの切り替えを指示する制御コマンドを、共通コマンドとして取得した場合に、有効フラグを書き換える構成としてもよい。
【０１２５】
また、二つのテーブル記憶部１２２，１２３が、ＲＡＭ９１４などの揮発性の記憶装置を用いてプロトコルテーブルを記憶するのではなく、フラッシュメモリ９２０などの不揮発性の記憶装置を用いてプロトコルテーブルを記憶する構成としてもよい。その場合、マスター記憶部１２１は、なくてもよい。
【０１２６】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）において、上記プロトコル記憶部１２０は、複数のテーブル記憶部１２２，１２３と、有効フラグ記憶部１２４と、テーブル更新部１２６と、テーブル切替部１２７とを有する。
上記複数のテーブル記憶部１２２，１２３のそれぞれは、上記内部記憶装置（ＲＡＭ９１４）を用いて、上記コマンド群判定部（プロトコル判定部１３０）が判定する拡張コマンド群（プロトコル）のそれぞれについて、上記記憶装置（ＩＣタグ８２０）が理解する拡張コマンド５２３と、上記ブロックサイズ５２４とを含むプロトコルテーブル５２０を記憶する。
上記有効フラグ記憶部１２４は、上記内部記憶装置（ＲＡＭ９１４）を用いて、上記複数のテーブル記憶部１２２，１２３のうち、いずれが有効であるかを表わす有効フラグを記憶する。
上記テーブル更新部１２６は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドが、プロトコルテーブル５２０の更新を指示するコマンド(テーブル更新コマンド）である場合に、上記有効フラグ記憶部１２４が記憶した有効フラグに基づいて、有効でないテーブル記憶部が記憶したプロトコルテーブル５２０を更新する。
上記テーブル切替部１２７は、上記処理装置（ＣＰＵ９１１）を用いて、上記有効フラグ記憶部１２４が記憶した有効フラグを更新して、上記テーブル更新部１２６が更新したテーブル記憶部を有効にする。
【０１２７】
これにより、データ操作システム（ＩＣタグ読取システム８００）で使用する記憶装置（ＩＣタグ８２０）の種類を増やした場合など、プロトコル記憶部１２０が記憶したプロトコルテーブル５２０を更新する必要が生じた場合、データ操作システムの運用を続けたままの状態で、プロトコルテーブル５２０を更新することができる。
【０１２８】
以上説明したＲＦＩＤリーダライタ装置１００は、ユーザコマンド送受信部（通信装置９１５）、ユーザコマンド取得部（共通コマンド取得部１６１）、テーブル更新コマンド判定部（プロトコル更新部１９０）、プロトコルテーブルＡ有効フラグ及びプロトコルテーブルＢ有効フラグ（有効フラグ記憶部１２４）、生成テーブル選択部及びテーブル生成部（テーブル更新部１２６）、テーブルフラグ有効化部（テーブル切替部１２７）、プロトコルテーブルＡ（テーブル記憶部１２２）、プロトコルテーブルＢ（テーブル記憶部１２３）、レスポンス整形部（応答変換部１５０）を有する。
【０１２９】
以上説明したＩＣタグ読取システム８００の動作の概要は、次のとおりである。
ＰＣ８１０は、更新するプロトコルテーブルをテーブル更新用ファイルとして、あらかじめ保存しておく。
ＰＣ８１０は、プロトコルテーブルを更新するため、テーブル更新コマンドを実行する。
テーブル更新コマンドが実行されると、ＰＣ８１０は、リーダ（ＲＦＩＤリーダライタ装置１００）に対して、ネットワークケーブルなどを介して、テーブル更新コマンドと指定されたファイルとを送信する。
リーダ（ＲＦＩＤリーダライタ装置１００）は、受信したコマンドがテーブル更新コマンドであると判定すると、受信したファイルから新しいプロトコルテーブルを生成する。
【０１３０】
ＰＣ８１０は、更新に使用するプロトコルテーブルを、テーブル更新用ファイルとして保存する。
ＰＣ８１０は、プロトコルテーブルを更新するため、ユーザコマンド（共通コマンド）として、テーブル更新コマンド（更新コマンド）を実行する。
テーブル更新コマンドは、テーブル更新用ファイルを指定する引数を備えている。
ＰＣ８１０は、ネットワークケーブルなどを介して、リーダ（ＲＦＩＤリーダライタ装置１００）に対して、テーブル更新コマンドを送信する。ＰＣ８１０は、テーブル更新用ファイルを、テーブル更新コマンドと一緒に送信する。
テーブル更新コマンドおよびテーブル更新用ファイルは、ユーザコマンド送受信制御部（通信装置９１５）が受信する。
【０１３１】
ユーザコマンド取得部（共通コマンド取得部１６１）は、ユーザコマンド送受信制御部（通信装置９１５）からユーザコマンド（共通コマンド）を取得し、保持する。ユーザコマンド取得部は、ユーザコマンドを、テーブル更新コマンド判定部（プロトコル更新部１９０）に対して、送信する。
テーブル更新コマンド判定部（プロトコル更新部１９０）は、ユーザコマンドがテーブル更新コマンドであるか否かを判定する。テーブル更新コマンド判定部は、ユーザコマンドがテーブル更新コマンドである場合、生成テーブル選択部（テーブル更新部１２６）に通知し、プロトコルテーブルの更新処理を開始する。ユーザコマンドがテーブル更新コマンドでない場合は、通常通り、当該コマンドの機能を実行し、プロトコルテーブル更新の処理を実行しない。
【０１３２】
プロトコルテーブルの更新処理を開始すると、生成テーブル選択部（テーブル更新部１２６）は、プロトコルテーブルＡ有効フラグおよびプロトコルテーブルＢ有効フラグの状態を確認する。
これらのフラグは、２つあるプロトコルテーブル（テーブル記憶部１２２，１２３）のどちらが有効になっているかを示す。
例えば、プロトコルテーブルＡが有効であり、プロトコルテーブルＡ有効フラグが有意になっている場合について説明する。
生成テーブル選択部（テーブル更新部１２６）は、プロトコルテーブルＢが無効であると判定し、新しいプロトコルテーブル（以下「新プロトコルテーブル」と呼ぶ。）をプロトコルテーブルＢに生成するように、テーブル生成部（テーブル更新部１２６）に指示する。
テーブル生成部（テーブル更新部１２６）は、ユーザコマンド送受信制御部（通信装置９１５）が保持しているテーブル更新用ファイルを順次読み出して、プロトコルテーブルＢに新プロトコルテーブルを生成する。新しいプロトコルテーブルの生成を完了すると、テーブル生成部（テーブル更新部１２６）は、テーブルフラグ有効化部（テーブル切替部１２７）に通知する。
【０１３３】
テーブルフラグ有効化部（テーブル切替部１２７）は、プロトコルテーブルＡ有効フラグを無意にして古いプロトコルテーブル（以下旧プロトコルテーブル）を無効にし、続いて、プロトコルテーブルＢ有効フラグを有意にして新プロトコルテーブルを有効にする。これにより、プロトコルテーブルの更新が行われる。
【０１３４】
テーブル更新コマンド判定部（プロトコル更新部１９０）は、レスポンス整形部（応答変換部１５０）に対して、ユーザコマンドがテーブル更新コマンドであることを通知する。テーブルフラグ有効化部（テーブル切替部１２７）は、レスポンス整形部に対して、プロトコルテーブルの更新完了を通知する。レスポンス整形部は、更新完了の通知を受信すると、正常に完了していれば処理完了コードを、異常終了であれば異常終了コードをユーザコマンドレスポンスに組み込み、整形して、ユーザコマンド送受信制御部（通信装置９１５）に送信する。
ユーザコマンド送受信制御部（通信装置９１５）は、ネットワークケーブルなどを介して、ＰＣ８１０に対して、ユーザコマンドレスポンスを送信する。
【０１３５】
これにより、ＩＣタグ読取システム８００がサポートするタグの種類が増えても、ハードウェアやソフトウェアを作り直す必要がなく、プロトコルテーブルを更新すればよいので、開発の効率が上がる。また、専用コマンドを設けることで、フィールドでも、容易にプロトコルテーブルを更新することができる。
【０１３６】
実施の形態３．
実施の形態３について、図１４を用いて説明する。
なお、実施の形態２で説明したＩＣタグ読取システム８００と共通する部分については、同一の符号を付し、説明を省略する。
【０１３７】
図１４は、この実施の形態におけるプロトコル記憶部１２０の詳細ブロックの構成の一例を示すブロック構成図である。
プロトコル記憶部１２０は、二つのマスター記憶部１２１ａ，１２１ｂ、テーブル記憶部１２２、有効フラグ記憶部１２４、テーブル検索部１２５、テーブル更新部１２６、テーブル切替部１２７、テーブル読込部１２８を有する。
【０１３８】
二つのマスター記憶部１２１ａ，１２１ｂは、それぞれ、フラッシュメモリ９２０を用いて、プロトコルテーブルを記憶する。
テーブル記憶部１２２は、ＲＡＭ９１４を用いて、プロトコルテーブルを記憶する。
テーブル検索部１２５は、ＣＰＵ９１１を用いて、プロトコル判定部１３０などからの要求にしたがって、テーブル記憶部１２２が記憶したプロトコルテーブルを検索し、検索した結果を返す。
【０１３９】
有効フラグ記憶部１２４（マスター有効フラグ記憶部）は、フラッシュメモリ９２０を用いて、二つのマスター記憶部１２１ａ，１２１ｂのうち、どちらが有効であるかを表わす有効フラグ（マスター有効フラグ）を記憶する。
【０１４０】
テーブル更新部１２６は、ＣＰＵ９１１を用いて、プロトコル更新部１９０からの指示にしたがって、マスター記憶部１２１ａ，１２１ｂが記憶したプロトコルテーブルを更新する。
テーブル更新部１２６は、ＣＰＵ９１１を用いて、有効フラグ記憶部１２４が記憶した有効フラグを入力する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、入力した有効フラグに基づいて、二つのマスター記憶部１２１ａ，１２１ｂのうち、どちらが有効であるかを判定する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、有効でないと判定したほうのマスター記憶部が記憶したプロトコルテーブルを入力する。テーブル更新部１２６は、ＣＰＵ９１１を用いて、入力したプロトコルテーブルを、プロトコル更新部１９０からの指示にしたがって更新する。有効でないと判定されたほうのマスター記憶部は、フラッシュメモリ９２０を用いて、更新されたプロトコルテーブルを記憶する。
【０１４１】
テーブル切替部１２７は、ＣＰＵ９１１を用いて、テーブル更新部１２６によるプロトコルテーブルの更新が完了した場合に、有効フラグ記憶部１２４が記憶した有効フラグを書き換えて、有効と無効とを反転させる。有効フラグ記憶部１２４は、フラッシュメモリ９２０を用いて、書き換えられた有効フラグを記憶する。
【０１４２】
テーブル読込部１２８は、ＣＰＵ９１１を用いて、電源投入直後など初期化が必要な場合や、有効フラグ記憶部１２４が記憶した有効フラグが書き換えられた場合に、マスター記憶部が記憶したプロトコルテーブルを、テーブル記憶部１２２に読み込む。
テーブル読込部１２８は、ＣＰＵ９１１を用いて、有効フラグ記憶部１２４が記憶した有効フラグを入力する。テーブル読込部１２８は、ＣＰＵ９１１を用いて、入力した有効フラグに基づいて、二つのマスター記憶部１２１ａ，１２１ｂのうち、どちらが有効かを判定する。テーブル読込部１２８は、ＣＰＵ９１１を用いて、有効であると判定したほうのマスター記憶部が記憶したプロトコルテーブルを入力する。テーブル読込部１２８は、ＣＰＵ９１１を用いて、テーブル記憶部１２２が記憶したプロトコルテーブルを、入力したプロトコルテーブルと同じ内容に書き換える。テーブル記憶部１２２は、ＲＡＭ９１４を用いて、書き換えられたプロトコルテーブルを記憶する。
【０１４３】
このように、マスター記憶部を二つ備えることにより、プロトコルテーブルの更新中に、ＲＦＩＤリーダライタ装置１００が異常終了するなどして、プロトコルテーブルの更新が完了しなかった結果、更新中だったマスター記憶部が記憶しているプロトコルテーブルが整合の取れていないものになった場合であっても、有効なほうのマスター記憶部は、更新前のプロトコルテーブルを記憶しているので、復帰後、テーブル読込部１２８は、更新前のプロトコルテーブルをテーブル記憶部１２２に読み込み、ＲＦＩＤリーダライタ装置１００は、正常に動作する。
【０１４４】
なお、実施の形態２と同様、二つのテーブル記憶部を備える構成としてもよい。例えば、テーブル検索部１２５は、二つのテーブル記憶部のうち、有効なほうのテーブル記憶部が記憶したプロトコルテーブルを検索し、テーブル読込部１２８は、二つのテーブル記憶部のうち、有効でないほうのテーブル記憶部にプロトコルテーブルを読み込んで、有効なテーブル記憶部を切り替える。
【０１４５】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、更に、データを記憶する不揮発性の不揮発内部記憶装置（フラッシュメモリ９２０）を有する。
上記プロトコル記憶部１２０は、複数のマスター記憶部１２１ａ，１２１ｂと、マスター有効フラグ記憶部（有効フラグ記憶部１２４）と、テーブル更新部１２６と、テーブル切替部１２７と、テーブル記憶部１２２とを有する。
上記複数のマスター記憶部１２１ａ，１２１ｂのそれぞれは、上記不揮発内部記憶装置（フラッシュメモリ９２０）を用いて、上記コマンド群判定部（プロトコル判定部１３０）が判定する拡張コマンド群（プロトコル）のそれぞれについて、上記記憶装置（ＩＣタグ８２０）が理解する拡張コマンド５２３と、上記ブロックサイズ５２４とを含むプロトコルテーブル５２０を記憶する。
上記マスター有効フラグ記憶部（有効フラグ記憶部１２４）は、上記内部記憶装置（ＲＡＭ９１４）を用いて、上記複数のマスター記憶部１２１ａ，１２１ｂのうち、いずれが有効であるかを表わすマスター有効フラグ（有効フラグ）を記憶する。
上記テーブル更新部１２６は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドが、プロトコルテーブルの更新を指示するコマンド（テーブル更新コマンド）である場合に、上記マスター有効フラグ記憶部（有効フラグ記憶部１２４）が記憶したマスター有効フラグ（有効フラグ）に基づいて、有効でないマスター記憶部が記憶したプロトコルテーブル５２０を更新する。
上記テーブル切替部１２７は、上記処理装置（ＣＰＵ９１１）を用いて、上記マスター有効フラグ記憶部（有効フラグ記憶部１２４）が記憶したマスター有効フラグ（有効フラグ）を更新して、上記テーブル更新部１２６が更新したマスター記憶部を有効にする。
上記テーブル記憶部１２２は、上記内部記憶装置（ＲＡＭ９１４）を用いて、上記マスター有効フラグ記憶部（有効フラグ記憶部１２４）が記憶したマスター有効フラグ（有効フラグ）に基づいて、有効なマスター記憶部が記憶したプロトコルテーブル５２０を読み込んで、記憶する。
【０１４６】
これにより、データ操作システム（ＩＣタグ読取システム８００）で使用する記憶装置（ＩＣタグ８２０）の種類を増やした場合など、プロトコル記憶部１２０が記憶したプロトコルテーブル５２０を更新する必要が生じた場合、データ操作システムの運用を続けたままの状態で、プロトコルテーブル５２０を更新することができる。
【０１４７】
以上説明したＲＦＩＤリーダライタ装置１００は、ユーザコマンド送受信部（通信装置９１５）、ユーザコマンド取得部（共通コマンド取得部１６１）、テーブル更新コマンド判定部（プロトコル更新部１９０）、プロトコルテーブルＡマスタ有効フラグ及びプロトコルテーブルＢマスタ有効フラグ（有効フラグ記憶部１２４）、生成テーブルマスタ選択部及びテーブルマスタ生成部（テーブル更新部１２６）、テーブルマスタフラグ有効化部（テーブル切替部１２７）、プロトコルテーブルＡマスタ（マスター記憶部１２１ａ）、プロトコルテーブルＢマスタ（マスター記憶部１２１ｂ）、プロトコルテーブルロード部（テーブル読込部１２８）、プロトコルテーブル（テーブル記憶部１２２）、レスポンス整形部（応答変換部１５０）を有する。
【０１４８】
以上説明したＩＣタグ読取システム８００の動作の概要は、次のとおりである。
不揮発性の記憶装置（フラッシュメモリ９２０や磁気ディスク装置など）にプロトコルテーブルのマスターファイルを置き、起動時または指示があったときに、揮発性の記憶装置（ＲＡＭ９１４など）にコピー（例えば、プログラム変数として扱い、ＤＲＡＭ上の変数領域にコピー）をして、エアコマンドを選択するときには、揮発性の記憶装置にコピーしたプロトコルテーブルを参照する。
【０１４９】
プロトコルテーブルの更新処理を開始すると、生成テーブルマスタ選択部（テーブル更新部１２６）は、プロトコルテーブルＡマスタ有効フラグおよびプロトコルテーブルＢマスタ有効フラグの状態を確認する。
これらのフラグは、２つあるプロトコルテーブルマスタ（マスター記憶部１２１ａ，１２１ｂ）のどちらが有効になっているかを示す。
例えば、プロトコルテーブルＡマスタが有効であり、プロトコルテーブルＡマスタ有効フラグが有意になっている場合について説明する。
生成テーブルマスタ選択部（テーブル更新部１２６）は、プロトコルテーブルＢマスタが無効であると判定し、新しいプロトコルテーブルマスタ（以下「新プロトコルテーブルマスタ」と呼ぶ。）をプロトコルテーブルＢマスタに生成するように、テーブルマスタ生成部（テーブル更新部１２６）に指示する。
テーブルマスタ生成部（テーブル更新部１２６）は、ユーザコマンド送受信制御部（共通コマンド取得部１６１）が保持しているテーブル更新用ファイルを順次読み出して、プロトコルテーブルＢマスタに新プロトコルテーブルマスタを生成する。新しいプロトコルテーブルマスタの生成を完了すると、テーブルマスタ生成部（テーブル更新部１２６）は、テーブルマスタフラグ有効化部（テーブル切替部１２７）に通知する。
【０１５０】
テーブルマスタフラグ有効化部（テーブル切替部１２７）は、プロトコルテーブルＡマスタ有効フラグを無意にして古いプロトコルテーブルマスタ（以下「旧プロトコルテーブル」と呼ぶ。）を無効にし、続いて、プロトコルテーブルＢマスタ有効フラグを有意にして新プロトコルテーブルマスタを有効にする。これにより、プロトコルテーブルマスタの更新が行われる。
【０１５１】
テーブルマスタフラグ有効化部（テーブル切替部１２７）は、プロトコルテーブルＢマスタ有効フラグを有意にすると、プロトコルテーブルロード部（テーブル読込部１２８）に通知する。プロトコルテーブルロード部は、プロトコルテーブルＡマスタ有効フラグとプロトコルテーブルＢマスタ有効フラグとを参照し、プロトコルテーブルＢマスタが有効であると判定し、プロトコルテーブルＢマスタを読み出して、プロトコルテーブルを更新する。
【０１５２】
これにより、ＩＣタグ読取システム８００がサポートするタグの種類が増えても、ハードウェアやソフトウェアを作り直す必要がなく、プロトコルテーブルを更新すればよいので、開発の効率が上がる。また、専用コマンドを設けることで、フィールドでも、容易にプロトコルテーブルを更新することができる。
【０１５３】
実施の形態４．
実施の形態４について、図１５〜図１７を用いて説明する。
なお、実施の形態１〜実施の形態３で説明したＩＣタグ読取システム８００と共通する部分については、同一の符号を付し、説明を省略する。
【０１５４】
この実施の形態では、ＩＣタグ８２０が、記憶ブロック全体を読み書きする拡張コマンドだけでなく、記憶ブロックの一部を読み書きする拡張コマンド（以下「拡張ブロック操作コマンド」と呼ぶ。）を理解する場合について説明する。
また、それに対応して、共通コマンドの仕様にも少し変更を加え、ＩＣタグ８２０の記憶領域の任意の範囲を指定して読み書きする共通コマンド（以下「共通ブロック操作コマンド」と呼ぶ。）を加える。
【０１５５】
共通ブロック操作コマンドでは、操作対象となる記憶領域を指定して、データの読み出しあるいは書き込みを行う。操作対象となる記憶領域の指定方式には、様々なものがあるが、ここでは、操作対象となる記憶領域の開始アドレス（以下「共通開始アドレス」と呼ぶ。）と、操作対象となる記憶領域の大きさ（以下「共通操作サイズ」と呼ぶ。）とを指定する場合を例として説明する。
拡張ブロック操作コマンドの仕様は、ＩＣタグ８２０が理解するプロトコルごとに異なるが、操作対象となる記憶領域を指定して、データの読み出しあるいは書き込みを行う点は、共通ブロック操作コマンドと同様である。ここでは、操作対象となる記憶領域の指定方式として、操作対象となる記憶領域を含むブロックのブロック番号と、そのブロック内における操作対象となる記憶領域の開始アドレス（以下「拡張開始アドレス」と呼ぶ。）と、操作対象となる記憶領域の大きさ（以下「拡張操作サイズ」と呼ぶ。）とを指定する場合を例として説明する。
【０１５６】
図１５は、この実施の形態における拡張コマンド変換部１４０の詳細ブロックの構成の一例を示すブロック構成図である。
なお、この図には、プロトコル判定部１３０が出力した共通コマンドが共通ブロック操作コマンドである場合に関係する部分のみを示している。
拡張コマンド変換部１４０は、共通操作サイズ取得部１４１、共通開始アドレス取得部１４２、拡張コマンド取得部１４３、ブロックサイズ取得部１４４、ブロック数取得部１４５、開始ブロック番号取得部１４６、残りサイズ記憶部２４１、拡張開始アドレス算出部２４２、拡張操作サイズ算出部２４３、残りサイズ算出部２４４、ブロック番号算出部２４５、ブロック番号記憶部２４６、ブロック番号判定部２４７、ブロック番号更新部２４８、拡張コマンド生成部２４９を有する。
【０１５７】
共通操作サイズ取得部１４１は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通ブロック操作コマンドにおいて指定された共通操作サイズを取得する。共通操作サイズ取得部１４１は、ＣＰＵ９１１を用いて、取得した共通操作サイズを出力する。
共通開始アドレス取得部１４２は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通ブロック操作コマンドにおいて指定された共通開始アドレスを取得する。共通開始アドレス取得部１４２は、ＣＰＵ９１１を用いて、取得した共通開始アドレスを出力する。
拡張コマンド取得部１４３は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した拡張コマンド５２３を入力する。拡張コマンド取得部１４３は、ＣＰＵ９１１を用いて、入力した拡張コマンド５２３を出力する。
ブロックサイズ取得部１４４は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力したブロックサイズ５２４を入力する。ブロックサイズ取得部１４４は、ＣＰＵ９１１を用いて、入力したブロックサイズ５２４を出力する。
ブロック数取得部１４５は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力したブロック数５２５を入力する。ブロック数取得部１４５は、ＣＰＵ９１１を用いて、入力したブロック数５２５を出力する。
開始ブロック番号取得部１４６は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した開始ブロック番号５２６を入力する。開始ブロック番号取得部１４６は、ＣＰＵ９１１を用いて、入力した開始ブロック番号を出力する。
【０１５８】
残りサイズ記憶部２４１は、ＣＰＵ９１１を用いて、共通操作サイズ取得部１４１が出力した共通操作サイズを入力する。残りサイズ記憶部２４１は、ＲＡＭ９１４を用いて、入力した共通操作サイズを、残りサイズとして記憶する。
また、残りサイズ記憶部２４１は、ＣＰＵ９１１を用いて、後述する残りサイズ算出部２４４が出力した残りサイズを入力する。残りサイズを入力した場合、残りサイズ記憶部２４１は、ＲＡＭ９１４を用いて、入力した残りサイズを、上書きして記憶する。
【０１５９】
拡張開始アドレス算出部２４２は、ＣＰＵ９１１を用いて、共通開始アドレス取得部１４２が出力した共通開始アドレスと、ブロックサイズ取得部１４４が出力したブロックサイズとを入力する。拡張開始アドレス算出部２４２は、ＣＰＵ９１１を用いて、入力した開始アドレスと、ブロックサイズとに基づいて、一つの共通ブロック操作コマンドに対する最初の拡張ブロック操作コマンドの拡張開始アドレスを算出する。拡張開始アドレス算出部２４２は、ＣＰＵ９１１を用いて、算出した拡張開始アドレスを出力する。
例えば、拡張開始アドレス算出部２４２は、入力した共通開始アドレスを、入力したブロックサイズで割った余りを算出して、拡張開始アドレスとする。
【０１６０】
拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、ブロックサイズ取得部１４４が出力したブロックサイズと、残りサイズ記憶部２４１が出力した残りサイズと、拡張開始アドレス算出部２４２が出力した拡張開始アドレスとを入力する。拡張操作サイズ算出部２４３は、入力したブロックサイズと、残りサイズと、拡張開始アドレスとに基づいて、拡張ブロック操作コマンドの拡張操作サイズを算出する。拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、算出した拡張操作サイズを出力する。
例えば、拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、算出する拡張操作サイズが、一つの共通ブロック操作コマンドに対する最初の拡張ブロック操作コマンドについてのものか、二つ目以降の拡張ブロック操作コマンドについてのものかを判定し、最初の拡張ブロック操作コマンドについてのものであると判定した場合、入力したブロックサイズから、入力した拡張開始アドレスを差し引いて、最初のブロックの残りサイズ（以下「ブロック残りサイズ」と呼ぶ。）を算出する。二つ目以降の拡張ブロック操作コマンドについてのものであると判定した場合、拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、入力したブロックサイズを、二つ目以降のブロックのブロック残りサイズとする。拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、算出したブロック残りサイズと、入力した残りサイズとを比較して、小さいほうを拡張操作サイズとする。
【０１６１】
残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、残りサイズ記憶部２４１が記憶した残りサイズと、拡張操作サイズ算出部２４３が出力した拡張操作サイズとを入力する。残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、入力した残りサイズから、入力した拡張操作サイズを差し引いて、新しい残りサイズを算出する。残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、算出した残りサイズを出力する。
【０１６２】
ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、共通開始アドレス取得部１４２が出力した共通開始アドレスと、ブロックサイズ取得部１４４が出力したブロックサイズと、開始ブロック番号取得部１４６が出力した開始ブロック番号とを入力する。ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、入力した共通開始アドレスと、ブロックサイズと、開始ブロック番号とに基づいて、最初の拡張ブロック操作コマンドのブロック番号を算出する。ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、算出したブロック番号を出力する。
例えば、ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、入力した共通開始アドレスを、入力したブロックサイズで割った商（余りは切り捨て）を算出し、算出した商と、入力した開始ブロック番号との和を算出して、ブロック番号とする。
【０１６３】
ブロック番号記憶部２４６は、ＣＰＵ９１１を用いて、ブロック番号算出部２４５が出力したブロック番号を入力する。ブロック番号記憶部２４６は、ＲＡＭ９１４を用いて、入力したブロック番号を記憶する。
また、ブロック番号記憶部２４６は、ＣＰＵ９１１を用いて、後述するブロック番号更新部２４８が出力したブロック番号を入力する。ブロック番号更新部２４８が出力したブロック番号を入力した場合、ブロック番号記憶部２４６は、ＲＡＭ９１４を用いて、入力したブロック番号を、上書きして記憶する。
【０１６４】
ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、ブロック番号記憶部２４６が記憶したブロック番号と、ブロック数取得部１４５が出力したブロック数と、開始ブロック番号取得部１４６が出力した開始ブロック番号とを入力する。ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、入力したブロック数と、開始ブロック番号とに基づいて、入力したブロック番号のブロックがＩＣタグ８２０に存在するか否かを判定する。ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、入力したブロック番号のブロックがＩＣタグ８２０に存在すると判定した場合、入力したブロック番号を出力する。
例えば、ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、入力したブロック数と、入力した開始ブロック番号との和を算出し、算出した和と、入力したブロック番号とを比較する。ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、算出した和が、入力したブロック番号より大きい場合、入力したブロック番号のブロックがＩＣタグ８２０に存在すると判定し、算出した和が、入力したブロック番号以下である場合、入力したブロック番号のブロックがＩＣタグ８２０に存在しないと判定する。
【０１６５】
ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、ブロック番号判定部２４７が出力したブロック番号と、残りサイズ算出部２４４が出力した残りサイズとを入力する。ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、入力した残りサイズが０か否かを判定する。入力した残りサイズが０でないと判定した場合、ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、入力したブロック番号に１を加えて、新しいブロック番号とする。ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、算出したブロック番号を出力する。
【０１６６】
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、拡張コマンド取得部１４３が出力した拡張コマンドと、ブロック番号判定部２４７が出力したブロック番号と、拡張開始アドレス算出部２４２が出力した拡張開始アドレスと、拡張操作サイズ算出部２４３が出力した拡張操作サイズとを入力する。拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、入力した拡張コマンドと、ブロック番号と、拡張開始アドレスと、拡張操作サイズとに基づいて、ブロック番号と拡張開始アドレスと拡張操作サイズとを指定した拡張ブロック操作コマンドを生成する。拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、生成した拡張ブロック操作コマンドを出力する。
例えば、拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、生成する拡張ブロック操作コマンドが、一つの共通ブロック操作コマンドに対する最初の拡張ブロック操作コマンドか、二つ目以降の拡張ブロック操作コマンドかを判定し、最初の拡張ブロック操作コマンドであると判定した場合、入力したブロック番号をブロック番号として指定し、入力した拡張開始アドレスを拡張開始アドレスとして指定し、入力した拡張操作サイズを拡張操作サイズとして指定した拡張ブロック操作コマンドを生成する。二つ目以降の拡張ブロック操作コマンドであると判定した場合、拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、入力したブロック番号をブロック番号として指定し、「０」を拡張開始アドレスとして指定し、入力した拡張操作サイズを拡張操作サイズとして指定した拡張ブロック操作コマンドを生成する。
【０１６７】
図１６は、この実施の形態における拡張コマンド変換部１４０がブロック操作コマンドを変換するブロック操作コマンド変換処理の流れの一例を示すフローチャート図である。
拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通コマンドの種別を判定する。拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、判定した共通コマンドの種別に基づいて、共通コマンドの種別に対応するコマンド変換処理を実行する。ブロック操作コマンド変換処理は、プロトコル判定部１３０が出力した共通コマンドが、共通ブロック操作コマンドである場合に実行される。
【０１６８】
ブロック操作コマンド変換処理は、例えば、共通操作サイズ等取得工程Ｓ６４１、拡張開始アドレス算出工程Ｓ６４２、ブロック番号算出工程Ｓ６４３、ブロック番号判定工程Ｓ６４４、拡張操作サイズ算出工程Ｓ６４５、拡張コマンド生成工程Ｓ６４６、残りサイズ算出工程Ｓ６４７、ブロック番号更新工程Ｓ６４８を有する。
【０１６９】
共通操作サイズ等取得工程Ｓ６４１において、共通操作サイズ取得部１４１は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通ブロック操作コマンドにおいて指定された共通操作サイズを取得する。共通開始アドレス取得部１４２は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した共通ブロック操作コマンドにおいて指定された共通開始アドレスを取得する。拡張コマンド取得部１４３は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した拡張コマンド５２３を入力する。ブロックサイズ取得部１４４は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力したブロックサイズ５２４を入力する。ブロック数取得部１４５は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力したブロック数５２５を入力する。開始ブロック番号取得部１４６は、ＣＰＵ９１１を用いて、プロトコル判定部１３０が出力した開始ブロック番号５２６を入力する。残りサイズ記憶部２４１は、ＲＡＭ９１４を用いて、共通操作サイズ取得部１４１が取得した共通操作サイズを記憶する。
【０１７０】
拡張開始アドレス算出工程Ｓ６４２において、拡張開始アドレス算出部２４２は、ＣＰＵ９１１を用いて、共通操作サイズ等取得工程Ｓ６４１で共通開始アドレス取得部１４２が取得した共通開始アドレスと、ブロックサイズ取得部１４４が入力したブロックサイズとに基づいて、最初のブロックの拡張開始アドレスを算出する。
【０１７１】
ブロック番号算出工程Ｓ６４３において、ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、共通操作サイズ等取得工程Ｓ６４１で共通開始アドレス取得部１４２が取得した共通開始アドレスと、ブロックサイズ取得部１４４が入力したブロックサイズと、開始ブロック番号取得部１４６が入力した開始ブロック番号とに基づいて、最初のブロックのブロック番号を算出する。ブロック番号記憶部２４６は、ＲＡＭ９１４を用いて、ブロック番号算出部２４５が算出したブロック番号を記憶する。
【０１７２】
ブロック番号判定工程Ｓ６４４において、ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、共通操作サイズ等取得工程Ｓ６４１でブロック数取得部１４５が入力したブロック数と、開始ブロック番号取得部１４６が入力した開始ブロック番号とに基づいて、ブロック番号記憶部２４６が記憶したブロック番号のブロックが、ＩＣタグ８２０に存在するか否かを判定する。
ブロック番号記憶部２４６が記憶したブロック番号のブロックがＩＣタグ８２０に存在するとブロック番号判定部２４７が判定した場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、拡張操作サイズ算出工程Ｓ６４５へ進む。
ブロック番号記憶部２４６が記憶したブロック番号のブロックがＩＣタグ８２０に存在しないとブロック番号判定部２４７が判定した場合、拡張コマンド変換部１４０は、ブロック操作コマンド変換処理を終了する。
【０１７３】
拡張操作サイズ算出工程Ｓ６４５において、拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、共通操作サイズ等取得工程Ｓ６４１でブロックサイズ取得部１４４が入力したブロックサイズと、拡張開始アドレス算出工程Ｓ６４２で拡張開始アドレス算出部２４２が算出した拡張開始アドレスと、残りサイズ記憶部２４１が記憶した残りサイズとに基づいて、拡張操作サイズを算出する。
【０１７４】
拡張コマンド生成工程Ｓ６４６において、拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、共通操作サイズ等取得工程Ｓ６４１で拡張コマンド取得部１４３が入力した拡張コマンドと、ブロック番号記憶部２４６が記憶したブロック番号と、拡張開始アドレス算出工程Ｓ６４２で拡張開始アドレス算出部２４２が算出した拡張開始アドレスと、拡張操作サイズ算出工程Ｓ６４５で拡張操作サイズ算出部２４３が算出した拡張操作サイズとに基づいて、拡張ブロック操作コマンドを生成する。
【０１７５】
残りサイズ算出工程Ｓ６４７において、残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、残りサイズ記憶部２４１が記憶した残りサイズと、拡張操作サイズ算出工程Ｓ６４５で拡張操作サイズ算出部２４３が算出した拡張操作サイズとに基づいて、新しい残りサイズを算出する。残りサイズ記憶部２４１は、ＲＡＭ９１４を用いて、残りサイズ算出部２４４が算出した新しい残りサイズを記憶する。
残りサイズ算出部２４４が算出した残りサイズが「０」より大きい場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック番号更新工程Ｓ６４８へ進む。
残りサイズ算出部２４４が算出した残りサイズが「０」と等しい場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック操作コマンド変換処理を終了する。
【０１７６】
ブロック番号更新工程Ｓ６４８において、ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、ブロック番号記憶部２４６が記憶したブロック番号に１を加えて、ブロック番号を更新する。ブロック番号記憶部２４６は、ＲＡＭ９１４を用いて、更新されたブロック番号を記憶する。
その後、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、ブロック番号判定工程Ｓ６４４に戻る。
【０１７７】
図１７は、この実施の形態における拡張コマンド変換部１４０が変換する共通ブロック操作コマンドと拡張ブロック操作コマンドとの関係、及び、応答変換部１５０が変換する応答データと変換データとの関係の具体例を示す図である。
【０１７８】
この例では、共通ブロック操作コマンドとして、共通開始アドレス「１５００」番地から共通操作サイズ「５００」バイトのデータを読み出すことを指示する共通コマンド「ブロック読み出し’  １５００，５００」を、共通コマンド取得部１６１が取得したものとする。
ＴＩＤが「ＴＩＤＤ」のＩＣタグ８２０は、拡張ブロック操作コマンドとして、ブロック番号と、拡張開始アドレスと、拡張操作サイズとを指定して、指定したブロック番号が示す記憶領域のうち、拡張開始アドレスと拡張操作サイズとが示す記憶領域が記憶した複数のデータをまとめて読み出すことを指示する「ブロック読み出しＤ１」を理解するものとする。また、ＴＩＤが「ＴＩＤＤ」のＩＣタグ８２０は、ブロック番号のみを指定して、指定したブロック番号が示す記憶領域が記憶したすべてのデータをまとめて読み出すことを指示する「ブロック読み出しＤ２」を理解するものとする。なお、メーカーＤのＩＣタグ８２０におけるブロックサイズは２５６バイト、ブロック数は１６、開始ブロック番号は０であるものとする。
ＴＩＤが「ＴＩＤＥ」のＩＣタグ８２０も同様に、ブロック番号と、拡張開始アドレスと拡張操作サイズを指定して、複数のデータをまとめて読み出す「ブロック読み出しＥ１」を理解するものとする。なお、メーカーＥのＩＣタグ８２０におけるブロックサイズは１０２４バイト、ブロック数は８、開始ブロック番号は０であるものとする。
【０１７９】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＤ」である場合、共通操作サイズ取得部１４１は、ＣＰＵ９１１を用いて、共通操作サイズ「５００」を取得し、共通開始アドレス取得部１４２は、ＣＰＵ９１１を用いて、共通開始アドレス「１５００」を取得し、拡張コマンド取得部１４３は、ＣＰＵ９１１を用いて、拡張ブロック操作コマンド「ブロック読み出しＤ１」及び「ブロック読み出しＤ２」を入力し、ブロックサイズ取得部１４４は、ＣＰＵ９１１を用いて、ブロックサイズ「２５６」を入力し、ブロック数取得部１４５は、ＣＰＵ９１１を用いて、ブロック数「１６」を入力し、開始ブロック番号取得部１４６は、ＣＰＵ９１１を用いて、開始ブロック番号「０」を入力する。残りサイズ記憶部２４１は、ＲＡＭ９１４を用いて、共通操作サイズ「５００」を、残りサイズとして記憶する。
拡張開始アドレス算出部２４２は、ＣＰＵ９１１を用いて、共通開始アドレス「１５００」をブロックサイズ「２５６」で割った余り「２２０」を、拡張開始アドレスとする。ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、共通開始アドレス「１５００」をブロックサイズ「２５６」で割った商「５」と開始ブロック番号「０」との和「５」を、ブロック番号とする。ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、ブロック数「１６」と開始ブロック番号「０」との和「１６」が、ブロック番号「５」より大きいので、そのブロックがＩＣタグ８２０に存在すると判定する。
拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、ブロックサイズ「２５６」から拡張開始アドレス「２２０」を差し引いた差「３６」と、残りサイズ「５００」とを比較し、小さいほうの「３６」を、拡張操作サイズとする。
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、ブロック番号「５」と、拡張開始アドレス「２２０」と、拡張操作サイズ「３６」とに基づいて、拡張ブロック操作コマンド「ブロック読み出しＤ１  ＃５，２２０，３６」を生成し、出力する。
残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、残りサイズ「５００」から拡張操作サイズ「３６」を差し引いた差「４６４」を算出し、残りサイズ記憶部２４１が、残りサイズとして記憶する。
残りサイズ「４６４」が「０」より大きいので、ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、ブロック番号「５」に「１」を加えて「６」とし、ブロック番号記憶部２４６が、ブロック番号として記憶する。
ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、ブロック番号「６」のブロックがＩＣタグ８２０に存在すると判定する。拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、ブロックサイズ「２５６」と残りサイズ「４６４」とを比較して、小さいほうの「２５６」を拡張操作サイズとする。
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、ブロック番号「６」と、拡張操作サイズ「２５６」とに基づいて、拡張ブロック操作コマンド「ブロック読み出しＤ２  ＃６」を生成し、出力する。なお、この例において、拡張コマンド生成部２４９は、拡張ブロック操作コマンド「ブロック読み出しＤ１  ＃６，０，２５６」を生成する構成であってもよいが、１つのブロックのデータを全部読み出すため、より効率のよい「ブロック読み出しＤ２  ＃６」を選択して、生成する。
残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、残りサイズ「４６４」から拡張操作サイズ「２５６」を差し引いた差「２０８」を算出し、残りサイズ記憶部２４１が、残りサイズとして記憶する。
残りサイズ「２０８」が「０」より大きいので、ブロック番号更新部２４８は、ＣＰＵ９１１を用いて、ブロック番号「６」に「１」を加えて「７」とし、ブロック番号記憶部２４６が、ブロック番号として記憶する。
ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、ブロック番号「７」のブロックがＩＣタグ８２０に存在すると判定する。拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、ブロックサイズ「２５６」と残りサイズ「２０８」とを比較して、小さいほうの「２０８」を拡張操作サイズとする。
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、ブロック番号「７」と、拡張操作サイズ「２０８」とに基づいて、拡張ブロック操作コマンド「ブロック読み出しＤ１  ＃７，０，２０８」を生成し、出力する。
残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、残りサイズ「２０８」から拡張操作サイズ「２０８」を差し引いた差「０」を算出し、残りサイズ記憶部２４１が、残りサイズとして記憶する。
残りサイズが「０」なので、拡張コマンド変換部１４０は、ブロック操作コマンド変換処理を終了する。
【０１８０】
拡張コマンド変換部１４０が生成した三つの拡張ブロック操作コマンドを、コマンド送信部１７２がＩＣタグ８２０に対して送信し、ＩＣタグ８２０が、それぞれの拡張ブロック操作コマンドに対する応答データを送信する。ＩＣタグ８２０が送信した三つの応答データを、応答受信部１８２が受信し、応答変換部１５０が入力する。
例えば、応答変換部１５０は、ＣＰＵ９１１を用いて、入力した三つの応答データを結合して変換前データとし、データ形式を整えて、一つの変換データを生成する。応答通知部１６２は、通信装置９１５を用いて、応答変換部１５０が生成した変換データを、共通コマンド取得部１６１が取得した共通ブロック操作コマンド「ブロック読み出し’  １５００，５００」に対する応答として、ＰＣ８１０に対して通知する。
【０１８１】
識別受信部１８１が受信したＴＩＤからプロトコル判定部１３０が判定したプロトコルが、例えば「ＴＩＤＥ」である場合、共通操作サイズ取得部１４１は、ＣＰＵ９１１を用いて、共通操作サイズ「５００」を取得し、共通開始アドレス取得部１４２は、ＣＰＵ９１１を用いて、共通開始アドレス「１５００」を取得し、拡張コマンド取得部１４３は、ＣＰＵ９１１を用いて、拡張ブロック操作コマンド「ブロック読み出しＥ１」を入力し、ブロックサイズ取得部１４４は、ＣＰＵ９１１を用いて、ブロックサイズ「１０２４」を入力し、ブロック数取得部１４５は、ＣＰＵ９１１を用いて、ブロック数「８」を入力し、開始ブロック番号取得部１４６は、ＣＰＵ９１１を用いて、開始ブロック番号「０」を入力する。残りサイズ記憶部２４１は、ＲＡＭ９１４を用いて、共通操作サイズ「５００」を、残りサイズとして記憶する。
拡張開始アドレス算出部２４２は、ＣＰＵ９１１を用いて、共通開始アドレス「１５００」をブロックサイズ「１０２４」で割った余り「４７６」を、拡張開始アドレスとする。ブロック番号算出部２４５は、ＣＰＵ９１１を用いて、共通開始アドレス「１５００」をブロックサイズ「１０２４」で割った商「１」と開始ブロック番号「０」との和「１」を、ブロック番号とする。ブロック番号判定部２４７は、ＣＰＵ９１１を用いて、ブロック数「８」と開始ブロック番号「０」との和「８」が、ブロック番号「１」より大きいので、そのブロックがＩＣタグ８２０に存在すると判定する。
拡張操作サイズ算出部２４３は、ＣＰＵ９１１を用いて、ブロックサイズ「１０２４」から拡張開始アドレス「４７６」を差し引いた差「５４８」と、残りサイズ「５００」とを比較し、小さいほうの「５００」を、拡張操作サイズとする。
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、ブロック番号「１」と、拡張開始アドレス「４７６」と、拡張操作サイズ「５００」とに基づいて、拡張ブロック操作コマンド「ブロック読み出しＥ１  ＃１，４７６，５００」を生成し、出力する。
残りサイズ算出部２４４は、ＣＰＵ９１１を用いて、残りサイズ「５００」から拡張操作サイズ「５００」を差し引いた差「０」を算出し、残りサイズ記憶部２４１が、残りサイズとして記憶する。
残りサイズが「０」なので、拡張コマンド変換部１４０は、ブロック操作コマンド変換処理を終了する。
【０１８２】
拡張コマンド変換部１４０が生成した拡張ブロック操作コマンドを、コマンド送信部１７２がＩＣタグ８２０に対して送信し、ＩＣタグ８２０が、それぞれの拡張ブロック操作コマンドに対する応答データを送信する。ＩＣタグ８２０が送信した応答データを、応答受信部１８２が受信し、応答変換部１５０が入力する。
例えば、応答変換部１５０は、ＣＰＵ９１１を用いて、入力した応答データを変換前データとし、データ形式を整えて、変換データを生成する。応答通知部１６２は、通信装置９１５を用いて、応答変換部１５０が生成した変換データを、共通コマンド取得部１６１が取得した共通ブロック操作コマンド「ブロック読み出し’  １５００，５００」に対する応答として、ＰＣ８１０に対して通知する。
【０１８３】
ＩＣタグ８２０は、記憶領域を複数のブロックに分けて管理しているので、ＩＣタグ８２０が、複数の操作対象データをまとめて操作するブロック操作コマンドを理解する場合であっても、ブロックの境界を跨ぐ領域をまとめて操作することはできない場合がある。
また、ＩＣタグ８２０の種別（メーカーや型式）によって、ブロックサイズが異なる場合がある。
【０１８４】
この実施の形態におけるＲＦＩＤリーダライタ装置１００は、取得した共通コマンドが共通ブロック操作コマンドである場合、ＩＣタグ８２０のＴＩＤに基づいてＩＣタグ８２０のブロックサイズを求め、操作対象データの記憶領域がブロック境界を跨ぐ場合、一つの共通ブロック操作コマンドを複数の拡張ブロック操作コマンドに変換する。変換された拡張ブロック操作コマンドは、ブロック境界を跨がない記憶領域のデータを操作する。
したがって、ＩＣタグ８２０のブロックサイズにかかわらず、一つの共通ブロック操作コマンドで、複数の操作対象データをまとめて操作することができる。
【０１８５】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）において、上記拡張コマンド変換部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記共通コマンド取得部１６１が取得した共通コマンドが上記共通ブロック操作コマンドであると判定した場合に、上記共通コマンド取得部１６１が取得した共通コマンドから、まとめて操作する対象となる複数の操作対象データを指示する操作指示データ（共通開始アドレス、共通操作サイズ）を取得し、上記コマンド群判定部（プロトコル判定部１３０）が判定した拡張コマンド群（プロトコル）について上記プロトコル記憶部１２０が記憶したブロックサイズ５２４に基づいて、取得した操作指示データにより指示された複数の操作対象データを、上記操作対象データを含む操作ブロックごとに分割し、分割した操作ブロックごとの操作対象データのそれぞれについて、上記操作対象データを操作する拡張コマンド（拡張ブロック操作コマンド）を生成する。
【０１８６】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、異なるブロックサイズを有する記憶装置（ＩＣタグ８２０）が混在する場合であっても、そのことを制御装置（ＰＣ８１０）の側で意識する必要がなく、同じ共通ブロック操作コマンドで、異なるブロックサイズを有する記憶装置が記憶したデータを複数まとめて操作することができる。
【０１８７】
以上説明したＲＦＩＤリーダライタ装置１００は、ＩＣタグ８２０（記憶装置）のユーザメモリ（記憶領域）のブロック境界をまたいでアクセスするとエラーが発生して正しく処理ができない場合、ブロックの境界をまたぐようなアクセスを指示するユーザコマンド（共通コマンド）を、ブロックの境界で分割して複数回に分割してアクセスする拡張コマンドに変換する。プロトコルテーブル（プロトコル記憶部１２０）がブロックサイズ５２４を持つことにより、ブロックサイズが一様でないＩＣタグ８２０へアクセスをしても、拡張コマンド変換部１４０が、適切にエアコマンドを分割するので、ブロックをまたがないように通信することができる。これにより、ユーザは、ブロックサイズを意識しなくてもＩＣタグ８２０にアクセスすることができる。
【０１８８】
実施の形態５．
実施の形態５について、図１８〜図２１を用いて説明する。
なお、実施の形態４で説明したＩＣタグ読取システム８００と共通する部分については、同一の符号を付し、説明を省略する。
【０１８９】
この実施の形態では、ＩＣタグ８２０との通信に失敗した場合に、自動的にリトライをする構成のＲＦＩＤリーダライタ装置１００について説明する。
【０１９０】
図１８は、この実施の形態における拡張コマンド変換部１４０及び応答変換部１５０の詳細ブロックの構成の一例を示すブロック構成図である。
なお、この図には、リトライに関係する部分のみを示している。
【０１９１】
応答変換部１５０は、通信成否判定部１５１、変換データ生成部１５２を有する。
【０１９２】
通信成否判定部１５１は、ＣＰＵ９１１を用いて、応答受信部１８２が出力した応答データを入力する。通信成否判定部１５１は、ＣＰＵ９１１を用いて、入力した応答データに基づいて、ＩＣタグ８２０との通信が成功したか失敗したかを判定する。通信成否判定部１５１は、ＣＰＵ９１１を用いて、判定した判定結果を出力する。
例えば、コマンド送信部１７２が送信した拡張コマンドが、ブロック読み出しコマンドである場合、通信成否判定部１５１は、ＣＰＵ９１１を用いて、入力した応答データに付加された誤り検出符号や誤り訂正符号を検査して、応答受信部１８２が正しく応答データを受信したか否かを判定する。あるいは、コマンド送信部１７２が送信した拡張コマンドが、ブロック書き込みコマンドである場合、ＩＣタグ８２０に書き込むデータをＩＣタグ８２０が正しく受信したか否かを表わす情報を含む応答データを、ＩＣタグ８２０が送信するので、通信成否判定部１５１は、これを解析することにより、ＩＣタグ８２０が正しくデータを受信したか否かを判定する。
【０１９３】
変換データ生成部１５２は、ＣＰＵ９１１を用いて、通信成否判定部１５１が出力した判定結果を入力する。変換データ生成部１５２は、ＣＰＵ９１１を用いて、入力した判定結果に基づいて、ＩＣタグ８２０との通信に成功したと通信成否判定部１５１が判定した場合、応答受信部１８２が出力した応答データを入力する。変換データ生成部１５２は、ＣＰＵ９１１を用いて、入力した応答データを変換して、変換データを生成する。変換データ生成部１５２は、ＣＰＵ９１１を用いて、生成した変換データを出力する。
【０１９４】
拡張コマンド変換部１４０は、実施の形態４で説明したブロックに加えて、更に、拡張操作サイズ分割部２５１、分割開始アドレス算出部２５２を有する。
【０１９５】
拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、通信成否判定部１５１が出力した判定結果を入力する。拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、入力した判定結果に基づいて、ＩＣタグ８２０との通信が失敗したと通信成否判定部１５１が判定した場合、拡張コマンド生成部２４９が出力した拡張コマンドで指定された拡張操作サイズを入力する。拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、入力した拡張操作サイズと、所定の最低サイズ（例えば８バイト）とを比較する。拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、入力した拡張操作サイズのほうが、所定の最低サイズよりも大きいと判定した場合、入力した拡張操作サイズを所定の数（例えば２）（以下「分割数」と呼ぶ。）に分割する。
例えば、分割数が２の場合、拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、入力した拡張操作サイズを２で割って、二つに分割した分割操作サイズを算出する。分割操作サイズは、整数であって、合計すると、入力した拡張操作サイズと等しくなるようにする。また、メモリアクセスの効率性を考慮して、拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、分割した記憶領域がワード境界と一致するよう、分割操作サイズを算出する構成としてもよい。
また、拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、入力した操作サイズが所定の最低サイズ以下であると判定した場合、入力した拡張操作サイズをそのまま分割操作サイズとして出力する。したがって、その場合の分割数は「１」となる。
【０１９６】
分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、拡張操作サイズ分割部２５１が出力した分割操作サイズと、拡張コマンド生成部２４９が出力した拡張コマンドで指定された拡張開始アドレスとを入力する。分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、入力した分割操作サイズに基づいて、分割した拡張コマンドそれぞれについての拡張開始アドレス（以下「分割開始アドレス」と呼ぶ。）を算出する。分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、算出した分割開始アドレスを出力する。
分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、分割数と同じ数の分割開始アドレスを算出する。例えば、分割数が２の場合、分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、二つの分割開始アドレスを算出する。分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、入力した拡張開始アドレスを、そのまま第一の分割開始アドレスとする。分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、第一の分割開始アドレスに、入力した二つの分割操作サイズのうち、第一の分割操作サイズを加えて、第二の分割開始アドレスとする。
【０１９７】
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、拡張操作サイズ分割部２５１が出力した分割操作サイズと、分割開始アドレス算出部２５２が出力した分割開始アドレスとを入力する。拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、入力した分割操作サイズと分割開始アドレスとに基づいて、入力した分割開始アドレスを拡張開始アドレスとして指定し、入力した分割操作サイズを拡張操作サイズとして指定した拡張コマンドを生成する。なお、ブロック番号は、通信に失敗した前回の拡張コマンドと同じブロック番号を指定する。拡張コマンド生成部２４９は、生成した拡張コマンドを出力する。
拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、分割数と同じ数の拡張コマンドを生成する。例えば、分割数が２の場合、拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、二つの拡張コマンドを生成する。拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、第一の分割開始アドレスを拡張開始アドレスとして指定し、第一の分割操作サイズを拡張操作サイズとして指定した第一の拡張コマンドと、第二の分割開始アドレスを拡張開始アドレスとして指定し、第二の分割操作サイズを拡張操作サイズとして指定した第二の拡張コマンドとを生成する。
【０１９８】
コマンド送信部１７２は、ＣＰＵ９１１を用いて、拡張コマンド生成部２４９が生成した拡張コマンドを入力する。コマンド送信部１７２は、送信装置９１７を用いて、入力した拡張コマンドを、ＩＣタグ８２０に対して送信する。
【０１９９】
図１９は、この実施の形態における拡張コマンド変換部１４０がブロック操作コマンドを変換するブロック操作コマンド変換処理の流れの一例を示すフローチャート図である。
ブロック操作コマンド変換処理は、実施の形態４で説明した工程に加えて、更に、通信成否判定工程Ｓ６５１、リトライ処理Ｓ６５０を有する。
【０２００】
通信成否判定工程Ｓ６５１において、通信成否判定部１５１は、ＣＰＵ９１１を用いて、拡張コマンド生成工程Ｓ６４６で拡張コマンド生成部２４９が生成した拡張コマンドに対する応答として、ＩＣタグ８２０が送信した応答データに基づいて、ＩＣタグ８２０との通信が成功したか失敗したかを判定する。
ＩＣタグ８２０との通信が成功したと通信成否判定部１５１が判定した場合、拡張コマンド変換部１４０は、残りサイズ算出工程Ｓ６４７へ進む。
ＩＣタグ８２０との通信が失敗したと通信成否判定部１５１が判定した場合、拡張コマンド変換部１４０は、リトライ処理Ｓ６５０へ進む。
【０２０１】
図２０は、この実施の形態における拡張コマンド変換部１４０がリトライをするリトライ処理Ｓ６５０の流れの一例を示すフローチャート図である。
リトライ処理Ｓ６５０は、分割操作サイズ算出工程Ｓ６５２、分割開始アドレス算出工程Ｓ６５３、分割繰り返し工程Ｓ６５４、拡張コマンド生成工程Ｓ６５５、通信成否判定工程Ｓ６５６、リトライ処理Ｓ６６０、分割繰り返し判定工程Ｓ６５７を有する。
【０２０２】
分割操作サイズ算出工程Ｓ６５２において、拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、拡張コマンド生成部２４９が生成した拡張コマンドで指定された拡張操作サイズに基づいて、分割数と等しい数の分割操作サイズを算出する。
分割開始アドレス算出工程Ｓ６５３において、分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、分割操作サイズ算出工程Ｓ６５２で拡張操作サイズ分割部２５１が算出した分割操作サイズと、拡張コマンド生成部２４９が生成した拡張コマンドで指定された拡張開始アドレスとに基づいて、分割数と等しい数の分割開始アドレスを算出する。
【０２０３】
分割繰り返し工程Ｓ６５４において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、拡張コマンド生成工程Ｓ６５５〜分割繰り返し判定工程Ｓ６５７を分割数と等しい回数繰り返す。
【０２０４】
拡張コマンド生成工程Ｓ６５５において、拡張コマンド生成部２４９は、ＣＰＵ９１１を用いて、ブロック番号記憶部２４６が記憶したブロック番号をブロック番号として指定し、分割開始アドレス算出工程Ｓ６５３で分割開始アドレス算出部２５２が算出した分割開始アドレスを拡張開始アドレスとして指定し、分割操作サイズ算出工程Ｓ６５２で拡張操作サイズ分割部２５１が算出した分割操作サイズを拡張操作サイズとして指定した拡張コマンドを生成し、出力する。
【０２０５】
拡張コマンド生成部２４９が生成した拡張コマンドは、コマンド送信部１７２が、送信装置９１７を用いて、ＩＣタグ８２０に対して送信する。ＩＣタグ８２０は、これに対する応答データを送信し、応答受信部１８２が受信する。
【０２０６】
通信成否判定工程Ｓ６５６において、通信成否判定部１５１は、ＣＰＵ９１１を用いて、応答受信部１８２が受信した応答データに基づいて、ＩＣタグ８２０との通信が成功したか失敗したかを判定する。
ＩＣタグ８２０との通信が成功したと通信成否判定部１５１が判定した場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、分割繰り返し判定工程Ｓ６５７へ進む。
ＩＣタグ８２０との通信が失敗したと通信成否判定部１５１が判定した場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、リトライ処理Ｓ６６０へ進む。
【０２０７】
リトライ処理Ｓ６６０は、リトライ処理Ｓ６５０と同じ処理であって、再帰的に実行される。リトライ処理Ｓ６６０において、拡張コマンド変換部１４０は、拡張コマンド生成工程Ｓ６５５で生成した拡張コマンドを更に分割する。このように、ＩＣタグ８２０との通信が成功するまで、操作対象データのサイズを小さくしていく。送受信するデータのサイズを小さくすることにより、通信環境が悪くても、ＩＣタグ８２０との通信が成功する確率を高くすることができる。
【０２０８】
分割繰り返し判定工程Ｓ６５７において、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、拡張コマンド生成工程Ｓ６５５〜分割繰り返し判定工程Ｓ６５７の処理を分割数と同じ回数繰り返したか否かを判定する。
まだ繰り返し回数が足りないと判定した場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、拡張コマンド生成工程Ｓ６５５からの処理を繰り返す。
分割数と同じ回数繰り返したと判定した場合、拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、リトライ処理を終了する。
【０２０９】
なお、あらかじめリトライ処理を再帰的に実行する深さの上限を設定しておき、拡張コマンド変換部１４０は、リトライ処理Ｓ６６０の前に、ＣＰＵ９１１を用いて、実行の深さが上限を超えたか否かを判定し、実行の深さが上限を超えた場合、リトライを断念して通信エラーとして処理する構成としてもよい。
【０２１０】
図２１は、この実施の形態における拡張コマンド変換部１４０が変換する共通ブロック操作コマンドと拡張ブロック操作コマンドとの関係、及び、応答変換部１５０が変換する応答データと変換データとの関係の具体例を示す図である。
【０２１１】
ここでは、実施の形態４で説明した例において、拡張コマンド変換部１４０が生成した二つ目の拡張コマンド「ブロック読み出しＤ２  ＃６」のときに、ＩＣタグ８２０との通信に失敗した場合について説明する。
【０２１２】
通信成否判定部１５１は、ＣＰＵ９１１を用いて、応答受信部１８２が受信した応答データに基づいて、ＩＣタグ８２０との通信に失敗したと判定する。拡張操作サイズ分割部２５１は、ＣＰＵ９１１を用いて、拡張コマンド「ブロック読み出しＤ２  ＃６」の拡張操作サイズ「２５６」を「２」で割って、二つの分割操作サイズ「１２８」「１２８」を算出する。分割開始アドレス算出部２５２は、ＣＰＵ９１１を用いて、拡張コマンド「ブロック読み出しＤ２  ＃６」の拡張開始アドレス「０」を、第一の分割開始アドレスとし、それに、拡張操作サイズ分割部２５１が算出した第一の分割操作サイズ「１２８」を加えて、第二の分割開始アドレス「１２８」を算出する。
拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、拡張コマンド「ブロック読み出しＤ２  ＃６」のブロック番号「６」をブロック番号として指定し、分割開始アドレス算出部２５２が算出した第一の分割開始アドレス「０」を拡張開始アドレスとして指定し、拡張操作サイズ分割部２５１が算出した第一の分割操作サイズを拡張操作サイズとして指定した拡張コマンド「ブロック読み出しＤ１  ＃６，０，１２８」を生成し、出力する。
【０２１３】
コマンド送信部１７２は、送信装置９１７を用いて、拡張コマンド変換部１４０が生成した拡張コマンド「ブロック読み出しＤ１  ＃６，０，１２８」を、ＩＣタグ８２０に対して送信し、ＩＣタグ８２０が受信する。ＩＣタグ８２０は、これに対する応答データを送信し、応答受信部１８２が、受信装置９１８を用いて、受信する。ここでは、ＩＣタグ８２０との通信に成功したものとする。
通信成否判定部１５１は、ＣＰＵ９１１を用いて、応答受信部１８２が受信した応答データに基づいて、ＩＣタグ８２０との通信に成功したと判定する。
【０２１４】
拡張コマンド変換部１４０は、ＣＰＵ９１１を用いて、拡張コマンド「ブロック読み出しＤ２  ＃６」のブロック番号「６」をブロック番号として指定し、分割開始アドレス算出部２５２が算出した第二の分割開始アドレス「１２８」を拡張開始アドレスとして指定し、拡張操作サイズ分割部２５１が算出した第二の分割操作サイズを拡張操作サイズとして指定した拡張コマンド「ブロック読み出しＤ１  ＃６，１２８，１２８」を生成し、出力する。
【０２１５】
コマンド送信部１７２は、送信装置９１７を用いて、拡張コマンド変換部１４０が生成した拡張コマンド「ブロック読み出しＤ１  ＃６，１２８，１２８」を、ＩＣタグ８２０に対して送信し、ＩＣタグ８２０が受信する。ＩＣタグ８２０は、これに対する応答データを送信し、応答受信部１８２が、受信装置９１８を用いて、受信する。
【０２１６】
このように、ＩＣタグ８２０との通信に失敗した場合に、送受信するデータのサイズを小さくすることにより、通信が成功する確率を上げるとともに、通信に成功した部分については再送の必要がなくなるので、全体として、ＩＣタグ８２０との通信にかかる時間を短縮することができる。
【０２１７】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、更に、通信成否判定部１５１を有する。
上記通信成否判定部１５１は、上記処理装置（ＣＰＵ９１１）を用いて、上記応答受信部１８２が受信した応答データに基づいて、上記記憶装置（ＩＣタグ８２０）との通信が成功したか失敗したかを判定する。
上記拡張コマンド変換部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記記憶装置（ＩＣタグ８２０）との通信が失敗したと上記通信成否判定部１５１が判定した場合に、上記共通コマンドを、変換した拡張コマンドよりも一回の通信で送受信するデータ長が短い拡張コマンドに再変換する。
上記拡張コマンド送信部１７２は、上記送信装置９１７を用いて、上記記憶装置（ＩＣタグ８２０）に対して、上記拡張コマンド変換部１４０が再変換した拡張コマンドを送信する。
【０２１８】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、記憶装置（ＩＣタグ８２０）との通信に失敗した場合に、拡張コマンド変換部１４０が、送受信するデータ長が短い拡張コマンドに再変換するので、通信が成功する確率を高くすることができる。
【０２１９】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）は、更に、通信成否判定部１５１を有する。
上記通信成否判定部１５１は、上記処理装置（ＣＰＵ９１１）を用いて、上記拡張コマンド変換部１４０が変換した一以上の拡張コマンドのそれぞれについて、上記応答受信部１８２が受信した応答データに基づいて、上記記憶装置（ＩＣタグ８２０）との通信が成功したか失敗したかを判定する。
上記拡張コマンド変換部１４０は、上記処理装置（ＣＰＵ９１１）を用いて、上記拡張コマンド変換部１４０が変換した一以上の拡張コマンドのいずれかについて、上記記憶装置（ＩＣタグ８２０）との通信が失敗したと上記通信成否判定部１５１が判定した場合に、上記記憶装置（ＩＣタグ８２０）との通信が失敗したと上記通信成否判定部１５１が判定した拡張コマンドについて、操作する操作対象データを複数に分割し、分割した操作対象データのそれぞれについて、拡張コマンドを生成することにより、通信に失敗した拡張コマンドを、複数の拡張コマンドに変換する。
上記拡張コマンド送信部１７２は、上記送信装置９１７を用いて、上記記憶装置（ＩＣタグ８２０）に対して、上記拡張コマンド変換部１４０が変換した複数の拡張コマンドを送信する。
【０２２０】
この実施の形態におけるデータ操作装置（ＲＦＩＤリーダライタ装置１００）によれば、複数のデータをまとめて操作する拡張コマンドにおいて、ＩＣタグ８２０との通信に失敗した場合に、拡張コマンド変換部１４０が、操作対象データを分割した複数の拡張コマンドに変換するので、通信の成功率を高くすることができる。
【０２２１】
以上説明したＲＦＩＤリーダライタ装置１００は、タグの種類によって通信性能が異なるなどの原因により、ＩＣタグ８２０との通信がうまくいかない場合、リトライをして救うことができる。通信するデータ長が長いと効率がいい反面、失敗する確率も上がるため、リトライするごとにデータ長を短くすることで効率と成功率のバランスを取ることができる。リトライ回数が増えるたびに転送サイズ（拡張操作サイズ）をだんだんと小さくする。拡張コマンド変換部１４０は、ブロックサイズを使って、転送サイズを決める。通信が成功した場合は、ブロックサイズで通信をするので、通信の効率を高くすることができる。通信が失敗した場合は、データ長を短くする（たとえば半分にする）ことで通信の成功率を高くする。
【図面の簡単な説明】
【０２２２】
【図１】実施の形態１におけるＩＣタグ読取システム８００の全体構成の一例を示すシステム構成図。
【図２】実施の形態１におけるＲＦＩＤリーダライタ装置１００のハードウェア構成の一例を示すハードウェア構成図。
【図３】実施の形態１におけるＲＦＩＤリーダライタ装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図４】実施の形態１における共通コマンドと各メーカー独自の拡張コマンドとにおけるブロック操作コマンドのブロック番号の対応の一例を示す図。
【図５】実施の形態１におけるプロトコル記憶部１２０が記憶したプロトコルテーブル５２０の一例を示す図。
【図６】実施の形態１における拡張コマンド変換部１４０が、ブロック読み出しコマンドを変換するブロック読み出しコマンド変換処理の流れの一例を示すフローチャート図。
【図７】実施の形態１における共通コマンド取得部１６１が取得する共通コマンドと、拡張コマンド変換部１４０が変換する拡張コマンドとの関係の具体例を示す図。
【図８】実施の形態１における拡張コマンド変換部１４０が、ブロック書き込みコマンドを変換するブロック書き込みコマンド変換処理の流れの一例を示すフローチャート図。
【図９】実施の形態１における共通コマンド取得部１６１が取得する共通コマンドと、拡張コマンド変換部１４０が変換する拡張コマンドとの関係の具体例を示す図。
【図１０】実施の形態１における応答変換部１５０が、ブロック読み出しコマンドに対する応答を変換するブロック読み出し応答変換処理の流れの一例を示すフローチャート図。
【図１１】実施の形態１における応答受信部１８２が受信した応答データと、応答変換部１５０が変換した変換データとの関係の具体例を示す図。
【図１２】実施の形態２におけるＲＦＩＤリーダライタ装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図１３】実施の形態２におけるプロトコル記憶部１２０の詳細ブロックの構成の一例を示すブロック構成図。
【図１４】実施の形態３におけるプロトコル記憶部１２０の詳細ブロックの構成の一例を示すブロック構成図。
【図１５】実施の形態４における拡張コマンド変換部１４０の詳細ブロックの構成の一例を示すブロック構成図。
【図１６】実施の形態４における拡張コマンド変換部１４０がブロック操作コマンドを変換するブロック操作コマンド変換処理の流れの一例を示すフローチャート図。
【図１７】実施の形態４における拡張コマンド変換部１４０が変換する共通ブロック操作コマンドと拡張ブロック操作コマンドとの関係、及び、応答変換部１５０が変換する応答データと変換データとの関係の具体例を示す図。
【図１８】実施の形態５における拡張コマンド変換部１４０及び応答変換部１５０の詳細ブロックの構成の一例を示すブロック構成図。
【図１９】実施の形態５における拡張コマンド変換部１４０がブロック操作コマンドを変換するブロック操作コマンド変換処理の流れの一例を示すフローチャート図。
【図２０】実施の形態５における拡張コマンド変換部１４０がリトライをするリトライ処理Ｓ６５０の流れの一例を示すフローチャート図。
【図２１】実施の形態５における拡張コマンド変換部１４０が変換する共通ブロック操作コマンドと拡張ブロック操作コマンドとの関係、及び、応答変換部１５０が変換する応答データと変換データとの関係の具体例を示す図。
【符号の説明】
【０２２３】
１００  ＲＦＩＤリーダライタ装置、１１０  コマンド判定部、１１５  基本コマンド変換部、１２０  プロトコル記憶部、１２１  マスター記憶部、１２２，１２３  テーブル記憶部、１２４  有効フラグ記憶部、１２５  テーブル検索部、１２６  テーブル更新部、１２７  テーブル切替部、１２８  テーブル読込部、１３０  プロトコル判定部、１４０  拡張コマンド変換部、１４１  共通操作サイズ取得部、１４２  共通開始アドレス取得部、１４３  拡張コマンド取得部、１４４  ブロックサイズ取得部、１４５  ブロック数取得部、１４６  開始ブロック番号取得部、１５０  応答変換部、１５１  通信成否判定部、１５２  変換データ生成部、１６１  共通コマンド取得部、１６２  応答通知部、１７１  識別取得指示部、１７２  コマンド送信部、１８１  識別受信部、１８２  応答受信部、１９０  プロトコル更新部、２４１  残りサイズ記憶部、２４２  拡張開始アドレス算出部、２４３  拡張操作サイズ算出部、２４４  残りサイズ算出部、２４５  ブロック番号算出部、２４６  ブロック番号記憶部、２４７  ブロック番号判定部、２４８  ブロック番号更新部、２４９  拡張コマンド生成部、２５１  拡張操作サイズ分割部、２５２  分割開始アドレス算出部、８００  ＩＣタグ読取システム、８１０  ＰＣ、８２０  ＩＣタグ、９１１  ＣＰＵ、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信装置、９１７  送信装置、９１８  受信装置、９１９  アンテナ、９２０  フラッシュメモリ。
【図１】
2010108157.tif 000003
【図２】
2010108157.tif 000004
【図３】
2010108157.tif 000005
【図４】
2010108157.tif 000006
【図５】
2010108157.tif 000007
【図６】
2010108157.tif 000008
【図７】
2010108157.tif 000009
【図８】
2010108157.tif 000010
【図９】
2010108157.tif 000011
【図１０】
2010108157.tif 000012
【図１１】
2010108157.tif 000013
【図１２】
2010108157.tif 000014
【図１３】
2010108157.tif 000015
【図１４】
2010108157.tif 000016
【図１５】
2010108157.tif 000017
【図１６】
2010108157.tif 000018
【図１７】
2010108157.tif 000019
【図１８】
2010108157.tif 000020
【図１９】
2010108157.tif 000021
【図２０】
2010108157.tif 000022
【図２１】
2010108157.tif 000023