100 lines
2.8 KiB
Markdown
100 lines
2.8 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`
|
||
- 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
|
||
```
|
||
|
||
Автоподключение использует первый доступный USB 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())
|
||
```
|