BMS故障管理(二)

一、故障管理注意事项

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))
        {

【立志  有恒】                                                                                                  【复盘】 【勇敢】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值