增加了一个短路模式中持续下发开机的指令,并短路就按持续保持进行

1. 在chrg_sink.h中新增chrg_sink_short_keepalive_process函数声明
2. 在chrg_sink.c中实现短路测试保活相关宏定义、全局变量和处理函数
3. 在短路测试工作流程中添加保活指令下发逻辑
4. 在south卷线程中周期性调用短路测试保活处理函数
5. 在非短路测试模式下重置保活计时变量
This commit is contained in:
wrh
2026-09-09 11:08:41 +08:00
parent fe15dd48fe
commit 9a7892e105
3 changed files with 24 additions and 0 deletions
@@ -16,6 +16,7 @@
#include "chrg_thread.h"
#include "chrg_roll_sou.h"
#include "chrg_north.h"
#include "chrg_sink.h"
#include "chrg_eload.h"
#include "chrg_utils.h"
@@ -782,6 +783,7 @@ void chrg_roll_sou_thread_entry (void *data)
struct chrg_thread_t *pTS = &chrgthr[IDX_THR_SOUTH];
struct mb_msg_t *pMB_R = RT_NULL;
while (1) {
chrg_sink_short_keepalive_process();
rt_mutex_take(pTHR->mutex, RT_WAITING_FOREVER);
run = pROLL->run;
single_ch = pROLL->ch;
+21
View File
@@ -23,6 +23,7 @@
#define SINK_UNLOAD_QUERY_INTERVAL_MS 20U // 卸载期间两次优先量测请求的最小间隔
#define SINK_UNLOAD_CURRENT_MAX_MA 200U // 判定负载已安全卸载的最大实际电流
#define SINK_UNLOAD_CONFIRM_COUNT 2U // 连续满足低电流条件的量测帧数
#define SINK_SHORT_KEEPALIVE_MS 30U // 短路测试WORK_START保活下发周期
/* 主继电器闭合跟踪:1=已提交ALL_REL_ON(主继电器应已闭合) 0=未闭合/已断开。
* 用于0V硬保护区分"首次开载/握手恢复"(主继电器未闭合,Now_voltage=0属正常)
@@ -958,6 +959,23 @@ int chrg_sink_volt_judge(eIDX_SOU_CH idx, struct chrg_switch_t *pSW)
return chrg_sink_work(idx, pSW);
}
void chrg_sink_short_keepalive_process(void)
{
eIDX_SOU_CH idx;
struct chrg_switch_t *pSW;
for (idx = IDX_SOU_CH1; idx < TOTAL_SOU_CHS; idx++) {
pSW = &chrgnorth.sw[idx];
if ((pSW->id != ID_SINK) ||
(pSW->sink.work_mode != SINK_WORK_ON_TEST_SHORT) ||
(pSW->sink.test.test_mode != SINK_TEST_SHORT)) {
g_sink_short_start_tick[idx] = 0U;
continue;
}
(void)chrg_sink_TEST_SHORT_KEEPALIVE(idx);
}
}
/*****************************************************************
函数名称: chrg_sink_TEST_OCP_ON
函数描述: 配置并启动负载OCP过流保护测试
@@ -1021,6 +1039,9 @@ int chrg_sink_work(eIDX_SOU_CH idx, struct chrg_switch_t *pSW)
(work_mode != SINK_WORK_UNLOAD_WAIT) &&
(work_mode != SINK_WORK_LOW_AUX_WAIT) &&
(work_mode != SINK_WORK_HANDSHAKE_WAIT)) {
if (work_mode == SINK_WORK_ON_TEST_SHORT) {
return chrg_sink_TEST_SHORT_KEEPALIVE(idx);
}
return 0;
}
switch(work_mode){
+1
View File
@@ -418,6 +418,7 @@ extern void chrg_nor_sink_test_run(rt_uint8_t ch, struct chrg_switch_t *pSW);
extern rt_bool_t chrg_sink_load_should_start(const struct chrg_switch_t *pSW);
extern int chrg_sink_work(eIDX_SOU_CH idx, struct chrg_switch_t *pSW);
extern int chrg_sink_volt_judge(eIDX_SOU_CH idx, struct chrg_switch_t *pSW);
extern void chrg_sink_short_keepalive_process(void);
#endif