«Самовар» следит за параметрами процесса и аварийно отключает нагрев при выходе показаний за безопасные пределы. Все аварийные события фиксируются в журнале и отправляются в мобильное приложение и на сайт samovar-tool.ru. Эта страница описывает полный список аварийных сценариев прошивки 7.00 и реакцию контроллера на каждый из них.
Как устроена аварийная защита
Все аварийные проверки сосредоточены в модуле alarm.h и вызываются из главного цикла контроллера функцией check_alarm(). При срабатывании любой проверки формируется причина аварийного останова и вызывается request_emergency_stop(reason). Функция выключает нагрев, останавливает насосы, записывает причину в энергонезависимую память и отправляет уведомление. Выход из аварийного режима — только перезагрузка контроллера.
Сообщения об авариях приходят:
- на основной экран веб-интерфейса;
- в мобильные приложения Android и iOS;
- на сайт samovar-tool.ru;
- в локальный лог на SD-карте или в LittleFS.
Тип сообщения — ALARM_MSG для аварий и WARNING_MSG для предупреждений. Предупреждения не останавливают процесс, но требуют внимания оператора.
Предельные температуры
Предельные температуры заданы константами в файле Samovar_ini.h. Эти значения — порог для немедленного аварийного останова. Для настраиваемых пользователем порогов (например, температура завершения дистилляции) — отдельные поля в настройках.
MAX_STEAM_TEMP = 98,8 °C— предельная температура пара. Превышение — аварийный останов с причиной «Превышена максимальная температура пара».MAX_WATER_TEMP = 75 °C— предельная температура воды охлаждения. Превышение — аварийный останов с причиной «Превышена максимальная температура воды».ALARM_WATER_TEMP = 70 °C— критическая температура воды (предупреждение). При её достижении контроллер ступенчато снижает напряжение регулятора мощности на 5 В за итерацию и делает паузу 30 секунд между шагами. Если снижение не помогает и температура продолжает расти, срабатывает авария поMAX_WATER_TEMP.MAX_ACP_TEMP = 75 °C— предельная температура ТСА (датчик в термосопротивлении насадочной части колонны). Превышение — аварийный останов.SamSetup.DistTemp(настраивается, по умолчанию 99,9 °C) — температура завершения дистилляции и БК. При её достижении контроллер пытается штатно завершить программу через очередь командSAMOVAR_POWER. Если очередь занята, контроллер вызывает аварийный останов — лучше пойти по аварийному пути, чем оставить нагрев до полного выкипания.
Давление
Если установлен датчик давления MPX5010DP и в настройках задано значение MaxPressureValue (по умолчанию 0 — проверка выключена), контроллер следит за давлением в колонне. При превышении порога — аварийный останов с причиной «Превышено предельное давление!». После снижения давления на 5 % ниже порога (гистерезис) аварийное состояние снимается автоматически.
Датчик захлёба
Если в настройках включён параметр «Использовать датчик уровня флегмы» (UseHLS) и датчик подключён к пину WHLS, контроллер следит за уровнем флегмы в голове колонны. При срабатывании датчика более чем WHLS_ALARM_TIME = 3 секунды:
- включается зуммер и отправляется уведомление «Сработал датчик захлёба!»;
- если используется регулятор мощности, контроллер снижает напряжение на одну ступень (для SEM AVR — 3 %, для остальных регуляторов — 1 × PWR_FACTOR);
- следующая реакция возможна только через 40 секунд — процесс инерционный, и чаще снижать нет смысла.
Если программа работает на предзахлёбе (тип строки C), контроллер запоминает текущее напряжение как prev_target_power_volt и через TIME_C / 5 минут возвращает напряжение к запомненному значению минус 0,5 ступени. Если датчик продолжает срабатывать, цикл снижения повторяется.
Поток воды
Если установлен датчик потока воды и в настройках включён параметр «Использовать контроль потока воды» (UseWS), контроллер следит за наличием расхода воды во всех режимах, где требуется охлаждение. Если в течение WF_ALARM_COUNT циклов опроса расход воды нулевой, вызывается request_emergency_stop с причиной отсутствия потока. Это защита от перегрева колонны и ТСА при отключении воды или отказе насоса.
Отказ температурного датчика
Каждый датчик DS18B20 имеет счётчик ошибок ErrCount, который инкрементируется при неудачных попытках чтения (обрыв провода, отсутствие ответа). Функция optional_sensor_failed считает датчик отказавшим, если показания вне диапазона 2,0–126,0 °C или ошибки чтения повторяются. При отказе:
- отправляется уведомление вида «Датчик пара не отвечает» / «Датчик куба не отвечает» / «Датчик воды не отвечает» / «Датчик ТСА не отвечает» с указанием режима;
- включается аварийная защёлка — нагрев остаётся выключенным до устранения причины;
- выход из аварии — перезагрузка контроллера.
Дополнительно в режиме «Ректификация» проверяется, что датчики пара и куба вообще назначены (адрес не 0xFF). Если на шине 1-Wire нет ни одного датчика, контроллер пытается штатно выключить нагрев через очередь команд, а если очередь занята — переходит в аварийный режим.
Аварийная кнопка
Если в настройках платы определён пин ALARM_BTN_PIN (по умолчанию это GPIO 35 на классическом ESP32 и GPIO 48 на ESP32-S3), к нему можно подключить аварийную кнопку или датчик протечки воды, работающий на замыкание. Контакт подтянут к питанию; при замыкании на землю (FALLING) срабатывает прерывание, отдельная задача triggerEmergencyButton вызывает request_emergency_stop с причиной «Аварийное отключение: нажата аварийная кнопка».
Особенности пинов:
- на классическом ESP32 пины 34–39 — только вход без внутренних подтяжек, поэтому требуется внешний подтягивающий резистор к питанию;
- на ESP32-S3 пин 48 имеет внутреннюю подтяжку, внешняя не требуется.
Аварийная кнопка по умолчанию отключена — для её включения нужно раскомментировать #define USE_ALARM_BTN в Samovar_pin.h или задать пин через user_config_override.h. После срабатывания выход из аварийного режима возможен только перезагрузкой контроллера.
Защита регулятора мощности
Если в настройках включён параметр «Использовать проверку подключения регулятора» (CheckPower) и связь с регулятором мощности пропала во время работы, контроллер аварийно выключает нагрев. Это защита от случая, когда регулятор перестал отвечать (обрыв связи по UART, отказ питания регулятора), а нагрев остался включённым.
Сторожевые таймеры задач
FreeRTOS-задачи контроллера (задача регулятора, задача надзора за SysTicker, стек-вотчдог) следят друг за другом. Если какая-либо из них не отвечает дольше допустимого времени:
- задача регулятора не запустилась — аварийный останов «Задача регулятора не запущена»;
- задача аварийной кнопки не запустилась — аварийный останов «Задача аварийной кнопки не запущена»;
- критически малый остаток стека любой задачи — аварийный останов «Критически малый остаток стека задачи …»;
- зависание задачи надзора SysTicker — аварийный останов «Задача надзора SysTicker зависла».
Причины аварийных остановов
При срабатывании любой аварийной проверки причина записывается в энергонезависимую память (latched_emergency_stop_reason) и доступна для чтения через веб-интерфейс и API. После устранения причины оператор снимает аварийный режим перезагрузкой контроллера.
Типичные причины, которые видит оператор:
- «Превышена максимальная температура пара / воды / ТСА»;
- «Лимит максимальной температуры куба. Программа завершена.» (штатное завершение);
- «Превышено предельное давление!»;
- «Датчик пара не отвечает» / «Датчик куба не отвечает» / «Датчик воды не отвечает» / «Датчик ТСА не отвечает»;
- «Аварийное отключение: нажата аварийная кнопка»;
- «Нет потока воды»;
- «Регулятор мощности не отвечает»;
- «Критическая температура воды! Ошибка подачи воды» (предупреждение, ступенчатое снижение мощности).
Где смотреть настройки
- Предельные температуры —
MAX_STEAM_TEMP,MAX_WATER_TEMP,MAX_ACP_TEMP,ALARM_WATER_TEMPвSamovar_ini.h. - Температура завершения дистилляции —
DistTempна вкладке «Основные» страницы настроек. - Давление аварии —
MaxPressureValueна вкладке «Основные». - Датчик захлёба — параметр «Использовать датчик уровня флегмы» на вкладке «Основные» и пин WHLS в
Samovar_pin.h. - Датчик потока воды — параметр «Использовать контроль потока воды» (
UseWS) на вкладке «Прочие». - Аварийная кнопка — пин
ALARM_BTN_PINи флагUSE_ALARM_BTNвSamovar_pin.h. - Проверка регулятора мощности — параметр «Использовать проверку подключения регулятора» (
CheckPower) на вкладке «Прочие».