fix: 修复放电功能相关的若干问题

1. 修改apps/chrg/applications/utils/chrg_sink.c:
   - 调整寄存器数组长度,新增继电器控制相关的初始化配置
   - 在放电初始化前先关闭所有功率板继电器
2. 修改apps/chrg/applications/thread/chrg_north.c:
   - 修复变量类型不匹配问题,将uint8_t改为rt_uint8_t
   - 新增参数合法性校验逻辑,避免空指针和越界访问
   - 新增电压状态标记,仅在电压有效后才将低压视为故障
   - 修复无符号整数溢出问题,避免电压差值计算异常
   - 优化电流异常时的状态机切换逻辑
   - 非工作状态下重置所有状态标记
This commit is contained in:
yhf
2026-07-18 23:01:25 +08:00
parent 1b72b7bb78
commit ee76d8782d
3 changed files with 167 additions and 11 deletions
+5 -2
View File
@@ -448,8 +448,8 @@ static int chrg_sink_work_init(eIDX_SOU_CH idx, struct chrg_switch_t *pSW)
{
struct chrg_south_t *pSOU = &chrgsouth;
struct chrg_north_t *pNOR = &chrgnorth;
rt_uint16_t regs[3] = {REG_CURRENT_OUT + 1, REG_MODE, 0};
rt_uint16_t vals[3] = {0, pSW->CV_mode, 0};
rt_uint16_t regs[4] = {REG_CURRENT_OUT + 1, REG_MODE, 0, 0};
rt_uint16_t vals[4] = {0, pSW->CV_mode, 0, 0};
rt_uint8_t count = 2;
if (pSW->sink.test.test_mode_old == 1) {
@@ -459,6 +459,9 @@ static int chrg_sink_work_init(eIDX_SOU_CH idx, struct chrg_switch_t *pSW)
regs[count] = ModbusRTU_DYNA_CMD_MODE_FLAG;
vals[count++] = ModbusRTU_DYNA_CMD_MODE_STOP;
}
/* Close both power-board relays before starting sink init. */
regs[count] = REG_REL_ON;
vals[count++] = ALL_REL_OFF;
if (chrg_sou_com_batch_submit(idx, regs, vals, count) != 0) {
return -1;
}