c7174c476e
- Clarified sections on real and fabricated data in the README. - Added detailed descriptions of alignment states with corresponding conditions and visual indicators. - Removed outdated screenshot and added new images for each alignment state (Ready, Aligning, Fault).
60 lines
2.3 KiB
Markdown
60 lines
2.3 KiB
Markdown
# Wafer Position Monitor (demo)
|
||
|
||
PySide6 desktop demo: load NanoBerry edge CSVs from `MASTER_SD/`, fit a wafer circle, show **X / Y / theta** offset and **sigma** vs a calibration baseline. No live camera integrated yet.
|
||
|
||
**Stack:** Python 3.11+, PySide6, NumPy.
|
||
|
||
## Quick start
|
||
|
||
```bash
|
||
python3 -m venv .venv && source .venv/bin/activate
|
||
pip install -e .
|
||
wafer-user # or: python src/wafer_edge/App.py
|
||
```
|
||
|
||
Click **Read Wafer** to load the demo CSVs. Tests: `python -m pytest tests/` (UI smoke needs a display).
|
||
|
||
## Data
|
||
|
||
**Real data** — `[MASTER_SD/](MASTER_SD/)`: CSV files from actual NanoBerry camera captures. Names: `{S|R}{1|2}{seq}P0.CSV` — local/remote board, SPI camera, 4-digit sequence (e.g. `S10540P0.CSV`).
|
||
|
||
**Fabricated data** — `[DATA/0610/](DATA/)`: Generated test data used by `CsvSource.DEMO_CAMERA_PATHS` (the default demo source). Change that dict or use `parse_csv_filename()` for other captures.
|
||
|
||
## Calibration
|
||
|
||
First run creates `baseline.json` (gitignored). Key fields: `center_mm`, `radius_mm` (75), `center_px`, `radius_px` (pixel scale).
|
||
|
||
## Layout
|
||
|
||
| Path | Role |
|
||
| ----------------------- | --------------------------------- |
|
||
| `src/wafer_edge/App.py` | Main window |
|
||
| `VisionEngine.py` | Circle fit + offsets (no Qt) |
|
||
| `CsvSource.py` | CSV loader |
|
||
| `ui/widgets.py` | Plot + metric cards |
|
||
| `ui/Theme.qml` | Styles (loaded via `ui/theme.py`) |
|
||
|
||
**Pipeline:** `DEMO_CAMERA_PATHS` → `load_camera_records_from_csv()` → `snapshot_from_records()` → UI.
|
||
|
||
## Alignment states
|
||
|
||
The monitor derives one of three states from the fitted circle on every read:
|
||
|
||
| State | Condition | Dot |
|
||
| ------------ | ------------------------------------ | -------- |
|
||
| **Ready** | offset ≤ 0.10 mm **and** σ ≤ 0.05 mm | 🟢 green |
|
||
| **Aligning** | offset ≤ 0.50 mm **and** σ ≤ 0.20 mm | 🟡 amber |
|
||
| **Fault** | offset > 0.50 mm **or** σ > 0.20 mm | 🔴 red |
|
||
|
||
### Ready — wafer within tolerance
|
||
|
||

|
||
|
||
### Aligning — wafer correcting, noisy cameras
|
||
|
||

|
||
|
||
### Fault — wafer out of range
|
||
|
||

|