(57)【要約】【課題】  ＩＣタグの仕様変更に伴う業務アプリケーションの改修頻度や，業務アプリケーション間で共有する情報の更新頻度を抑えながら，計算能力やメモリ容量に制限のあるＩＣタグに対して，データ書込処理を高速化すること。【解決手段】  ＩＣタグに対するデータ書込コマンドを発行する前に，直前にＩＣタグから読み込んだデータと，これから書き込もうとするデータの差分を取り，書き換えの発生したデータに限定して書込要求コマンドを発行することで，書込要求コマンドの総実行回数を削減する。また，ＩＣタグ内の記憶領域を，基本領域と追記領域の２つに分割し，新たにデータを書き込む際には，書き込み対象のデータへ識別のための符号を付加した後，追記領域の末尾へ連続するように書込を行うことで，書込要求データを一回の連続領域書込コマンド（ＩＳＯ１８０００−６Ｔｙｐｅ  ＣのＢｌｏｃｋＷｒｉｔｅ相当のコマンド）で実現する。【選択図】  図１
2010286935.tif 000002
【特許請求の範囲】
【請求項１】
ＩＣタグへのデータ書き込みシステムにおいて、
前記ＩＣタグのデータ記憶部は、予め複数の種類のデータが格納された基本領域と追記領域とを有し、
ＩＣタグへ書き込むデータと前記ＩＣタグのデータ記憶部に格納されたデータとを比較し、変更が生じたデータを抽出するミドルウェア装置と、
前記抽出された変更が生じたデータを、当該データの種類に応じた識別符号と共に前記追記領域に格納するリーダライタ装置と、
を有することを特徴とするデータ書き込みシステム。
【請求項２】
請求項１に記載のデータ書き込みシステムにおいて、
前記リーダライタ装置は、前記追記領域に格納する複数のデータを連続して位置するように書き込むことを特徴とするデータ書き込みシステム。
【請求項３】
請求項１または２に記載のデータ書き込みシステムにおいて、
前記ミドルウェア装置は、
前記ＩＣタグ内に格納する前記識別符号と、前記ミドルウェア装置間で共有する前記対応管理テーブルと前記符号管理テーブルの組み合わせと、を利用し識別符号を付加することを特徴とする、データ書き込みシステム。
【請求項４】
ＩＣタグへのデータ書き込み方法において、
前記ＩＣタグのデータ記憶部は、予め複数の種類のデータが格納された基本領域と追記領域とを有しており、
ミドルウェア装置により、ＩＣタグへ書き込むデータと前記ＩＣタグのデータ記憶部に格納されたデータとを比較し、変更が生じたデータを抽出するステップと、
リーダライタ装置により、前記抽出された変更が生じたデータを、当該データの種類に応じた識別符号と共に前記追記領域に格納するステップと、
を有することを特徴とするデータ書き込み方法。
【請求項５】
請求項４に記載のデータ書き込み方法において、
前記リーダライタ装置により前記追記領域に格納するステップは、前記追記領域に格納する複数のデータを書き込む場合、当該複数のデータを連続した位置に格納されるように書き込むことを特徴とするデータ書き込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ＩＣタグに対するデータの書込処理に関する。
【背景技術】
【０００２】
近年，物流分野をはじめとする種々の業界において，ＩＣタグを利用した効率的な業務処理システムや物品管理システムの導入が検討されている。ＩＣタグは，データが書き込まれたＩＣチップとアンテナで構成されており，ＵＨＦ帯などの電波を利用して，接触することなくデータの送受信が可能である。バーコードよりも多くの情報を表現することが可能であり，かつ離れた位置から情報を読み取ることが可能であるため，物流業界などでは，従来のバーコードに代わる管理手段として検討が進められている。また，ＩＣカードに比べて低価格での生産が可能であるため，電車の乗車券や娯楽施設の入場券など，使い捨て可能なチケットへの利用可能性も検討されている。
【０００３】
こうした業務での利用においては，改札機などの業務アプリケーションが，ＩＣタグから読み込んだデータの一部を変更し，変更後のデータをＩＣタグへ書き込む処理が多く発生すると想定される。例えば，ＩＣタグを電車の乗車券に利用する場合，乗客の入場時には，自動改札機がＩＣタグ内のデータを読み込み，乗車券の有効性を確認した後に，入場駅の情報等を格納したデータでタグ内のメモリを更新する。また，乗客の出場時には，自動改札機がＩＣタグ内のデータを読み込み，乗客が有効な入場駅，入場時刻から入場済みであることを確認した後，出場情報を書き込んだデータでタグ内のメモリを更新する。
【０００４】
ところで，ＩＣタグへデータを書き込む場合には，ＩＣタグに対してデータの書き込みを要求する特定のコマンドを送信する必要がある。ＩＣタグの仕様を定めるＩＳＯ１８０００−６  Ｔｙｐｅ  Ｃでは，データの書込を指示する手段として，２バイトのデータを指定のアドレスへ書き込むためのＷｒｉｔｅコマンドと，連続したデータを指定のアドレスへ書き込むためのＢｌｏｃｋＷｒｉｔｅコマンドの２つが規定されているが，当該コマンドの使用には，以下に述べる制限が加えられている。Ｗｒｉｔｅコマンドを用いてデータを書き込む場合には，一度のコマンド／レスポンスで２バイトしか書き込むことができない。また，ＢｌｏｃｋＷｒｉｔｅコマンドは２バイト以上のデータを書き込むことが可能だが，一度のコマンド／レスポンスでは，メモリ上で連続したデータしか書き込むことができない。したがって，メモリ上で分散配置されたデータを書き込む場合，複数回のコマンド／レスポンスが発生し，処理の完遂までに長い時間を要することが懸念される。
【０００５】
また，ＩＣタグはそれ自体に駆動電源を持たず，リーダ／ライタによる電磁誘導によって電力を供給されて駆動する。そのため，ＩＣチップ内のメモリとしてはＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）等の不揮発性メモリが用いられる。この種の不揮発性メモリは，一般に消去処理や書込処理に時間がかかることが知られている。
【０００６】
上述した業務処理では，高速な処理が要求されることが多い。例えば，ＩＣタグを電車の乗車券として用いた場合，自動改札機で乗客を混雑させないために，数百ミリ秒での高速処理が要求される。また，ライン上を流れる物品に貼り付けられたタグへ，完了した処理の情報を追記していく場合にも，同様の高速性が要求される。したがって，ＩＣタグに対する書込処理の長さは，ＩＣタグを利用した業務処理や物品管理などに支障を及ぼす可能性がある。
【０００７】
ＩＣタグへの書込処理を高速化するために，業務アプリケーションが，書き換えが必要なデータに限って書込処理を要求することで，書込コマンド（Ｗｒｉｔｅ  コマンドやＢｌｏｃｋＷｒｉｔｅコマンドなど）の実行回数を減らし，処理完遂に要するコマンド／レスポンスの回数を削減する方法が知られている。
【０００８】
また，メモリへの書き込み時間を短縮するために，メモリの書込特性を利用する方法が知られている（例えば，特許文献１参照）。ＥＥＰＲＯＭなどの不揮発性メモリは，複数バイトからなるページ単位ならば，消去書き込み動作を一括して行うことが可能である，という特性をもつ。特許文献１では，メモリ上で分散配置されたデータに対して書込要求が発生した場合に，メモリ上のデータ配置を並び換えることで，可能な限りページ単位でデータを書き込み，処理の回数を削減する技術が提案されている。当該技術では，書込要求を受けたアドレス（論理アドレス）と，メモリ上の実際のアドレス（実アドレス）の対応表を管理することで，書込の度にデータの配置を変更することを可能としている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００６−１０７３７９
【発明の概要】
【発明が解決しようとする課題】
【００１０】
業務アプリケーションが，書き換えが必要なデータに限って書込処理を要求する場合には，書込データの位置や範囲を指定するために，ＩＣタグ内のメモリに，データがどのように配置されているかを把握している必要がある。このため，ＩＣタグの仕様が変更され，メモリのデータ配置が変更された場合に業務アプリケーションの改修を要し，システム全体の管理に係る負担が増大する可能性がある。
【００１１】
また，特許文献１に記載の技術では，ＩＣタグ毎に論理アドレスと実アドレスを対応付けるためのリンク・テーブルと呼ばれる対応表が無ければ，ＩＣタグ内のデータを正しく読み書きすることができない。リンク・テーブルの管理をタグ自体に行わせることは，ＩＣカードに比べて計算能力やメモリ容量に制限のあるＩＣタグの場合には困難である。一方，リンク・テーブルを業務アプリケーションで管理する場合，各タグのリンク・テーブルを，そのタグを処理する可能性のある全ての業務アプリケーションで共有しなければならない。また，ＩＣタグのメモリ内データ配置が変更される度に，共有されている当該タグのリンク・テー
ブル全てを更新する必要が発生する，という課題がある。
【課題を解決するための手段】
【００１２】
本発明は，上記の事情を鑑みてなされたものであり，ＩＣタグの仕様変更に伴う業務アプリケーションの改修頻度や，業務アプリケーション間で共有する情報の更新頻度を抑えながら，計算能力やメモリ容量に制限のあるＩＣタグに対して，データ書込処理を高速化するための装置，方法，プログラムを提供する。
【００１３】
具体的には，ＩＣタグに対するデータ書込コマンドを発行する前に，直前にＩＣタグから読み込んだデータと，これから書き込もうとするデータの差分を取り，書き換えの発生したデータに限定して書込要求コマンドを発行することで，書込要求コマンドの総実行回数を削減する。
【００１４】
そして，ＩＣタグ内の記憶領域を，各データの初期値を格納する基本領域と，新たに書き換えられたデータを格納する追記領域の２つに分割し，新たにデータを書き込む際には，書き込み対象のデータそれぞれに識別のための識別符号を付加した後，メモリ上で連続するように追記領域の末尾へ書込を行うことで，書込要求データを一回の連続領域書込コマンド（ＩＳＯ１８０００−６  Ｔｙｐｅ  ＣのＢｌｏｃｋＷｒｉｔｅ相当のコマンド）で実現。
【００１５】
ここで，ＩＣタグ内の追記領域に格納された実データと，業務データとの対応付けを管理するために，本発明では，ＩＣタグ内に格納する識別符号と，各ミドルウェア装置間で共有する対応管理テーブルと符号管理テーブルの組み合わせを利用する。
【発明の効果】
【００１６】
本発明によれば，ＩＣタグの仕様変更に伴う業務アプリケーションの改修頻度や，業務アプリケーション間で共有する情報の更新頻度を抑えることができ，データ書込処理を高速化できる。
【図面の簡単な説明】
【００１７】
【図１】ＲＦＩＤシステムの概略図。
【図２】ＲＦＩＤシステムを構成する装置群の概略図。
【図３】業務データ書込バッファの概略図。
【図４】対応管理テーブルの概略図。
【図５】符号管理テーブルの概略図。
【図６】装置のハードウェア構成図。
【図７】初期化処理のシーケンス図。
【図８】ミドルウェア装置が初期化処理を実行する際のフローチャート。
【図９】読込処理および更新処理のシーケンス図。
【図１０】ミドルウェア装置が読込処理を実行する際のフローチャート。
【図１１】ミドルウェア装置が読込処理を実行する際のフローチャート。
【図１２】ミドルウェア装置が書込処理を実行する際のフローチャート。
【図１３】ＩＣタグを乗車券として利用する場合のシステムの一例を示した図。
【図１４】対応管理テーブルおよび符号管理テーブルの一例を示した図。
【図１５】データ記憶部の一例を示した図。
【図１６】業務データ読込バッファ，業務データ書込バッファ，業務データ差分バッファの一例を示した図。
【図１７】データ記憶部の一例を示した図。
【図１８】データ記憶部の一例を示した図。
【図１９】データ記憶部の一例を示した図。
【発明を実施するための形態】
【００１８】
以下，図面を用いて本発明の実施の形態について説明する。なお，これにより本発明が限定されるものではない。
【実施例１】
【００１９】
図１は，本発明の一実施形態であるＲＦＩＤシステム１０の概略図である。
【００２０】
図示するように，ＲＦＩＤシステム１０は，業務アプリケーション装置１−１〜１−ｎ（ｎは１以上の自然数）と，ミドルウェア装置２−１〜２−ｎと，リーダ／ライタ装置３−１〜３−ｎと，ＩＣタグ４と，を備える。リーダライタ装置３−ｉ（ｉは１以上ｎ以下の自然数）とＩＣタグ４は，ＵＨＦ  帯などの無線を用いて相互に通信を行う。また，ミドルウェア装置２−ｉとリーダライタ装置３−ｉは，ＵＳＢやネットワークを介して相互に通信を行う。また，業務アプリケーション装置１−ｉとミドルウェア装置２−ｉは，ＵＳＢやネットワークを介して相互に通信を行って良い。また，ミドルウェア装置２−ｉがソフトウェアとして業務アプリケーション装置１−ｉの内部に含まれる場合には，装置内部の信号線を用いて相互に通信を行っても良い。
【００２１】
図２は，業務アプリケーション装置１と，ミドルウェア装置２と，リーダライタ装置３と，ＩＣタグ４と，の機能構成の例を示す概略図である。ここで，業務アプリケーション装置１と，ミドルウェア装置２と，リーダライタ装置３と，は，それぞれ業務アプリケーション装置１−１〜１−ｎと，ミドルウェア装置２−１〜２−ｎと，リーダライタ装置３−１〜３−ｎに共通する構造を記している。
【００２２】
図示するように，業務アプリケーション装置１は，業務処理部１０１と，ミドルウェア通信部１０２と，を備える。
【００２３】
業務処理部１０１は，業務アプリケーションの担当する業務を処理する。例えば，自動改札機では，ＩＣタグから読み取った乗車券データの検証や，改札時の時刻，設置される駅などの情報に基づいて，データの上書きを指示する，といった処理が考えられる。
【００２４】
ミドルウェア通信部１０２は，ミドルウェア装置２との間でのデータの送受信を制御する。例えば，ミドルウェア通信部１０２としては，ＴＣＰ／ＩＰ通信を可能とするプロトコルスタックや，プロセス間通信を可能とするモジュールなどが考えられる。
【００２５】
ミドルウェア装置２は，アプリケーション通信部２０１と，アプリケーションコマンド処理部２０２と，データ変換部２０３と，差分計算部２０４と，追記領域末尾ポインタ２０５と，業務データ差分バッファ２０６１と，業務データ書込バッファ２０６２と，業務データ読込バッファ２０６３と，基本領域書込バッファ２０６４と，基本領域読込バッファ２０６５と，追記領域書込バッファ２０６６と，追記領域読込バッファ２０６７と，対応管理テーブル２０７と，符号管理テーブル２０８と，ＩＣタグコマンド処理部２０９と，リーダライタ通信部２１０と，を備える。
【００２６】
アプリケーション通信部２０１は，業務アプリケーション装置１との間でのデータの送受信を制御する。例えば，アプリケーション通信部２０１としては，ＴＣＰ／ＩＰ通信を可能とするプロトコルスタックや，プロセス間通信を可能とするモジュールなどが考えられる。
【００２７】
アプリケーションコマンド処理部２０２は，業務アプリケーション装置１からアプリケーション通信部２０１を介して受信したアプリケーションコマンドのデコード処理や，業務アプリケーション装置１へ送信するアプリケーションレスポンスのエンコード処理を実行する。アプリケーションコマンドは，業務アプリケーション装置１がＩＣタグ４に対してデータの読み書き等を指示するために用いるコマンドで，アプリケーションレスポンスは，アプリケーションコマンドの実行結果や，ＩＣタグから読み取ったデータの内容を含み，業務アプリケーション装置１に対して送信されるメッセージである。
【００２８】
データ変換部２０３は，アプリケーションコマンド処理部２０２によってデコードされたアプリケーションコマンドの内容に応じて，各種のバッファ２０６１〜２０６７に対するデータの読み書きや，対応管理テーブル２０７および符号管理テーブル２０８からのデータ取得や，差分計算部２０４に対する差分計算の実行要求などを行った後，ＩＣタグコマンド処理部２０９に対してＩＣタグコマンドの実行を要求し，ＩＣタグ４に対するデータの読み書きを実行する。
【００２９】
また，データ変換部２０３は，ＩＣタグコマンド処理部２０９から，リーダライタ３経由でＩＣタグ４からの応答が受信されたことを通知されると，応答の内容に応じて各種のバッファ２０６１〜２０６７に対するデータの読み書きや，対応管理テーブル２０７および符号管理テーブル２０８からのデータ取得などを行った後，アプリケーション通信部２０１を介して，業務アプリケーション装置１に対してアプリケーションレスポンスを送信する。
【００３０】
差分計算部２０４は，業務データ書込バッファ２０６２に格納されたデータと，業務データ読込バッファ２０６３に格納されたデータと，の差分（異なっているデータの抽出）を計算し，結果を業務データ差分バッファ２０６１へ格納する。
【００３１】
追記領域末尾ポインタ２０５は，ＩＣタグ４内の追記領域４０３２の末尾のアドレスを含み，ＩＣタグ毎にその値を対応付けて格納する。
【００３２】
業務データ差分バッファ２０６１は，上述したように，差分計算部２０４によって計算された差分データを格納するための記憶領域である。バッファの構造は後述する業務データ書込バッファ２０６２と同様であるため，説明を省略する。
【００３３】
業務データ書込バッファ２０６２は，業務アプリケーション装置１から受信した書込アプリケーションコマンドに含まれる書込対象業務データを一時的に格納するための記憶領域である。業務データ書込バッファ２０６２の一例について，図３を用いて説明する。
【００３４】
図３は，業務データ書込バッファ２０６２の一例を示した図である。図３に示すように，業務データ書込バッファ２０６２はテーブル型のデータ構造を取る。各レコード（行）には，「データ名」フィールド２０６２−１と，「データ」フィールド２０６２−２が定義されている。「データ名」フィールド２０６２−１には，業務アプリケーション装置１から受信した書込対象業務データの名前を含み，「データ」フィールド２０６２−２には，当該業務データの内容が格納される。なお，以後，業務データ書込バッファ２０６２内で「データ名」フィールド２０６２−１に値Ｘを持つ行を，業務データ書込バッファ２０６２のＸ行，と呼ぶこととする。
【００３５】
業務データ読込バッファ２０６３は，読込アプリケーションコマンドを実行した後，業務アプリケーション装置１へレスポンスとして返却する業務データを，一時的に格納するための記憶領域である。業務データ読込バッファ２０６３のデータ構造は，業務データ書込バッファ２０６２と同様のため，説明を省略する。
【００３６】
基本領域書込バッファ２０６４は，ＩＣタグ４のデータ記憶部４０３内の基本領域４０３１へ書き込む予定のデータを一時的に格納するための記憶領域である。
【００３７】
基本領域読込バッファ２０６５は，ＩＣタグ４のデータ記憶部４０３内の基本領域４０３１から読み込んだデータを一時的に格納するための記憶領域である。
【００３８】
追記領域書込バッファ２０６６は，ＩＣタグ４のデータ記憶部４０３内の追記領域４０３２へ書き込む予定のデータを一時的に格納するための記憶領域である。
【００３９】
追記領域読込バッファ２０６７は，ＩＣタグ４のデータ記憶部４０３内の追記領域４０３２から読み込んだデータを一時的に格納するための記憶領域である。
【００４０】
各バッファ２０６１〜２０６７に格納されるデータの値は，後述する処理フローを実施する中で，ミドルウェア装置２−１〜２−ｎそれぞれによって異なるも
のとなる。
【００４１】
対応管理テーブル２０７は，業務アプリケーション装置１が扱う業務データと，その業務データが基本領域４０３１上のどの位置に記載されるかを示すオフセットと，その業務データのサイズ，の３つの値を対応付けるテーブルである。対応管理テーブル２０７に含まれる値は，ミドルウェア装置２−１〜２−ｎ間で同じものを，ＲＦＩＤシステム１０の運用開始前に共有しておく。対応管理テーブル２０７の一例について，図４を用いて説明する。
【００４２】
図４は，対応管理テーブル２０７の一例を示した図である。対応管理テーブル２０７は，各レコード（行）に対して，「データ名」フィールド２０７−１と，「オフセット」フィールド２０７−２と，「データ長」フィールド２０７−３と，が定義されている。「データ名」フィールド２０７−１には，業務アプリケーション装置１が扱う業務データの名前が格納され，同じレコード（行）内の「オフセット」フィールド２０７−２には，当該業務データが基本領域４０３１内のどの位置に格納されるかを示す物理アドレス値が格納される。また，同じレコード内の「データ長」フィールド２０８−３には，当該業務データがデータ記憶部４０３内で占めるデータサイズが格納される。
【００４３】
符号管理テーブル２０８は，業務アプリケーション装置１が扱う業務データと，その業務データのデータ長と，追記領域４０３２へ当該業務データを書き込む際に利用する識別符号と，の組を対応付けるテーブルである。符号管理テーブル２０８に含まれる値は，ミドルウェア装置２−１〜２−ｎ間で同じものを，ＲＦＩＤシステム１０の運用開始前に共有しておく。符号管理テーブル２０８の一例について，図５を用いて説明する。
【００４４】
図５は，符号管理テーブル２０８の一例を示した図である。符号管理テーブル２０８は，各レコード（行）に対して，「データ名」フィールド２０８−１と「識別符号」フィールド２０８−２と，が定義されている。「データ名」フィールド２０８−１には，業務アプリケーション装置１が扱う業務データの名前が格納され，同じレコード（行）内の「識別符号」フィールド２０８−２には，当該業務データがＩＣタグ４の追記領域４０３２内に書き込まれる際，当該業務データとともに書き込まれる識別のための符号が格納される。「データ名」ＮＵＬＬに対応する「識別符号」ｃ０は，追記領域内でのデータの終端を示すために使用する特別な識別符号である。
【００４５】
本実施例では，識別符号として用いる符号の種類について制限を加えない。固定長の符号と可変長の符号のどちらを用いてもよいが，個々のデータの書き換え頻度がある程度正確に予測できている場合には，書き換え頻度に基づいたハフマン符号などの可変長符号を利用することで，符号がデータ記憶部４０３内に占める割合を減らすことができ，有効となる可能性がある。
【００４６】
ＩＣタグコマンド処理部２０９は，データ変換部２０３から要求を受けたＩＣタグコマンドを実行するために，リーダライタ通信部２１０を介してリーダライタ装置３へＩＣタグコマンドを送信する。また，リーダライタ通信部２１０を介して受信したＩＣタグレスポンスを，データ変換部２０３へ通知する。ＩＣタグコマンドは，リーダライタ装置３がＩＣタグ４に対してデータの読み書き等を指示するために用いるコマンドで，ＩＣタグレスポンスは，ＩＣタグコマンドの実行結果や，ＩＣタグから読み取ったデータの内容を含むメッセージである。
【００４７】
リーダライタ通信部２１０は，リーダライタ装置３との間でのデータの送受信を制御する。例えば，ＵＳＢデバイスを制御するデバイスドライバや，ＴＣＰ／ＩＰ通信を可能とするプロトコルスタックなどが考えられる。
【００４８】
リーダライタ装置３は，ミドルウェア通信部３０１と，ＩＣタグ通信部３０２と，を備える。
【００４９】
ミドルウェア通信部３０１は，ミドルウェア装置２との間でのデータの送受信を制御する。例えば，ＵＳＢデバイスを制御するデバイスドライバや，ＴＣＰ／ＩＰ通信を可能とするプロトコルスタックなどが考えられる。
【００５０】
ＩＣタグ通信部３０２は，ＩＣタグ４との間でのデータの送受信を制御する。例えば，通信に使う周波数の変更や，アンテナの出力制御や，変調によるＩＣタグコマンドの送信制御や，ＩＣタグレスポンスの受信制御などを行う。
【００５１】
ＩＣタグ４は，リーダライタ通信部４０１と，コマンド処理部４０２と，データ記憶部４０３と，を備える。
【００５２】
リーダライタ通信部４０１は，リーダライタ装置３との間でのデータの送受信を制御する。例えば，通信に使う周波数の変更や，アンテナの出力制御や，変調によるＩＣタグレスポンスの送信制御や，ＩＣタグコマンドの受信制御などを行う。
【００５３】
コマンド処理部４０２は，リーダライタ装置３からリーダライタ通信部４０１を介して受信したＩＣタグコマンドのデコード処理や，リーダライタ装置３へ送信するＩＣタグレスポンスのエンコード処理を実行する。
【００５４】
データ記憶部４０３は，ＩＣタグ４固有のデータを格納し，コマンド処理部４０２によってデコードされたコマンドの内容によって，データの書込と，消去と，読込と，等を制御する。データ記憶部４０３は，基本領域４０３１と追記領域４０３２とで構成される。
【００５５】
ここで，ミドルウェア装置２のＩＣタグコマンド処理部２０９は，データ記憶部４０３に対して読み書きされるデータが，基本領域４０３１と追記領域４０３２のどちらに属するデータであるかを判別可能であるとする。このことは例えば，基本領域４０３１と追記領域４０３２のそれぞれがデータ記憶部４０３中に占める割合や，そのメモリ上の位置に関する情報を，各ミドルウェア装置２間で事前共有することで実現できる。
【００５６】
基本領域４０３１は，ＩＣタグ４の初期化時にデータを書き込まれる領域である。
【００５７】
また，追記領域４０３２は，ＩＣタグ４の初期化後，データの書き換えが発生した際に，データを書き込まれる領域である。基本領域４０３１と追記領域４０３２とは，データ記憶部内で異なるメモリを用いて実現されていても良いし，連続した領域を仮想的に切り離したものでも良い。
【００５８】
以上に記載した業務アプリケーション装置１と，ミドルウェア装置２と，リーダライタ装置３とは，例えば，図６（コンピュータ９の概略図）に示すような，ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９０１と，メモリ９０２と，ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）等の外部記憶装置９０３と，ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＤＶＤ−ＲＯＭ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などの可搬性を有する記憶媒体９０４から情報を読み出す読取装置９０５と，キーボードやマウス等の入力装置９０６と，ディスプレイなどの出力装置９０７と，通信ネットワークに接続するためのＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）などの送受信装置９０８と，を備えた一般的なコンピュータ９で実現できる。例えば，各種バッファ２０６１〜２０６７やデータ記憶部４０３は，ＣＰＵ９０１がメモリ９０２又は外部記憶装置９０３を利用することにより実現可能である。また，業務処理部１０１やデータ変換部２０３等，特定の処理や制御を行う機能については，外部記憶装置９０３に記憶されている所定のプログラムをメモリ９０２にロードしてＣＰＵ９０１で実行することで実現可能である。また，リーダライタ通信部２１０等，通信制御を行う機能については，ＣＰＵ９０１が送受信装置９０８を利用することで実現可能である。この所定のプログラムは，読取装置９０５を介して記憶媒体９０４から，あるいは，送受信装置９０８を介してネットワークから，外部記憶装置９０３にダウンロードされ，それから，メモリ９０２上にロードされてＣＰＵ９０１により実行されるようにしてもよい。また，読取装置９０５を介して記憶媒体９０４から，あるいは，送受信装置９０８を介してネットワークから，メモリ９０２上に直接ロードされ，ＣＰＵ９０１により実行されるようにしてもよい。
【００５９】
次に，図７から図１２を用いて，業務アプリケーション装置１−１により初期化されたＩＣタグ４が，別の業務アプリケーション装置１−２によってデータを読み書きされる場合のシーケンスについて説明する。
【００６０】
図７は，業務アプリケーション装置１−１がＩＣタグ４の初期化を行う場合のシーケンスを記載した図である。
【００６１】
ＩＣタグを乗車券として利用する場合，当該シーケンスは，発券機（業務アプリケーション装置）による発券シーケンスに対応する。すなわち，データが書き込まれていない，発券前の乗車券ＩＣタグに対して，その発券機が設置された駅の情報や，発券時刻や，当該乗車券の有効範囲，有効期限などを，ＩＣタグ内のデータ記憶領域に書き込むシーケンスに対応する。
【００６２】
業務アプリケーション装置１−１は，ユーザから入出力装置を介して初期化要求操作を受け付けると，ミドルウェア通信部１０２が，ミドルウェア装置２−１に対して初期化要求アプリケーションコマンドを送信する（Ｓ１０１）。当該コマンドには，パラメータとして，当該業務アプリケーション装置１−１に関連する設定情報が含まれる。乗車券の発券業務の場合，当該パラメータには，業務アプリケーション装置が設置された駅の情報や，発券時刻や，当該乗車券の有効範囲，有効期限などが含まれる。
【００６３】
ミドルウェア装置２−１は，装置内のアプリケーション通信部２０１が，業務アプリケーション装置１−１から送信された初期化要求アプリケーションコマンドを受信すると，受け取ったパラメータ内の業務データを，ＩＣタグへ書き込むための処理を実行する（初期化前処理，Ｓ１０２）。
【００６４】
以下，当該処理Ｓ１０２の詳細について，図８を用いて説明する。
【００６５】
図８は，ミドルウェア装置２による初期化処理の詳細を表したフローチャートである。
【００６６】
ミドルウェア装置２−１内では，アプリケーション通信部２０１が，業務アプリケーション装置１−１から送信された初期化要求アプリケーションコマンドを受信すると（Ｓ１０２−１），  アプリケーションコマンド処理部２０２が，当該コマンドをデコードし，当該コマンドに含まれるパラメータ（業務データ）を取得しデータ変換部２０３へ受け渡す（Ｓ１０２−２）。
【００６７】
データ変換部２０３は，まず，業務データ書込バッファ２０６２と，基本領域書込バッファ２０６４と，を空にする（Ｓ１０２−３）。
【００６８】
次に，データ変換部２０３は，取得した業務データを，業務データ書込バッファ２０６２へ格納する（Ｓ１０２−４）。
【００６９】
続いて，データ変換部２０３は，ＣＰＵ９０１内のレジスタまたはメモリ９０２または外部記憶装置９０３上に，４つの変数Ｍ，ＮＡＭＥ，ＯＦＦＳＥＴ，ＤＡＴＡ用の領域を確保し，それぞれ値０で初期化する（Ｓ１０２−５）。
【００７０】
次に，データ変換部２０３は，対応管理テーブル２０７を参照し，当該テーブルのＭ行目に値が存在するか否かを判定する（Ｓ１０２−６）。
【００７１】
当該判定の結果，当該テーブルのＭ行目に値が存在する場合（Ｓ１０２−６でＹＥＳ），データ変換部２０３は，対応管理テーブル２０７のＭ行目から，「データ名」フィールド２０７−１と「オフセット」フィールド２０７−２の値を取得し，それぞれの値で変数ＮＡＭＥと変数ＯＦＦＳＥＴの値を上書きする（Ｓ１０２−７）。
【００７２】
例として，対応管理テーブル２０７が，図４のような値が書き込まれた状態であった場合を考える。このとき，Ｍの値が２であったとすると，当該テーブルの２行目にはデータが格納されているため，変数ＮＡＭＥにはデータ名「ｄ２」が代入され，変数ＯＦＦＳＥＴにはオフセット値「（ｋ，１０）」が代入される。
【００７３】
続いて，データ変換部２０３は，業務データ書込バッファ２０６２のＮＡＭＥ行から，「データ」フィールド２０６２−２の値を取得し，当該データの値で変数ＤＡＴＡを上書きする（Ｓ１０２−８）。
【００７４】
次に，データ変換部２０３は，基本領域書込バッファ２０６４内の，変数ＯＦＦＳＥＴで指定される番地へ，変数ＤＡＴＡ内のデータを格納する（Ｓ１０２−９）。
【００７５】
続いて，データ変換部２０３は，変数Ｍの値をインクリメントし（Ｓ１０２−１０），対応管理テーブル２０７のＭ行目に値が存在するか否かを判定する処理（Ｓ１０２−６）へ処理を戻す。
【００７６】
処理Ｓ１０２−６にて，対応管理テーブル２０７のＭ行目に値が存在しない，すなわち，対応管理テーブル２０７内の全ての行に対する走査が完了すると，データ変換部２０３は，基本領域書込バッファ２０６４内のデータをＩＣタグ４の基本領域４０３１へ書き込むよう，リーダライタ装置３−１に対してデータ書込要求メッセージを送信し（Ｓ１０２−１１），リーダライタ装置３−１からの返信を待ち受ける状態へ遷移する（Ｓ１０２−１２）。当該データ書込要求メッセージはパラメータを含み，当該パラメータによって書込位置と書き込むデータの内容を指示するものとする。ここでは書込位置として基本領域４０３１の先頭を指定し，書き込むデータの内容として基本領域書込バッファ２０６４内のデータを指定する。
【００７７】
以上が，ミドルウェア装置２−１による，初期化前処理Ｓ１０２の詳細である。
【００７８】
図７に戻り，上述の初期化前処理Ｓ１０２の結果，ミドルウェア装置２−１がリーダライタ装置３−１へデータ書込要求メッセージを送信すると（Ｓ１０３），リーダライタ装置３−１は当該書込要求に従ってＩＣタグ４内の基本領域４０３１先頭へ指定されたデータの書込を実行する（Ｓ１０４）。
【００７９】
ＩＣタグ４内への書込が成功すると（Ｓ１０５），リーダライタ装置３−１はミドルウェア装置２−１に対して基本領域４０３１への書込に成功した旨を通知する（Ｓ１０６）。
【００８０】
ミドルウェア装置２−１は，リーダライタ装置３−１から，基本領域４０３１への書込に成功した旨を通知されると，追記領域４０３２を初期化するための
処理に移る（初期化中処理，Ｓ１０７）。
【００８１】
以下，当該処理Ｓ１０７の詳細について，再び図８を用いて説明する。
【００８２】
ミドルウェア装置２−１内では，リーダライタ通信部２１０がリーダライタ装置３−１からメッセージを受信すると，ＩＣタグコマンド処理部２０９が，当該メッセージをデコードし，当該メッセージが，基本領域４０３１への書込に成功したことを意味するメッセージであると解釈する（Ｓ１０２−１２でＹＥＳ）。
【００８３】
すると，ミドルウェア装置２−１内のデータ変換部２０３は，追記領域の末尾を示す識別符号ｃ０をＩＣタグ４の追記領域４０３２へ書き込むよう，リーダライタ装置３−１に対してデータ書込要求メッセージを送信し（Ｓ１０７−１），リーダライタ装置３−１からの返信を待ち受ける状態へ遷移する（Ｓ１０７−２）。当該データ書込要求メッセージはパラメータを含み，当該パラメータによって書込位置と書き込むデータの内容を指示するものとする。ここでは書込位置として追記領域４０３２の先頭を指定し，書き込むデータの内容として識別符号ｃ０を指定する。
【００８４】
以上が，ミドルウェア装置２−１による，初期化中処理Ｓ１０７の詳細である。
【００８５】
図７に戻り，上述の初期化中処理Ｓ１０７の結果，ミドルウェア装置２−１がリーダライタ装置３−１へデータ書込要求メッセージを送信すると（Ｓ１０８），リーダライタ装置３−１は当該書込要求に従ってＩＣタグ４内の追記領域４０３２先頭へ指定されたデータの書込を実行する（Ｓ１０９）。
【００８６】
ＩＣタグ４内への書込が成功すると（Ｓ１１０），リーダライタ装置３−１はミドルウェア装置２−１に対して追記領域４０３２への書込に成功した旨を通知する（Ｓ１１１）。
【００８７】
ミドルウェア装置２−１は，リーダライタ装置３−１から，追記領域４０３２への書込に成功した旨を通知されると，初期化処理が成功したことを業務アプリケーション装置１−１へ通知するための処理に移る（初期化後処理，Ｓ１１２）。
【００８８】
以下，当該処理Ｓ１１２の詳細について，再び図８を用いて説明する。
【００８９】
ミドルウェア装置２−１内では，リーダライタ通信部２１０がリーダライタ装置３−１からメッセージを受信すると，ＩＣタグコマンド処理部２０９が，当該メッセージをデコードし，当該メッセージが，追記領域４０３２への書込に成功したことを意味するメッセージであると解釈する（Ｓ１０７−２でＹＥＳ）。
【００９０】
すると，ミドルウェア装置２−１内のアプリケーションコマンド処理部２０２が，初期化要求アプリケーションコマンドの実行が成功したことを示す初期化要求アプリケーション成功応答を生成し，アプリケーション通信部２０１を介して，業務アプリケーション装置１−１へ送信する（Ｓ１１２−１）。
【００９１】
以上が，ミドルウェア装置２−１による，初期化後処理Ｓ１１２の詳細である。
【００９２】
図７に戻り，上述の初期化後処理Ｓ１１２の結果，ミドルウェア装置２−１が業務アプリケーション装置１−１へ初期化要求アプリケーション成功応答を送信し（Ｓ１１３），ＩＣタグ４に対する初期化処理は正常に完了する。
【００９３】
一方，図８において，Ｓ１０２−１２またはＳ１０７−２で，ミドルウェア装置２−１が，リーダライタ装置３−１から何らかのエラーメッセージを受信した場合には（Ｓ１０２−１２またはＳ１０７−２でＮＯ），ミドルウェア装置２−１内のアプリケーションコマンド処理部２０２が，初期化要求アプリケーションコマンドの実行に失敗したことを示す初期化要求アプリケーション失敗応答を生成し，アプリケーション通信部２０１を介して，業務アプリケーション装置１−１へ送信する（Ｓ１０７−３）。
【００９４】
図９は，業務アプリケーション装置１−２がＩＣタグ４からデータを読み込み，業務処理を行った後，データの更新を行う場合のシーケンスを記載した図である。
【００９５】
ＩＣタグを乗車券として利用する場合，当該シーケンスは，自動改札機（業務アプリケーション装置）による入出場シーケンスに対応する。すなわち，乗車券データが書き込まれた，入場前もしくは出場前の乗車券ＩＣタグに対して，その乗車券が発券された駅の情報や，発券時刻や，当該乗車券の有効範囲，有効期限などを，ＩＣタグ内のデータ記憶領域から読み込み，有効な乗車券であることを確認した後，入場済もしくは出場済であることを示すデータでタグ内のデータを更新するシーケンスに対応する。
【００９６】
業務アプリケーション装置１−２は，ユーザから入出力装置を介して初期化要求操作を受け付けると，ミドルウェア通信部１０２が，ミドルウェア装置２−２に対して読込要求アプリケーションコマンドを送信する（Ｓ２０１）。
【００９７】
ミドルウェア装置２−１は，装置内のアプリケーション通信部２０１が，業務アプリケーション装置１−１から送信された読込要求アプリケーションコマンドを受信すると，受け取ったパラメータ内の業務データを，ＩＣタグへ書き込むための処理を実行する（読込前処理，Ｓ２０２）。
【００９８】
以下，当該処理Ｓ２０２の詳細について，図１０を用いて説明する。
【００９９】
図１０は，ミドルウェア装置２による読込処理の前半部を表したフローチャートである。
【０１００】
ミドルウェア装置２−２内では，アプリケーション通信部２０１が，業務アプリケーション装置１−２から送信された読込要求アプリケーションコマンドを受信すると，アプリケーションコマンド処理部２０２が当該コマンドをデコードし，データ変換部２０３へ受け渡す（Ｓ２０２−１）。
【０１０１】
データ変換部２０３は，まず，業務データ読込バッファ２０６３と，基本領域読込バッファ２０６５と，追記領域読込バッファ２０６７を空にする（Ｓ２０２−３）。
【０１０２】
次に，データ変換部２０３は，ＩＣタグ４の基本領域４０３１および追記領域４０３２に格納されたデータを読み込むよう，リーダライタ装置３−２に対してデータ読込要求メッセージを送信し（Ｓ２０２−３），リーダライタ装置３−２からの返信を待ち受ける状態へ遷移する（Ｓ２０２−４）。
【０１０３】
以上が，ミドルウェア装置２−２による，読込前処理Ｓ２０２の詳細である。
【０１０４】
図９に戻り，上述の読込前処理Ｓ２０２の結果，ミドルウェア装置２−２がリーダライタ装置３−２へデータ読込要求メッセージを送信すると（Ｓ２０３），リーダライタ装置３−２は当該読込要求に従ってＩＣタグ４内の基本領域４０３１および追記領域４０３２に格納されたデータの読込を実行する（Ｓ２０４）。
【０１０５】
ＩＣタグ４からの読込が成功すると（Ｓ２０５），リーダライタ装置３−２はミドルウェア装置２−２に対して基本領域４０３１および追記領域４０３２から読み込んだデータを送信する（Ｓ２０６）。
【０１０６】
ミドルウェア装置２−２は，リーダライタ装置３−２から，基本領域４０３１および追記領域４０３２から読み込んだデータを受信すると，読込データを業務アプリケーション装置１−２へ提供するための処理に移る（読込後処理，Ｓ２０７）。
【０１０７】
以下，当該処理Ｓ２０７の詳細について，再び図１０を用いて説明する。
【０１０８】
ミドルウェア装置２−２内では，リーダライタ通信部２１０がリーダライタ装置３−２からメッセージを受信すると，ＩＣタグコマンド処理部２０９が，当該メッセージをデコードし，当該メッセージに含まれるパラメータ（基本領域４０３１および追記領域４０３２から読み込んだデータ）を取得する。
【０１０９】
ここで，正常にデータが取得できなかった場合，もしくは一定時間，一定回数のリトライを経てもリーダライタ装置３−２から応答が無かった場合は（Ｓ２０２−４でＮＯ），ミドルウェア装置２−２内のアプリケーションコマンド処理部２０２が，読込要求アプリケーションコマンドの実行に失敗したことを示す読込要求アプリケーション失敗応答を生成し，アプリケーション通信部２０１を介して，業務アプリケーション装置１−２へ送信する（Ｓ２０２−５）。
【０１１０】
一方，正常にデータが取得できた場合（Ｓ２０２−４でＹＥＳ），ＩＣタグコマンド処理部２０９は，当該データをデータ変換部２０３へ受け渡す。データ変換部２０３は，受け取ったデータの内，基本領域４０３１から読み込まれたデータを基本領域読込バッファ２０６５へ格納し（Ｓ２０７−１），追記領域４０３２から読み込まれたデータを追記領域読込バッファ２０６７へ格納する（Ｓ２０７−２）。
【０１１１】
まず，データ変換部２０３は，基本領域読込バッファ２０６５内のデータ変換処理を開始する。データ変換部２０３は，ＣＰＵ９０１内のレジスタまたはメモリ９０２または外部記憶装置９０３上に，５つの変数Ｍ，ＮＡＭＥ，ＯＦＦＳＥＴ，ＬＥＮ，ＤＡＴＡ用の領域を確保し，それぞれ値０で初期化する（Ｓ２０７−３）。
【０１１２】
次に，データ変換部２０３は，対応管理テーブル２０７を参照し，当該テーブルのＭ行目に値が存在するか否かを判定する（Ｓ２０７−４）。
【０１１３】
当該判定の結果，当該テーブルのＭ行目に値が存在する場合，データ変換部２０３は，対応管理テーブル２０７のＭ行目から，「データ名」フィールド２０７−１と，「オフセット」フィールド２０７−２と，「データ長」フィールド２０７−３と，の値を取得し，それぞれの値で変数ＮＡＭＥと変数ＯＦＦＳＥＴと変数ＬＥＮの値を上書きする（Ｓ２０７−５）。
【０１１４】
例として，対応管理テーブル２０７が，図４のような値が書き込まれた状態であった場合を考える。このとき，Ｍの値が２であったとすると，当該テーブルの２行目にはデータが格納されているため，変数ＮＡＭＥにはデータ名「ｄ２」が代入され，変数ＯＦＦＳＥＴにはオフセット値「（ｋ，１０）」が代入され，変数ＬＥＮにはデータ長「６」が代入される。
【０１１５】
続いて，データ変換部２０３は，基本領域読込バッファ２０６５から，ＯＦＦＳＥＴ番地を始点として長さＬＥＮの領域に格納されたデータを取得し，変数ＤＡＴＡへ代入する（Ｓ２０７−６）。
【０１１６】
次に，データ変換部２０３は，業務データ読込バッファ２０６３のＮＡＭＥ行へ，変数ＤＡＴＡ内のデータを格納する（Ｓ２０７−７）。
【０１１７】
続いて，データ変換部２０３は，変数Ｍの値をインクリメントし（Ｓ２０７−８），対応管理テーブル２０７のＭ行目に値が存在するか否かを判定する処理（Ｓ２０７−４）へ戻る。
【０１１８】
処理Ｓ２０７−４にて，対応管理テーブル２０７のＭ行目に値が存在しない，すなわち，対応管理テーブル２０７内の全ての行に対する走査が完了すると，データ変換部２０３は，追記領域読込バッファ２０６７内のデータ変換処理に移る（Ｓ２０７−９）。以下，当該処理の詳細について，図１１を用いて説明する。
【０１１９】
図１１は，ミドルウェア装置２による読込処理の後半部を表したフローチャートである。
【０１２０】
ミドルウェア装置２−２内のデータ変換部２０３は，まず，変数Ｍの値を０にリセットするとともに，ＣＰＵ９０１内のレジスタまたはメモリ９０２または外部記憶装置９０３上に，変数ＣＯＤＥ用の領域を確保し，値０で初期化する（Ｓ２０７−１０）。
【０１２１】
次に，データ変換部２０３は，変数Ｍの値が，追記領域４０３２の最大サイズを示すＭＡＸ＿ＡＰＰＥＮＤを超えているか否かを確認する（Ｓ２０７−１１）。Ｍの値がＭＡＸ＿ＡＰＰＥＮＤを超えている場合（Ｓ２０７−１１でＹＥＳ），ＭにＭＡＸ＿ＡＰＰＥＮＤと同じ値を代入し（Ｓ２０７−２０），読込終了処理（Ｓ２０７−２１，Ｓ２０７−２２）に移る。当該処理（Ｓ２０７−２１，Ｓ２０７−２２）については後述する。
【０１２２】
一方，Ｍの値がＭＡＸ＿ＡＰＰＥＮＤ以下であった場合（Ｓ２０７−１１でＮＯ），データ変換部２０３は，追記領域読込バッファ２０６７のＭ番地からデータ（識別符号）を取得し，変数ＣＯＤＥへ代入する（Ｓ２０７−１２）。ここで，取得するＣＯＤＥのデータ長は識別符号として使用する符号の種類に依存する。例えば，識別符号として固定長の符号を用いる場合は，常にその符号長のデータを取得しても良いし，可変長の符号を用いる場合には，符号が決定されるまでデータを読み込むこととしても良い。
【０１２３】
続いて，データ変換部２０３は，変数ＣＯＤＥの値が，追記領域の終端を示す識別符号ｃ０と一致するか否かを確認する（Ｓ２０７−１３）。ＣＯＤＥの値がｃ０と一致する場合（Ｓ２０７−１３でＹＥＳ），読込終了処理（Ｓ２０７−２０，Ｓ２０７−２１）に移る。当該処理（Ｓ２０７−２０，Ｓ２０７−２１）については後述する。
【０１２４】
一方，ＣＯＤＥの値がｃ０以外であった場合（Ｓ２０７−１３でＮＯ）には，まず，変数Ｍの値をＣＯＤＥの長さ分増加させる（Ｓ２０７−１４）。続いて，データ変換部２０３が，符号管理テーブル２０８内で「識別符号」フィールド２０８−２が変数ＣＯＤＥと同じ値を持つ行を選択し，当該行の「データ名」フィールド２０８−１の値を変数ＮＡＭＥへ代入する（Ｓ２０７−１５）。
【０１２５】
次に，データ変換部２０３は，対応管理テーブル２０７内で「データ名」フィールド２０７−１が変数ＮＡＭＥと同じ値を持つ行を選択し，当該行の「オフセット」フィールド２０７−２と，「データ長」フィールド２０７−３の値をそれぞれ変数ＯＦＦＳＥＴとＬＥＮへ代入する（Ｓ２０７−１６）。
【０１２６】
続いて，データ変換部２０３は，追記領域読込バッファ２０６７内の，Ｍ番地から長さＬＥＮの範囲でデータを取得し，変数ＤＡＴＡへ代入する（Ｓ２０７−１７）。
【０１２７】
次に，データ変換部２０３は，業務データ読込バッファ２０６３のＮＡＭＥ行へ，変数ＤＡＴＡの値を格納する（Ｓ２０７−１８）。このとき，当該業務データ読込バッファ２０６３の当該位置（ＮＡＭＥ行）へ既にデータが書き込まれている場合には，既存データを上書きすることで新データを格納することとする。
【０１２８】
続いて，データ変換部２０３は，変数Ｍの値を，ＭにＬＥＮの値を加えた値へ更新し（Ｓ２０７−１９），Ｍの値がＭＡＸ＿ＡＰＰＥＮＤを超えているか否かを判定する処理（Ｓ２０７−１１）へ戻る。
【０１２９】
上述した通り，処理Ｓ２０７−１１またはＳ２０７−１３でそれぞれ条件が満たされた場合（Ｓ２０７−１１またはＳ２０７−１３でＹＥＳ），読込終了処理（Ｓ２０７−２１，Ｓ２０７−２２）に移る。
【０１３０】
まず，データ変換部２０３は，変数Ｍの値を追記領域末尾ポインタ２０５へ格納する（Ｓ２０７−２１）。追記領域末尾ポインタ２０５への格納は，タグを一意に識別するための識別子（タグＩＤ）との組として実行する。
【０１３１】
次に，ミドルウェア装置２−２内のアプリケーションコマンド処理部２０２が，読込要求アプリケーションコマンドに対する応答として，業務データ読込バッファ２０６３内のデータをパラメータとして含む読込要求アプリケーション成功応答を生成し，アプリケーション通信部２０１を介して，業務アプリケーション装置１−２へ送信する（Ｓ２０７−２２）。
【０１３２】
以上が，ミドルウェア装置２−２による，読込後処理Ｓ２０７の詳細である。
【０１３３】
追記領域読込バッファ２０６７に格納されるデータは、データ名（ＮＡＭＥ）が同じ場合、基本領域読込バッファ２０６５に格納されるデータよりも新しいデータとなることを利用して、上に記述した読込後処理Ｓ２０７のフローの代わりに以下の順序で処理を実行することで、読込処理の高速化を実現することが可能である。まず、Ｓ２０７−１，Ｓ２０７−２の処理を実行する。続いて、追記領域読込バッファ２０６７から読み込んだデータを業務データ読込バッファ２０６３へ格納する処理（Ｓ２０７−１０からＳ２０７−２１までの一連の処理）を実行する。ここで、業務データ読込バッファ２０６３へ格納されたデータ名（ＮＡＭＥ）を「更新済データ種別」として記憶する。次に、基本領域読込バッファ２０６５から読み込んだデータを業務データ読込バッファ２０６３へ格納する処理（Ｓ２０７−３からＳ２０７−９までの一連の処理）を実行するが、ここで、処理Ｓ２０７−５と処理Ｓ２０７−６の間に、データ名（ＮＡＭＥ）が「更新済データ種別」に含まれるデータに関しては、基本領域読込バッファ２０６５からの読込処理（Ｓ２０７−６，Ｓ２０７−７）をスキップする。最後に、処理Ｓ２０７−２２を実行し、読込後処理Ｓ２０７を終了する。  図９に戻り，上述の読込後処理Ｓ２０７の結果，ミドルウェア装置２−２が業務アプリケーション装置１−２へ読込要求アプリケーション成功応答を送信する。当該成功応答には，ＩＣタグ４から読み取ったデータが，業務データ名とその値の組として含まれている（Ｓ２０８）。
【０１３４】
業務アプリケーション装置１−２は，ミドルウェア通信部１０２がミドルウェア装置２−２からデータを受信すると，業務処理部１０１が当該データを用いて業務処理を実行し，データの一部書き換え等の処理を行う（Ｓ２０９）。
【０１３５】
続いて，業務アプリケーション装置１−２は，業務処理部１０１がミドルウェア通信部１０２を介して，書き換えられたデータの更新要求メッセージを，ミドルウェア装置２−２へ送信する（Ｓ２１０）。当該メッセージには，書き換えられたデータに限らず，業務データ全体が含まれていても良い。
【０１３６】
ミドルウェア装置２−２は，装置内のアプリケーション通信部２０１が，業務アプリケーション装置１−２から送信された更新要求アプリケーションコマンドを受信すると，受け取ったパラメータ内の業務データを，ＩＣタグへ書き込むための処理を実行する（書込前処理，Ｓ２１１）。
【０１３７】
以下，当該処理Ｓ２１１の詳細について，図１２を用いて説明する。
【０１３８】
図１２は，ミドルウェア装置２による書込処理の詳細を表したフローチャートである。
【０１３９】
ミドルウェア装置２−２内では，アプリケーション通信部２０１が，業務アプリケーション装置１−２から送信された更新要求アプリケーションコマンドを受信すると（Ｓ２１１−１），アプリケーションコマンド処理部２０２が，当該コマンドをデコードし，当該コマンドに含まれるパラメータ（業務データ）を取得しデータ変換部２０３へ受け渡す（Ｓ２１１−２）。
【０１４０】
データ変換部２０３は，まず，業務データ書込バッファ２０６２と，業務データ差分バッファ２０６１と，追記領域書込バッファ２０６６と，を空にする（Ｓ２１１−３）。
【０１４１】
次に，データ変換部２０３は，取得した業務データを，業務データ書込バッファ２０６２へ格納する（Ｓ２１１−４）。
【０１４２】
続いて，差分計算部２０４が，業務データ書込バッファに格納された値と，業務データ読込バッファに格納された値と，を比較し，値が異っているデータだけを抽出し，業務データ差分バッファへ格納する（Ｓ２１１−５）。
【０１４３】
次に，データ変換部２０３は，ＣＰＵ９０１内のレジスタまたはメモリ９０２または外部記憶装置９０３上に，４つの変数Ｍ，ＮＡＭＥ，ＣＯＤＥ，ＤＡＴＡ用の領域を確保し，それぞれ値０で初期化する（Ｓ２１１−６）。
【０１４４】
続いて，データ変換部２０３は，業務データ差分バッファにデータが存在するか否かを判定する（Ｓ２１１−７）。
【０１４５】
当該判定の結果，当該バッファにデータが存在する場合（Ｓ２１１−７でＹＥＳ），データ変換部２０３は，業務データ差分バッファ２０６１から「データ名」フィールド２０６１−１と「データ」フィールド２０６１−２の値を取得し，それぞれの値で変数ＮＡＭＥと変数ＤＡＴＡの値を上書きする。また値の取得後には，取得した値を含む行のデータを，業務データ差分バッファ２０６１から削除し，同じ値が二度以上取得されないようにする（Ｓ２１１−８）。
【０１４６】
次に，データ変換部２０３は，符号管理テーブル２０８内で「データ名」フィールド２０８−１が変数ＮＡＭＥと同じ値を持つ行を選択し，当該行の「識別符号」フィールド２０８−２  の値を変数ＣＯＤＥへ代入する（Ｓ２１１−９）。
【０１４７】
続いて，データ変換部２０３は，変数ＣＯＤＥと変数ＤＡＴＡに含まれる値を，ＣＯＤＥ，ＤＡＴＡの順で結合し，結合後のデータを追記領域書込バッファ２０６６の末尾へ追加する（Ｓ２１１−１０）。追加後，データ変換部２０３は，業務データ差分バッファ２０６１にまだデータが残っているかどうかを確認する処理（Ｓ２１１−７）に戻る。
【０１４８】
処理Ｓ２１１−７にて，業務データ差分バッファ２０６１にデータが残っていない，すなわち，書き換える必要のある全ての業務データに対して，追記領域書込バッファ２０６６への追記が完了すると（Ｓ２１１−７でＮＯ），データ変換部２０３は，追記領域書込バッファ２０６６の末尾へ識別符号ｃ０を書き込む（Ｓ２１１−１１）。
【０１４９】
次に，データ変換部２０３は，追記領域末尾ポインタ２０５から，書込対象の電子タグ４のタグＩＤに一致する行を検索し，追記領域４０３２の末尾アドレスを取得し，変数Ｍへ格納する（Ｓ２１１−１２）。
【０１５０】
続いて，データ変換部２０３は，追記領域書込バッファ２０６６内のデータを，ＩＣタグ４の追記領域４０３２内，変数Ｍで指定される番地へ書き込むよう，リーダライタ装置３−２に対してデータ書込要求メッセージを送信し（Ｓ２１１−１３），リーダライタ装置３−２からの返信を待ち受ける状態へ遷移する（Ｓ２１１−１４）。当該データ書込要求メッセージはパラメータを含み，当該パラメータによって書込位置と書き込むデータの内容を指示するものとする。ここでは書込位置として追記領域４０３２のＭ番地を指定し，書き込むデータの内容として追記領域書込バッファ２０６６内のデータを指定する。
【０１５１】
以上が，ミドルウェア装置２−２による，書込前処理Ｓ２１１の詳細である。
【０１５２】
図９に戻り，上述の書込前処理Ｓ２１１の結果，ミドルウェア装置２−２がリーダライタ装置３−２へデータ書込要求メッセージを送信すると（Ｓ２１２），リーダライタ装置３−２は当該書込要求に従い，ＩＣタグ４内の追記領域４０３２におけるＭ番地へ，指定されたデータの書込を実行する（Ｓ２１３）。
【０１５３】
ＩＣタグ４内への書込が成功すると（Ｓ２１４），リーダライタ装置３−２はミドルウェア装置２−２に対して追記領域４０３２への書込に成功した旨を通知する（Ｓ２１５）。
【０１５４】
ミドルウェア装置２−２は，リーダライタ装置３−２から，追記領域４０３２への書込に成功した旨を通知されると，書込の成功を業務アプリケーション装置１−２へ通知するための処理に移る（書込後処理，Ｓ２１６）。
【０１５５】
以下，当該処理Ｓ２１６の詳細について，再び図１２を用いて説明する。
【０１５６】
ミドルウェア装置２−２内では，リーダライタ通信部２１０がリーダライタ装置３−２からメッセージを受信すると，ＩＣタグコマンド処理部２０９が，当該メッセージをデコードし，当該メッセージが，追記領域４０３２への書込に成功したことを意味するメッセージであると解釈する（Ｓ２１１−１４でＹＥＳ）。
【０１５７】
すると，ミドルウェア装置２−２内のアプリケーションコマンド処理部２０２が，更新要求アプリケーションコマンドの実行が成功したことを示す更新要求アプリケーション成功応答を生成し，アプリケーション通信部２０１を介して，業務アプリケーション装置１−２へ送信する（Ｓ２１６−１）。
【０１５８】
一方，Ｓ２１１−１４において，ミドルウェア装置２−２が，リーダライタ装置３−２から何らかのエラーメッセージを受信した場合や，一定時間，一定回数のリトライを経てもリーダライタ装置３−２から応答が無かった場合は（Ｓ２１１−１４でＮＯ），ミドルウェア装置２−２のアプリケーションコマンド処理部２０２が，更新要求アプリケーションコマンドの実行に失敗したことを示す更新要求アプリケーション失敗応答を生成し，アプリケーション通信部２０１を介して，業務アプリケーション装置１−２へ送信する（Ｓ２１６−２）。
【０１５９】
以上が，ミドルウェア装置２−１による，書込後処理Ｓ２１６の詳細である。
【０１６０】
図９に戻り，上述の書込後処理Ｓ２１６の結果，ミドルウェア装置２−２が業務アプリケーション装置１−２へ更新要求アプリケーション成功応答を送信すると（Ｓ２１７），ＩＣタグ４に対するデータ更新処理は正常に完了する。
【０１６１】
なお，ここでは説明のために，ＩＣタグ４に対して初期化処理を行った業務アプリケーション装置と，初期化後のＩＣタグ４に対して読込処理と書込処理を行う業務アプリケーション装置を異なるものとして記載したが，両者は必ずしも異なるものでなくとも良い。
【０１６２】
また，追記領域４０３２の空き容量が小さくなった場合には，以下の手順により，追記領域４０３２のクリーニングを行うことで，空き容量を最大化することが可能である。まず，業務アプリケーション装置１は，ミドルウェア装置２に対して読込要求メッセージを送信し，ＩＣタグ４から最新の業務データを取得する。続いて，当該取得したデータをパラメータとする初期化要求メッセージを，ミドルウェア装置２に対して送信することで，ＩＣタグ４内の基本領域４０３１のデータが最新のデータに更新され，追記領域４０３２には識別符号ｃ０だけが格納されることとなる。
【０１６３】
ここで，追記領域４０３２のクリーニングを行うまでは，それまでにＩＣタグ４に対して行われた全ての更新内容が，追記領域内のデータという形で残されているため，当該領域内の以前のデータを参照し，最新のデータとして再度書き込みを行うことで，処理のやり直し（アンドゥ操作）を実現することが可能である。
【実施例２】
【０１６４】
以上の実施形態に基づき，ＩＣタグを乗車券として利用した場合を例に取って，ＩＣタグ（乗車券）へのデータの書込が行われる過程をより具体的に説明する。
【０１６５】
図１３は，本実施例のシステム構成の概略図である。
【０１６６】
図示するように，本実施例では，業務アプリケーション装置として，発券装置１−１と，入場管理装置１−２と，出場管理装置１−３と，精算装置１−４と，の４つを備える。当該装置はそれぞれミドルウェア装置２−１〜２−４と相互に通信を行い，各ミドルウェア装置はそれぞれリーダライタ装置３−１〜３−４と相互に通信を行う。ＩＣタグ４は乗車券として利用される。
【０１６７】
また，図１４は，本実施例において，各ミドルウェア装置２−１〜２−４に格納される対応管理テーブル２０７と符号管理テーブル２０８の一例を示した図である。例えば対応管理テーブル２０７においては，データ名として「乗車駅」を持つデータは，ＩＣタグ４上の基本領域４０３１ではオフセット（ｋ＋２，１０）で指定される箇所に書き込まれ，その長さは８であることが示されている。また，符号管理テーブル２０８においては，データ名として「乗車駅」を持つデータは，ＩＣタグ４上の追記領域４０３２へ書き込まれる際には，識別符号ｃ９と結合された状態で書き込まれることが示されている。
【０１６８】
乗車客が駅構内に設置された発券装置１−１（例えば券売機）に対して運賃の投入や行き先の範囲選択などを指示すると，発券装置１−１はミドルウェア装置２−１に対し，図７および図８で示したような初期化処理の実行要求を送信する。図７に示すシーケンスおよび図８に示すフローが滞りなく完了すると，ＩＣタグ４のデータ記憶部４０３には図１５のようにデータが書き込まれる。
【０１６９】
図１５は，発券装置１−１による発券処理が完了した後の，ＩＣタグ４（乗車券）内のデータ記憶部４０３の一例を示した図である。発券駅，種別，改札通過日時，有効期間，有効区間，入出場情報（図１５では「入出」と記載），発券日時，乗車駅，といったデータが基本領域４０３１に書き込まれる。追記領域４０３２には，先頭に識別符号ｃ０のみが書き込まれる。
【０１７０】
続いて乗車客が，発券されたＩＣタグ４を入場管理装置１−２（例えば自動改札機）へ挿入すると，当該入場管理装置１−２はミドルウェア装置２−２に対し，図９〜図１２で示したような読込処理および更新処理の実行要求を送信する。
【０１７１】
まず，図９のＳ２０１〜Ｓ２０７までの処理が滞りなく完了すると，ＩＣタグ４のデータ記憶部４０３から読み出されたデータがミドルウェア装置２−２内の業務データ読込バッファ２０６３へ格納される。当該データが格納された直後の業務データ読込バッファ２０６３の一例を図１６の左上部へ示す。図示するように，各業務データ名（発券駅，改札通過日時など）に対応した値が読み取られ，バッファに格納される。
【０１７２】
入場管理装置１−２は，ミドルウェア装置２−２から，業務データ読込バッファ２０６３内のデータを受信すると，図９の業務処理Ｓ２０９に相当する処理として，例えば，発券駅や発券時刻，有効区間などを確認し，入場の可否を判定する。入場可能と判定した場合には，業務データを書き換えた後，図９のＳ２１０で示すような更新要求メッセージを送信する。このとき，書き換え後のデータは当該更新要求メッセージのパラメータとして渡され，当該パラメータは，図１２のＳ２１１−１〜Ｓ２１１−４に従い，業務データ書込バッファ２０６２へ格納される。当該データが格納された直後の業務データ書込バッファ２０６２の一例を図１６の右上部へ示す。
【０１７３】
続いて，ミドルウェア装置２−２は，図１２のＳ２１１−５に従い，業務データ書込バッファ２０６２と業務データ読込バッファ２０６３の差分を計算し，業務データ差分バッファ２０６１へ格納する。当該差分データが格納された直後の，業務データ差分バッファ２０６１の一例を，図１６の下部へ示す。
【０１７４】
以上に示したように，本実施例では，書き換え前の業務データと，書き換え後の業務データの差分を計算することにより，更新が必要なデータの範囲を特定し，後に実行する，ＩＣタグに対するデータ書込処理の回数を削減し，書込速度の向上が実現されている。
【０１７５】
ミドルウェア装置２−２は，図１２のＳ２１１−７〜Ｓ２１１−１０に従い，業務データ差分バッファ２０６１内の各業務データを追記領域書込バッファ２０６６へ書き込んだ後，当該バッファの末尾へ識別符号ｃ０を付加し，追記領域の末尾へ追記する。当該追記が完了した直後の，ＩＣタグ４内データ記憶部４０３の一例を，図１７に示す。
【０１７６】
更新処理においては，基本領域４０３１内のデータには変更を加えず，追記領域４０３２に，識別符号と当該識別符号に対応する更新後のデータとを連ねて追記する。図１７では，追記領域４０３２内に改札通過日時，入出場情報，乗車駅情報を追記している。（図１７中，＊の記号は更新後のデータであることを示す）
以上に示したように，本実施例では，書き換え対象のデータが連続するように追記を行う。そのため，ＩＳＯ１８０００−６ＴｙｐｅＣ仕様のＢｌｏｃｋＷｒｉｔｅコマンドに対応したＩＣタグのように，メモリ上で連続したデータを１度のコマンドで書き込むことのできるＩＣタグに対して，１度のコマンドで更新処理が済み，書込処理の高速化が実現されている。
【０１７７】
続いて乗車客が電車へ乗り，所望の駅に到着後，出場するために，入場管理装置１−２を通した後のＩＣタグ４を，出場管理装置１−３（例えば自動改札機）へ挿入すると，当該出場管理装置１−３は，ミドルウェア装置２−３に対し，図９〜図１２で示したような読込処理および更新処理の実行要求を送信する。
【０１７８】
ここで，出場管理装置１−３による読込処理は，追記領域４０３２内にデータが格納されている点で，先述した入場管理装置１−２による読込処理の場合と異なる。特に，図１１のＳ２０７−１４〜Ｓ２０７−１９の処理が，追記領域４０３２に格納されているデータの分だけ実行される。例えばＩＣタグ４内のデータ記憶部４０３が，図１７に示したような状態を取る場合，図１１の処理Ｓ２０７−１３で追記領域読込バッファ先頭のデータがｃ０と比較されるが，当該バッファ先頭には識別符号ｃ２が格納されているため，Ｓ２０７−１４以降へ処理を進めることとなる。
【０１７９】
まず，Ｍの値を識別符号ｃ２の長さだけ増加させた後（Ｓ２０７−１４），図１４に記載した符号管理テーブル２０８を参照し，識別符号としてｃ２を含む行を探し，当該行の「データ名」フィールドに含まれる「改札通過日時」を取得し，変数ＮＡＭＥへ代入する（Ｓ２０７−１５）。
【０１８０】
次に，対応管理テーブル２０７を参照し，データ名として変数ＮＡＭＥすなわち「改札通過日時」を含む行を探し，当該行の「オフセット」フィールドと「データ長」フィールドの値をそれぞれ変数ＯＦＦＳＥＴおよび変数ＬＥＮへ代入する。ここでは図１４に記載の対応管理テーブル２０７に基づき，ＯＦＦＳＥＴには（ｋ，１０）が，ＬＥＮには６が，それぞれ代入される（Ｓ２０７−１６）。
【０１８１】
続いて，追記領域読込バッファ２０６７内，Ｍ番地（識別符号ｃ２を読み込んだ直後の位置）から，長さＬＥＮだけの範囲に存在するデータを読み込み，変数ＤＡＴＡへ代入する。ここでは，ＩＣタグ４内のデータ記憶部４０３が図１７に示したような構造を取るため，改札通過日時の更新後の値が取得される（Ｓ２０７−１７）。取得した値は，業務データ読込バッファ２０６３の「改札通過日時」行へ格納され，基本領域４０３１から読み込んだ値が追記領域４０３２から読み込んだ値で上書きされる。
【０１８２】
以上に示したような処理が，追記領域４０３２内の残りのデータに対しても行われ，最終的に業務データ読込バッファ２０６３内には，最新の追記データが古いデータを上書きした状態で，業務アプリケーション（ここでは出場管理装置１−３）へ提供される。
【０１８３】
本実施例では，ＩＣタグ内でのデータ配置方法を識別符号のみで表現し，データ長やデータ名は各ミドルウェア装置に保存することで，ＩＣタグ内のメモリを有効利用することを可能にしている。
【０１８４】
出場管理装置１−３は，ＩＣタグ４の有効性を確認すると，業務データの改札通過日時を書き換え，ミドルウェア装置２−３へ更新を要求し，更新の完了後，乗車券を回収し，改札の扉を乗車客のために開放する。改札通過日時が書き換えられた直後のＩＣタグ４について，データ記憶部４０３の一例を図１８に示す。図示するように，追記領域４０３２の末尾には，識別符号ｃ２と，改札通過日時の二度目の更新データ（「改札通過日時＊＊」として表記）と，追記領域の末尾を示す識別符号ｃ０と，が追記されている。
【０１８５】
精算装置１−４による精算時など，ＩＣタグ４とミドルウェア装置２とが通信可能な時間が比較的長く確保されている場合には，追記領域４０３２の空き容量を拡大するために，以下のような処理を実行しても良い。まず，精算装置１−４は，ミドルウェア装置２−４に対して読込要求メッセージを送信し，ＩＣタグ４から最新の業務データを取得する。続いて，当該取得したデータをパラメータとする初期化要求メッセージを，ミドルウェア装置２−４に対して送信することで，ＩＣタグ４内の基本領域４０３１のデータが最新のデータに更新され，追記領域４０３２には識別符号ｃ０だけが格納されることとなる。
【０１８６】
図１９は，図１８で示したＩＣタグ４に対して，上記の処理を実行した結果，追記領域４０３２の空き容量が最大化された例を図示したものである。
【符号の説明】
【０１８７】
１−１〜１−ｎ：業務アプリケーション装置，２−１〜２−ｎ：ミドルウェア装置，３−１〜３−ｎ：リーダライタ装置，４：ＩＣタグ，９：コンピュータ，１０：ＲＦＩＤシステム
【図１】
2010286935.tif 000003
【図２】
2010286935.tif 000004
【図３】
2010286935.tif 000005
【図４】
2010286935.tif 000006
【図５】
2010286935.tif 000007
【図６】
2010286935.tif 000008
【図７】
2010286935.tif 000009
【図８】
2010286935.tif 000010
【図９】
2010286935.tif 000011
【図１０】
2010286935.tif 000012
【図１１】
2010286935.tif 000013
【図１２】
2010286935.tif 000014
【図１３】
2010286935.tif 000015
【図１４】
2010286935.tif 000016
【図１５】
2010286935.tif 000017
【図１６】
2010286935.tif 000018
【図１７】
2010286935.tif 000019
【図１８】
2010286935.tif 000020
【図１９】
2010286935.tif 000021