(57)【要約】【課題】移動する物品に貼付された複数のRFタグに対するR/W制御コマンドの実行の失敗が発生する。【解決手段】移動体に貼付されたRFタグを読み書きするR/W（リーダ／ライタ）を制御する方法及び装置であって、R/Wを用いて移動体に貼付されたRFタグを検出する。検出したRFタグに応じて、このRFタグにデータを読み書きするR/W制御コマンドの実行タイミングを決めたスケジュールを作成する。作成した実行スケジュールに決められたタイミングに従い、R/Wを介してR/W制御コマンドをRFタグに対して実行する。【選択図】図1
2009069983.tif 000002
【特許請求の範囲】
【請求項１】
移動体に貼付されたRFタグを読み書きするR/W（リーダ／ライタ）を制御する方法であって、前記R/Wを用いて前記RFタグを検出し、前記検出した前記RFタグに応じて、該RFタグにデータを読み書きするR/W制御コマンドの実行タイミングを決めたスケジュールを作成し、前記作成した実行スケジュールに決められたタイミングに従い、前記R/Wを介して前記R/W制御コマンドを前記RFタグに対して実行するRFタグR/W制御方法。
【請求項２】
前記R/Wに接続し、前記RFタグの移動方向に沿って配置された複数のアンテナを介して、前記R/W制御コマンドを前記RFタグに対して実行する請求項1記載のRFタグR/W制御方法。
【請求項３】
前記実行タイミングを決めるR/W制御コマンドを所定の条件下で選択し、
前記所定の条件下で選択されなかったR/W制御コマンドを前記スケジュールの中で空いている時間に実行する請求項2記載のRFタグR/W制御方法。
【請求項４】
前記複数のアンテナのいずれを介しても実行できなかったR/W制御コマンドの存在に応答して、警告を出力する請求項3記載のRFタグR/W制御方法。
【請求項５】
前記R/W制御コマンドの実行の失敗に応答して、前記実行を失敗したR/W制御コマンドを前記スケジュールの中で空いている時間に実行する請求項3記載のRFタグR/W制御方法。
【請求項６】
前記スケジュールの作成に際して、スケジュールできないR/W制御コマンドの存在に応答して、警告を出力する請求項1記載のRFタグR/W制御方法。
【請求項７】
RFタグの検出及び前記RFタグにデータを読み書きするR/W（リーダ／ライタ）、及び前記R/W（リーダ／ライタ）に接続し、前記R/Wによる前記RFタグの検出に応答して、前記R/W制御コマンドの実行タイミングを決めたスケジュールを作成し、前記作成した実行スケジュールに決められたタイミングに従い、前記R/Wを介して前記R/W制御コマンドを前記RFタグに対して実行するR/W制御装置を有するRFタグR/W制御装置。
【請求項８】
前記R/Wに接続し、前記RFタグの移動方向に沿って配置され、前記R/W制御コマンドを前記RFタグに対して実行する複数のアンテナを有する請求項７記載のRFタグR/W制御装置。
【請求項９】
前記R/W制御装置は、前記実行タイミングを決めるR/W制御コマンドを所定の条件下で選択し、前記所定の条件下で選択されなかったR/W制御コマンドを前記スケジュールの中で空いている時間に実行する請求項８記載のRFタグR/W制御装置。
【請求項１０】
前記R/W制御装置は、前記複数のアンテナのいずれを介しても実行できなかったR/W制御コマンドの存在に応答して、警告を出力する請求項9記載のRFタグR/W制御装置。
【請求項１１】
前記R/W制御装置は、前記R/W制御コマンドの実行の失敗に応答して、該R/W制御コマンドを前記スケジュールの中で空いている時間に実行する請求項９に記載のRFタグR/W制御装置。
【請求項１２】
前記R/W制御装置は、前記スケジュールの作成に際して、スケジュールできないR/W制御コマンドの存在に応答して、警告を出力する請求項７に記載のRFタグR/W制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、RFID(Radio Frequency Identification)を利用したシステムにおいて、ベルトコンベアやゲートなどで移動するRFタグを読み書きするR/W（Reader/Writer）の制御方法および制御装置に関する。
【背景技術】
【０００２】
近年、製造や物流の現場で、RFIDの技術を用いた商品管理が行われている。RFIDを利用した商品管理では、RFIDタグ(ICタグ、無線タグ)を商品に貼付し、RFIDタグに書き込まれた情報の読み取ることで、個々の商品を識別する。RFIDタグを利用すると、一度に複数の商品を検知することができるため、あるべき商品のリストと実際にある商品との突き合わせ作業である入荷検品や棚卸などを効率化できる。
【０００３】
RFIDタグには、自らデータを送信するアクティブ型RFIDタグと、R/Wからのリクエストを受け、リクエストに応じた処理を実行し、レスポンスするパッシブ型RFIDタグの2種類がある。以下では、パッシブ型RFIDタグ(以下、単にRFタグと呼ぶ)を対象とする。
【０００４】
一般に、RFタグは、UID(Unique Identifier)とユーザデータ（RFタグのユーザが、用途に応じて決めたフォーマットで利用するデータ）の2種類のデータを格納する。RFタグに対して実行するコマンドには、同時に複数のRFタグのUIDを読み込むINVENTORYコマンドと、UIDを指定して、選択したRFタグのユーザデータなどのデータを読み書きするREADコマンドやWRITEコマンドがある。そこで、まずINVENTORYコマンドで複数のRFタグのUID一覧を取得し、次に一覧の中から順次UIDを指定してREAD/WRITEコマンドなどを実行することで、複数のRFタグに対して読み書きする。
【０００５】
RFタグを読み書きするR/Wには、1つまたは複数のアンテナを接続する。R/WからRFタグを読み書きする場合には、R/Wに接続されたいずれかのアンテナをアクティブにし、そのアクティブなアンテナから電磁波を放射させることにより、R/WとRFタグ間で交信することで、RFタグの読み書きを実現する。
【０００６】
R/Wのアンテナの上にRFタグを貼付した商品を載せることでRFタグを読み取るなど、RFタグとアンテナとの相対位置が変化しない場合には、INVENTORYコマンドを実行してRFタグのUIDを読み取り、UIDを読み取ったアンテナでREAD/WRITEコマンドを実行してRFタグのデータを読み書きする。
【０００７】
しかし、アンテナの位置を固定してRFタグを貼付した商品をベルトコンベアに流したり、ゲートを通過させるなどのようにRFタグが移動する場合や、逆にRFタグを固定してアンテナを移動する場合、すなわちRFタグとアンテナとの相対位置が変化する場合には、RFタグの読み書きが困難になる。これは、RFタグのデータを読み書きする際に、相対位置変化によりUIDを読み取ったアンテナの読み取り範囲外になり、UIDを読み取ったアンテナでのREAD/WRITEコマンドの実行に失敗することがあるためである。
【０００８】
そこで、移動するRFタグを読み書きする従来技術として、特許文献1がある。特許文献1では、RFタグを読み書きするアンテナを検知エリアが実質的に連続的になるように配置することで、読み取り範囲を広くして、RFタグへアクセス可能な時間を伸ばす。また、RFタグの移動速度に合わせてアンテナをアクティブにする時間を設定することで、RFタグの移動に合わせてアンテナを切り替えることにより、RFタグが高速に移動しても読み書き可能とする。
【０００９】
【特許文献１】特開2006-172101
【発明の開示】
【発明が解決しようとする課題】
【００１０】
特許文献1では、アンテナの検知エリアをオーバーラップさせることにより、連続した検知エリアを得るようにしているが、実際には検知エリアがオーバーラップされても、R/Wからのコマンドのリクエスト送信と、RFタグからのレスポンス受信が同一のアンテナであるという制約を守らなければならない。一般にR/Wは、リクエスト送信とレスポンス受信を同一のアンテナで実行することを強制する。リクエスト送信とレスポンス受信の間にRFタグが移動することで、R/WはRFタグの読み書きの結果を受け取ることができず、RFタグから読み取りデータを取得できない場合や、RFタグへのデータの書き込みの成功・失敗がわからなからない場合がある。そのため、リクエスト送信とレスポンス受信の間でアンテナを跨がないように、コマンドの送受信を同一のアンテナの範囲で実行する必要がある。
【００１１】
特許文献1は、読み書きするRFタグは1つであることを想定しており、複数のRFタグが同時に移動する場合について考慮していない。複数のRFタグが同時に移動すると、RFタグによって読み書きするデータサイズが異なる場合や、あるRFタグでは読み込みだけだが、別のあるRFタグでは読み込みと書き込みとを実行する必要があるなど処理内容が異なることにより、処理に要する時間に差が生じる。このような場合、どのアンテナでどのRFタグに対してどのコマンドを実行するかを調整しないと、コマンド処理中にアンテナが切り替わり、読み書きが失敗する可能性がある。
【００１２】
特許文献1では、RFタグの移動方向に沿ってアンテナを並べる。しかし、ゲートなどでは、読み取り率向上のために、RFタグの移動方向とは異なる方向にもアンテナを並べることがある。例えば、ゲートを通る商品を高く積む場合には、アンテナを上下に配置し、その上下のアンテナの組を商品の移動方向(＝RFタグの移動方向)に並べる場合がある。また、ゲートの左右どちらか一方にアンテナを配置するのではなく、左右両側にアンテナを配置し、左右両側のアンテナの組を商品の移動方向(＝RFタグの移動方向)に並べる場合がある。左右両側のアンテナでRFタグを読み書きする場合、片側でのみ読み書きできるRFタグと、左右両側のいずれのアンテナでも読み書きできるRFタグとがあり、RFタグの検出状況と移動に合わせて適切なアンテナで読み書きしないと、読み書きできずに通過するRFタグができてしまう可能性がある。
【００１３】
なお、特許文献１では、RFタグの読み書きに失敗した場合のことを考慮していない。読み書きに失敗したままであると、以後の業務に差し支えが発生する。再度読み書きコマンドを実行することにより、RFタグの読み書きの成功率を向上させた方が良い。
【課題を解決するための手段】
【００１４】
本発明は、移動体に貼付されたRFタグを読み書きするR/W（リーダ／ライタ）を制御する方法及び装置であって、その態様は次のとおりである。R/Wを用いて移動体に貼付されたRFタグを検出する。検出したRFタグに応じて、この（これらの）RFタグにデータを読み書きするR/W制御コマンドの実行タイミングを決めたスケジュールを作成する。作成した実行スケジュールに決められたタイミングに従い、R/Wを介してR/W制御コマンドをRFタグに対して実行する。
【発明の効果】
【００１５】
本発明によれば、検出したRFタグに応じてスケジュールされた実行タイミングに従い、R/W制御コマンドをRFタグに対して実行するので、R/W制御コマンドの実行の失敗が少なくなる。
【００１６】
本発明は、移動体の移動方向とは異なる方向に複数のアンテナが配置された場合にも適用でき、上記の効果を奏する。
【発明を実施するための最良の形態】
【００１７】
［実施例１］
以下、本発明の実施の形態を、図1〜図14を参照して説明する。実施例1では、コマンドを実行する時間を予約し、その予約情報に従ってR/W(リーダ/ライタ)を制御する。
【００１８】
図1は、本実施例の構成を示す。以下では、流通システムにRFIDを適用した形態を例に説明する。RFID(Radio Frequency Identification)を適用した流通システムでは、流通させる商品や商品を載せるパレットなどにRFタグを貼付する。流通システムの一環である入荷検品の段階では、ゲートに設置したR/WでRFタグを読み取ることで、通過する商品やパレットを確認する。また、必要に応じて、商品やパレットに貼付されたRFタグにデータを書き込む。
【００１９】
R/W制御装置1は、R/W2を制御して、コンベアなどで移動する移動体としての商品やパレットに貼付されたRFタグのデータを読み書きする。R/W制御装置1は、CPU11、プログラムやCPU11によるプログラム実行に伴うデータを記憶するメモリ12、キーボードやマウス等およびそのインターフェースを含む入力装置13、ディスプレイなどおよびそのインターフェースを含む出力装置14、RS-232CやUSBやEthernet（登録商標）などの通信インターフェースを含む通信装置15、データやプログラムを格納するハードディスクなどの記憶装置16から構成される。
【００２０】
記憶装置16は、R/W制御装置1が制御するR/W2及びアンテナの構成や配置を示す配置情報161、入荷検品などのアプリケーションがR/W2に対して実行を要求するコマンド指示情報162、R/W2でのコマンドの処理性能を示すコマンド実行性能情報163、RFタグを貼付した商品やパレットなどの移動状況を示すRFタグ移動情報164、R/W2で検出したRFタグの情報を示すRFタグ検出情報165、アンテナ毎にコマンドの実行可能な時間を示すコマンド実行可能時間情報166、実行予定のコマンド一覧を示す実行コマンド情報167、実行する時刻を予約したコマンド一覧を示す予約コマンド情報168を格納する。以下では、これらの情報とこれらの情報を格納するテーブルとを特に使い分けないが、いずれの意味であるかは容易に理解されるだろう。また、記憶装置16は、R/W2を制御するR/W制御プログラム169を格納する。
【００２１】
なお、実線で囲んだデータ（情報）はプログラム実行前に設定されるデータであり、破線で囲んだデータはプログラム実行時に動的に作成されるデータである。  R/W2は、アンテナ21、22、23を接続している。R/W制御装置1からのコマンド実行の要求を受け、アクティブなアンテナを切り替えながら、RFタグを読み書きする。
【００２２】
商品P1、P2、P3、P4は、パレットP0の上に載っている。商品P1、P2、P3、P4には、それぞれRFタグT1、T2、T3、T4が貼付されている。パレットP0には、RFタグT0が貼付されている。商品やパレットは、「アンテナ21→22→23」の順となる方向に移動する。
【００２３】
図示しないが、商品やパレットが近づいてきていることや移動速度を検知するために、センサやカメラ・画像認識等の装置と連携する場合があり、それらとR/W制御装置1は接続する場合がある。センサやカメラ・画像認識等の装置から、R/W制御装置1は商品やパレットの移動情報を受け取る。R/W制御装置1が受け取った移動情報の扱いについては、後述する。
【００２４】
図2は、R/W制御装置1が制御するR/W2及びアンテナの構成や配置を示す配置情報161を示す。配置情報161は、R/W制御装置1に接続されたR/W2、R/W2に接続されたアンテナ21、22、23、INVENTORYコマンドを実行してRFタグを検出するために使用するアンテナかどうかの情報、アンテナでRFタグに対してREADやWRITEなどのコマンドを実行可能な範囲、商品やパレットなどの移動方向に向かって隣接しているアンテナとそのアンテナ間の距離の情報を含む。
【００２５】
なお、この「実行可能な範囲」にあるRFタグを、コマンド実行可能な状態のRFタグと呼ぶ。またアンテナ間の距離とは、アンテナ中心間の距離ではなく、あるアンテナの実行可能な範囲と隣接するアンテナの実行可能な範囲との距離、すなわち、いずれのアンテナともRFタグが通信できない距離を言う。
【００２６】
図2では、R/W制御装置1にはR/W2が接続されており、R/W2にはアンテナ21、22、23が接続されている。アンテナ21は、INVENTORYコマンドを実行してRFタグを検出するために使用するアンテナであるため、「○」としている。INVENTORYコマンドはあるアンテナの実行可能な範囲にあるRFタグのUID(Unique Identifier)を取得するためのコマンドである。実行可能な範囲に複数のRFタグがあれば、INVENTORYコマンドの一度の実行によって、その複数のUIDを取得する。
【００２７】
アンテナ21のコマンド実行可能範囲は25cmであり、RFタグの移動方向に向かってアンテナ付近の25cmの距離を通過する間にR/W2はRFタグを読み書きすることになる。アンテナ21の次隣接アンテナはアンテナ22であり、アンテナ21とアンテナ22のアンテナ間の距離は25cmである。
【００２８】
図3は、アプリケーションがR/W2に対して実行を要求するコマンド指示情報162を示す。コマンド指示情報162は、条件ごとにRFタグに対して実行するコマンドに関わる情報を含む。図3では、条件の例として、RFタグのUIDが00で始まる場合は、READコマンドを実行してRFタグのユーザデータ第1〜第4ブロックの4ブロックを読み込み、その後RFタグのユーザデータ第5ブロックの1ブロックにデータを書き込むという指示がある。本例では、パレット用のRFタグはUIDが00で始まり、ユーザデータ第1〜第4ブロックにはパレットの詳細情報を格納し、第5ブロックにはR/W2で詳細情報を読み込んでから通過したという情報を書き込むというケースを想定している。
【００２９】
RFタグのUIDが01で始まる場合は、READコマンドを実行してRFタグのユーザデータ第1〜第2ブロックの2ブロックを読み込むという指示がある。本例では、商品用のRFタグはUIDが01で始まり、ユーザデータ第1〜第2ブロックには商品の詳細情報を格納するケースを想定している。また、図示しないが、指示内容ごとにアプリケーションからの指示の優先度を設定しても良い。優先度は、後述のスケジュール作成プログラムで使用する。
【００３０】
なお、UIDが00で始まる、01で始まるとは、UIDの先頭から00である場合、01である場合を示している。
【００３１】
図4は、R/Wでのコマンドの処理性能(処理時間)を示すコマンド実行性能情報163を示す。コマンド実行性能情報163は、コマンド及びその内容ごとに、コマンドを実行するために必要となる時間を保持する。READコマンドは、読み取るブロック数に応じて必要な時間が異なる。ここでは「READ＋ブロック数」を1つのコマンドとして扱う。他のコマンドについても、ブロック数などのパラメタによって必要な時間が異なる場合には、別コマンドとして扱う。図4では、R/W2でアンテナ切り替えコマンドに40ms、2ブロック分のREADコマンドに100ms、4ブロック分のREADコマンドに120ms、1ブロック分のWRITEコマンドに160ms要することを示している。実際には、コマンド実行に要する時間は状況により差が発生するため、事前に複数回測定したときの最悪値を採るなどにより、大目に見積もっておく必要がある。
【００３２】
図5は、RFタグを貼付した商品やパレットなどの移動状況を示すRFタグ移動情報164を示す。RFタグ移動情報164は、ベルトコンベアなどで、商品が一定速度で移動することがわかっている場合には定数値を設定する。ゲートなどで、商品を運搬する人によって移動速度が変化する場合には、ゲートの前にセンサを設置して移動速度を測定しながら、RFタグ移動情報164を更新しても良い。図5では、RFタグの移動速度を1m/sとしている。
【００３３】
図6は、R/W制御プログラム169の処理フローチャートである。R/W制御プログラム169は、アプリケーションからの起動要求や、前述のセンサやカメラ及び画像認識装置などによりRFタグがRFタグ検出範囲に近づいてきたことの検出に応じて起動する。
【００３４】
R/W制御プログラム169は、RFタグ検出プログラムを起動する(S1691)。RFタグ検出プログラムを実行することにより、RFタグの一覧を示すRFタグ検出情報165を取得する。RFタグ検出プログラムの動作例は後述する。
【００３５】
R/W制御プログラム169は、スケジュール作成プログラムを起動する(S1692)。スケジュール作成プログラムは、RFタグ検出情報165を基に、予約コマンド情報168を作成する。スケジュール作成プログラムの動作例は後述する。
【００３６】
R/W制御プログラム169は、コマンド実行プログラムを実行する(S1693)。コマンド実行プログラムは、予約コマンド情報168を基に、予約されたコマンドを実行する。コマンド実行プログラムの動作例は後述する。
【００３７】
図7は、RFタグ検出プログラムの処理フローチャートである。RFタグ検出プログラムは、R/W制御プログラム169により起動され、INVENTORYコマンドを利用してRFタグを検出し、RFタグ検出情報165を作成する。RFタグ検出プログラムは、前述のセンサやカメラ及び画像認識装置などにより、RFタグがRFタグ検出範囲に入るタイミングを検知し、そのタイミングでRFタグ検出のためのINVENTORYコマンドを発行できるように実行する。または、アプリケーションからの要求に応じて起動し、RFタグを検出するまでフローチャート上のループを続けても良い。
【００３８】
RFタグ検出プログラムは、指定した回数分だけ、以下の処理（Ｓ1710〜Ｓ1725）を実行する（Ｓ1705、Ｓ1730）。RFタグ検出用のアンテナ(例えば配置情報161で定義)を切り替えながら、INVENTORYコマンドを実行して、RFタグを検出する。図2の配置情報161では、RFタグ検出用として一つのアンテナ21を指定しているため、アンテナ21に対して以下のステップを実行する（Ｓ1710、Ｓ1725）。
【００３９】
RFタグ検出プログラムは、アンテナ21がアクティブになるように、アンテナ切り替えコマンドを実行する(Ｓ1715)。RFタグ検出プログラムは、INVENTORYコマンドを実行することで、RFタグを検出する(Ｓ1720)。検出したRFタグの情報は、RFタグ検出情報165として格納される。
【００４０】
図10は、RFタグ検出情報165を示す。RFタグ検出情報165は、RFタグを検出したINVENTORYコマンドを実行した時刻を示す検出時刻、RFタグを検出したアンテナ番号、検出したRFタグのUIDの情報を含む。図10のRFタグ検出情報165は、時刻10:00:00.000に、アンテナ21で、RFタグT0、T1、T2、T3、及びT4の5つのRFタグを検出したことを示している。検出したRFタグのUIDは、T0、T1、T2、T3、及びT4のそれぞれに対して、0000、0111、0122、0133、及び0144となっている。
【００４１】
以上では、指定した回数だけアンテナ切り替えコマンド及びINVENTORYコマンドを実行した。この回数には、移動するすべてのRFタグを検出するために必要となる回数を指定する。例えば、事前の動作テストなどで3回繰り返すことにより移動するすべてのRFタグを検出可能とわかっている場合には、3回と設定しておき、RFタグ検出プログラム実行時には3回繰り返す。また、回数の指定の他に、新たなRFタグが検出されなくなるまで繰り返すという方法がある。
【００４２】
図8は、スケジュール作成プログラムの処理フローチャートである。スケジュール作成プログラムは、R/W制御プログラム169によりRFタグ検出プログラム実行後に起動され、RFタグ検出情報165を利用して、予約コマンド情報168を作成する。
【００４３】
スケジュール作成プログラムは、配置情報161とRFタグ移動情報164とからコマンド実行可能時間情報166を作成する(Ｓ1750)。図11は、アンテナごとのコマンド実行可能時間情報166を示す。コマンドの「実行可能時間」は、RFタグがアンテナのコマンド実行可能な範囲にある時間である。コマンド実行可能時間情報166は、アンテナごとにコマンド実行可能時間を示す、開始時刻、終了時刻、実行可能時間を含む。図2の配置情報161より、アンテナ21のコマンド実行可能範囲は25cmであり、図5のRFタグ移動情報164よりRFタグの移動速度は1m/sであるので、アンテナ21での実行可能時間は250msとなる。他のアンテナについても、同様に設定する。
【００４４】
開始時刻及び終了時刻は、次のように設定する。アンテナ21は検出用アンテナであるため、アンテナ21での検出時刻との相対時刻としてコマンド実行可能な開始時刻は+0.000秒とし、アンテナ21での実行可能時間である250ms足した+0.250秒を終了時刻とする。図2の配置情報161より、アンテナ22はアンテナ21の次にRFタグが付近を通過すること、アンテナ21とアンテナ22との間の距離が25cmであるため、アンテナ21のコマンド実行可能終了時刻の250ms後がコマンド実行可能開始時刻となる。そこで、アンテナ22のコマンド実行可能開始時刻として+0.500秒を設定する。アンテナ22のコマンド実行可能終了時刻は、アンテナ22のコマンド実行可能時間が500msであるため、+1.000秒とする。他のアンテナについても同様に設定する。
【００４５】
なお、ベルトコンベアなどでRFタグの移動速度が事前に決まっている場合には、Ｓ1750を実行せずに、あらかじめ作成しておいたコマンド実行可能時間情報166を利用しても良い。
【００４６】
スケジュール作成プログラムは、本プログラムの終了予想時刻に従って、コマンド実行可能時間情報166を調整する(Ｓ1755)。RFタグはRFタグ検出プログラムとスケジュール作成プログラムとの実行中に移動しており、コマンドの実行可能時間にその分を反映させる必要がある。RFタグ検出情報165よりRFタグを検出した時刻が10:00:00.000、スケジュール作成プログラムの終了予想時刻を10:00:00.200とすると、コマンド実行可能時間情報166の、アンテナ21のコマンド実行可能開始時刻が10:00:00.000(=10:00:00.000+0.000)であり、コマンド実行可能終了時刻が10:00:00.250(=10:00:00.000+0.250)であるので、スケジュール作成プログラムの終了時に、RFタグはアンテナ21の場所にあることがわかる。そこで、アンテナ21のコマンド実行可能時間を、スケジュール作成プログラムの終了予想時刻とアンテナ21のコマンド実行可能終了時刻との差をとって、250ms−200ms=50msとする。
【００４７】
スケジュール作成プログラムは、コマンド指示情報162、コマンド実行性能情報163及びRFタグ検出情報165から実行コマンド情報167を作成する(Ｓ1760)。
【００４８】
図12は、実行コマンド情報167を示す。実行コマンド情報167は、RFタグ検出情報165に含まれる各RFタグに対して、コマンド指示情報162とコマンド実行性能情報164とを参照することで各コマンド実行に要する時間を求めたものである。図10のRFタグ検出情報165では、RFタグT0、T1、T2、T3、及びT4を検出していることがわかる。RFタグT0はUIDが「0000」であり、「00」で始まっているため、図3のコマンド指示情報162よりREAD(第1〜第4ブロック/4ブロック分)とWRITE(5ブロック/1ブロック分)とを取得し、実行コマンド情報167にコマンド1671および1672を追加する。さらに、図4のコマンド実行性能情報163より、4ブロック分のREADの必要時間は120ms、1ブロック分のWRITEの必要時間は160msであるので、コマンド1671及び1672のそれぞれに予想時間に設定する。RFタグT1〜T4はUIDが「01」で始まっているため、図3のコマンド指示情報162よりREAD(第1〜第2ブロック/2ブロック分)を取得し、実行コマンド情報167にコマンド1673〜1676を追加する。さらに、図4のコマンド実行性能情報163より、2ブロック分のREADの必要時間は100msであるので、コマンド1673〜1676に予想時間として設定する。
【００４９】
スケジュール作成プログラムは、実行コマンド情報167に含まれるコマンドをソートする(Ｓ1765)。ソートの基準（条件）は、(1)RFタグごとの予想時間の総和が大きいものを上位に、(2)コマンド指示の要求度が高いもの(例えば、コマンド指示情報162で定義)を上位に、などがある。ここでは同一のRFタグに対する処理は連続して実行するものとし、(1)の基準を採用してソートする。RFタグT0に対するコマンドの予想時間の総和は120ms+160ms=280msで、他のRFタグT1〜T4に対するコマンドごとの予想時間である100msよりも大きい。そこで、RFタグT0を上位になるようにソートする。
【００５０】
スケジュール作成プログラムは、以下のステップＳ1775〜Ｓ1785を、実行コマンド情報167に存在するコマンドの数だけ実行する（S1770、S1790）。まずは、同一のRFタグを対象としたコマンド1671及び1672を選択し、ステップＳ1775〜Ｓ1785を実行する。
【００５１】
スケジュール作成プログラムは、コマンドを実行可能なアンテナを検索する(Ｓ1775)。コマンド1671及び1672は、RFタグT0に対して実行するコマンドであり、コマンド実行の予想時間は合計で280msである。図11のコマンド実行可能時間情報166を参照すると、コマンド実行可能時間が280ms以上となるアンテナは、アンテナ22だけである。
【００５２】
スケジュール作成プログラムは、コマンドを実行可能なアンテナが存在するかを調査する(Ｓ1780)。コマンドを実行可能なアンテナが存在しない場合には、プログラムを終了する。プログラム終了とともに、ベルトコンベアやパレットを運ぶ人などの移動させるものに対して、停止または減速を促すメッセージや警報を出力しても良い。その後、再度、低速な状態でスケジュール作成プログラムを実行しても良い。
【００５３】
スケジュール作成プログラムは、予約コマンド情報168にコマンドを追加する(Ｓ1785)。図13は、予約コマンド情報168を示す。予約コマンド情報168には、コマンドを実行する時刻（実行タイミング、実行予定開始時刻）及びコマンドの実行内容(コマンド名、対象となるRFタグ、使用するアンテナ等)を保持する。コマンド1671及び1672のそれぞれを図13の予約コマンド情報168のコマンド1682及び1683として追加する。コマンド1682及び1683の予約に対応して、そのコマンド実行に要する時間をコマンド実行可能時間情報166に反映する。コマンド1682及び1683の予想時間の合計は280msのため、図11のコマンド実行可能時間情報166のアンテナ22のコマンド実行可能時間を500ms−280ms=220msとする。
【００５４】
次に、図12の実行コマンド情報167よりコマンド1673を選択し、Ｓ1775〜Ｓ1785を実行する。スケジュール作成プログラムは、コマンド1673を実行可能なアンテナを検索する(Ｓ1775)。コマンド1673の予想時間は100msであるため、図11のコマンド実行可能時間情報166を参照すると、アンテナ22及び23のいずれでも実行可能である（Ｓ1780）。
【００５５】
スケジュール作成プログラムは、アンテナ21に近い方のアンテナ22を選択し、図13の予約コマンド情報168にコマンド1673をコマンド1684として登録する(Ｓ1785)。また、図11のコマンド実行可能時間情報166にコマンド1684の実行時間を反映させ、アンテナ22のコマンド実行可能時間を220ms−100ms=120msとする。
【００５６】
同様に、図12の実行コマンド情報167のコマンド1674、1675及び1676に対してもＳ1775〜Ｓ1785を実行し、図13の予約コマンド情報168にコマンド1685、1687及び1688を追加する。また、図11のコマンド実行可能時間情報166にコマンド1685、1687及び1688の実行時間を反映させ、アンテナ22のコマンド実行可能時間を120ms−100ms=20ms、アンテナ23のコマンド実行可能時間を250ms−100ms−100ms=50msとする。
【００５７】
スケジュール作成プログラムは、予約コマンド情報168にアンテナ切り替えコマンドを追加する(Ｓ1795)。RFタグT0〜T4を読み書きする上で、アンテナ21からアンテナ22への切り替え、及び、アンテナ22からアンテナ23への切り替えが必要である。アンテナごとに図11のコマンド実行可能時間情報166の開始時刻にコマンド実行が始まるように、コマンドの実行予定開始時刻を設定する。例えば、アンテナ22のコマンド実行開始時刻は10:00:00.500(=10:00:00.000+0.500)より、コマンド1682のコマンド実行予定開始時刻を10:00:00.500に設定する。コマンド1682実行開始に間に合うようにアンテナを22に切り替えるために、コマンド1682の直前にアンテナ切り替えコマンドを挿入する。アンテナ切り替えコマンドの必要時間は40msであるため、40ms前の10:00:00.460にアンテナ切り替えコマンドを開始するように、図13の予約コマンド情報168にコマンド1681を追加する。アンテナ22からアンテナ23への切り替えについても同様に実行し、コマンド1686を追加する。
【００５８】
図9は、コマンド実行プログラムの処理フローチャートである。コマンド実行プログラムは、R/W制御プログラム169によりスケジュール作成プログラム実行後に起動され、予約コマンド情報168に基づきR/W2を制御する。コマンド実行プログラムの動作を、図9及び図14を用いて説明する。
【００５９】
現時点を、図14で、RFタグ検出プログラムでRFタグを検出し、スケジュール作成プログラムで予約コマンド情報168を作成し、検出したRFタグがアンテナ22のコマンド実行可能範囲に入るところ（図14の時刻0.460の直前）とする。
【００６０】
コマンド実行プログラムは、予約コマンド情報168からコマンドを1つずつ取り出し、順次実行する。まず、時間的に先頭にあるコマンド1681を選択する。
【００６１】
コマンド実行プログラムは、コマンド実行予定開始時刻（図14の時刻0.460）まで待ち、その時刻になったらコマンドを実行する(Ｓ1805)。現時点はコマンド1681の実行予定開始時刻の10:00:00.460より前のため10:00:00.460まで待ち、10:00:00.460にアンテナ22がアクティブになるようにアンテナ切り替えコマンドの実行を開始する。
【００６２】
以降、コマンド実行プログラムは、図13の予約コマンド情報168上のコマンド1682〜1689についても、同様に実行する（Ｓ1800〜Ｓ1810）。なお、予約コマンド情報168の実行予定開始時刻で時刻が指定されていない場合には、前のコマンドの実行終了直後にそのコマンドの実行を開始する。
【００６３】
以上のように実施例1は、実行すべきコマンドの実行スケジュールを作成し、作成されたスケジュールの順序に基づいて各コマンドを実行するので、Ｒ/Ｗからの応答の短時間の遅れを許容できる。特に、一度にスケジュールされるコマンドの数が少ない場合に、スケジュール作成時間が短縮され、短時間の応答遅れの許容に利点がある。
［実施例２］
【００６４】
以下、実施例2を、図1〜図7、図10〜12、および図14〜17を参照して説明する。実施例2では、必要に応じてコマンドを実行する時間を予約し、その予約情報に従ったR/Wの制御に加え、予約のない時間に予約されていないコマンドを実行するようにR/Wを制御する。
【００６５】
図1〜7、図10〜12については、実施例1と同様であるので、説明に必要な部分を除いて、説明を省略する。
【００６６】
実施例２は、実施例１で説明した図6のR/W制御プログラム169が起動するスケジュール作成プログラムおよびコマンド実行プログラムの処理が実施例１のそれらと異なる。スケジュール作成プログラムは、図１０に示すRFタグ検出情報165を基に、コマンド実行可能時間情報166、実行コマンド情報167、及び予約コマンド情報168を作成する。コマンド実行プログラムは、コマンド実行可能時間情報166、実行コマンド情報167、及び予約コマンド情報168を基に、予約されたコマンドを実行しながら、コマンド実効の予約がなく空いている時間に予約されていないコマンドを実行する。  図15は、本実施例のスケジュール作成プログラムの処理フローチャートである。スケジュール作成プログラムは、R/W制御プログラム169によりRFタグ検出プログラム実行後に起動され（図６のS1692）、RFタグ検出情報165を利用して、予約コマンド情報168を作成する。
【００６７】
図15のスケジュール作成プログラムのＳ2000〜Ｓ2015は、実施例1（図8のＳ1750〜Ｓ1765）と同様であるので、説明を省略する。Ｓ2000〜Ｓ2015を実行した結果、図11のコマンド実行可能時間情報166と、図12の実行コマンド情報167ができるのは実施例１で説明したものと同様である。
【００６８】
スケジュール作成プログラムは、以下のＳ2025〜Ｓ2040を、実行コマンド情報167に存在するコマンドの数だけ実行する（Ｓ2020、Ｓ2045）。まず、図12の同一のRFタグを対象としたコマンド1671及び1672を実行コマンド情報167から選択し、Ｓ2025〜Ｓ2040を実行する。
【００６９】
スケジュール作成プログラムは、コマンドを実行可能なアンテナを検索する(Ｓ2025)。コマンド1671及び1672はRFタグT0に対して実行するコマンドであり、コマンド実行の予想時間の合計は280msである。図11のコマンド実行可能時間情報166を参照すると、コマンド実行可能時間が280ms以上であるアンテナは、アンテナ22だけである。
【００７０】
スケジュール作成プログラムは、コマンドを実行可能なアンテナが存在するかを調査する(Ｓ2030)。コマンドを実行可能なアンテナが存在しない場合には、処理を終了する。なお、処理終了とともに、ベルトコンベアの移動速度を停止させたり、遅くさせたりするように、ベルトコンベアの制御装置に警告し、低速な状態で再度スケジュール作成プログラムを実行しても良い。
【００７１】
スケジュール作成プログラムは、コマンドを予約コマンド情報168に追加する必要があるかを所定の判断基準（条件）に基づいて判断する(Ｓ2035)。判断基準（条件）には、(1)コマンドを実行可能なアンテナが1つしかないコマンド、(2)コマンド指示の要求度が一定以上のコマンド(例えば、コマンド指示情報162で定義)などがある。ここでは、(1)の判断基準を採用する。コマンド1671及び1672は、アンテナ22だけで実行可能なため、予約が必要である。
【００７２】
スケジュール作成プログラムは、予約コマンド情報168にコマンドを追加する(Ｓ2040)。図17は、予約コマンド情報168を示した図である。コマンド1671及び1672を、それぞれ図17の予約コマンド情報1682及び1683として追加する。また、コマンド1682及び1683を予約したため、そのコマンド実行に要する時間をコマンド実行可能時間情報166に反映する。コマンド1682及び1683の予想時間の合計は280msのため、図11のコマンド実行可能時間情報166のアンテナ22のコマンド実行可能時間を500ms−280ms=220msとする。
【００７３】
次に、実行コマンド情報167からコマンド1673を選択し、Ｓ2025〜Ｓ2040を実行する。
【００７４】
スケジュール作成プログラムは、コマンド1673を実行可能なアンテナを検索する(Ｓ2025)。コマンド1673の予想時間は100msであるため、図11のコマンド実行可能時間情報166を参照すると、アンテナ22、23で実行可能であることがわかる（Ｓ2030）。
【００７５】
スケジュール作成プログラムは、コマンド1673は複数のアンテナ22、23で実行可能であるため、前述の判断基準に基づき予約する必要がない（Ｓ2035）。
【００７６】
同様に、コマンド1674、1675、及び1676に対してＳ2025〜Ｓ2040を実行すると、いずれのコマンドも予約が必要ないとみなされる。よって、図17の予約コマンド情報168には、コマンド1682及び1683のみが含まれている状態である。
【００７７】
スケジュール作成プログラムは、予約コマンド情報168にアンテナ切り替えコマンドを追加する(Ｓ2050)。RFタグT0〜T4を読み書きする上で、アンテナ21からアンテナ22への切り替え、及びアンテナ22からアンテナ23への切り替えが必要である。まず、アンテナごとに図17のコマンド実行可能時間情報166の開始時刻にコマンド実行が始まるように、アンテナ切り替えコマンドの実行予定開始時刻を設定する。例えば、実行可能時間情報166におけるアンテナ22のコマンド実行可能開始時刻は10:00:00.500(=10:00:00.000+0.500)であることにより、コマンド1682のコマンド実行予定開始時刻を10:00:00.500に設定する。コマンド1682実行開始に間に合うようにアンテナを21から22に切り替えるように、コマンド1682の直前にアンテナ切り替えコマンドを挿入する。アンテナ切り替えコマンドの予想時間は40msであるため、40ms前の10:00:00.460にアンテナ切り替えコマンドを開始するように、図17の予約コマンド情報168にコマンド1681を追加する。アンテナ22からアンテナ23への切り替えについても同様に実行し、コマンド1684を追加する。
【００７８】
スケジュール作成プログラムは、RFタグが最後のアンテナのコマンド実行可能範囲から離れたときに、コマンド実行プログラムを終了するように、予約コマンド情報168に終了を意味するコマンドを追加する(Ｓ2050)。アンテナ23が最後のアンテナであるため、アンテナ23のコマンド実行可能終了時刻10:00:01.500に終了するように、図17の予約コマンド情報168にコマンド1685を追加する。
【００７９】
図16は、コマンド実行プログラムの処理フローチャートである。コマンド実行プログラムは、R/W制御プログラム169によりスケジュール作成プログラム実行後に起動され（図６のS1693）、予約コマンド情報168に基づきR/Wを制御する。さらに、コマンド実行の予約のない時間に、予約されていないコマンドを実行するようにR/Wを制御する。コマンド実行プログラムの動作を図14も用いて説明する。
【００８０】
現在の状況は、図14で、RFタグ検出プログラムでRFタグを検出し、スケジュール作成プログラムで予約コマンド情報168を作成し、検出されたRFタグがアンテナ22のコマンド実行可能範囲に入るところである。
【００８１】
コマンド実行プログラムは、図17の予約コマンド情報168から未実行で先頭にあるコマンド1681を取得する(Ｓ2070)。
【００８２】
コマンド実行プログラムは、Ｓ2070で取得したコマンドを実行前に、現在アクティブになっているアンテナで実行可能なコマンドがあるかどうかを調査する(Ｓ2075)。現在アクティブなアンテナ21で、コマンド1681実行前に実行可能なコマンドを検索する。現在時刻を図14の10:00:00.200とすると、コマンド1681の開始時刻は図17の予約コマンド情報168より10:00:00.460であるが、アンテナ21のコマンド実行可能終了時刻は図11のコマンド実行可能時間情報166より10:00:00.250であるので、アンテナ21でのコマンド実行可能時間は250ms−200ms=50msとなる。未予約且つ未実行で実行可能なコマンドを図12の実行コマンド情報167から検索すると、そのようなコマンドは存在しないので、Ｓ2085に進む。
【００８３】
コマンド実行プログラムは、Ｓ2070で取得したコマンドが終了コマンドかを判断する(Ｓ2085)。コマンド1681は終了コマンドではないため、Ｓ2090に進む。
【００８４】
コマンド実行プログラムは、設定された時刻まで待ち、選択したコマンドを実行する(Ｓ2090)。よって、10:00:00.460まで待ち、アンテナ22へのアンテナ切り替えコマンド1681を実行する。このコマンド実行には40msを要し、時刻が10:00:00.500になったものとする。
【００８５】
コマンド実行プログラムは、図17の予約コマンド情報168からコマンド1682を取得する(Ｓ2070)。コマンド実行プログラムは、現在アクティブなアンテナ22で、コマンド1682実行前に実行可能なコマンドを調査する(Ｓ2075)。現在時刻が10:00:00.500であり、コマンド1682の開始時刻は10:00:00.500であるので、アンテナ22でのコマンド実行可能時間は0msとなる。そのようなコマンドは存在しないため、Ｓ2085に進む。コマンド実行プログラムは、コマンド1682が終了コマンドではないので、Ｓ2090に進む(Ｓ2085)。
【００８６】
コマンド実行プログラムは、現在時刻が10:00:00.500であるため、すぐにコマンド1682を実行する(Ｓ2090)。このコマンドの実行には、図12の実行コマンド情報167に示すように120msを要し、時刻が10:00:00.620になったものとする。
【００８７】
コマンド実行プログラムは、図17の予約コマンド情報168からコマンド1683を取得し(Ｓ2070)、現在アクティブなアンテナ22で、コマンド1683実行前に実行可能なコマンドを調査する(Ｓ2075)。コマンド1683は、実行予定開始時刻が設定されていないため、前のコマンド1682実行後すぐに実行するコマンドである。よって、コマンド1683実行前に実行可能なコマンドは存在しないため、Ｓ2085に進む。コマンド実行プログラムは、コマンド1683が終了コマンドではないため、Ｓ2090に進み(Ｓ2085)、すぐにコマンド1683を実行する(Ｓ2090)。このコマンドの実行には、図12の実行コマンド情報167に示すように、160msを要し、時刻が10:00:00.780になったものとする。
【００８８】
コマンド実行プログラムは、図17の予約コマンド情報168からコマンド1684を取得し(Ｓ2070)、現在アクティブなアンテナ22で、コマンド1684実行前に実行可能なコマンドを調査する(Ｓ2075)。現在時刻が10:00:00.780、コマンド1684の開始時刻は10:00:01.210、アンテナ22のコマンド実行可能終了時刻は図11のコマンド実行可能時間情報166より10:00:01.000であるので、アンテナ22でのコマンド実行可能時間は1000ms−750ms=250msとなる。未予約且つ未実行で実行可能なコマンドを図12の実行コマンド情報167から検索すると、コマンド1673、1674、1675及び1676が見つかる。そこで、最上位のコマンド1673を選択する。
【００８９】
コマンド実行プログラムは、コマンド1673を実行する(Ｓ2080)。このコマンドの実行には図12の実行コマンド情報167に示すように、100msを要し、時刻が10:00:00.880になったものとする。
【００９０】
同様にＳ2070〜Ｓ2080を実行し、コマンド1674を実行する。このコマンドの実行には図12の実行コマンド情報167に示すように、100msを要し、時刻が10:00:00.980になったものとする。
【００９１】
コマンド実行プログラムは、現在アクティブなアンテナ22で、コマンド1684実行前に実行可能なコマンドを調査する(Ｓ2075)。現在時刻が10:00:00.980、コマンド1684の開始時刻は10:00:01.210、アンテナ22のコマンド実行可能終了時刻は図11のコマンド実行可能時間情報166より10:00:01.000であるので、アンテナ22でのコマンド実行可能時間は1000ms−980ms=70msとなる。未予約且つ未実行で実行可能なコマンドを図12の実行コマンド情報167から検索すると、そのようなコマンドは存在しないため、Ｓ2085に進む。コマンド実行プログラムは、コマンド1684が終了コマンドではないため、ステップＳ2090に進む(Ｓ2085)。
【００９２】
コマンド実行プログラムは、10:00:01.210まで待ち、アンテナ23へのアンテナ切り替えコマンド1684を実行する(Ｓ2090)。このコマンド実行には40msを要し、時刻が10:00:01.250になったものとする。
【００９３】
以後、Ｓ2070〜Ｓ2080を繰り返し実行し、コマンド1675及び1676を実行する。その結果、時刻が10:00:01.450になったものとする。
【００９４】
コマンド実行プログラムは、図17の予約コマンド情報168からコマンド1685を取得し(Ｓ2090)、現在アクティブなアンテナ23で、コマンド1685実行前に実行可能なコマンドを調査する(Ｓ2075)。図12の実行コマンド情報167のコマンドはすべて実行したため、実行可能なコマンドはなく、Ｓ2085に進む。コマンド1685が終了コマンドである（Ｓ2085）。  コマンド実行プログラムは、図17の予約コマンド情報168及び図12の実行コマンド情報167の中に未実行のコマンドがあるかをチェックする（Ｓ2093）。上記の説明の例では、図12の実行コマンド情報167のコマンドはすべて実行した。未実行のコマンドがあるならば、どのＲＦタグ（ＵＩＤ）に対する、どのようなコマンドが未実行であるかの警告を出力し（Ｓ2195）、処理を終了する。
【００９５】
以上のように実施例2は、コマンドの実行スケジュールは所定の判断基準の下で作成されるので、スケジュール作成時間が短くて良いという利点がある。この利点は、コマンド数が多い場合に特に顕著になる。また、コマンドの実行中及び実行待ち時間中に現在時刻を考慮し、現在時刻とコマンドの実行状況に適合したコマンドの実行順序を動的に決定するので、コマンドの全体としての実行に足りれば、ＲＦタグがアンテナと交信できる範囲で、Ｒ/Ｗからの応答の遅れを許容できる。特に、一度にスケジュールされるコマンドの数が少ない場合に、スケジュール作成時間が短縮され、短時間の応答遅れの許容に利点がある。
［実施例３］
【００９６】
以下、実施例3を、図3〜図6、図15、図18〜24を参照して説明する。実施例3は、RFタグの移動方向とは異なる方向に並列にアンテナを設置してある場合である。
【００９７】
図18は、実施例1における図1のR/W2に接続したアンテナの数と配置を変更した部分を示す。R/W2は、アンテナ21、22、23、24、25及び26を接続している。R/W制御装置1からのコマンド実行の要求を受け、R/W2はアクティブなアンテナを切り替えながら、RFタグを読み書きする。
【００９８】
実施例1と同様に、商品及びパレットが、R/W2に接続したアンテナの前（付近）を移動する。アンテナは、アンテナ21と22、アンテナ23と24及びアンテナ25と26の各組を上下に配置する。商品やパレットは、「アンテナ21→23→25」「アンテナ22→24→26」の順となる方向に移動する。商品やパレットへのRFタグの貼付位置の高さ方向にばらつきがあり、そのばらつきに幅がある場合に、RFタグを読み取ることのできる高さ方向の範囲を広げるために、このようにRFタグの移動方向に対して複数のアンテナを並列して設置する場合がある。また、商品及びパレットがゲートを通過する場合に、ゲートの左右両側にアンテナを並列して（対向させて）配置する場合がある。
【００９９】
図19は、R/W制御装置1が制御するR/W2やアンテナの構成及び配置などを示す配置情報161を示した図である。図19の配置情報161は、図18の構成および配置を示す。R/W2にアンテナ21〜26を接続している。アンテナ21、22はINVENTORYコマンドを実行してRFタグを検出するために使用するアンテナであり、「○」としている。
【０１００】
アンテナ21と22、アンテナ23と24及びアンテナ25と26の各組は、RFタグの移動方向とは異なる方向に並べて配置しており、RFタグの移動に合わせてそれぞれの組のアンテナを並列に使用する（実際の使用に当たっては、いずれか一方をアクティブにして使用する。）。RFタグがアンテナ21と22との組の前にある場合には、アンテナ21と22とを並列に使用してRFタグを読み書きする。RFタグがアンテナ23と24との組の前にある場合には、アンテナ23と24とを並列に使用してRFタグを読み書きする。RFタグがアンテナ25と26との組の前にある場合には、アンテナ25と26とを並列に使用してRFタグを読み書きする。このように、RFタグの移動位置に応じて、並列に使用するアンテナの組を変更する。図19の配置情報161で、並列に使用するアンテナの組を示すために、たとえばアンテナ21と22との組に1というように、並列グループ番号を付与している。
【０１０１】
「アンテナ21→23→25」及び「アンテナ22→24→26」のように、RFタグの移動方向に沿って並んだアンテナの組を移動方向グループとし、グループの要素に対して移動方向グループ番号を付与している。たとえば、移動方向グループ「アンテナ21→23→25」を構成する各要素のアンテナ21、23及び25に移動方向グループ番号（符号）Ａを付与している。移動方向グループは、移動する商品などに貼付されたRFタグの貼付位置の高さに対応したグループであるので、あるアンテナで検出したRFタグは、商品などが転倒や荷崩れを起こさない限り、そのアンテナと同じ移動方向グループに属する他のアンテナで読み書きする可能性が高い。
【０１０２】
なお、アンテナの組はＲＦタグの高さ方向に対応して並列に配置されているので、アンテナの組の中間的な位置のＲＦタグに関しては、複数の移動方向グループに属するアンテナでＲＦタグを検知したり、読み書き可能になることもあり得る。
【０１０３】
図3〜5は、実施例1と同様のため、説明を省略する。
【０１０４】
実施例３は、実施例１で説明した図6のR/W制御プログラム169が起動するスケジュール作成プログラムおよびコマンド実行プログラムが実施例１のそれらと異なる。
【０１０５】
スケジュール作成プログラムは、RFタグ検出情報165を基に、コマンド実行可能時間情報166、実行コマンド情報167及び予約コマンド情報168を作成する。実施例2におけるスケジュール作成プログラム（図１５）と処理の流れは同じである。
【０１０６】
コマンド実行プログラムは、コマンド実行可能時間情報166、実行コマンド情報167、予約コマンド情報168を基に、予約されたコマンドを実行しながら、予約がなく空いている時間に予約されていないコマンドを実行する。
【０１０７】
図20は、Ｒ/Ｗ制御プログラムのRFタグ検出プログラムを実行（図６のS1691）したときの、RFタグ検出情報165の例を示した図である。時刻10:00:00.000に、アンテナ21で、RFタグT1、T2、T3、及びT4の4つのRFタグを検出したことを示している。また、時刻10:00:00.150に、アンテナ22で、RFタグT0及びT2の2つのRFタグを検出したことを示している
スケジュール作成プログラムは、実施例2とその流れが同じであるので、図15を用いて説明する。スケジュール作成プログラムは、R/W制御プログラム169によりRFタグ検出プログラム実行後に起動され（図６のS1692）、RFタグ検出情報165を利用して、予約コマンド情報168を作成する。RFタグ検出プログラムの実行に伴い、スケジュール作成プログラムの実行開始時のアクティブなアンテナは22であるとする。
【０１０８】
スケジュール作成プログラムは、配置情報161（図19）とRFタグ移動情報164（図５）とからコマンド実行可能時間情報166を作成する(Ｓ2000)。図21に、アンテナごとのコマンド実行可能時間情報166を示す。コマンド実行可能時間情報166の作成方法は、基本的に実施例1（図８のＳ1750）と同様である。ただし、本実施例でのアンテナの配置はアンテナ21と22、アンテナ23と24及びアンテナ25と26が組として並列に使用されるため、その点を考慮することになる。まず、アンテナ21、23及び25に関して、実施例1と同様にしてコマンド実行可能時間を計算する。次に、アンテナ21と22は、並列に使用されるアンテナであり、同一のサイズであるため、同一のコマンド実行可能時間を割り当てる。他のアンテナについても、同様とする。
【０１０９】
スケジュール作成プログラムは、スケジュール作成プログラムの終了予想時刻に従って、コマンド実行可能時間情報166を調整する(Ｓ2005)。スケジュール作成プログラムの終了予想時刻を10:00:00.240としたとき、実施例1（図８のＳ1755）と同様に実行し、アンテナ21と22のコマンド実行可能時間を250ms−240ms=10msとする。
【０１１０】
スケジュール作成プログラムは、コマンド指示情報162（図3）、コマンド実行性能情報164（図４）及びRFタグ検出情報165（図２０）から実行コマンド情報167を作成する(Ｓ2010)。図22は、実行コマンド情報167を示す。実行コマンド情報167は、対象となるRFタグに対応して、実行すべきコマンド、そのコマンド実行に要する予想時間、どのアンテナで検出したかの情報を含む。
【０１１１】
RFタグT0は、アンテナ22で検出したため、検出アンテナとして「22」と設定する。一方、RFタグT2は、アンテナ21と22との二つで検出したため、検出アンテナとして「21,22」と設定する。RFタグを検出したアンテナと同一の移動方向グループに属するアンテナではそのRFタグを読み書きできる可能性が高いので、それらのアンテナを実行アンテナとして設定する。例えば、アンテナ22と同一の移動方向グループBに属するアンテナはアンテナ22、24及び26であるため、アンテナ22で検出したRFタグT0に対するコマンド1671の実行アンテナに「22,24,26」を設定する。
【０１１２】
スケジュール作成プログラムは、実行コマンド情報167に含まれるコマンドをソートする(Ｓ2015)。ソートの基準などは実施例1と同様であるとして、コマンド1671及び1672が上位になったとする。
【０１１３】
スケジュール作成プログラム'は、Ｓ2025〜Ｓ2040を、実行コマンド情報167に存在するコマンドの数だけ実行する（Ｓ2020、Ｓ2045）。まず、同一のRFタグを対象としたコマンド1671及び1672を選択する。
【０１１４】
スケジュール作成プログラムは、コマンドを実行可能なアンテナを検索する(Ｓ2025)。コマンド1671及び1672はRFタグT0に対して実行するコマンドであり、コマンド実行の予想時間の合計は280msである。図21のコマンド実行可能時間情報166を参照すると、コマンド実行可能時間が280ms以上となるアンテナは、アンテナ23及び24である。これらのアンテナで、コマンド1671及び1672の実行アンテナは、実行コマンド情報167より24である。
【０１１５】
スケジュール作成プログラムは、コマンド1671及び1672はアンテナ24で実行可能であり（Ｓ2030）、且つアンテナ24でのみ実行可能であるため、予約する必要があるとみなし（Ｓ2035）、コマンド1671及び1672をコマンド1682及び1683として、予約コマンド情報168に追加する(Ｓ2040)。
【０１１６】
スケジュール作成プログラムは、図22の実行コマンド情報167からコマンド1673を選択し、コマンド1673を実行可能なアンテナを検索する(Ｓ2025)。コマンド1673の予想時間は100msであるため、図21のコマンド実行可能時間情報166を参照すると、アンテナ23及び25で実行可能であり（Ｓ2030），且つ複数のアンテナ24及び26で実行可能であるため（Ｓ2035）、予約する必要がない。
【０１１７】
同様に、図22の実行コマンド情報167のコマンド1674、1675及び1676に対してＳ2025〜Ｓ2040を実行すると、いずれのコマンドも予約が必要ない。よって、図23の予約コマンド情報168には、コマンド1682と1683とのみが含まれている状態である。
【０１１８】
スケジュール作成プログラムは、予約コマンド情報168にアンテナ切り替えコマンドを追加する(Ｓ2050)。現在アクティブなアンテナ22からアンテナ23または24への切り替え、及び、アンテナ23または24からアンテナ25または26への切り替えが必要である。図4のコマンド実行性能情報163からアンテナ切り替えには40ms要することがわかり、図21のコマンド実行可能時間情報166よりアンテナ23または24と、アンテナ25または26との実行可能開始時刻がわかるため、それぞれのアンテナでの実行可能開始時刻に間に合うようにアンテナ切り替えを実行するように設定する。アンテナ23または24は10:00:00.500の40ms前の10:00:00.460に切り替えるようコマンド1681を、アンテナ25または26では10:00:00.250の40ms前の10:00:01.210に切り替えるようコマンド1684を追加する。
【０１１９】
なお、コマンド1681でアンテナ切り替え後に実行するように予約されたコマンドは、アンテナ24で実行するコマンド1682である。よって、コマンド1681でのアンテナ切り替え先を「アンテナ23または24」から「アンテナ24」に変更する。図23は、変更した状態を示す。
【０１２０】
スケジュール作成プログラムは、RFタグが最後のアンテナのコマンド実行可能範囲から離れたときに、コマンド実行プログラムを終了するように、予約コマンド情報168に終了を意味するコマンドを追加する(Ｓ2055)。アンテナ26が最後のアンテナであるため、アンテナ26のコマンド実行可能終了時刻10:00:01.500に終了するように、図23の予約コマンド情報168にコマンド1685を追加する。
【０１２１】
なお、本実施例では、コマンド1671及び1672を予約するのみであったため、並列のアンテナ(アンテナ23と24)のうち片側のアンテナ24のみの予約となった。例えば、すでにアンテナ24を使用する予約が入っている状態で、アンテナ23の予約を入れる場合には、アンテナ23への切り替えコマンドを含めて実行可能かを判定する必要がある。また、予約を追加する際には、アンテナ切り替えコマンドも追加する必要がある。
【０１２２】
以上のように、実施例2における図15のスケジュール作成プログラムの処理の流れと実施例3の処理の流れとが同じである。実施例2と実施例3とはアンテナの数や配置が異なることから、処理対象の情報は異なることは、説明に使用した各情報から明らかである。
【０１２３】
図24は、コマンド実行プログラムの処理フローチャートである。コマンド実行プログラムは、R/W制御プログラム169によりスケジュール作成プログラム実行後に起動され（図6のS1693）、図23の予約コマンド情報168に基づきR/W2を制御する。さらに、予約のない時間に予約されていないコマンドを実行するようにR/W2を制御する。コマンド実行プログラムの動作を、図24を用いて説明する。
【０１２４】
コマンド実行プログラムは、予約コマンド情報168からコマンドを取得する(Ｓ2100)。よって、図23の予約コマンド情報168から未実行で先頭にあるコマンド1681を取得する。
【０１２５】
コマンド実行プログラムは、Ｓ2100で取得したコマンドを実行前に、現在アクティブになっているアンテナで実行可能なコマンドがあるかどうかを調査する(Ｓ2105)。現在アクティブなアンテナ22で、コマンド1681実行前に実行可能なコマンドを検索する。現在時刻を10:00:00.240とすると、コマンド1681の開始時刻は10:00:00.460、図21のコマンド実行可能時間情報166より現在アクティブなアンテナ22でコマンド実行可能終了時刻は10:00:00.250より、アンテナ22でコマンド実行可能時間は250ms−240ms=10msとなる。未予約・未実行で実行可能なコマンドを図22の実行コマンド情報167から検索すると、そのような（10ms以内で実行できる）コマンドは存在しないことがわかる。
【０１２６】
コマンド実行プログラムは、Ｓ2100で取得したコマンドを実行前に、現在アクティブになっているアンテナと並列なアンテナで実行可能なコマンドがあるかどうかを調査する(Ｓ2115)。現在アクティブなアンテナ22と並列に配置されているアンテナはアンテナ21であるが、10msで実行可能なコマンドは存在しない。
【０１２７】
コマンド実行プログラムは、Ｓ2100で取得したコマンドが終了コマンドかを判断する(Ｓ2125)。コマンド1681は終了コマンドではない。
【０１２８】
コマンド実行プログラムは、選択したコマンド1681がアンテナ未定のアンテナ切り替えコマンドであるかを調査する(Ｓ2130)。コマンド1681はアンテナ24へ切り替えるアンテナ切り替えコマンドであり、アンテナ未定ではない。
【０１２９】
コマンド実行プログラムは、設定された時刻まで待ち、S2100で取得したコマンドを実行する(Ｓ2140)。よって、10:00:00.460まで待ち、アンテナ24へのアンテナ切り替えコマンド1681を実行する。このコマンド実行には40msを要し、時刻が10:00:00.500になったものとする。
【０１３０】
コマンド実行プログラムは、図23の予約コマンド情報168からコマンド1682を取得する(Ｓ2100)。
【０１３１】
コマンド実行プログラムは、現在アクティブなアンテナ24で、コマンド1682の実行前に実行可能なコマンドがあるかを調査する(Ｓ2105)。現在時刻が10:00:00.500、コマンド1682の開始時刻は10:00:00.500より、アンテナ24でのコマンド実行可能時間は0msとなる。そのようなコマンドは存在しない。また、現在アクティブなアンテナ24と並列に配置されているアンテナ23で、0msで実行可能なコマンドも存在しない (Ｓ2115)。さらに、コマンド1682が終了コマンドではない (Ｓ2125)。さらに、コマンド1682はREADコマンドでありアンテナ未定のアンテナ切り替えコマンドではない (Ｓ2130)。
【０１３２】
コマンド実行プログラムは、現在時刻が10:00:00.500であるため、すぐにコマンド1682を実行する(Ｓ2140)。なお、このコマンド1682の実行には120msを要し、時刻が10:00:00.620になったものとする。
【０１３３】
コマンド実行プログラムは、図23の予約コマンド情報168からコマンド1683を取得する(Ｓ2100)。
【０１３４】
コマンド実行プログラムは、現在アクティブなアンテナ24で、コマンド1683実行前に実行可能なコマンドを調査する(Ｓ2105)。コマンド1683は、実行予定開始時刻が設定されていないため、前回のコマンド1682実行後すぐに実行するコマンドである。よって、コマンド1683実行前に実行可能なコマンドは存在せず、現在アクティブなアンテナ24と並列に配置されているアンテナ23でも同様に実行可能なコマンドが存在しない(Ｓ2115)。さらに、コマンド1683が終了コマンドではない (Ｓ2125)。
【０１３５】
コマンド1683はWRITEコマンドでありアンテナ未定のアンテナ切り替えコマンドではないので（Ｓ2130）、すぐにコマンド1683を実行する(Ｓ2140)。このコマンド1683の実行には160msを要し、時刻が10:00:00.780になったものとする。
【０１３６】
コマンド実行プログラムは、図23の予約コマンド情報168からコマンド1684を取得する(Ｓ2100)。
【０１３７】
コマンド実行プログラムは、現在アクティブなアンテナ24で、コマンド1684実行前に実行可能なコマンドを調査する(Ｓ2105)。現在時刻が10:00:00.780、コマンド1684の開始時刻は10:00:01.210、アンテナ24のコマンド実行可能終了時刻は10:00:01.000より、アンテナ24でのコマンド実行可能時間は1000ms−780ms=220msとなる。未予約且つ未実行で実行可能なコマンドを図22の実行コマンド情報167から検索すると、コマンド1674が見つかる。
【０１３８】
コマンド実行プログラムは、コマンド1674を実行する(Ｓ2110)。なお、このコマンドの実行には100msを要し、時刻が10:00:00.880になったものとする。
【０１３９】
コマンド実行プログラムは、現在アクティブなアンテナ24で、コマンド1684実行前に実行可能なコマンドを調査する(Ｓ2105)。現在時刻が10:00:00.880、コマンド1684の開始時刻は10:00:01.210、アンテナ24のコマンド実行可能終了時刻は10:00:01.000より、アンテナ24でのコマンド実行可能時間は1000ms−880ms=120msとなる。未予約且つ未実行で実行可能なコマンドを図22の実行コマンド情報167から検索すると、そのようなコマンドは存在しない。
【０１４０】
コマンド実行プログラムは、現在アクティブなアンテナ24と並列なアンテナ23で実行可能なコマンドを調査する(Ｓ2115)。現在時刻が10:00:00.880、コマンド1684の開始時刻は10:00:01.210、アンテナ23のコマンド実行可能終了時刻は10:00:01.000より、アンテナ23でのコマンド実行可能時間は1000ms−880ms=120msとなる。アンテナ24からアンテナ23へのアンテナ切り替えの時間を含めて、実行可能なコマンドを図22の実行コマンド情報167から検索すると、実行可能なコマンドは存在しない (Ｓ2115)。
【０１４１】
コマンド実行プログラムは、コマンド1684が終了コマンドではなく（Ｓ2125）、アンテナ切り替えコマンドであり、切り替え先のアンテナはアンテナ25または26とアンテナ未定である(Ｓ2130)。
【０１４２】
コマンド実行プログラムは、切り替え先のアンテナを選択する(Ｓ2135)。図22の実行コマンド情報167を参照すると、アンテナ25で実行可能で実行していないコマンドはコマンド1673、1675及び1676の3つで、アンテナ26で実行可能で実行していないコマンドはない。そこで、アンテナ25を選択する。
【０１４３】
コマンド実行プログラムは、10:00:01.210まで待ち、アンテナ25へのアンテナ切り替えコマンドを実行する(Ｓ2140)。このコマンド1684の実行には40msを要し、時刻が10:00:01.250になったものとする。  コマンド実行プログラム''は、図23の予約コマンド情報168からコマンド1685を取得する(Ｓ2100)。
【０１４４】
以後、ステップＳ2105とＳ2110とを繰り返し実行し、コマンド1673および1675を実行する。その結果、時刻が10:00:01.450になったものとする。  コマンド実行プログラムは、さらに、現在アクティブなアンテナ25でコマンド1685実行前に実行可能なコマンドを調査する(Ｓ2105)。図22の実行コマンド情報167にコマンド1676が残っている。しかし、コマンド1676の予想時間は100msであり、アンテナ25がアクティブである時間は500ms−450 ms＝50 msであるので、実行可能なコマンドはない。
【０１４５】
コマンド実行プログラムは、現在アクティブなアンテナ25と並列に配置されているアンテナ26で実行可能なコマンドも存在しない（S2115）。コマンド1685は終了コマンドである（S2125）。
【０１４６】
コマンド実行プログラムは、図23の予約コマンド情報168及び図22の実行コマンド情報167の中に未実行のコマンドがあるかをチェックする（Ｓ2145）。図22の実行コマンド情報167のコマンド1676が未実行であるので、どのＲＦタグ（ＵＩＤ）に対する、どのようなコマンドが未実行であるかの警告を出力し（Ｓ2150）、処理を終了する。
【０１４７】
実施例2及び実施例3では、コマンド実行プログラムでコマンドの実行に失敗した場合に、実行可能なコマンドがあるかを調査する際に、失敗したコマンドを再度実行できるようであれば、そのコマンドを選択して再実行しても良い。
【０１４８】
実施例2と実施例3とを比較すると、基本的な処理の流れは同じであるが、処理結果として実施例3では未実行のコマンドを残している。これは、所定の移動方向グループに属するアンテナでないと使用できない場合があるという制約と、アンテナの数が多くなることに伴い、アンテナの切り替えのオーバーヘッド、特に組になっているアンテナ間の切り替え（移動方向グループ間のアンテナ切り替え）のオーバーヘッドがあるためである。
【０１４９】
以上より、ハードウエアとしての制約を受けるアンテナの配置情報およびコマンドの実行性能情報から、適切なRFタグの移動速度を設定することにより、コマンドの再実行も可能なシステムを構築できることになる。
【０１５０】
なお、各実施例ではR/Wに接続するアンテナを切り替えながら、RFタグの検知及びR/Wコマンド等の実行について説明した。すなわち、R/Wとアンテナとの関係が1：Nであり、R/Wの構造が複雑であったり、サイズが大きかったり、高価であったりする場合に有用である。しかし、R/Wの構造が単純化されたり、小型化されたり、安価になった場合は、R/Wとアンテナとの関係が1：1であっても良くなる。このような場合にも各R/Wに接続する各アンテナと移動するRFタグの相対関係が、各実施例で説明したように維持されるならば、本発明の技術の適用は容易であることが理解されるだろう。
【図面の簡単な説明】
【０１５１】
【図１】実施例１及び２の構成を示す。
【図２】アンテナの配置情報の例である。
【図３】コマンド指示情報の例である。
【図４】コマンド実行性能情報の例である。
【図５】RFタグ移動情報の例である。
【図６】R/W制御プログラムの処理フローチャートである。
【図７】RFタグ検出プログラムの処理フローチャートである。
【図８】実施例１のスケジュール作成プログラムの処理フローチャートである。
【図９】実施例１のコマンド実行プログラムの処理フローチャートである。
【図１０】RFタグ検出情報の例である。
【図１１】コマンド実行可能時間情報の例である。
【図１２】実行コマンド情報の例である。
【図１３】予約コマンド情報の例である。
【図１４】コマンドの実行状況を説明する図である。
【図１５】実施例２及び３のスケジュール作成プログラムの処理フローチャートである。
【図１６】実施例２のコマンド実行プログラムの処理フローチャートである。
【図１７】予約コマンド情報の例である。
【図１８】実施例３のR/Wとアンテナの構成例を説明する図である。
【図１９】配置情報の例である。
【図２０】RFタグ検出情報の例である。
【図２１】コマンド実行可能時間情報の例である。
【図２２】実行コマンド情報の例である。
【図２３】予約コマンド情報の例である。
【図２４】実施例３のコマンド実行プログラムの処理フローチャートである。
【符号の説明】
【０１５２】
1…R/W制御装置、11…CPU、12…メモリ、13…入力装置、14…出力装置、15…通信装置、16…記憶装置、161…配置情報、162…コマンド指示情報、163…コマンド実行性能情報、164…RFタグ移動情報、165…RFタグ検出情報、166…コマンド実行可能時間情報、167…実行コマンド情報、168…予約コマンド情報、169…R/W制御プログラム、2…R/W、21、22、23…アンテナ、P0…パレット、P1、P2、P3、P4…商品、T0、T1、T2、T3、T4…RFタグ。
【図１】
2009069983.tif 000003
【図２】
2009069983.tif 000004
【図３】
2009069983.tif 000005
【図４】
2009069983.tif 000006
【図５】
2009069983.tif 000007
【図６】
2009069983.tif 000008
【図７】
2009069983.tif 000009
【図８】
2009069983.tif 000010
【図９】
2009069983.tif 000011
【図１０】
2009069983.tif 000012
【図１１】
2009069983.tif 000013
【図１２】
2009069983.tif 000014
【図１３】
2009069983.tif 000015
【図１４】
2009069983.tif 000016
【図１５】
2009069983.tif 000017
【図１６】
2009069983.tif 000018
【図１７】
2009069983.tif 000019
【図１８】
2009069983.tif 000020
【図１９】
2009069983.tif 000021
【図２０】
2009069983.tif 000022
【図２１】
2009069983.tif 000023
【図２２】
2009069983.tif 000024
【図２３】
2009069983.tif 000025
【図２４】
2009069983.tif 000026