﻿# Non Freeze FW アップデートツール

Non Freeze (NF-Z200 / NF-Z400) のファームウェアを LAN 経由で更新するツールです。
無線 LAN 区間を含むネットワークでも安定して更新できるように、通信の再送と書き込み後の検証を備えています。

## 対応機種

- NF-Z200
- NF-Z400

## 動作環境

- Windows 10 / 11。64 ビット版と 32 ビット版の exe を別フォルダで配布しています。お使いの Windows に合わせてどちらかを使用してください (64 ビット Windows では 64 ビット版を推奨)
- 作業 PC と Non Freeze 本体が同一 LAN 内にあること (同一サブネットを推奨)
- ネットワーク経路で UDP 6234 番ポートの通信が許可されていること
- Python やその他ソフトウェアのインストールは不要です (単体 exe)

## 配布物

| ファイル | 内容 |
|---|---|
| `NonFreezeFWupdater.exe` | 本ツール本体 (配布フォルダ名の `_64bit` / `_32bit` が対応する Windows を示します) |
| `README.txt` | 本書 |

ファームウェアファイル (`*.hex`) は別途提供されるものを使用してください。

## 使い方

1. `NonFreezeFWupdater.exe` をダブルクリックして起動します。
2. 本体の IP アドレスを入力します (初期値 `192.168.22.111`)。
3. 「参照」からファームウェアファイル (`*.hex`) を選択します。
4. 「更新開始」を押します。ツールは本体の応答を待つ状態になります。
5. 本体の Web 画面からシステムを再起動します。再起動後、本体前面の Status LED が高速点滅している間 (約 30 秒) にツールが自動で更新を開始します。
6. 進捗バーが 100 % になり、検証が完了すると本体が自動で再起動し、「更新完了」と表示されます。

有線 LAN では 1 分程度、無線 LAN では数分で完了します。

## 注意事項

- 更新中は本体の電源を切らないでください。
- 更新中にツールを閉じたり、通信が長時間途絶した場合、本体は更新待ち状態のまま停止します。その場合はツールを再度起動し、「更新開始」からやり直してください。本体の再起動操作は不要です。
- 更新が途中で失敗して本体のファームウェアが消えた状態では、本体は「約 30 秒の更新待ち → 再起動」を繰り返します (Status LED の高速点滅が繰り返される)。この状態でも「更新開始」を押せばやり直せます。自動再起動は本体の Web に接続できないため失敗しますが、ツールはそのまま更新待ちの本体を探して続行します。
- 更新開始後にツールが「本体の応答がありません」と表示した場合は、本体の再起動が行われていないか、ネットワーク経路で UDP 6234 番が遮断されている可能性があります。ルーターやセキュリティソフトの設定を確認してください。
- ルーターのポート変換や VPN を経由した遠隔からの更新も可能ですが、次の条件を満たす場合に限ります。
  - 本体のネットワーク設定が固定 IP アドレスであること。更新中の本体は設定に保存された固定 IP で待ち受けるため、DHCP 運用の本体は更新途中で通信が途絶した場合にアドレスが変わり、遠隔から復旧できなくなるおそれがあります。
  - 本体のデフォルトゲートウェイが正しく設定されていること。
  - 経路上で UDP 6234 番ポートと本体の HTTP ポートが本体まで届くこと (ポート変換の設定を含む)。
  - 遅延の大きい回線 (モバイル回線など) では所要時間が 10 分程度まで延びます。
  上記を満たさない環境で遠隔更新を行った場合の復旧には、現地での作業が必要になることがあります。
- 更新するバージョンの組み合わせによっては、更新後に本体の設定値 (ネットワーク設定以外) が初期値に戻ります。更新前に必ず設定値を保存 (エクスポート) し、更新後に復元 (インポート) してください。手順は本体の取扱説明書を参照してください。
- 本ツールは書き込み後に本体側の内容を検証し、一致したときだけ本体を再起動します。検証で不一致になった場合は本体を再起動させずに停止するので、「再実行」で消去からやり直してください。

