Usage¶
Interface Overview¶
Once the program starts, the screen is laid out top to bottom: the toolbar, the status bar, the main view (parameter list + time-series chart), and the bottom panel (HEX / Log / Raw Text).
[Port ▼] [⟳] [Baud ▼] [Connect] | [log path...] [Replay] [Speed (s)] | [Demo] | [TM ▼] | [📂][CSV path] [Export CSV] | [Save Raw TXT] [Clear DB]
● Connected Frames OK: 0 Bad: 0 Dropped: 0 DB: 0 rows (0 KB) FPS: — Last: —
┌─────────────────────────┬──────────────────────────────────┐
│ Parameter value list │ Category tabs + time-series │
│ (left side) │ chart (right side) │
│ Name │ Value │ Unit │ auto-generated from the │
│ scrollable │ currently loaded field table │
│ │ (only categories with real fields)│
└─────────────────────────┴──────────────────────────────────┘
┌─────────────────────────┬──────────────────────────────────┐
│ LAST FRAME (HEX) │ LOG / Raw Text │
└─────────────────────────┴──────────────────────────────────┘
Three Data Sources, Pick One¶
1. Serial (real hardware)¶
- Choose a COM Port from
[Port v](the⟳next to it refreshes the list) - Choose a baud rate from
[Baud v](must match the hardware side, default 115200) - Click Connect
2. Demo mode (no hardware needed)¶
Click the toolbar's Demo button to test the whole interface with a built-in simulated waveform (sin + random noise); the packet Header/Footer are always correct, making it convenient for demos or getting familiar with the controls.
3. Replay mode (replay an existing log file)¶
- Type or choose the file path to replay in
[log path...](both text logs and pure binary packet files are supported; the format is auto-detected) - Use the
[Speed (s)]field to set the interval between packets in seconds;0means full-speed playback, adjustable live during playback - Click Replay to start; playback stops automatically at the end of the file, and the Log area shows "Replay finished"
Only one source is ever active at a time: switching to any mode automatically stops the previous source.
Reading the Status Bar¶
● Connected Frames OK: 0 Bad: 0 Dropped: 0 DB: 0 rows (0 KB) FPS: — Last: —
| Field | Meaning |
|---|---|
● Connected / Disconnected |
whether a data source is currently active |
Frames OK |
number of packets successfully decoded and validated |
Bad |
number of packets that failed Header/Footer or length validation |
Dropped |
number of packets dropped because processing couldn't keep up |
DB |
number of records and size currently held in memory |
Last |
time the last packet was received |
Switching the TM Format (Packet Format)¶
The [TM v] dropdown switches which packet format is used for decoding:
- Auto (default): automatically determined by each packet's actual length
- Choosing a specific length: once locked, the left-side parameter list and right-side tabs only show that format's actual fields
Which options appear in the dropdown is generated automatically from the
formats registered in C_packet_def.py; a new format automatically adds a new option.
Data Export and Recording¶
| Button | Description |
|---|---|
📂 + Export CSV |
opens a save dialog to choose the CSV output path; can be switched anytime while running without interrupting writes |
| Save Raw TXT | records the raw text received on the serial port line by line into a .txt file (the most original, undecoded format) |
| Clear DB | clears the data and counters currently in memory (does not delete any saved CSV file) |
CSV is appended to on every startup (never clears old data), encoded as
utf-8-sig, and opens directly in Excel without garbled text.
Bottom Panel¶
- LAST FRAME (HEX): the full HEX dump of the most recent packet
- LOG: program activity messages (connections, errors, Replay status, etc.)
- Raw Text: when the source is text format, shows the original, undecoded text lines
Chart Controls¶
The time-series chart on the right uses Plotly.js: drag with the mouse to
zoom, hover to see values, and use the Points shown dropdown to display
the most recent 50 / 100 / 200 / 500 points, or choose All to show
everything. Click 🔓 Lock Axis to lock the current zoom range so the view
doesn't automatically shift as new data arrives.