跳至正文
首页 » 文章 » Samovar 与安全

Samovar 与安全

Samovar 会监控过程参数,当读数超出安全范围时,会在紧急情况下切断加热。所有紧急事件都会记入日志,并发送到手机应用和 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——蒸汽温度的限值。超过时会触发紧急停机,原因为 “Maximum steam temperature exceeded”(超过最高蒸汽温度)。
  • MAX_WATER_TEMP = 75 °C——冷却水温度的限值。超过时会触发紧急停机,原因为 “Maximum water temperature exceeded”(超过最高水温)。
  • ALARM_WATER_TEMP = 70 °C——水温的临界值(警告)。达到时,控制器会以每次迭代 5 V 的步长降低功率调节器电压,每步之间暂停 30 秒。如果降压无效且温度继续上升,就会触发 MAX_WATER_TEMP 紧急停机。
  • MAX_ACP_TEMP = 75 °C——TCA(塔上通大气管路中的传感器)的限值温度。超过时会触发紧急停机。
  • SamSetup.DistTemp(可配置,默认 99.9 °C)——蒸馏和 BC(蒸馏釜加塔模式)结束的温度。达到时,控制器会尝试通过 SAMOVAR_POWER 命令队列正常结束程序。如果队列忙,控制器会调用紧急停机——与其让加热一直开着直到蒸馏釜烧干,不如走紧急路径。

压力

如果安装了 MPX5010DP 压力传感器,并且在设置中设定了 MaxPressureValue 值(默认为 0——该检查关闭),控制器就会监控塔内压力。超过阈值时,会发生紧急停机,原因为 “Maximum pressure exceeded!”(超过最大压力!)。压力降到阈值以下 5%(滞后)后,紧急状态会自动解除。

液泛传感器

如果启用了 “Use reflux level sensor”(使用回流液位传感器)设置(UseHLS),并且传感器接在 WHLS 引脚上,控制器就会监控塔顶的回流液位。如果传感器持续触发超过 WHLS_ALARM_TIME = 3 seconds:

  • 蜂鸣器响起,并发送通知 “Flooding sensor triggered!”(液泛传感器已触发!);
  • 如果使用了功率调节器,控制器会把电压降低一个步长(SEM AVR 为 3%,其他调节器为 1 × PWR_FACTOR);
  • 下一次反应要在 40 秒之后才会发生——过程的响应很慢,降得更频繁没有意义。

如果程序正在运行预液泛阶段(行类型 C),控制器会把当前电压记为 prev_target_power_volt,并在 TIME_C / 5 minutes 之后,把电压恢复到记住的值减去 0.5 个步长。如果传感器仍然触发,降压的循环会重复。

水流量

如果安装了水流量传感器,并且启用了 “Use water flow control”(使用水流量控制)设置(UseWS),控制器会在所有需要冷却的模式下监控是否有水流。如果水流量在 WF_ALARM_COUNT 个轮询周期内都为零,就会以无水流的原因调用 request_emergency_stop。这样在水被切断或水泵故障时,可以防止塔和 TCA 过热。

温度传感器故障

每个 DS18B20 传感器都有一个 ErrCount 错误计数器,读取失败(断线、无响应)时计数加一。如果读数超出 2.0–126.0 °C 的范围,或者读取错误不断重复,optional_sensor_failed 函数就认为传感器已失效。失效时:

  • 会发送类似 “Steam sensor is not responding”(蒸汽传感器无响应)/ “Boiler sensor is not responding”(蒸馏釜传感器无响应)/ “Water sensor is not responding”(水传感器无响应)/ “TCA sensor is not responding”(TCA 传感器无响应)的通知,并注明模式;
  • 紧急锁定被启用——在原因消除之前,加热保持关闭;
  • 退出紧急状态的办法是重启控制器。

此外,在 Rectification(精馏)模式下,控制器还会检查蒸汽和蒸馏釜传感器是否已分配(地址不是 0xFF)。如果 1-Wire 总线上一个传感器都没有,控制器会尝试通过命令队列正常关闭加热;如果队列忙,就进入紧急模式。

