From ed362152a1cb1afc19191c50829cd65f958db190 Mon Sep 17 00:00:00 2001 From: Tamaru Norio <158992938+TamaruNorio@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:14:28 +0900 Subject: [PATCH 1/2] Update README for 8CH auto restore behavior --- README.md | 73 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index c08521e..b33c278 100644 --- a/README.md +++ b/README.md @@ -48,17 +48,20 @@ py .\src\utr_8ch_sequential_inventory_cli.py 3. コマンドモードへ切り替える。 4. Inventory前のリーダライタ設定を読み取り表示する。 5. `UHF_GET_INVENTORY_PARAM` を読み取り表示する。 -6. ANT1〜ANT8の接続チェックを実行する。 -7. 接続OKアンテナだけを候補表示する。 -8. `1`、`1,3`、`all`、`q` の入力を受け付ける。 -9. 選択した全ANTの使用アンテナ番号設定フレームを事前表示する。 -10. 最初に1回だけ確認し、選択順に使用アンテナ番号設定を送信する。 -11. ACKならそのANTでInventoryする。 -12. NACKまたはACK/NACKなしなら、そのANTをスキップする。 -13. ANT別に読み取り枚数、Inventory実行回数、スキップ回数を表示する。 -14. 終了時に、最後に使用したANTを表示する。 -15. 必要に応じて、今回選択した接続OKアンテナのいずれかへ使用アンテナ番号を戻す。 -16. シリアル接続を閉じる。 +6. 変更前の使用アンテナ番号を読み取り、終了時復元用に保持する。 +7. 変更前設定を読み取れない場合は、順次Inventoryを開始しない。 +8. ANT1〜ANT8の接続チェックを実行する。 +9. 接続OKアンテナだけを候補表示する。 +10. `1`、`1,3`、`all`、`q` の入力を受け付ける。 +11. 選択した全ANTの使用アンテナ番号設定フレームを事前表示する。 +12. 最初に1回だけ確認し、選択順に使用アンテナ番号設定を送信する。 +13. ACKならそのANTでInventoryする。 +14. NACKまたはACK/NACKなしなら、そのANTをスキップする。 +15. ANT別に読み取り枚数、Inventory実行回数、スキップ回数を表示する。 +16. 終了時に、開始前に読み取った使用アンテナ番号へ自動復元する。 +17. Ctrl+Cや例外時も、可能な範囲でシリアルクローズ前に自動復元を試みる。 +18. 必要に応じて、8CH順次InventoryサマリをCSV/JSONへ保存する。 +19. シリアル接続を閉じる。 ## 重要な制約 @@ -69,7 +72,8 @@ py .\src\utr_8ch_sequential_inventory_cli.py - FLASHデータへの書き込みは行いません。 - `UHF_SET_INVENTORY_PARAM` は自動送信しません。 - UTR-SUN02-8CH / USM08 の順次Inventory CLIでは、使用アンテナ番号設定をコマンドモード用パラメータへ送信します。FLASHへは保存しません。 -- UTR-SUN02-8CH / USM08 では、ANT1=使用アンテナ番号 `00h`、ANT3=使用アンテナ番号 `40h` のように、4CH機とは異なる番号体系を使います。 +- UTR-SUN02-8CH / USM08 では、Inventory対象への一時切替時に ANT1=使用アンテナ番号 `00h`、ANT2=`20h`、ANT3=`40h`、ANT4=`60h`、ANT5=`80h`、ANT6=`A0h`、ANT7=`C0h`、ANT8=`E0h` を使います。 +- ただし、開始前の変更前設定は外部アンテナ番号が `00h` 固定とは限りません。終了時は開始前に読み取った内部アンテナ番号・外部アンテナ番号へ自動復元します。 - UTR-SUN02V-8CH と UTR-SUN02-8CH はROMシリーズ名と機種識別までは扱いますが、UTR-SUN02-8CH用の実送信CLIは USM08 を対象にします。 - 実タグIDを含む `PC+UII` / `PC+EPC` は、GitHub、Issue、PR本文、公開ログへ載せません。 - 実行時に `PC+UIIを画面表示でマスクしますか?` で `y` を選ぶと、画面表示だけ `PC+UII: 省略` にできます。 @@ -86,8 +90,11 @@ py .\src\utr_8ch_sequential_inventory_cli.py - UTR-SUN02-4CHでは、`0`、`1`、`0,1`、`all` 入力による複数アンテナの順次切替Inventoryに対応済みです。 - UTR-SUN02-8CH / USM08では、ANT1〜ANT8の接続チェック、接続OKアンテナの候補表示、`1`、`1,3`、`all`、`q` 入力による複数アンテナ順次Inventoryに対応済みです。 - UTR-SUN02-8CH / USM08では、ANT1とANT3接続状態で、`all` 選択による ANT1 -> ANT3 順次Inventoryを実機確認済みです。 -- UTR-SUN02-8CH / USM08では、終了時に最後に使用したANTを表示し、ANT1へ使用アンテナ番号を戻す処理を実機確認済みです。 +- UTR-SUN02-8CH / USM08では、開始前に変更前の使用アンテナ番号を読み取り、通常終了時に変更前設定へ自動復元できることを実機確認済みです。 +- 実機確認例では、開始前設定として `ANT3/EXT5`、使用アンテナ番号 `44h` を読み取り、終了時に `ANT3/EXT5 / 44h` へ自動復元できています。 +- Ctrl+Cや例外時も、可能な範囲で `finally` 側から変更前設定へ自動復元を試みます。異常終了時の実機確認は別途実施してください。 - Inventory結果保存時、CSV/JSONへ `antenna_number`、`antenna_label`、`antenna_description` を保存します。 +- 8CH順次Inventoryサマリ保存時、CSV/JSONへANT別のInventory実行回数、読み取り枚数、スキップ回数、復元結果を保存します。PC+UII実値は保存しません。 - Inventory未実行時は、結果ファイルを保存しません。 - 既存CSVのヘッダーが旧形式の場合は、`inventory_results_legacy_YYYYMMDD_HHMMSS.csv` に退避してから現行ヘッダーで保存します。 - pytest と GitHub Actions による確認運用を行っています。 @@ -195,14 +202,16 @@ py .\src\utr_8ch_sequential_inventory_cli.py 1. COMポート番号またはCOM名。 2. ボーレート。未入力なら 115200 bps。 -3. 接続OKアンテナから、Inventory対象を `1`、`1,3`、`all`、`q` で選択する。 -4. 表示された使用アンテナ番号設定フレームを確認する。 -5. 順次Inventoryを開始する場合は `y` を入力する。 -6. ブザー通知の有無を選ぶ。 -7. PC+UII画面表示マスクの有無を選ぶ。 -8. 選択ANT一巡の繰り返し回数を入力する。 -9. `q` でInventoryループを終了する。 -10. 必要に応じて、最後に使用したANTから指定ANTへ使用アンテナ番号を戻す。 +3. 変更前の使用アンテナ番号読み取り結果を確認する。 +4. 接続OKアンテナから、Inventory対象を `1`、`1,3`、`all`、`q` で選択する。 +5. 表示された使用アンテナ番号設定フレームを確認する。 +6. 順次Inventoryを開始する場合は `y` を入力する。 +7. ブザー通知の有無を選ぶ。 +8. PC+UII画面表示マスクの有無を選ぶ。 +9. 選択ANT一巡の繰り返し回数を入力する。 +10. `q` でInventoryループを終了する。 +11. 終了時に、開始前に読み取った使用アンテナ番号へ自動復元されることを確認する。 +12. 必要に応じて、8CH順次InventoryサマリをCSV/JSONへ保存する。 実機確認済みの例です。 @@ -211,12 +220,12 @@ py .\src\utr_8ch_sequential_inventory_cli.py 選択: all 選択順: ANT1 -> ANT3 Inventory実行回数: 4 -合計読み取り枚数: 29 枚 -ANT1: 読み取り 2 枚 / Inventory実行 2 回 / スキップ 0 回 -ANT3: 読み取り 27 枚 / Inventory実行 2 回 / スキップ 0 回 +合計読み取り枚数: 172 枚 +ANT1: 読み取り 8 枚 / Inventory実行 2 回 / スキップ 0 回 +ANT3: 読み取り 164 枚 / Inventory実行 2 回 / スキップ 0 回 +開始前設定: ANT3/EXT5 / 使用アンテナ番号 44h 最後に使用したANT: ANT3 -戻し先: ANT1 -戻し完了: ANT1 / 使用アンテナ番号 00h +自動復元完了: ANT3/EXT5 / 使用アンテナ番号 44h ``` ## テスト実行 @@ -248,6 +257,7 @@ powershell -ExecutionPolicy Bypass -File scripts/git_preflight.ps1 - [送信出力一時変更つきInventory 実機確認手順](docs/inventory_with_temporary_output_power_check.md) - [アンテナ選択・順次Inventory確認メモ](docs/antenna_selection_and_inventory.md) - [UTR-SUN02-8CH 複数アンテナ順次Inventory確認手順](docs/8ch_sequential_inventory_cli_check.md) +- [UTRRWManager 8CH設定とPython制御の対応メモ](docs/utrrwmanager_8ch_settings_mapping.md) - [RSSI検証計画](docs/rssi_validation_plan.md) - [UTRRWManager比較テンプレート](docs/utr_rw_manager_comparison_template.md) - [UHF Gen2 NACKエラー対応メモ](docs/nack_error_handling.md) @@ -278,6 +288,7 @@ USB実機通信を行う前に、UTRRWManagerなどで接続条件と機器状 - CSV/JSONには、取得できる場合は `antenna_number`、`antenna_label`、`antenna_description` も保存されます。 - 既存CSVのヘッダーが旧形式の場合は、旧CSVを `inventory_results_legacy_YYYYMMDD_HHMMSS.csv` に退避し、新しい `inventory_results.csv` を現行ヘッダーで作成します。 - `inventory_results.txt`、`inventory_results.csv`、`inventory_results.json`、`inventory_results_legacy_*.csv` はGit管理に入れないでください。 +- 8CH順次Inventoryサマリは `8ch_sequential_inventory_summary.csv` と `8ch_sequential_inventory_summary.json` に保存できます。この2ファイルはGit管理に入れないでください。 ## 送信出力一時変更の扱い @@ -319,13 +330,16 @@ py .\src\utr_8ch_sequential_inventory_cli.py ``` - UHF_CheckAntennaでは `00h`〜`07h` が ANT1〜ANT8 に対応します。 -- 使用アンテナ番号設定では、ANT1=`00h`、ANT2=`20h`、ANT3=`40h`、ANT4=`60h`、ANT5=`80h`、ANT6=`A0h`、ANT7=`C0h`、ANT8=`E0h` を使います。 +- Inventory対象への一時切替時は、ANT1=`00h`、ANT2=`20h`、ANT3=`40h`、ANT4=`60h`、ANT5=`80h`、ANT6=`A0h`、ANT7=`C0h`、ANT8=`E0h` を使います。 +- 開始前に、変更前の使用アンテナ番号を読み取り、内部アンテナ番号と外部アンテナ番号を保持します。 +- 開始前設定は、外部アンテナ番号 `00h` 固定とは限りません。実機確認では `ANT3/EXT5`、使用アンテナ番号 `44h` の例があります。 - 接続OKアンテナだけを候補表示します。 - Inventory対象アンテナとして `1`、`1,3`、`all`、`q` を入力できます。 - 複数アンテナ選択時は、同時使用ではなく、ANT1→ANT3のように順番に切り替えてInventoryします。 - 使用アンテナ番号設定は、コマンドモード用パラメータだけへ送信します。FLASHは変更しません。 - NACKまたはACK/NACKなしの場合、そのANTはスキップします。 -- 終了時に最後に使用したANTを表示し、必要に応じて今回選択した接続OKアンテナのいずれかへ戻せます。 +- 終了時は、開始前に読み取った使用アンテナ番号へ自動復元します。 +- Ctrl+Cや例外時も、可能な範囲でシリアルクローズ前に自動復元を試みます。 ## セキュリティ・機密情報の注意 @@ -349,10 +363,11 @@ RSSI: -xx.x dBm ## 今後の作業候補 -- UTR-SUN02-8CH順次Inventory結果をCSV/JSONへ保存する。 +- 標準Inventory側の送信出力一時変更について、変更送信後の復元保証をさらに強化する。 - ANT別の平均RSSI、最小RSSI、最大RSSI、読み取り成功率を集計する。 - UTRRWManager側ログとPython側ログを比較する。 - NACK/応答なし発生時のANT別エラー集計を強化する。 +- Ctrl+Cや応答なしなど、異常終了時の実機確認結果を追加する。 - 実機確認結果を踏まえて、サンプルとドキュメントを継続更新する。 ## ライセンス From f65ea8f49e9afdce336a11bde49bdc8613ffa677 Mon Sep 17 00:00:00 2001 From: Tamaru Norio <158992938+TamaruNorio@users.noreply.github.com> Date: Mon, 22 Jun 2026 14:41:50 +0900 Subject: [PATCH 2/2] Update README for 8CH restore retry behavior --- README.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b33c278..86e754f 100644 --- a/README.md +++ b/README.md @@ -60,8 +60,10 @@ py .\src\utr_8ch_sequential_inventory_cli.py 15. ANT別に読み取り枚数、Inventory実行回数、スキップ回数を表示する。 16. 終了時に、開始前に読み取った使用アンテナ番号へ自動復元する。 17. Ctrl+Cや例外時も、可能な範囲でシリアルクローズ前に自動復元を試みる。 -18. 必要に応じて、8CH順次InventoryサマリをCSV/JSONへ保存する。 -19. シリアル接続を閉じる。 +18. 復元前には、割り込み前のInventory応答が残らないよう受信バッファをクリアする。 +19. 復元応答としてACK/NACK以外を受信した場合は、残留応答の可能性を考慮して1回だけ再試行する。 +20. 必要に応じて、8CH順次InventoryサマリをCSV/JSONへ保存する。 +21. シリアル接続を閉じる。 ## 重要な制約 @@ -74,6 +76,8 @@ py .\src\utr_8ch_sequential_inventory_cli.py - UTR-SUN02-8CH / USM08 の順次Inventory CLIでは、使用アンテナ番号設定をコマンドモード用パラメータへ送信します。FLASHへは保存しません。 - UTR-SUN02-8CH / USM08 では、Inventory対象への一時切替時に ANT1=使用アンテナ番号 `00h`、ANT2=`20h`、ANT3=`40h`、ANT4=`60h`、ANT5=`80h`、ANT6=`A0h`、ANT7=`C0h`、ANT8=`E0h` を使います。 - ただし、開始前の変更前設定は外部アンテナ番号が `00h` 固定とは限りません。終了時は開始前に読み取った内部アンテナ番号・外部アンテナ番号へ自動復元します。 +- 異常終了時の自動復元では、受信バッファ内に残ったInventory応答をクリアしてから復元コマンドを送信します。 +- 復元コマンドの再試行は、同じ復元フレームを1回だけ送信します。 - UTR-SUN02V-8CH と UTR-SUN02-8CH はROMシリーズ名と機種識別までは扱いますが、UTR-SUN02-8CH用の実送信CLIは USM08 を対象にします。 - 実タグIDを含む `PC+UII` / `PC+EPC` は、GitHub、Issue、PR本文、公開ログへ載せません。 - 実行時に `PC+UIIを画面表示でマスクしますか?` で `y` を選ぶと、画面表示だけ `PC+UII: 省略` にできます。 @@ -92,7 +96,9 @@ py .\src\utr_8ch_sequential_inventory_cli.py - UTR-SUN02-8CH / USM08では、ANT1とANT3接続状態で、`all` 選択による ANT1 -> ANT3 順次Inventoryを実機確認済みです。 - UTR-SUN02-8CH / USM08では、開始前に変更前の使用アンテナ番号を読み取り、通常終了時に変更前設定へ自動復元できることを実機確認済みです。 - 実機確認例では、開始前設定として `ANT3/EXT5`、使用アンテナ番号 `44h` を読み取り、終了時に `ANT3/EXT5 / 44h` へ自動復元できています。 -- Ctrl+Cや例外時も、可能な範囲で `finally` 側から変更前設定へ自動復元を試みます。異常終了時の実機確認は別途実施してください。 +- Ctrl+Cや例外時も、可能な範囲で `finally` 側から変更前設定へ自動復元を試みます。 +- Ctrl+C直前のInventory応答が残る場合に備え、復元前に受信バッファをクリアし、必要に応じて同じ復元フレームを1回だけ再送します。 +- Ctrl+C時の最終的な復元成功確認は、PR #70 反映後に実機で確認してください。 - Inventory結果保存時、CSV/JSONへ `antenna_number`、`antenna_label`、`antenna_description` を保存します。 - 8CH順次Inventoryサマリ保存時、CSV/JSONへANT別のInventory実行回数、読み取り枚数、スキップ回数、復元結果を保存します。PC+UII実値は保存しません。 - Inventory未実行時は、結果ファイルを保存しません。 @@ -211,7 +217,8 @@ py .\src\utr_8ch_sequential_inventory_cli.py 9. 選択ANT一巡の繰り返し回数を入力する。 10. `q` でInventoryループを終了する。 11. 終了時に、開始前に読み取った使用アンテナ番号へ自動復元されることを確認する。 -12. 必要に応じて、8CH順次InventoryサマリをCSV/JSONへ保存する。 +12. Ctrl+C確認では、Inventory中断後に受信バッファクリアと自動復元再試行が行われることを確認する。 +13. 必要に応じて、8CH順次InventoryサマリをCSV/JSONへ保存する。 実機確認済みの例です。 @@ -340,6 +347,8 @@ py .\src\utr_8ch_sequential_inventory_cli.py - NACKまたはACK/NACKなしの場合、そのANTはスキップします。 - 終了時は、開始前に読み取った使用アンテナ番号へ自動復元します。 - Ctrl+Cや例外時も、可能な範囲でシリアルクローズ前に自動復元を試みます。 +- Ctrl+C直前のInventory応答が受信バッファに残る場合があるため、復元前に受信バッファをクリアします。 +- 復元応答としてACK/NACK以外を受信した場合、同じ復元フレームを1回だけ再送します。 ## セキュリティ・機密情報の注意