修复上一个联动配置触发后,重新设置联动配置时,温湿度在联动范围内,风扇还在转的问题
This commit is contained in:
@@ -41,9 +41,10 @@ typedef struct {
|
|||||||
uint8_t hmax; /**< Byte5 % */
|
uint8_t hmax; /**< Byte5 % */
|
||||||
} LinkageCfg_t;
|
} LinkageCfg_t;
|
||||||
|
|
||||||
/** 联动运行时(RAM,不作废标志不落 VM) */
|
/** 联动运行时(RAM,作废标志不落 VM) */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t voided; /**< 1=被手动作废,须走到「关」条件才再武装 */
|
uint8_t voided; /**< 1=被手动作废,须走到「关」条件才再武装 */
|
||||||
|
uint8_t cfg_rewritten; /**< 1=DP6 刚重写,本拍区间内按「该关」而不是回差保持 */
|
||||||
} LinkageCtx_t;
|
} LinkageCtx_t;
|
||||||
|
|
||||||
static LinkageCtx_t s_lk;
|
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 valid = lk_parse(gDevData.linkage_config, &cfg);
|
||||||
uint8_t over_max;
|
uint8_t over_max;
|
||||||
uint8_t under_min;
|
uint8_t under_min;
|
||||||
|
uint8_t cfg_rewritten = s_lk.cfg_rewritten;
|
||||||
|
|
||||||
|
s_lk.cfg_rewritten = 0; /* 只作用本拍,避免下一拍把回差冲掉 */
|
||||||
|
|
||||||
/* ── 8.4:采样失败 "--" 期间联动视为不成立;若联动占着 → 关掉,避免盲吹 ── */
|
/* ── 8.4:采样失败 "--" 期间联动视为不成立;若联动占着 → 关掉,避免盲吹 ── */
|
||||||
if (app_th_is_fault()) {
|
if (app_th_is_fault()) {
|
||||||
@@ -202,8 +206,9 @@ void app_linkage_reeval(void)
|
|||||||
app_fan_set_gear(BOARD_LINKAGE_OPEN_GEAR);
|
app_fan_set_gear(BOARD_LINKAGE_OPEN_GEAR);
|
||||||
log_info("linkage open, gear=%d\n", BOARD_LINKAGE_OPEN_GEAR);
|
log_info("linkage open, gear=%d\n", BOARD_LINKAGE_OPEN_GEAR);
|
||||||
}
|
}
|
||||||
} else if (under_min) {
|
} else if (under_min || cfg_rewritten) {
|
||||||
/* 10.3 关:没有一侧超最高且至少一侧 < min → 关 */
|
/* 10.3 关:没有一侧超最高且至少一侧 < min → 关。
|
||||||
|
* 10.5 重写 DP6:新 min/max 下已不超最高 → 该关(不再用旧开态做回差) */
|
||||||
lk_stop();
|
lk_stop();
|
||||||
}
|
}
|
||||||
/* 否则:两侧都在 [min,max] 闭区间(含等于)→ 保持上一态(回差) */
|
/* 否则:两侧都在 [min,max] 闭区间(含等于)→ 保持上一态(回差) */
|
||||||
@@ -250,6 +255,7 @@ void app_linkage_set_config(void)
|
|||||||
app_nvm_mark_dirty();
|
app_nvm_mark_dirty();
|
||||||
#if BOARD_LINKAGE_ENABLE
|
#if BOARD_LINKAGE_ENABLE
|
||||||
s_lk.voided = 0; /* 10.5:清手动作废标志 */
|
s_lk.voided = 0; /* 10.5:清手动作废标志 */
|
||||||
|
s_lk.cfg_rewritten = 1; /* 新阈值当新局面:不超最高则关,不用旧开态回差 */
|
||||||
app_linkage_reeval(); /* 该开开、该关关 */
|
app_linkage_reeval(); /* 该开开、该关关 */
|
||||||
#endif
|
#endif
|
||||||
log_info("linkage_config stored\n");
|
log_info("linkage_config stored\n");
|
||||||
|
|||||||
Reference in New Issue
Block a user