修复传感器脱落无法上报故障: 发送指令 nack 计入连续失败,DP22 故障码改为 1
拔掉 AHT20 时 measure_start 返回 addr nack,原先直接跳过本次采样、fail_cnt 不增加, 导致永远判不出故障。发送指令失败与读数失败统一记失败,连续 3 次后显示 --。 fault_code:传感器故障报 1,2 预留;温湿度比较异常只闪显示、不上报。
This commit is contained in:
@@ -56,7 +56,7 @@ void app_disp_set_temp_alarm(uint8_t en);
|
||||
void app_disp_set_humi_alarm(uint8_t en);
|
||||
|
||||
/**
|
||||
* @brief 温度或湿度管是否处于告警闪烁(供 fault_code=1)
|
||||
* @brief 温度或湿度管是否处于告警闪烁
|
||||
* @return 1=任一侧告警,0=无
|
||||
*/
|
||||
uint8_t app_disp_is_alarm(void);
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#include "app_cond.h"
|
||||
#include "app_timer_task.h"
|
||||
#include "app_th.h"
|
||||
#include "app_disp.h"
|
||||
#include "app_led.h"
|
||||
#include "app_main.h"
|
||||
#include "usr_le_api.h"
|
||||
@@ -83,14 +82,8 @@ void app_function_poll(void)
|
||||
{
|
||||
gDevData.fan_gear = app_fan_get_gear(); /* DP2 必须等于当前真实档位 */
|
||||
gDevData.mode = app_mode_get_active();
|
||||
/* 规格书 8.2/15:传感器故障优先 2;否则温湿度比较成立报 1 */
|
||||
if (app_th_is_fault()) {
|
||||
gDevData.fault_code = 2;
|
||||
} else if (app_disp_is_alarm()) {
|
||||
gDevData.fault_code = 1;
|
||||
} else {
|
||||
gDevData.fault_code = 0;
|
||||
}
|
||||
/* DP22:传感器连续失败报 1;2 预留,温湿度比较异常只走显示闪烁不上报 */
|
||||
gDevData.fault_code = app_th_is_fault() ? 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+20
-7
@@ -2,8 +2,8 @@
|
||||
* @file app_th.c
|
||||
* @brief CBR3 温湿度采集实现
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.08.29
|
||||
* @version V1.0.0,首次发布
|
||||
* @date 2026.08.31
|
||||
* @version V1.1.0,发令阶段 nack 也计入连续失败;fault_code 由上层映射为 1
|
||||
******************************************************************************/
|
||||
|
||||
#include "app_th.h"
|
||||
@@ -40,6 +40,19 @@ typedef struct {
|
||||
|
||||
static AppThCtx_t s_th;
|
||||
|
||||
/**
|
||||
* @brief 记一次采样失败(发令 nack / 读数失败共用)
|
||||
* @return 无
|
||||
*/
|
||||
static void th_on_fail(void)
|
||||
{
|
||||
if (s_th.fail_cnt < 0xFF) {
|
||||
s_th.fail_cnt++;
|
||||
}
|
||||
s_th.last_ok = 0;
|
||||
log_error("th sample fail %d\n", s_th.fail_cnt);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化温湿度模块
|
||||
* @return 无
|
||||
@@ -85,8 +98,10 @@ void app_th_poll(uint16_t dt)
|
||||
if (bsp_aht20_measure_start() == 0) {
|
||||
s_th.state = TH_ST_WAIT_DATA;
|
||||
s_th.wait_t0 = timer_get_ms();
|
||||
} else {
|
||||
/* 发令阶段 addr nack(未插/脱落)也算一次采样失败,不能直接跳过 */
|
||||
th_on_fail();
|
||||
}
|
||||
/* measure_start 非 0=通讯失败,跳过本次采样 */
|
||||
}
|
||||
} else if (s_th.state == TH_ST_WAIT_DATA) {
|
||||
clr_wdt();
|
||||
@@ -106,9 +121,7 @@ void app_th_poll(uint16_t dt)
|
||||
log_info("th %d.%dC %d%%\n",
|
||||
(int)(t / 10), (int)((t < 0) ? (-t % 10) : (t % 10)), h);
|
||||
} else {
|
||||
s_th.fail_cnt++;
|
||||
s_th.last_ok = 0;
|
||||
log_error("th sample fail %d\n", s_th.fail_cnt);
|
||||
th_on_fail();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,7 +165,7 @@ uint8_t app_th_get_fail_cnt(void)
|
||||
|
||||
/**
|
||||
* @brief 传感器故障(连续失败 ≥ BOARD_TH_FAIL_MAX)
|
||||
* @return 1=故障(显示 --、fault_code=2),0=正常
|
||||
* @return 1=故障(显示 --、fault_code=1),0=正常
|
||||
*/
|
||||
uint8_t app_th_is_fault(void)
|
||||
{
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
* @file app_th.h
|
||||
* @brief CBR3 温湿度采集:2s 周期、失败计数、最近有效值
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.08.29
|
||||
* @version V1.0.0,首次发布
|
||||
* @date 2026.08.31
|
||||
* @version V1.1.0,发令阶段 nack 也计入连续失败
|
||||
*
|
||||
* @note 规格书 8.4:条件"持续时长"只在本次采样成功且比较成立时累加;
|
||||
* 采样失败不累加、不清零;连续 3 次失败显示 "--" 且 fault_code=2。
|
||||
* P0 不做条件比较,只做采样与失败计数。
|
||||
* 采样失败不累加、不清零;连续 3 次失败显示 "--",DP22 fault_code=1。
|
||||
* fault_code=2 预留,本模块只给出 is_fault,由 app_function 映射。
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __APP_TH_H__
|
||||
@@ -54,7 +54,7 @@ uint8_t app_th_get_fail_cnt(void);
|
||||
|
||||
/**
|
||||
* @brief 传感器故障(连续失败 ≥ BOARD_TH_FAIL_MAX)
|
||||
* @return 1=故障(显示 --、fault_code=2),0=正常
|
||||
* @return 1=故障(显示 --、fault_code=1),0=正常
|
||||
*/
|
||||
uint8_t app_th_is_fault(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user