このリポジトリは、TAKAYA製 RFID リーダライタ UTR-S201 シリーズを USBシリアル接続で扱う Python サンプルです。
本サンプルは無保証で提供される確認用コードです。実運用で利用する場合は、機器設定、通信条件、プロトコル仕様、アンテナ接続、周辺環境を確認してください。
通常使う入口は、原則として次の2つです。
py .\src\utr_usb_sample.py主な処理:
- USBシリアル接続
- ROMバージョン確認
- コマンドモード切替
- 送信出力、周波数、Inventoryパラメータの読み取り表示
- UTR-SUN02-4CH / USM02 の送信出力一時変更確認
- UTR-SUN02-4CH のアンテナ接続確認と順次Inventory
- Inventory実行
- 送信出力とアンテナ設定の復元
- 結果ファイル保存
- シリアル接続クローズ
py .\src\utr_8ch_sequential_inventory_cli.py主な処理:
- USBシリアル接続
- ROMバージョン確認
- UTR-SUN02-8CH / USM08 判定
- コマンドモード切替
- Inventory前のリーダ設定表示
- UHF_GET_INVENTORY_PARAM の読み取り表示
- 開始前の使用アンテナ番号読み取り
- ANT1〜ANT8の接続チェック
- 接続OKアンテナから
1、1,3、all、qで選択 - 選択順に使用アンテナ番号設定とInventoryを実行
- 終了時に開始前の使用アンテナ番号へ自動復元
- 必要に応じてANT別サマリをCSV/JSON保存
USBシリアル接続で UHF_INVENTORY を指定回数だけ連続実行し、読み取り結果と集計をCSVへ保存する場合は、以下を実行します。
py tools/usb_inventory_batch.py --port COM6 --baudrate 115200 --repeat 10 --interval 0.1主なCLI引数は以下です。
--port: COMポート名です。例:COM6--baudrate: ボーレートです。既定値は115200です。--repeat: Inventory実行回数です。既定値は10です。--interval: 各Inventory後の待ち時間秒です。既定値は0.1です。--no-buzzer: 読み取り結果ブザーを送信しません。--csv: CSV保存先を指定します。未指定時は自動生成します。
CSV保存先の既定値は以下です。
logs/usb_sample/inventory_batch_YYYYMMDD_HHMMSS.csv
CSV通常行には、主に timestamp、iteration、read_time_sec、expected_read_count、actual_tag_count、rssi、pc_uii、output_power_dbm、channel、frequency_mhz、note を保存します。
CSV末尾には SUMMARY 行として、total_iterations、total_read_time_sec、total_tag_responses、unique_tags、average_tag_count、min_rssi、max_rssi、average_rssi を保存します。読み取りが0件の場合、RSSI集計値は空欄になります。
- FLASHデータへの書き込みは行いません。
UHF_SET_INVENTORY_PARAMは自動送信しません。- 周波数設定は変更しません。
- 送信出力の一時変更は、対象機種確認後、ユーザー確認を経て、コマンドモード用パラメータだけへ送信します。
- 8CH順次Inventoryでは、使用アンテナ番号設定をコマンドモード用パラメータだけへ送信します。FLASHへは保存しません。
- 8CH終了時は、開始前に読み取った内部アンテナ番号・外部アンテナ番号へ自動復元します。
- Ctrl+Cや例外時も、可能な範囲で
finally側から復元を試みます。 - USB Inventory batch runner は
UHF_SET_INVENTORY_PARAMを自動送信しません。 - USB Inventory batch runner はFLASH書き込み、送信出力変更、周波数変更、8CHアンテナ切替を行いません。
- USB Inventory batch runner は実機への永続設定変更を行いません。
- 実タグIDを含む
PC+UII/PC+EPCは、GitHub、Issue、PR本文、公開ログへ載せません。
- ROM_VERSION_CHECK
- COMMAND_MODE_SET
- UHF_GET_INVENTORY_PARAM
- UHF_INVENTORY
- ブザー制御
- NACK応答表示
確認済み:
送信出力: 24.0 dBm -> 12.0 dBm -> 24.0 dBm
COM: COM6
ボーレート: 115200 bps
Inventory実行: あり
pytest: 234 passed
対応済み:
- 送信出力の一時変更
- 終了時の送信出力復元
- 復元後の読み戻し
- ANT0〜ANT3接続確認
- 複数アンテナ順次Inventory
- PC+UIIの画面表示マスク、結果ファイルマスク
確認済み:
接続OK: ANT1, ANT3
選択: all
順序: ANT1 -> ANT3
開始前設定: ANT3/EXT5 / 使用アンテナ番号 44h
終了時復元: ANT3/EXT5 / 使用アンテナ番号 44h
対応済み:
- ANT1〜ANT8接続チェック
- 接続OKアンテナの候補表示
1、1,3、all、q入力- 複数アンテナ順次Inventory
- ANT別読み取り枚数、Inventory実行回数、スキップ回数の集計
- 通常終了時の開始前設定復元
- Ctrl+Cや例外時の復元試行
- 復元前の受信バッファクリア
- 復元応答がACK/NACK以外の場合の1回再試行
- ANT別サマリCSV/JSON保存
未確認:
8CH Ctrl+C時の最終復元成功ログ
送信出力一時変更中のCtrl+C復元
変更送信後、読み戻し例外発生時のfinally復元
UTR_USB_Python_CodeX/
├─ src/
│ ├─ utr_usb_sample.py
│ ├─ utr_usb_sample_legacy.py
│ ├─ utr_usb_inventory_with_output_power.py
│ ├─ utr_8ch.py
│ ├─ utr_8ch_antenna_diagnostics_cli.py
│ ├─ utr_8ch_sequential_inventory_cli.py
│ ├─ utr_antenna.py
│ ├─ utr_commands.py
│ ├─ utr_inventory.py
│ ├─ utr_output_power.py
│ ├─ utr_output_power_change.py
│ ├─ utr_output_power_inventory_integration.py
│ ├─ utr_output_power_io.py
│ ├─ utr_output_power_readout.py
│ ├─ utr_output_power_temporary_change.py
│ ├─ utr_output_power_temporary_change_cli.py
│ ├─ utr_privacy.py
│ ├─ utr_protocol.py
│ ├─ utr_reader_settings.py
│ ├─ utr_result_export.py
│ └─ utr_serial_ports.py
├─ docs/
├─ scripts/
├─ tests/
├─ tools/
├─ requirements.txt
├─ requirements-dev.txt
└─ pytest.ini
| ファイル | 役割 |
|---|---|
src/utr_usb_sample.py |
標準入口。通常はこのファイルを実行します。 |
src/utr_usb_sample_legacy.py |
旧サンプル由来の既存関数群です。現時点では標準入口から読み込まれるため削除しません。 |
src/utr_usb_inventory_with_output_power.py |
送信出力一時変更つきInventoryフロー本体です。 |
src/utr_8ch.py |
8CH機種判定、ANT番号変換、使用アンテナ番号設定フレーム生成補助です。 |
src/utr_8ch_antenna_diagnostics_cli.py |
8CH読み取り専用アンテナ診断CLIです。現時点では診断用として残します。 |
src/utr_8ch_sequential_inventory_cli.py |
8CH複数アンテナ順次Inventoryの正式入口です。単一アンテナ選択もこのCLIで扱います。 |
src/utr_antenna.py |
アンテナ接続確認、アンテナ切替設定、機種プロファイル補助です。 |
src/utr_commands.py |
コマンド定義とフレーム生成補助です。 |
src/utr_inventory.py |
Inventory応答解析補助です。 |
src/utr_output_power.py |
送信出力値の dBm / raw値 / little-endian bytes 変換補助です。 |
src/utr_output_power_change.py |
送信出力設定書き込みフレームの計画補助です。 |
src/utr_output_power_inventory_integration.py |
Inventory前に送信出力一時変更を提案できるか判定します。 |
src/utr_output_power_io.py |
送信出力設定の読み取りと、作成済み送信出力フレームの送信確認を行う共通I/Oです。 |
src/utr_output_power_readout.py |
送信出力読み取りレスポンスからキャリア関連時間を解析します。 |
src/utr_output_power_temporary_change.py |
一時変更用フレームと復元用フレームをセットで作成します。 |
src/utr_output_power_temporary_change_cli.py |
送信出力一時変更単体確認CLIです。共通I/Oは utr_output_power_io.py に分離済みです。 |
src/utr_privacy.py |
PC+UIIの画面表示・保存時マスク補助です。 |
src/utr_protocol.py |
フレーム、SUM、NACKなどのプロトコル補助です。 |
src/utr_reader_settings.py |
リーダ設定表示補助です。 |
src/utr_result_export.py |
Inventory結果のCSV/JSON保存補助です。 |
src/utr_serial_ports.py |
COMポート選択補助です。 |
tools/usb_inventory_batch.py |
USB接続でInventoryを連続実行し、通常行とSUMMARY行をCSV保存するbatch runnerです。 |
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
pip install -r requirements-dev.txtpytestを直接実行する場合:
py -m pytest開発チェックをまとめて実行する場合:
powershell -ExecutionPolicy Bypass -File scripts/dev_check.ps1コミットやPR前の確認を行う場合:
powershell -ExecutionPolicy Bypass -File scripts/git_preflight.ps1Inventory結果は以下に保存されます。
inventory_results.txt
inventory_results.csv
inventory_results.json
8CH順次Inventoryサマリは以下に保存できます。
8ch_sequential_inventory_summary.csv
8ch_sequential_inventory_summary.json
これらの結果ファイルはGit管理に入れないでください。
- UHFリーダライタ開発者向け Quick Start
- 送信出力一時変更CLI 実機確認手順
- 送信出力一時変更つきInventory 実機確認手順
- アンテナ選択・順次Inventory確認メモ
- UTR-SUN02-8CH 複数アンテナ順次Inventory確認手順
- UTRRWManager 8CH設定とPython制御の対応メモ
- UHF Gen2 NACKエラー対応メモ
- USB実機確認メモ
- UHF Inventory応答解析メモ
- UTRRWManagerなどで、接続条件と機器状態を事前確認してください。
- COMポート、ボーレート、電源、アンテナ接続、タグ位置を確認してください。
- UTRシリーズの標準確認ボーレートは 115200 bps です。
- 19200 bps設定の機器を使う場合は、実行時に
19200を明示入力してください。 - 実測PC/UII、シリアル番号、顧客名、IPアドレス、未マスクのログをGitHubへ載せないでください。
- 8CH Ctrl+C時の最終復元成功ログを取得する。
- 送信出力一時変更中のCtrl+C時の復元確認を行う。
src/utr_output_power_temporary_change_cli.pyを単体確認CLIとして残すか、標準入口へ統合して削除するか検討する。src/utr_usb_sample_legacy.pyの依存を段階的に解消し、将来的な削除を検討する。- READMEが再び肥大化した場合は、詳細説明をdocsへ分離する。
このリポジトリのソースコードは MIT License の下で公開されています。詳細は LICENSE を確認してください。