## 動作ログ

実行結果は exe と同じフォルダの `logs` 内に保存されます。問い合わせの際はこのログを添付してください。

```
logs/fwup_{IPアドレス}_{日付}_{時刻}.log
```

exe の場所に書き込めない場合 (読み取り専用のフォルダなど) は、`%LOCALAPPDATA%\NonFreezeFWupdater\logs` に保存されます。実際の保存先はツールの画面に表示されます。

## コマンドラインでの実行

GUI を使わずに実行することもできます。コマンドプロンプトから次のように実行してください。

```
NonFreezeFWupdater.exe --ip 192.168.22.111 --hex firmware.hex
```

- 自動再起動を使う場合は `--reboot-user <ログインID> --reboot-pass <パスワード>` を付けます。付けない場合、ツールは本体の応答待ちになるので、**本体の Web 画面から再起動してください** (待ち受けは最大 120 秒)。
- 進捗はコマンドプロンプトに表示されます。表示が出ない環境でも処理は続いており、結果は `logs` 内のログで確認できます。
- 引数の一覧は `NonFreezeFWupdater.exe --help` でも表示されます。

| 引数 | 内容 | 既定値 |
|---|---|---|
| `--ip <アドレス>` | 本体の IP アドレスまたはホスト名 (必須) | - |
| `--hex <ファイル>` | ファームウェアファイル (必須) | - |
| `--reboot-user <ID>` | 自動再起動に使う本体のログイン ID。指定したときだけ自動再起動する | なし (手動再起動) |
| `--reboot-pass <パスワード>` | 自動再起動に使うパスワード | 空 |
| `--http-port <番号>` | 本体の HTTP ポート (自動再起動と起動確認に使用) | 80 |
| `--udp-port <番号>` | 送信先の UDP ポート。本体側は 6234 固定なので、ルーターのポート変換を使う場合のみ変更する | 6234 |
| `--wait <秒>` | 本体の応答を待つ上限 | 120 |
| `--settle <秒>` | 本体を捕捉してから消去を始めるまでの待機 | 0 |
| `--timeout-program <秒>` | 書き込み 1 パケットあたりの応答待ち | 5 |
| `--retries <回>` | 書き込みパケットの再送回数 | 3 |
| `--lines-per-packet <行>` | 1 パケットに詰める hex 行数の上限 | 16 |
| `--max-frame <バイト>` | 1 パケットのフレーム長上限 (512 未満) | 480 |
| `--no-fill` | 先頭行の隙間埋め (本体側の初期値対策) を行わない。通常は指定しない | - |
| `--no-diag` | 検証不一致時の領域診断を行わない | - |
| `--verbose` | 全パケットの往復時間をログに記録する (通信診断用) | - |
| `--help` | この一覧を表示する | - |

実行例 (自動再起動あり):

```
NonFreezeFWupdater.exe --ip 192.168.22.111 --hex firmware.hex --reboot-user admin --reboot-pass ******
```

終了コードは画面の最後に「終了コード n (意味)」として表示されるほか、バッチファイルなどから `%ERRORLEVEL%` で取得できます。本ツールは GUI アプリとして作られているため、コマンドプロンプトは終了を待たずにプロンプトへ戻ります。終了コードを取得するときは `start /wait` で終了を待ってください。

```
start /wait NonFreezeFWupdater.exe --ip 192.168.22.111 --hex firmware.hex --reboot-user admin --reboot-pass ******
echo %ERRORLEVEL%
```

| 終了コード | 意味 |
|---|---|
| 0 | 更新成功 |
| 1 | 引数またはファイルが不正 |
| 2 | 本体の応答待ちがタイムアウト |
| 3 | 通信失敗 (再送上限に到達) |
| 4 | 書き込み後の検証で不一致 |
| 5 | 利用者による中止 |

## ライセンス / 位置づけ

本ツールは Value Solution Inc. が提供する Non Freeze 専用の保守ツールです。対応機種以外への使用はできません。
