Files
RadioPhotonic_PCB_PC_software/README.md
T
2026-04-27 17:49:52 +03:00

101 lines
3.0 KiB
Markdown

# RadioPhotonic PCB PC Software
PyQt6-приложение для управления лазерной платой по UART.
Вся рабочая логика сосредоточена в пакете `laser_control`; старый FreeSimpleGUI и legacy-модули удалены.
## Структура
```text
.
├── _device_main.py
├── run
├── run_device_main.bat
├── requirements.txt
├── laser_control/
│ ├── __init__.py
│ ├── constants.py
│ ├── controller.py
│ ├── conversions.py
│ ├── exceptions.py
│ ├── models.py
│ ├── protocol.py
│ ├── transport.py
│ ├── validators.py
│ ├── example_usage.py
│ └── gui/
│ ├── main.py
│ ├── theme.py
│ ├── window.py
│ ├── sections.py
│ └── worker.py
```
## Что поддерживается
- ручной режим: `T1/T2/I1/I2`
- live telemetry: `T1/T2`, внешние термисторы, фотодиоды, `3V3/5V1/5V2/7V0`
- TEC drive modulation: синусоидальная добавка к выходу TEC PID для выбранного лазера
- AD9102: saw/SRAM режимы и загрузка custom waveform
- AD9833, DS1809 и STM32 DAC через отдельные firmware-команды
- сохранение профиля на SD-карту устройства
- сброс платы командой `DEFAULT_ENABLE`
Не поддерживается и удалено из PC-кода:
- legacy-команды `0x3333` и `0x5555`
- старый flow про `saved data` и `remove file`
- task/sweep-режим как публичный сценарий
## Установка
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
## Запуск GUI
```bash
source .venv/bin/activate
./run
```
или
```bash
python3 -m laser_control.gui.main
```
Автоподключение перебирает доступные UART-порты и выбирает тот, где отвечает прошивка платы.
При подключении приложение только читает текущее состояние и телеметрию, без автоприменения ручных параметров.
Совместимый launcher `_device_main.py` сохранён, но он только проксирует запуск в новый PyQt entrypoint.
## Публичный API
```python
from laser_control import (
LaserController,
Measurements,
DeviceStatus,
DeviceState,
ValidationError,
CommunicationError,
)
```
## Пример встраивания
```python
from laser_control import LaserController
with LaserController(port="/dev/ttyUSB0") as controller:
controller.set_manual_mode(
temp1=25.0,
temp2=30.0,
current1=40.0,
current2=35.0,
)
print(controller.get_measurements())
```