ドキュメントの全体像や他のサンプルプログラムについては、こちらのランディングページをご覧ください。
タカヤ製 UTR-S201 シリーズ(UHF帯)リーダライタを LAN(TCP) 経由で制御するためのサンプルです。USB版サンプル(UTR_USB_sample_1.1.5.py)の構造を踏襲し、通信層のみ TCP に置き換えています。本サンプルは無保証です。検証・学習目的でご利用ください。
このサンプルプログラムは、ROMバージョン確認、コマンドモード切替、送信出力値/周波数チャンネルの取得、インベントリ(タグ読み取り)の実行、RSSIとPC+UIIの抽出・表示、ブザー制御、集計結果の表示/ログ保存、受信フレームのSTX / ETX / SUM / CR 検証といった主要な機能を提供します。
- OS: Windows 10 / 11
- Python: 3.10+
- ネットワーク到達可能な UTR-S201(LANモデル)
- 既定ポート例:9004(装置設定に依存します)
注意: 装置の通信設定(IP、ポートなど)は UTR-RWManager を用いて事前にご確認ください。
- Python を用意: Python 3.10 以上がインストールされていることを確認してください。
- リポジトリのクローン:
git clone https://github.com/TamaruNorio/UTR_LAN_Python.git cd UTR_LAN_Python - 実行:
実行時プロンプトに従い、IP アドレス と TCP ポート を入力します。ポート未入力時は 9004 を使用します。指定回数のインベントリを実行し、結果とログを出力します。
python src/UTR_LAN_sample_1.0.0.py
開発・テスト用の依存関係をインストールします。
py -m pip install -r requirements-dev.txtpytest を実行します。
py -m pytest開発中の基本確認をまとめて実行します。
.\scripts\dev_check.ps1PR作成前の確認をまとめて表示します。
.\scripts\git_preflight.ps1PR本文テンプレートを表示、またはファイルへ保存します。
.\scripts\pr_body.ps1
.\scripts\pr_body.ps1 -OutputPath pr_body.mdこれらのスクリプトは実機通信、real_device_check.py、git push、PR作成、mergeを自動実行しません。
PR作業の開始、公開準備、merge後の同期を補助します。
.\scripts\new_task.ps1 -Branch codex/example-task
.\scripts\publish_pr.ps1 -Message "Add PR helper scripts" -Title "Add PR helper scripts"
.\scripts\sync_after_merge.ps1 -Branch codex/example-taskpublish_pr.ps1 は確認後に git commit と git push を実行し、pr_body.md の生成、クリップボード確認、PR作成URLの表示を行います。クリップボード確認に失敗した場合は pr_body.md を開きます。PR作成とmergeは自動実行しません。
UTRリーダライタ実機の代わりに、localhost 上で mock TCPサーバーを起動できます。
one-tag シナリオ:
py tools/mock_utr_tcp_server.py --scenario one-tagno-tag シナリオ:
py tools/mock_utr_tcp_server.py --scenario no-tag停止する場合は、起動中の PowerShell で Ctrl + C を押します。
mock TCPサーバーを起動した状態で、別の PowerShell から mockクライアントを実行します。
py tools/mock_client_check.pyこの確認では、以下の流れを確認できます。
- ROMバージョン確認コマンド送信
- ACK応答受信、ROM文字列解析
- RAM指定のコマンドモード設定コマンド送信
- ACK応答受信
- UHF_Inventory コマンド送信
- one-tag / no-tag シナリオの応答受信
- 送信HEX、受信HEX、解析結果の表示
実機確認の前に、まず UTRRWManager で以下を確認します。
- TCP/IP接続確認
- ROMバージョン読み取り
- Inventory 1回
- 送受信ログの TX / RX 保存
- Pythonサンプルの TX / RX との比較
通信コマンド仕様は docs/protocol/ を正とします。
UTRRWManager の送受信ログは、実機確認用および Pythonサンプルとの比較用の基準ログとして扱います。
ただし、通信コマンド仕様の正は docs/protocol/ とします。
実機LAN確認には tools/real_device_check.py を使用します。
py tools/real_device_check.py --host <実機IP> --port 9004--host は必須です。デフォルトの実機IPは設定していません。
127.0.0.1 以外へ接続する場合は、実行前に対象IP、ポート、実行内容、期待結果、ログ保存先、禁止操作が表示されます。内容を確認し、YES と入力した場合のみ接続を開始します。
このツールで実行する処理は以下のみです。
- TCP接続確認
- ROMバージョン確認
- RAM指定のコマンドモード設定
- UHF_Inventory 1回
- ログ保存
ログは logs/real_device/ に保存されます。実機IPなどのネットワーク情報を含む可能性があるため、logs/real_device/ はGit管理しないでください。
実機確認前には、まず UTRRWManager で基準ログを取得し、UTRRWManager の TX/RX と Pythonサンプルの TX/RX を比較してください。
初期実機確認では、以下の操作を行いません。
- FLASH書き込み
- FLASH初期化
- FLASH設定復元
- RF出力設定変更
- 周波数設定変更
- ブザー制御
- LED&ブザー制御
- 連続Inventory
- リスタート
- RFタグ書き込み系コマンド
.vscode/launch.json に以下を保存してください(debugpy使用)。
{
"version": "0.2.0",
"configurations": [
{
"name": "Run: UTR LAN sample",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/src/UTR_LAN_sample_1.0.0.py",
"console": "integratedTerminal",
"cwd": "${workspaceFolder}",
"justMyCode": true,
"env": {
"PYTHONUNBUFFERED": "1"
}
}
]
}UTR_LAN_PYTHON/
├─ src/
│ └─ UTR_LAN_sample_1.0.0.py # 本サンプル(LAN版)
├─ .gitignore
└─ README.md # このファイル
- TCP 接続確立(クライアント)
- ROMバージョン確認(ACK/NACK判定)
- コマンドモード切替
- 送信出力値・周波数チャンネルの取得
- インベントリ(指定回数)
- ブザー制御(応答あり)
- 集計表示/ログ保存 → 切断
受信処理は 1バイトずつ読み取り、ヘッダ/フッタおよび SUM を検証してフレーム確定します。ACK/NACK を受信した時点で
communicate()は戻ります。
- 装置 IP / ポート:実機の設定に合わせて入力(デフォルト 9004)
- タイムアウト:
TcpSession(timeout=1.0)、communicate(..., timeout=...)で変更可。タグ枚数が多い環境では インベントリのみ 3秒 など長めを推奨。 - 繰り返し回数:1〜100 の範囲で指定。
本リポジトリは LICENSE に記載の MIT License に基づいて公開しています。
本サンプルプログラムは、TAKAYA UTR-S201シリーズの通信確認・学習・検証を目的としたサンプルです。
すべての条件分岐や実運用環境での動作を網羅・保証するものではありません。
実際の機器設定や運用確認では、通信プロトコル仕様書、機器取扱説明書、UTRRWManager等の公式資料・ユーティリティを併用し、実機の通信ログを確認してください。
- 0.2.0 (2026-05-19): 通信プロトコル資料、機器取扱説明書、UTRRWManager確認手順、mock TCPサーバー、mockクライアント、実機LAN確認ツール、pytestによる検証基盤を追加。UTRRWManagerの送受信ログを基準ログとして、PythonサンプルのTX/RXと比較できる構成に整理。
- 0.1.0 (2024-06-06): 初版。LAN受信のフレーム復元とInventory2最小動作を実装。