101 lines
3.0 KiB
Markdown
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())
|
|
```
|