一、故障管理注意事项
1.区分故障的可恢复性:比如像过压过流可以属于可恢复故障 ,消防类的故障从安全的考虑属于不可恢复的故障
2.区分故障的等级:故障对于整个系统的危害性定义不同的故障等级,根据不同的故障等级执行不同的策略方法
3.故障信号的管理:建议使用表驱动的方式,方便管理同时增加代码的可读性
4.故障信号的设置:故障信号在哪里设置为TRUE,需要合理的条件判断且建议只在一个地方设置,减少临界资源到处使用出现信号值混乱的现象
5.不同模式的故障管理:充电模式 放电模式 静置模式
6.故障的时序:一般故障的判断需要等到采样任务稳定,故障管理任务会 vTaskDelay(XXX)增加延时
二、总故障管理的表驱动示例
1.定义相关结构体 + 填写故障表
//告警汇总结构体
typedef struct
{
AlarmSummaryID m_u32AlarmSignal; //汇总告警信号
AlarmLevel m_u8AlarmLevel; //初始化故障等级
U32 m_u32AlarmLevalOne; //一级告警信号
U32 m_u32AlarmLevalTwo; //二级告警信号
}tag_AlarmSummary;
//告警汇总列表
tag_AlarmSummary AlarmSummary[] =
{
//汇总告警信号 //初始化故障等级 //一级告警信号 //二级告警信号
{SYS_ERROR, ALARM_LEVEL_0, ALARM_ID_SYS_ERROR_LEV_1, ALARM_ID_SYS_ERROR_LEV_2}, //系统故障
{CHG_OVER_CUR, ALARM_LEVEL_0, ALARM_ID_CHG_OVER_CUR_LEV_1, ALARM_ID_CHG_OVER_CUR_LEV_2}, //充电电流故障
{DSG_OVER_CUR, ALARM_LEVEL_0, ALARM_ID_DSG_OVER_CUR_LEV_1, ALARM_ID_DSG_OVER_CUR_LEV_2}, //放电电流故障
{CHG_OVER_TEMP, ALARM_LEVEL_0, ALARM_ID_CHG_OVER_TEMP_LEV_1, ALARM_ID_CHG_OVER_TEMP_LEV_2}, //充电过温故障
}
三、故障汇总的应用
1.判断故障等级
//返回指定告警的等级
AlarmLevel GetAlarmLevelFunc(AlarmSummaryID AlarmId)
{
return AlarmSummary[AlarmId].m_u8AlarmLevel;
}
2.设置告警等级
//设置告警等级
void SetAlarmLevelFunc(AlarmSummaryID AlarmId, AlarmLevel AlarmLev)
{
AlarmSummary[AlarmId].m_u8AlarmLevel = AlarmLev;
}
3.不同模式下屏蔽不同的故障
//不同系统模式,屏蔽不同告警
if(s32SysRunMode == SYS_DISCHG_MODE
&& (AlarmSummary[i].m_u32AlarmSignal == CELL_OVER_VOLT
|| AlarmSummary[i].m_u32AlarmSignal == SUM_OVER_VOLT
|| AlarmSummary[i].m_u32AlarmSignal == CHG_OVER_TEMP
|| AlarmSummary[i].m_u32AlarmSignal == CHG_LOW_TEMP))
{
}
else if(s32SysRunMode == SYS_CHG_MODE
&& (AlarmSummary[i].m_u32AlarmSignal == CELL_LOW_VOLT
|| AlarmSummary[i].m_u32AlarmSignal == SUM_LOW_VOLT
|| AlarmSummary[i].m_u32AlarmSignal == DIFF_VOLT
|| AlarmSummary[i].m_u32AlarmSignal == DSG_OVER_TEMP
|| AlarmSummary[i].m_u32AlarmSignal == DSG_LOW_TEMP))
{
【立志 有恒】 【复盘】 【勇敢】