Веб-панель управления Agilent/HP E4406A
Веб-приложение на Python 3 + Flask для удалённого управления векторным анализатором сигналов Agilent/HP E4406A VSA Transmitter Tester (GSM, EDGE, W-CDMA и другие измерительные персональности прибора) по локальной сети: запуск измерений, визуализация трасс, экспорт отчётов и автоматизация сценариев измерений на встроенном языке Lua.
Разработка ведётся по методологии TDD с упором на максимальное покрытие тестами (модульные тесты — на мок-имитаторе прибора, интеграционные — на реальном оборудовании). Вся документация и коммуникация по проекту — на русском языке.
Возможности
- Подключение к прибору по SCPI поверх “raw” TCP-сокета (порт 5025) — без зависимости от проприетарного VISA-рантайма.
- Выбор измерительной персональности прибора (
INSTrument:SELect) и запуск любых её измерений через единый API (CONFigure/MEASure/FETCh/READ). - Каталог всех 11 персональностей прибора (BASIC, GSM, EDGE w/GSM, W-CDMA, cdmaOne, cdma2000, 1xEV-DO, NADC, PDC, iDEN, Service) с именованными (на русском) полями результатов для приоритетных измерений GSM/EDGE, общих измерений (Spectrum/Waveform/Channel Power, Power Statistics CCDF) и всех трёх вариантов ACP.
- Веб-интерфейс: выбор режима/измерения, таблица результатов, графики трасс (Chart.js, локально — без внешних CDN) с осью X в инженерных единицах (Гц/с/бит), полученных из самого измерения.
- Пределы (limit lines) и вердикт PASS/FAIL по любому полю результата — как в коммерческом ПО (Keysight BenchVue, R&S) — задаются в веб-интерфейсе, через API или из Lua-скрипта.
- Снимок экрана прибора в один клик (
HCOPy:SDUMp:DATA?). - Экспорт отчётов об измерении в PDF, CSV и JSON.
- Встроенный движок автоматизации измерений на Lua (песочница, без доступа к файловой системе/сети в обход прибора) — с редактором сценариев прямо в веб-интерфейсе.
- Docker-образ для развёртывания (
docker compose up).
Подробнее об архитектуре и обосновании решений — в ARCHITECTURE.md. Обзор реализованного/запланированного — в docs/ROADMAP.md.
Требования
- Python 3.10+
- Прибор E4406A, доступный по сети (по умолчанию
192.168.1.210:5025, порт SCPI-RAW)
Быстрый старт
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .
# Адрес прибора (по умолчанию 192.168.1.210:5025, см. ниже)
export E4406A_HOST=192.168.1.210
export E4406A_PORT=5025
python -m flask --app e4406a_web.app:create_app run --host 0.0.0.0 --port 5000
Откройте http://localhost:5000/ в браузере.
Переменные окружения
| Переменная | По умолчанию | Назначение |
|---|---|---|
E4406A_HOST |
192.168.1.210 |
IP-адрес прибора |
E4406A_PORT |
5025 |
Порт SCPI-RAW прибора |
E4406A_TIMEOUT |
10.0 |
Таймаут ожидания ответа прибора, с |
Запуск через Docker
docker compose up --build
Откройте http://localhost:8000/. Адрес прибора задаётся в docker-compose.yml (переменные окружения) или через docker run -e E4406A_HOST=.... Контейнер всегда работает с одним рабочим процессом (gunicorn --workers 1) — прибор поддерживает по сути одну активную удалённую SCPI-сессию, см. комментарий в Dockerfile.
Разработка и тесты
pip install -r requirements-dev.txt
# Модульные и API-тесты (без обращения к реальному прибору)
pytest
# С покрытием
pytest --cov=e4406a_web --cov-report=term-missing
# Интеграционные тесты на реальном приборе (пропускаются автоматически,
# если прибор недоступен в сети)
pytest -m integration
Подробности о структуре тестов, мок-имитаторе прибора и найденных особенностях реальной прошивки — в docs/SCPI_REFERENCE.md и docs/DEV_GUIDE.md.
Документация
| Документ | Содержание |
|---|---|
| ARCHITECTURE.md | Архитектура, обоснование решений, ссылки на опыт коммерческих продуктов |
| docs/SCPI_REFERENCE.md | Справочник использованных SCPI-команд, найденные особенности прибора |
| docs/USER_GUIDE.md | Руководство пользователя веб-интерфейса |
| docs/DEV_GUIDE.md | Руководство разработчика: структура кода, TDD-процесс, добавление новых измерений |
| docs/AUTOMATION.md | Автоматизация измерений на Lua |
| docs/ROADMAP.md | Реализовано / запланировано |
Структура проекта
e4406a_web/
instrument/ - драйвер прибора: транспорт, SCPI, реестр измерений, сервис
api/ - Flask REST API
web/ - веб-интерфейс (шаблоны, статика, JS)
reports/ - экспорт отчётов (PDF/CSV/JSON)
automation/ - движок автоматизации на Lua
tests/
unit/ - модульные тесты (мок-имитатор прибора)
api/ - тесты Flask API (test_client)
integration/ - тесты на реальном приборе (маркер integration)
docs/ - документация проекта