Программно-аппаратное ядро для управления криогенным медицинским газификатором, питающим гипербарические камеры (ГБО). Реализует полный цикл: гидростатика → термодинамика → масса/расход → предиктивное управление клапаном Pressure Builder → диагностика безопасности + интеграция с погодой по геолокации + акустическая оценка расхода стравливания.
gasifier_controller/
├── __init__.py # публичный API пакета
├── config.py # константы, NIST-таблица O2, уставки
├── calibration.py # AnalogSensorCalibration (Gain/Offset, auto-zero)
├── thermodynamics.py # CryogenicThermodynamics (NIST + Антуан)
├── geometry.py # TankGeometry (гор. цилиндр + эллипсы, zero-trap)
├── mass_flow.py # MassAndFlowProcessor (масса, EWMA, прогноз)
├── pressure_control.py # PredictivePressureController (упреждение + обучение)
├── safety.py # SafetyDiagnostics (утечки, вакуум, PRV, обмерзание)
├── weather.py # Open-Meteo + Яндекс.Погода + геокодинг
├── environment.py # Поправки на погоду + флаг «под навесом»
├── acoustic_flow.py # 🎤 Оценка стравливания по шуму микрофона
├── controller.py # GasifierController — фасад
├── main.py # CLI-демо
├── ui_desktop.py # 🖥️ Tkinter-приложение
├── tests/ # юнит-тесты (51 шт.)
├── requirements.txt # пусто (ядро на stdlib)
├── requirements-desktop.txt # для микрофона: sounddevice + numpy
└── README.md
# Tkinter уже в stdlib. Для микрофона установить:
pip install -r gasifier_controller/requirements-desktop.txt
# Запуск GUI:
python -m gasifier_controller.ui_desktopОкно содержит:
- Состояние газификатора — давление, уровень, объём, масса, расход, прогноз, температура насыщения, плотности фаз
- Журнал событий — все алерты диагностики с уровнями INFO/WARNING/CRITICAL
- Внешние условия — ввод города или координат, выбор провайдера погоды (Open-Meteo / Яндекс / mock), галочка «под навесом»
- Управление — старт/пауза/сброс симуляции, имитация отбора в барокамеру и стравливания, калибровки P, DP, Auto-Zero DP
- Акустическая оценка стравливания — индикатор шума, оценка расхода и времени до целевого давления, калибровка по эталонному стравливанию
python -m gasifier_controller.main # mock-погода, под навесом
python -m gasifier_controller.main --city Москва # геокодинг города
python -m gasifier_controller.main --coords "55.75,37.62"
python -m gasifier_controller.main --no-canopy --mock-weather --mock-temp -25С Яндекс.Погодой:
export YANDEX_WEATHER_KEY="..."
python -m gasifier_controller.main --city ХабаровскТариф «Тестовый» Яндекс.Погоды закрыт в 2024 году — нужен платный ключ. Open-Meteo используется как бесплатный fallback.
from gasifier_controller import (
GasifierController, SensorReadings, WeatherService, OpenMeteoProvider,
AcousticFlowEstimator, MicrophoneSource,
)
controller = GasifierController()
# Опционально — обновить погоду
weather_svc = WeatherService([OpenMeteoProvider()])
snap = weather_svc.fetch_current(lat=55.75, lon=37.62)
controller.update_weather(snap, under_canopy=True)
# Опционально — акустический оценщик
acoustic = AcousticFlowEstimator(MicrophoneSource())
acoustic.start()
# ...когда оператор открыл известный стравливающий клапан...
acoustic.add_calibration_point(known_flow_kg_per_s=0.05)
# Основной цикл (например, 1 Гц):
readings = SensorReadings(
pressure_raw_bar=9.0, dp_raw_pa=12500.0,
consumer_demand_active=True, vaporizer_outlet_temp_c=10.0,
)
report = controller.process_cycle(readings)
if report.pb_valve_open:
relay.open_pb_valve()
else:
relay.close_pb_valve()
for alert in report.alerts:
print(alert)Идея: уровень шума струи газа коррелирует с её массовым расходом (теория сонорных струй: акустическая мощность ~ ṁ²·v²). Это позволяет по шуму микрофона примерно оценить, сколько ещё стравливать кислород для падения давления до уставки.
Точность ±30–50% — метод именно для оценки порядка величины. Не используется в безопасности (для этого есть прямые датчики P и dP/dt). Удобство: оператор слышит шум стравливания и тут же видит примерный остаток времени.
- Запустите микрофон в UI.
- Откройте стравливающий клапан в контролируемом режиме (или нажмите «Открыт стравл. клапан» в симуляторе для проверки на mock).
- Нажмите «Начать запись эталона» — программа запомнит P_before и объём ullage.
- Подождите 5–10 с при стабильном шуме струи.
- Нажмите «Зафиксировать ṁ_эталон» — программа вычислит фактический расход по падению давления и плотности газа, и привяжет его к текущему уровню шума.
Калибровочные точки можно сохранять в JSON-файле. Двух точек достаточно
для подгонки степенной зависимости ṁ = c·RMS^p.
acoustic_flow.py— модуль оценщика (классыAcousticFlowEstimator,MicrophoneSource,MockAcousticSource)tests/test_acoustic.py— 16 юнит-тестов с mock-источником
Модуль environment.py пересчитывает паспортные пороги диагностики
под текущие условия среды:
| Параметр | Без навеса (открытая площадка) | Под навесом |
|---|---|---|
| Солнечный нагрев поверхности | до +18 °C при ясном дне | пренебрежимо |
| Влияние ветра | сильное (×3 коэффициент) | слабое |
| Осадки | усиливают обмерзание | не действуют |
| Норма BOG (адаптация safety) | коррекция ×(ΔT_air/ΔT_ref) | то же без солнечной добавки |
| Порог защиты испарителя по T_out | смягчается в мороз | без изменений |
Передаётся флагом under_canopy в update_weather() или галочкой в UI.
Ядро написано на чистой stdlib и работает везде, где есть Python ≥ 3.10 (в т.ч. на одноплатниках Raspberry Pi / Orange Pi). Фронты подключаются без модификации ядра:
| Платформа | Стек | Статус |
|---|---|---|
| Десктоп (Win/Linux/macOS) | Tkinter (stdlib) | ✅ готов (ui_desktop.py) |
| Веб (HMI в браузере) | FastAPI + WebSocket | планируется |
| Мобильное (iOS/Android) | BeeWare (Toga) или Kivy/KivyMD | планируется |
| ПЛК (промконтроллер) | MicroPython / C++ порт | портируется по модулям |
Чтобы добавить новый фронт — импортируйте GasifierController, читайте
датчики через ваш IO-драйвер, отправляйте показания в process_cycle(),
рендерьте поля из CycleReport.
python -m unittest discover gasifier_controller/tests -v
# 51 тест, все зелёныеТесты разбиты на 2 файла:
test_all.py— 35 тестов ядра (калибровка, термодинамика, геометрия, расход, PB, безопасность, поправки погоды, интеграция)test_acoustic.py— 16 тестов акустического модуля (модель, калибровка, оценка времени, файл-IO)
Все классы и методы из промта реализованы:
- ✅
AnalogSensorCalibrationсcalibrate_from_two_points,auto_zero - ✅
CryogenicThermodynamics.get_densities(P), NIST таблица + Антуан - ✅
TankGeometry.calculate_liquid_level,calculate_volumesсо zero-trap - ✅
MassAndFlowProcessor.update_flow_rate(EWMA),predict_time_to_empty - ✅
PredictivePressureControllerс динамическимP_stopи самообучением - ✅
SafetyDiagnostics.detect_leakage,detect_vacuum_degradation,log_prv_cycles,check_vaporizer_frost - ✅ Интеграция Open-Meteo + Яндекс.Погода + флаг навеса
(
environment.EnvironmentalCorrections) - ✅ Десктопное приложение (Tkinter) со всеми панелями
- ✅ Акустический оценщик стравливания по микрофону