AM-8001K サーモロガー ビューア
安立計器の小型サーモロガー AM-8001K に溜めた測定データを、専用ソフト無しでUSB経由でPCに取り出して見る/出すためのビューアです。

本体の通信仕様が公開されていないため、自分で解析(リバースエンジニアリング=完成品から内部の仕組みを読み解くこと)して作った“読み取り専用”ツール。保存データをワンクリックで吸い上げ、グラフ表示・複数記録の重ね比較・カーソルでの値読み取り・CSV/Excel出力ができます。本体には一切書き込まないので、何度読み出しても安全です。
使い方
-
画面の見方
上に[⬇本体からダウンロード][開く][デモ][CSV出力][Excel出力]のツールバー、左カラムに『セッション情報/チャンネル(記録の一覧)/記録間隔/グラフの拡大範囲』のパネル、右は上=折れ線グラフ・下=データ表の2段構成。起動直後はデータ未読み込みで、本体から読み出す・保存済みファイルを開く・例(デモ)を表示、の3通りで読み込めます。
-
本体から読み出す(専用ソフト不要・読み取り専用)/記録間隔は自動
本体をUSBでつなぎ計測を停止して[⬇本体からダウンロード]を押すと、保存データを読み取り専用で吸い上げます(消去・設定変更はしない設計・約15秒)。画像は取得済みデータ(Rec0〜Rec5の6記録)を読み込んだ状態で、Rec0=室温21.9℃から527℃まで上がる昇温ランプ(151点)が表示されています。左の『セッション情報』に機種・点数・記録数が出ます(点数はいちばん長い記録の点数)。記録間隔は本体のヘッダから自動取得(ここでは 0.1秒/点)され、横軸が自動で経過時間(151点×0.1秒=0〜15秒)になります。
-
複数の記録を重ねて比較する
1回の読み出しで複数の記録(この本体ではRec0〜Rec5の6本)が入ります。左一覧のチェックで表示する記録を選ぶと、色分けして重ね描画。画像はRec0〜Rec3とRec5の5本にチェックを入れた例(点数の多いRec4=2459点は外しています)。Rec0だけが室温→527℃へ立ち上がり、ほかは室温(約24〜25℃)で待機していたことが一目で分かります。既定では先頭のRec0だけ表示し、見たい記録だけチェックします。
-
グラフ上でカーソルを置いて値を読む
グラフにマウスを置くと、最寄りの点に縦線とマーカーが付き、グラフ上の大きなパネルに『経過時間(点番号)|記録名: 温度』が表示されます。画像では 8.2秒(点82)で Rec0 が 335.0℃。横軸は記録間隔×点番号で求めた経過時間です(本体の固定時刻は使いません)。
-
記録に名前・メモを付ける(再読込で自動復元)
各記録の[✎]ボタンで『記録の編集』が開き、名前とメモを付けられます(画像例:名前=昇温ランプ(室温→527℃)、メモ=Ca 試料・40min・0.1秒/点)。名前・メモは記録の中身から作るハッシュ(SHA-256=内容が同じなら必ず同じ値になる指紋のようなもの)をキーに別ファイルへ保存され、同じデータを次に読み込んだとき自動で復元されます。
-
CSV / Excel に出力する(本体データは非破壊)
[CSV出力]/[Excel出力]で、チェック中の記録をまとめて書き出します。列は『点番号・経過時間(s)・Rec0(℃)・…』の統一形式。画像は出力直後の状態で、上のステータスバーに保存先(…\ams_demo_export.csv)が出ています(保存後に「開きますか?」の確認も出ます)。本体のデータには一切書き込まないので、何度でも読み出して出力できます。
ダウンロード
-
AM-8001Kビューア(Windows・ZIP) ↓
約29MB・展開して AMS800Viewer.exe を起動/初回のみ同梱Zadigでドライバ設定(Windows)
仕組みと使った技術
全体の流れ
- 1. USBドライバ設定(初回のみ): ZadigでAM-8001K(VID_1599&PID_0001)にWinUSBを割り当てる。公式ドライバ(dcusb.sys)はPID_0002向け・署名失効のためWin10/11では使えず、WinUSBが現実解。
- 2. 接続確認: アプリ起動時にWinUSBが実際にオープンできるか試行(winusb_openable)して本体の接続・ドライバ状態を判定する。PnP照会フラグでなく実open試行を正とすることでZadig再導入後の誤検知を防ぐ。
- 3. ダウンロード(プロトコル実行): 確定済みASCIIキーワード6種(END/STATUS/STATUS2/TRANS/N/NEXT)を許可リストに固定した read-only プロトコルで通信。送信後にsettleペーシング(120ms)を挟み、永続バッファでCR境界までフレームを読み切ってからNEXTを送る。終端(YYYY)受信を成功条件に必須化し、途中打ち切りを成功扱いしない。
- 4. デコード: 受信した ASCII-hex ブロック列をレコードに分解し、記録間隔をヘッダ byte8-10(例 010083: 先頭4桁=値100→0.1s、末尾2桁83=ミリ秒フラグ)から自動取得。公式ソフトのパースコード(CString::Mid + atoi)を逆追跡して特定し、実機100msの既知値で裏取り済み。
- 5. 整合検証: チェックサム検証と自動リトライ(settle 80→120→300ms)をアプリ層で実施。生バイナリは Output/ に日時付きで自動保存。
- 6. 表示・比較: 取得した複数記録を「各記録=1チャンネル」に写像して重ね比較。折れ線グラフにカーソルパネルで点番号・経過時間・温度を表示。記録の名前・メモは内容のSHA-256ハッシュをキーにサイドカーJSONへ永続化し、再読込で自動復元。
- 7. 出力: CSV・Excel(点番号/経過時間(s)/Rec0(℃)…の統一列)で出力。ExcelはopenpyxlでXLSXを生成し、pandasへの依存を排除してexeを軽量化(24MB)。
使った技術
- Python 3.9+
- アプリ全体の実装言語
- Tkinter(標準ライブラリ)
- GUIフレームワーク。matplotlib不使用で折れ線グラフをCanvasに直接描画
- ctypes(標準ライブラリ)
- WinUSB APIをPythonから呼び出すUSBトランスポート層(winusb_transport.py)
- openpyxl
- Excel出力(pandas不使用でexeを軽量化)
- WinUSB(Windows組み込みドライバ)
- AM-8001KへのUSBバルク通信の基盤。Microsoft純正・署名済みのためSecure Boot環境でも動作
- Zadig(同梱ツール)
- AM-8001KへのWinUSB割り当てを自己署名込みで自動処理する初回セットアップツール
- PyInstaller
- Python不要の単一exeへのビルド(--windowed --onefile)
実装の工夫
- プロトコルは送信コマンドを許可リスト6種(END/STATUS/STATUS2/TRANS/N/NEXT)に固定したread-onlyコマンドのみに制限。メモリ消去・時計設定・リモート設定は構造上送れない設計にし、非破壊を保証。
- プロトコル解析フェーズ(protocol_candidates.pyによる候補台帳管理)と本番ダウンロードフェーズ(am8001k_download.py)を別モジュールに分離。未知コマンドはblocked/ready_to_try/tried/rejectedの状態管理で送信前に人間レビューを必須化した。
- USB読み出しはポーリング連射でなく「送信→settleペーシング→CRフレーム境界まで読み切り→確認→次へ」の順次処理に統一。連射時は装置が脱同期してチェックサム不一致・データ破損が発生することを実機で確認し、settle=120msで安定化(約12秒・約5倍速)。
- 記録ラベル(名前・メモ)の永続化キーは生バイトではなく「正規化した内容(点数+丸めた値)のSHA-256」を使用。保存形式差(.bin/.csv等)で同じデータが別物と判定されないようにしている。
- WinUSBの接続判定は特定GUIDの一致ではなく実際にopenできるか(winusb_openable)を真とする。Zadig再導入で汎用GUIDに登録された場合にGUID照合では誤ブロックが発生することを実機で確認して修正した。
- windowed exeではsys.stdout/sys.stderrがNoneになるため、起動時にNoneガード付きの_force_utf8()でStringIO差し替えかreconfigureを行い、cp932対策テンプレートによる.buffer参照クラッシュを防ぐ。
用語
- AM-8001K / サーモロガー
- 安立計器(Anritsu Meter)の小型温度データロガー。設定間隔ごとに温度を本体メモリへ記録し、後からPCへ吸い上げて解析する測定器。
- リバースエンジニアリング
- 仕様書が手に入らない完成品(ここでは本体とUSB通信)から、外側の観察と純正ソフトの解析で内部の仕組み・通信手順を読み解くこと。本ツールはこれで通信仕様を特定して作った。
- 記録 / Rec
- 1回の測定(計測の開始〜停止)で得られる1本のデータ列。本体には複数の記録が溜まり、ビューアでは Rec0・Rec1… と並ぶ。
- 記録間隔
- 1点を記録する時間の刻み(例 0.1秒/点)。本体のヘッダに埋め込まれており、ビューアが読み込み時に自動取得して横軸(経過時間)に使う。手入力で上書きも可能。
- 経過時間(横軸)
- 記録開始からの時間。記録間隔×点番号で計算する。本体の絶対時刻(2004年固定)は使わない。
- WinUSB / Zadig
- WinUSBはWindows標準の汎用USBドライバ(Microsoft純正・署名済み)。Zadigはそれを本機に割り当てる初回セットアップ用の同梱ツール。
- 読み取り専用(非破壊)
- 本体には読み出しコマンドしか送らず、メモリ消去・時計設定・設定変更は一切しないこと。元データを壊さないので何度でも安全に読み出せる。
- 昇温ランプ
- 温度を一定速度で上げていく測定。Rec0 がこれで、室温21.9℃から527℃まで連続的に上昇している。
- チェックサム
- 受信データが途中で壊れていないかを確かめる検算値。各ブロック末尾の値と照合し、不一致なら警告して取りこぼしを検知する。