紧急按钮

如果在开发板设置中定义了 ALARM_BTN_PIN 引脚(默认在经典 ESP32 上为 GPIO 35,在 ESP32-S3 上为 GPIO 48),就可以连接紧急按钮或通过触点闭合工作的漏水传感器。触点上拉到电源电压;当它被短接到地(FALLING)时,会触发中断,由单独的 triggerEmergencyButton 任务以 “Emergency shutdown: the emergency button was pressed”(紧急关机:紧急按钮已被按下)为原因调用 request_emergency_stop。

引脚的特点:

  • 在经典 ESP32 上,34–39 号引脚只能作输入,没有内部上拉,所以需要接一个外部上拉电阻到电源电压;
  • 在 ESP32-S3 上,48 号引脚有内部上拉,所以不需要外部上拉。

紧急按钮默认是禁用的——要启用它,请取消 Samovar_pin.h 中 #define USE_ALARM_BTN 的注释,或通过 user_config_override.h 设置该引脚。它触发之后,退出紧急模式的唯一办法是重启控制器。

功率调节器保护

如果启用了 “Use regulator connection check”(使用调节器连接检查)设置(CheckPower),并且工作期间与功率调节器的通信中断,控制器会紧急切断加热。这可以防止调节器已停止响应(UART 连线断开、调节器断电)而加热仍然开着的情况。

任务看门狗

控制器的 FreeRTOS 任务(调节器任务、SysTicker 监督任务、栈看门狗)会相互监视。如果其中任何一个超过允许的时间没有响应:

  • 调节器任务没有启动——紧急停机 “Regulator task is not running”(调节器任务未运行);
  • 紧急按钮任务没有启动——紧急停机 “Emergency button task is not running”(紧急按钮任务未运行);
  • 任何任务的剩余栈严重不足——紧急停机 “Critically low remaining task stack …”(任务剩余栈严重不足……);
  • SysTicker 监督任务卡死——紧急停机 “SysTicker supervision task has hung”(SysTicker 监督任务已卡死)。

紧急停机的原因

任何一项紧急检查触发时,原因都会写入非易失性存储器(latched_emergency_stop_reason),可以通过网页界面和 API 读取。原因消除后,操作者通过重启控制器来清除紧急模式。

操作者通常会看到的原因:

  • “Maximum steam / water / TCA temperature exceeded”(超过最高蒸汽/水/TCA 温度);
  • “Maximum boiler temperature limit. Program completed.”(达到蒸馏釜最高温度限值。程序已完成。)(正常结束);
  • “Maximum pressure exceeded!”(超过最大压力!);
  • “Steam sensor is not responding” / “Boiler sensor is not responding” / “Water sensor is not responding” / “TCA sensor is not responding”(蒸汽/蒸馏釜/水/TCA 传感器无响应);
  • “Emergency shutdown: the emergency button was pressed”(紧急关机:紧急按钮已被按下);
  • “No water flow”(无水流);
  • “Power regulator is not responding”(功率调节器无响应);
  • “Critical water temperature! Water supply error”(水温危急!供水故障)(警告,分步降低功率)。

到哪里找这些设置

  • 温度限值——Samovar_ini.h 中的 MAX_STEAM_TEMP、MAX_WATER_TEMP、MAX_ACP_TEMP、ALARM_WATER_TEMP。
  • 蒸馏结束温度——设置页面 “Main”(主要)标签页上的 DistTemp。
  • 紧急压力——”Main” 标签页上的 MaxPressureValue。
  • 液泛传感器——”Main” 标签页上的 “Use reflux level sensor” 设置,以及 Samovar_pin.h 中的 WHLS 引脚。
  • 水流量传感器——”Other”(其他)标签页上的 “Use water flow control” 设置(UseWS)。
  • 紧急按钮——Samovar_pin.h 中的 ALARM_BTN_PIN 引脚和 USE_ALARM_BTN 标志。
  • 功率调节器检查——”Other” 标签页上的 “Use regulator connection check” 设置(CheckPower)。

发表回复