Перейти к содержимому
Главная страница » Статьи » Самовар и безопасность

Самовар и безопасность

«Самовар» следит за параметрами процесса и аварийно отключает нагрев при выходе показаний за безопасные пределы. Все аварийные события фиксируются в журнале и отправляются в мобильное приложение и на сайт 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) на вкладке «Прочие».

Добавить комментарий