修复上一个联动配置触发后,重新设置联动配置时,温湿度在联动范围内,风扇还在转的问题

This commit is contained in:
2026-09-03 15:14:28 +08:00
parent 59af5c4147
commit e68670df92
+12 -6
View File
@@ -41,9 +41,10 @@ typedef struct {
uint8_t hmax; /**< Byte5 % */
} LinkageCfg_t;
/** 联动运行时(RAM作废标志不落 VM */
/** 联动运行时(RAM,作废标志不落 VM) */
typedef struct {
uint8_t voided; /**< 1=被手动作废,须走到「关」条件才再武装 */
uint8_t voided; /**< 1=被手动作废,须走到「关」条件才再武装 */
uint8_t cfg_rewritten; /**< 1=DP6 刚重写,本拍区间内按「该关」而不是回差保持 */
} LinkageCtx_t;
static LinkageCtx_t s_lk;
@@ -144,6 +145,9 @@ void app_linkage_reeval(void)
uint8_t valid = lk_parse(gDevData.linkage_config, &cfg);
uint8_t over_max;
uint8_t under_min;
uint8_t cfg_rewritten = s_lk.cfg_rewritten;
s_lk.cfg_rewritten = 0; /* 只作用本拍,避免下一拍把回差冲掉 */
/* ── 8.4:采样失败 "--" 期间联动视为不成立;若联动占着 → 关掉,避免盲吹 ── */
if (app_th_is_fault()) {
@@ -202,8 +206,9 @@ void app_linkage_reeval(void)
app_fan_set_gear(BOARD_LINKAGE_OPEN_GEAR);
log_info("linkage open, gear=%d\n", BOARD_LINKAGE_OPEN_GEAR);
}
} else if (under_min) {
/* 10.3 关:没有一侧超最高且至少一侧 < min → 关 */
} else if (under_min || cfg_rewritten) {
/* 10.3 关:没有一侧超最高且至少一侧 < min → 关
* 10.5 重写 DP6:新 min/max 下已不超最高 → 该关(不再用旧开态做回差) */
lk_stop();
}
/* 否则:两侧都在 [min,max] 闭区间(含等于)→ 保持上一态(回差) */
@@ -249,8 +254,9 @@ void app_linkage_set_config(void)
/* 引擎关掉也要落盘;开停判定仅在 BOARD_LINKAGE_ENABLE=1 时跑 */
app_nvm_mark_dirty();
#if BOARD_LINKAGE_ENABLE
s_lk.voided = 0; /* 10.5:清手动作废标志 */
app_linkage_reeval(); /* 该开开、该关关 */
s_lk.voided = 0; /* 10.5:清手动作废标志 */
s_lk.cfg_rewritten = 1; /* 新阈值当新局面:不超最高则关,不用旧开态回差 */
app_linkage_reeval(); /* 该开开、该关关 */
#endif
log_info("linkage_config stored\n");
}