|
@@ -28,7 +28,7 @@ void SFM(void)
|
|
|
static uint16_T SumT2;
|
|
|
|
|
|
static uint8_T Cntl;
|
|
|
- static uint16_T CellUArry[3][28];
|
|
|
+ static uint16_T CellUArry[4][28];
|
|
|
static uint8_T ErrNr[28];
|
|
|
static uint8_T RecNr[28];
|
|
|
static boolean_T sfmv_flg_cellUOpenFlt[28];
|
|
@@ -48,7 +48,6 @@ void SFM(void)
|
|
|
boolean_T sfmd_flg_ACPlugTOpenFlt;
|
|
|
static boolean_T sfmd_flg_heatPanT1OpenFlt;
|
|
|
static boolean_T sfmd_flg_heatPanT2OpenFlt;
|
|
|
- boolean_T sfmd_flg_heatPanTOpenFlt;
|
|
|
boolean_T sfmd_flg_modTRationFlt;
|
|
|
boolean_T sfmv_flg_modTRationFlt[6];
|
|
|
|
|
@@ -130,6 +129,18 @@ void SFM(void)
|
|
|
boolean_T sfmd_flg_EEsaveFlt;
|
|
|
static uint16_T socd_pct_bcuSoc_Delay;
|
|
|
|
|
|
+ static uint16_T noDisChrgCnt;
|
|
|
+ static int16_T sfmd_I_curr_Delay;
|
|
|
+ static boolean_T sfmd_flg_Udrop;
|
|
|
+ static boolean_T sfmd_flg_heatclear;
|
|
|
+ static boolean_T sfmd_flg_volFlt_keep;
|
|
|
+ static uint16_T CntA;
|
|
|
+ static uint16_T ModTStor[4][6];
|
|
|
+ static boolean_T sfmd_flg_Tup;
|
|
|
+ static boolean_T sfmd_flg_modTOpenFlt_keep;
|
|
|
+ static uint16_T CntB;
|
|
|
+
|
|
|
+
|
|
|
boolean_T FltFlg[200];
|
|
|
uint16_T FltLevel[200];
|
|
|
uint8_T FltAct[200];
|
|
@@ -146,7 +157,7 @@ void SFM(void)
|
|
|
{
|
|
|
memset(&DiagThr,0,sizeof(DiagThr));
|
|
|
memset(&DiagTime,0,sizeof(DiagTime));
|
|
|
- Cntl = 0;
|
|
|
+ Cntl = 10;
|
|
|
memset(heatT1Arr,0,sizeof(heatT1Arr));
|
|
|
memset(heatT2Arr,0,sizeof(heatT2Arr));
|
|
|
memset(ErrNr,0,sizeof(ErrNr));
|
|
@@ -190,6 +201,16 @@ void SFM(void)
|
|
|
sfmd_flg_chrgCurrOverFlt = false;
|
|
|
sfmd_flg_disChrgCurrOverFlt = false;
|
|
|
|
|
|
+ noDisChrgCnt = 0;
|
|
|
+ sfmd_I_curr_Delay = ihd_I_curr;
|
|
|
+ sfmd_flg_Udrop = false;
|
|
|
+ sfmd_flg_heatclear = false;
|
|
|
+ sfmd_flg_volFlt_keep = false;
|
|
|
+ CntA = 10;
|
|
|
+ sfmd_flg_Tup = false;
|
|
|
+ sfmd_flg_modTOpenFlt_keep = false;
|
|
|
+ CntB = 0;;
|
|
|
+
|
|
|
ihd_T_mosT_Delay = ihd_T_mosT;
|
|
|
ihd_T_DCPlugT_Delay =ihd_T_DCPlugT;
|
|
|
ihd_T_ACPlugT_Delay = ihd_T_ACPlugT;
|
|
@@ -207,6 +228,9 @@ void SFM(void)
|
|
|
sfmd_flg_heatCirOpenFltEo = false;
|
|
|
sfmd_flg_heatCirClosFltEi = false;
|
|
|
sfmd_flg_heatCirClosFltEo = false;
|
|
|
+ sfmd_flg_heatRunFltEi = false;
|
|
|
+ sfmd_flg_heatRunFltEo = false;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
//=======================================================================================
|
|
@@ -236,13 +260,19 @@ void SFM(void)
|
|
|
{
|
|
|
sfmd_flg_HVILFlt = false;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
//22 充电Mos失效故障
|
|
|
- sfmd_flg_chrgMosClosFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_flg_chrgMosClosFlt ,&DiagTime.N22 ,20);
|
|
|
+ sfmd_flg_chrgMosClosFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_flg_chrgMosClosFlt ,&DiagTime.N22 ,2);
|
|
|
|
|
|
|
|
|
//24 放电Mos失效故障
|
|
|
- sfmd_flg_disChrgMosClosFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_flg_disChrgMosClosFlt ,&DiagTime.N24 ,20);
|
|
|
+ sfmd_flg_disChrgMosClosFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_flg_disChrgMosClosFlt ,&DiagTime.N24 ,2);
|
|
|
|
|
|
|
|
|
//
|
|
@@ -259,7 +289,7 @@ void SFM(void)
|
|
|
}
|
|
|
Time1Cntl ++;
|
|
|
SumT1 = SumT1 + ihd_T_heatPanT1;
|
|
|
- if(Time1Cntl >= 600)
|
|
|
+ if(Time1Cntl >= 60)
|
|
|
{
|
|
|
for(i = 0; i < 9;i++)
|
|
|
{
|
|
@@ -283,7 +313,7 @@ void SFM(void)
|
|
|
}
|
|
|
Time2Cntl ++;
|
|
|
SumT2 = SumT2 + ihd_T_heatPanT2;
|
|
|
- if(Time2Cntl >= 600)
|
|
|
+ if(Time2Cntl >= 60)
|
|
|
{
|
|
|
for(i = 0; i < 9;i++)
|
|
|
{
|
|
@@ -296,7 +326,7 @@ void SFM(void)
|
|
|
}
|
|
|
|
|
|
//32 加热回路常闭故障
|
|
|
- Enable1 = JudgeTimeSystem(1, tmsd_st_heatAct == 0,&DiagTime.N32, 6000);
|
|
|
+ Enable1 = JudgeTimeSystem(1, tmsd_st_heatAct == 0,&DiagTime.N32, 600);
|
|
|
sfmd_flg_heatCirClosFltEo = ( ((int16_T)(heatT2Arr[9] - heatT2Arr[0]) > 5 || (int16_T)(heatT1Arr[9] - heatT1Arr[0]) > 5) && Enable1) || sfmd_flg_heatCirClosFltEo || sfmd_flg_heatCirClosFltEi;
|
|
|
|
|
|
//33 加热回路常开故障
|
|
@@ -306,16 +336,16 @@ void SFM(void)
|
|
|
//34 主回路常闭故障 //(充电MOS及放电MOS,主继电器断开 使能)
|
|
|
sfmd_I_curr = ihd_I_curr;
|
|
|
sfmd_I_currAbs = (uint16_T) (sfmd_I_curr > 0 ? sfmd_I_curr : -sfmd_I_curr);
|
|
|
- sfmd_flg_mainCirClosFltEo = JudgeTimeSystem(!ihd_st_chrgMosControl && !ihd_st_disChrgMosControl && !ihd_st_relayControl, sfmd_I_currAbs > 5,&DiagTime.N34, 50) || sfmd_flg_mainCirClosFltEo || sfmd_flg_mainCirClosFltEi ;
|
|
|
+ sfmd_flg_mainCirClosFltEo = JudgeTimeSystem(!ihd_st_chrgMosControl && !ihd_st_disChrgMosControl && !ihd_st_relayControl, sfmd_I_currAbs > 5,&DiagTime.N34, 5) || sfmd_flg_mainCirClosFltEo || sfmd_flg_mainCirClosFltEi ;
|
|
|
|
|
|
|
|
|
//52 电压开路故障
|
|
|
Cntl = Cntl + 1;
|
|
|
- if(!sfmd_flg_interComFlt && Cntl > 9)
|
|
|
+ if(!sfmd_flg_interComFlt && Cntl >= 0)
|
|
|
{
|
|
|
Cntl = 0;
|
|
|
// 矩阵更新
|
|
|
- for(j = 0;j < 3 && FirstRun_SFM;j++)
|
|
|
+ for(j = 0;j < 4 && FirstRun_SFM;j++)
|
|
|
{
|
|
|
for(i = 0;i < cmnc_num_cellUNum;i++)
|
|
|
{
|
|
@@ -323,7 +353,7 @@ void SFM(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for(j = 0;j < 2;j++)
|
|
|
+ for(j = 0;j < 3;j++)
|
|
|
{
|
|
|
for(i = 0;i < cmnc_num_cellUNum;i++)
|
|
|
{
|
|
@@ -337,7 +367,7 @@ void SFM(void)
|
|
|
// 故障判断
|
|
|
for(i = 0;i < cmnc_num_cellUNum - 1;i++)
|
|
|
{
|
|
|
- if((int16_T)(CellUArry[2][i] - CellUArry[0][i]) < -50 && (int16_T)(CellUArry[2][i+1] - CellUArry[0][i+1]) > 50)
|
|
|
+ if((int16_T)(CellUArry[3][i] - CellUArry[1][i]) < -50 && (int16_T)(CellUArry[3][i+1] - CellUArry[1][i+1]) > 50)
|
|
|
{
|
|
|
ErrNr[i] = ErrNr[i] + 1;
|
|
|
}
|
|
@@ -345,7 +375,7 @@ void SFM(void)
|
|
|
{
|
|
|
ErrNr[i] = 0;
|
|
|
}
|
|
|
- if ( ErrNr[i] >= 2|| ((int16_T)(CellUArry[2][i] - CellUArry[0][i]) < -1000 && (int16_T)(CellUArry[2][i+1] - CellUArry[0][i+1]) > 1000 ))
|
|
|
+ if ( ErrNr[i] >= 2|| ((int16_T)(CellUArry[3][i] - CellUArry[2][i]) < -1000 && (int16_T)(CellUArry[3][i+1] - CellUArry[2][i+1]) > 1000 ))
|
|
|
{
|
|
|
sfmv_flg_cellUOpenFlt[i] = true;
|
|
|
ErrUFlg[i] = true;
|
|
@@ -355,7 +385,7 @@ void SFM(void)
|
|
|
{
|
|
|
for(k = 0;k < i;k++)
|
|
|
{
|
|
|
- if((int16_T)(CellUArry[2][i-k] - CellUArry[1][i-k]) < -200)
|
|
|
+ if((int16_T)(CellUArry[3][i-k] - CellUArry[2][i-k]) < -200)
|
|
|
{
|
|
|
sfmv_flg_cellUOpenFlt[i-k] = true;
|
|
|
ErrUFlg[i-k] = true;
|
|
@@ -363,6 +393,7 @@ void SFM(void)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
//
|
|
|
if(!sfmd_flg_interComFlt)
|
|
@@ -387,7 +418,7 @@ void SFM(void)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if(sfmd_V_cellUMax - sfmd_V_cellUMin > 3000)
|
|
|
+ if(sfmd_V_cellUMax - sfmd_V_cellUMin > 5000) // 2021 10.24
|
|
|
{
|
|
|
sfmd_V_cellUAvrg = (SumU - sfmd_V_cellUMax - sfmd_V_cellUMin)/(UNum - 2);
|
|
|
for(i = 0;i < cmnc_num_cellUNum ;i++)
|
|
@@ -421,7 +452,7 @@ void SFM(void)
|
|
|
{
|
|
|
RecNr[i] = 0;
|
|
|
}
|
|
|
- if( RecNr[i] > 20)
|
|
|
+ if( RecNr[i] >= 2)
|
|
|
{
|
|
|
sfmv_flg_cellUOpenFlt[i] = false;
|
|
|
ErrUFlg[i] = false;
|
|
@@ -462,7 +493,7 @@ void SFM(void)
|
|
|
{
|
|
|
modTOpenNr[i] = 0;
|
|
|
}
|
|
|
- if(modTOpenNr[i] >= 20)
|
|
|
+ if(modTOpenNr[i] >= 2)
|
|
|
{
|
|
|
sfmv_flg_modTOpenFlt[i] = true;
|
|
|
}
|
|
@@ -475,16 +506,16 @@ void SFM(void)
|
|
|
}
|
|
|
|
|
|
//54 Mos温度开路故障
|
|
|
- sfmd_flg_chrgMosTOpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_mosT == 10, &DiagTime.N54, 20);
|
|
|
+ sfmd_flg_chrgMosTOpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_mosT == 10, &DiagTime.N54, 2);
|
|
|
|
|
|
//56 快充插头温度开路故障
|
|
|
- sfmd_flg_DCPlugTOpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_DCPlugT == 0, &DiagTime.N56, 20);
|
|
|
+ sfmd_flg_DCPlugTOpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_DCPlugT == 0, &DiagTime.N56, 2);
|
|
|
//57 慢充插头温度开路故障
|
|
|
- sfmd_flg_ACPlugTOpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_ACPlugT == 0, &DiagTime.N57, 20);
|
|
|
+ sfmd_flg_ACPlugTOpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_ACPlugT == 0, &DiagTime.N57, 2);
|
|
|
//58 加热板#1温度开路故障
|
|
|
- sfmd_flg_heatPanT1OpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_heatPanT1 == 0, &DiagTime.N58, 20);
|
|
|
+ sfmd_flg_heatPanT1OpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_heatPanT1 == 0, &DiagTime.N58, 2);
|
|
|
//59 加热板#2温度开路故障
|
|
|
- sfmd_flg_heatPanT2OpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_heatPanT2 == 0, &DiagTime.N59, 20);
|
|
|
+ sfmd_flg_heatPanT2OpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_heatPanT2 == 0, &DiagTime.N59, 2);
|
|
|
|
|
|
|
|
|
//61 模组温度合理性故障
|
|
@@ -504,7 +535,7 @@ void SFM(void)
|
|
|
modTRationNr[i] = 0;
|
|
|
modTArr[i] = ihv_T_modT[i];
|
|
|
}
|
|
|
- if(modTRationNr[i] >= 20)
|
|
|
+ if(modTRationNr[i] >= 2)
|
|
|
{
|
|
|
sfmv_flg_modTRationFlt[i] = true;
|
|
|
}
|
|
@@ -523,7 +554,7 @@ void SFM(void)
|
|
|
{
|
|
|
ihd_T_mosT_Delay = ihd_T_mosT;
|
|
|
}
|
|
|
- sfmd_flg_chrgMosTRationFlt = JudgeTimeSystem(1, sfmd_flg_chrgMosTRationFltOnce, &DiagTime.N62, 20);
|
|
|
+ sfmd_flg_chrgMosTRationFlt = JudgeTimeSystem(1, sfmd_flg_chrgMosTRationFltOnce, &DiagTime.N62, 2);
|
|
|
|
|
|
//64 快充插头温度合理性故障
|
|
|
sfmd_flg_DCPlugTRationFltOnce = !sfmd_flg_interComFlt && !sfmd_flg_DCPlugTOpenFlt && ((int16_T)(ihd_T_DCPlugT - ihd_T_DCPlugT_Delay) < -10);
|
|
@@ -531,7 +562,7 @@ void SFM(void)
|
|
|
{
|
|
|
ihd_T_DCPlugT_Delay = ihd_T_DCPlugT;
|
|
|
}
|
|
|
- sfmd_flg_DCPlugTRationFlt = JudgeTimeSystem(1, sfmd_flg_DCPlugTRationFltOnce, &DiagTime.N64, 20);
|
|
|
+ sfmd_flg_DCPlugTRationFlt = JudgeTimeSystem(1, sfmd_flg_DCPlugTRationFltOnce, &DiagTime.N64, 2);
|
|
|
|
|
|
//65 慢插头温度合理性故障
|
|
|
sfmd_flg_ACPlugTRationFltOnce = !sfmd_flg_interComFlt && !sfmd_flg_ACPlugTOpenFlt && ((int16_T)(ihd_T_ACPlugT - ihd_T_ACPlugT_Delay) < -10);
|
|
@@ -539,7 +570,7 @@ void SFM(void)
|
|
|
{
|
|
|
ihd_T_ACPlugT_Delay = ihd_T_ACPlugT;
|
|
|
}
|
|
|
- sfmd_flg_ACPlugTRationFlt = JudgeTimeSystem(1, sfmd_flg_ACPlugTRationFltOnce, &DiagTime.N65, 20);
|
|
|
+ sfmd_flg_ACPlugTRationFlt = JudgeTimeSystem(1, sfmd_flg_ACPlugTRationFltOnce, &DiagTime.N65, 2);
|
|
|
|
|
|
//66 加热板#1 温度合理性故障
|
|
|
sfmd_flg_heatPanT1RationFltOnce = !sfmd_flg_interComFlt && !sfmd_flg_heatPanT1OpenFlt && ((int16_T)(ihd_T_heatPanT1 - ihd_T_heatPanT1_Delay) < -10);
|
|
@@ -547,7 +578,7 @@ void SFM(void)
|
|
|
{
|
|
|
ihd_T_heatPanT1_Delay = ihd_T_heatPanT1;
|
|
|
}
|
|
|
- sfmd_flg_heatPanT1RationFlt = JudgeTimeSystem(1, sfmd_flg_heatPanT1RationFltOnce, &DiagTime.N66, 20);
|
|
|
+ sfmd_flg_heatPanT1RationFlt = JudgeTimeSystem(1, sfmd_flg_heatPanT1RationFltOnce, &DiagTime.N66, 2);
|
|
|
|
|
|
//67 加热板#2 温度合理性故障
|
|
|
sfmd_flg_heatPanT2RationFltOnce = !sfmd_flg_interComFlt && !sfmd_flg_heatPanT2OpenFlt && ((int16_T)(ihd_T_heatPanT2 -ihd_T_heatPanT2_Delay) < -10);
|
|
@@ -555,7 +586,7 @@ void SFM(void)
|
|
|
{
|
|
|
ihd_T_heatPanT2_Delay = ihd_T_heatPanT2;
|
|
|
}
|
|
|
- sfmd_flg_heatPanT2RationFlt = JudgeTimeSystem(1, sfmd_flg_heatPanT2RationFltOnce, &DiagTime.N67, 20);
|
|
|
+ sfmd_flg_heatPanT2RationFlt = JudgeTimeSystem(1, sfmd_flg_heatPanT2RationFltOnce, &DiagTime.N67, 2);
|
|
|
|
|
|
//68 模组温度全部不可用
|
|
|
sfmd_flg_modTAllFlt = true;
|
|
@@ -607,121 +638,120 @@ void SFM(void)
|
|
|
sfmd_flg_currOpenFlt = false;
|
|
|
sfmd_I_curr = ihd_I_curr;
|
|
|
//81 单体过压故障2级
|
|
|
- sfmd_flg_cellUOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt,sfmd_V_cellUMax,sfmc_V_cellUOverThrFlt2,sfmc_V_cellUOverThrRec2,20,20,&DiagThr.fltNum81,&DiagThr.recNum81,&sfmd_flg_cellUOverFlt2);
|
|
|
+ sfmd_flg_cellUOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt,sfmd_V_cellUMax,sfmc_V_cellUOverThrFlt2,sfmc_V_cellUOverThrRec2,2,2,&DiagThr.fltNum81,&DiagThr.recNum81,&sfmd_flg_cellUOverFlt2);
|
|
|
//82 单体过压故障1级
|
|
|
- sfmd_flg_cellUOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt,sfmd_V_cellUMax,sfmc_V_cellUOverThrFlt1,sfmc_V_cellUOverThrRec1,20,20,&DiagThr.fltNum82,&DiagThr.recNum82,&sfmd_flg_cellUOverFlt1) && !sfmd_flg_cellUOverFlt2;
|
|
|
+ sfmd_flg_cellUOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt,sfmd_V_cellUMax,sfmc_V_cellUOverThrFlt1,sfmc_V_cellUOverThrRec1,2,2,&DiagThr.fltNum82,&DiagThr.recNum82,&sfmd_flg_cellUOverFlt1) && !sfmd_flg_cellUOverFlt2;
|
|
|
|
|
|
//83 单体欠压故障2级
|
|
|
- sfmd_flg_cellULowFlt2 = DiagThrSystem2(1,!sfmd_flg_interComFlt,sfmd_V_cellUMin,sfmc_V_cellULowThrFlt2,sfmc_V_cellULowThrRec2,20,20,&DiagThr.fltNum83,&DiagThr.recNum83,&sfmd_flg_cellULowFlt2);
|
|
|
+ sfmd_flg_cellULowFlt2 = DiagThrSystem2(1,!sfmd_flg_interComFlt,sfmd_V_cellUMin,sfmc_V_cellULowThrFlt2,sfmc_V_cellULowThrRec2,2,2,&DiagThr.fltNum83,&DiagThr.recNum83,&sfmd_flg_cellULowFlt2);
|
|
|
//84 单体欠压故障1级
|
|
|
- sfmd_flg_cellULowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt,sfmd_V_cellUMin,sfmc_V_cellULowThrFlt1,sfmc_V_cellULowThrRec1,20,20,&DiagThr.fltNum84,&DiagThr.recNum84,&sfmd_flg_cellULowFlt1) && !sfmd_flg_cellULowFlt2;
|
|
|
+ sfmd_flg_cellULowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt,sfmd_V_cellUMin,sfmc_V_cellULowThrFlt1,sfmc_V_cellULowThrRec1,2,2,&DiagThr.fltNum84,&DiagThr.recNum84,&sfmd_flg_cellULowFlt1) && !sfmd_flg_cellULowFlt2;
|
|
|
|
|
|
//85 压差过大2级
|
|
|
- sfmd_flg_cellUDiffFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt,sfmd_V_cellUMax - sfmd_V_cellUMin,sfmc_flg_cellUDiffThrFlt2,sfmc_flg_cellUDiffThrRec2,20,20,&DiagThr.fltNum85,&DiagThr.recNum85,&sfmd_flg_cellUDiffFlt2);
|
|
|
+ sfmd_flg_cellUDiffFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt,sfmd_V_cellUMax - sfmd_V_cellUMin,sfmc_flg_cellUDiffThrFlt2,sfmc_flg_cellUDiffThrRec2,2,2,&DiagThr.fltNum85,&DiagThr.recNum85,&sfmd_flg_cellUDiffFlt2);
|
|
|
//86 压差过大1级
|
|
|
- sfmd_flg_cellUDiffFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt,sfmd_V_cellUMax - sfmd_V_cellUMin,sfmc_flg_cellUDiffThrFlt1,sfmc_flg_cellUDiffThrRec1,20,20,&DiagThr.fltNum86,&DiagThr.recNum86,&sfmd_flg_cellUDiffFlt1) && !sfmd_flg_cellUDiffFlt2;
|
|
|
+ sfmd_flg_cellUDiffFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt,sfmd_V_cellUMax - sfmd_V_cellUMin,sfmc_flg_cellUDiffThrFlt1,sfmc_flg_cellUDiffThrRec1,2,2,&DiagThr.fltNum86,&DiagThr.recNum86,&sfmd_flg_cellUDiffFlt1) && !sfmd_flg_cellUDiffFlt2;
|
|
|
|
|
|
//87 总压过压2级
|
|
|
- sfmd_flg_battUOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battUOverThrFlt2,sfmc_V_battUOverThrRec2,20,20,&DiagThr.fltNum87,&DiagThr.recNum87,&sfmd_flg_battUOverFlt2);
|
|
|
+ sfmd_flg_battUOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battUOverThrFlt2,sfmc_V_battUOverThrRec2,2,2,&DiagThr.fltNum87,&DiagThr.recNum87,&sfmd_flg_battUOverFlt2);
|
|
|
//88 总压过压1级
|
|
|
- sfmd_flg_battUOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battUOverThrFlt1,sfmc_V_battUOverThrRec1,20,20,&DiagThr.fltNum88,&DiagThr.recNum88,&sfmd_flg_battUOverFlt1) && !sfmd_flg_battUOverFlt2;
|
|
|
+ sfmd_flg_battUOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battUOverThrFlt1,sfmc_V_battUOverThrRec1,2,2,&DiagThr.fltNum88,&DiagThr.recNum88,&sfmd_flg_battUOverFlt1) && !sfmd_flg_battUOverFlt2;
|
|
|
|
|
|
//89 总压欠压2级
|
|
|
- sfmd_flg_battULowFlt2 = DiagThrSystem2(1,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battULowThrFlt2,sfmc_V_battULowThrRec2,20,20,&DiagThr.fltNum89,&DiagThr.recNum89,&sfmd_flg_battULowFlt2);
|
|
|
+ sfmd_flg_battULowFlt2 = DiagThrSystem2(1,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battULowThrFlt2,sfmc_V_battULowThrRec2,2,2,&DiagThr.fltNum89,&DiagThr.recNum89,&sfmd_flg_battULowFlt2);
|
|
|
//90 总压欠压1级
|
|
|
- sfmd_flg_battULowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battULowThrFlt1,sfmc_V_battULowThrRec1,20,20,&DiagThr.fltNum90,&DiagThr.recNum90,&sfmd_flg_battULowFlt1) && !sfmd_flg_battULowFlt2;
|
|
|
+ sfmd_flg_battULowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt,sfmd_V_battU,sfmc_V_battULowThrFlt1,sfmc_V_battULowThrRec1,2,2,&DiagThr.fltNum90,&DiagThr.recNum90,&sfmd_flg_battULowFlt1) && !sfmd_flg_battULowFlt2;
|
|
|
|
|
|
chrgFlg = ihd_st_workStat == 2;
|
|
|
disChrgFlg = ihd_st_workStat != 2;
|
|
|
|
|
|
//97 模组充电温度过高2级故障
|
|
|
- sfmd_flg_chrgModTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_chrgModTOverThrFlt2,sfmc_T_chrgModTOverThrRec2,25,25,&DiagThr.fltNum97,&DiagThr.recNum97,&sfmd_flg_chrgModTOverFlt2);
|
|
|
+ sfmd_flg_chrgModTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_chrgModTOverThrFlt2,sfmc_T_chrgModTOverThrRec2,3,3,&DiagThr.fltNum97,&DiagThr.recNum97,&sfmd_flg_chrgModTOverFlt2);
|
|
|
//98 模组充电温度过高1级故障
|
|
|
- sfmd_flg_chrgModTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_chrgModTOverThrFlt1,sfmc_T_chrgModTOverThrRec1,25,25,&DiagThr.fltNum98,&DiagThr.recNum98,&sfmd_flg_chrgModTOverFlt1) && !sfmd_flg_chrgModTOverFlt2;
|
|
|
+ sfmd_flg_chrgModTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_chrgModTOverThrFlt1,sfmc_T_chrgModTOverThrRec1,3,3,&DiagThr.fltNum98,&DiagThr.recNum98,&sfmd_flg_chrgModTOverFlt1) && !sfmd_flg_chrgModTOverFlt2;
|
|
|
//99 模组充电温度过低2级故障
|
|
|
- sfmd_flg_chrgModTLowFlt2 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_chrgModTLowThrFlt2,sfmc_T_chrgModTLowThrRec2,25,25,&DiagThr.fltNum99,&DiagThr.recNum99,&sfmd_flg_chrgModTLowFlt2);
|
|
|
+ sfmd_flg_chrgModTLowFlt2 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_chrgModTLowThrFlt2,sfmc_T_chrgModTLowThrRec2,3,3,&DiagThr.fltNum99,&DiagThr.recNum99,&sfmd_flg_chrgModTLowFlt2);
|
|
|
//100 模组充电温度过低1级故障
|
|
|
- sfmd_flg_chrgModTLowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_chrgModTLowThrFlt1,sfmc_T_chrgModTLowThrRec1,25,25,&DiagThr.fltNum100,&DiagThr.recNum100,&sfmd_flg_chrgModTLowFlt1) && !sfmd_flg_chrgModTLowFlt2;
|
|
|
+ sfmd_flg_chrgModTLowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&chrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_chrgModTLowThrFlt1,sfmc_T_chrgModTLowThrRec1,3,3,&DiagThr.fltNum100,&DiagThr.recNum100,&sfmd_flg_chrgModTLowFlt1) && !sfmd_flg_chrgModTLowFlt2;
|
|
|
|
|
|
//101 模组放电温度过高2级故障
|
|
|
- sfmd_flg_disChrgModTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_disChrgModTOverThrFlt2,sfmc_T_disChrgModTOverThrRec2,25,25,&DiagThr.fltNum101,&DiagThr.recNum101,&sfmd_flg_disChrgModTOverFlt2);
|
|
|
+ sfmd_flg_disChrgModTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_disChrgModTOverThrFlt2,sfmc_T_disChrgModTOverThrRec2,3,3,&DiagThr.fltNum101,&DiagThr.recNum101,&sfmd_flg_disChrgModTOverFlt2);
|
|
|
//102 模组放电温度过高1级故障
|
|
|
- sfmd_flg_disChrgModTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_disChrgModTOverThrFlt1,sfmc_T_disChrgModTOverThrRec1,25,25,&DiagThr.fltNum102,&DiagThr.recNum102,&sfmd_flg_disChrgModTOverFlt1) && !sfmd_flg_disChrgModTOverFlt2;
|
|
|
+ sfmd_flg_disChrgModTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMax,sfmc_T_disChrgModTOverThrFlt1,sfmc_T_disChrgModTOverThrRec1,3,3,&DiagThr.fltNum102,&DiagThr.recNum102,&sfmd_flg_disChrgModTOverFlt1) && !sfmd_flg_disChrgModTOverFlt2;
|
|
|
//103 模组放电温度过低2级故障
|
|
|
- sfmd_flg_disChrgModTLowFlt2 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_disChrgModTLowThrFlt2,sfmc_T_disChrgModTLowThrRec2,25,25,&DiagThr.fltNum103,&DiagThr.recNum103,&sfmd_flg_disChrgModTLowFlt2);
|
|
|
+ sfmd_flg_disChrgModTLowFlt2 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_disChrgModTLowThrFlt2,sfmc_T_disChrgModTLowThrRec2,3,3,&DiagThr.fltNum103,&DiagThr.recNum103,&sfmd_flg_disChrgModTLowFlt2);
|
|
|
//104 模组放电温度过低1级故障
|
|
|
- sfmd_flg_disChrgModTLowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_disChrgModTLowThrFlt1,sfmc_T_disChrgModTLowThrRec1,25,25,&DiagThr.fltNum104,&DiagThr.recNum104,&sfmd_flg_disChrgModTLowFlt1) && !sfmd_flg_disChrgModTLowFlt2;
|
|
|
+ sfmd_flg_disChrgModTLowFlt1 = DiagThrSystem2(0,!sfmd_flg_interComFlt&&disChrgFlg && !sfmd_flg_modTAllFlt,sfmd_T_modTMin,sfmc_T_disChrgModTLowThrFlt1,sfmc_T_disChrgModTLowThrRec1,3,3,&DiagThr.fltNum104,&DiagThr.recNum104,&sfmd_flg_disChrgModTLowFlt1) && !sfmd_flg_disChrgModTLowFlt2;
|
|
|
|
|
|
//
|
|
|
//105 模组温差2级故障
|
|
|
- sfmd_flg_modTDiffFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && !sfmd_flg_modTAllFlt,sfmd_T_modTMax - sfmd_T_modTMin,sfmc_T_modTDiffThrFlt2,sfmc_T_modTDiffThrRec2,25,25,&DiagThr.fltNum105,&DiagThr.recNum105,&sfmd_flg_modTDiffFlt2);
|
|
|
+ sfmd_flg_modTDiffFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && !sfmd_flg_modTAllFlt,sfmd_T_modTMax - sfmd_T_modTMin,sfmc_T_modTDiffThrFlt2,sfmc_T_modTDiffThrRec2,3,3,&DiagThr.fltNum105,&DiagThr.recNum105,&sfmd_flg_modTDiffFlt2);
|
|
|
//106 模组温差1级故障
|
|
|
- sfmd_flg_modTDiffFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && !sfmd_flg_modTAllFlt,sfmd_T_modTMax - sfmd_T_modTMin,sfmc_T_modTDiffThrFlt1,sfmc_T_modTDiffThrRec1,25,25,&DiagThr.fltNum106,&DiagThr.recNum106,&sfmd_flg_modTDiffFlt1) && !sfmd_flg_modTDiffFlt2;
|
|
|
+ sfmd_flg_modTDiffFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && !sfmd_flg_modTAllFlt,sfmd_T_modTMax - sfmd_T_modTMin,sfmc_T_modTDiffThrFlt1,sfmc_T_modTDiffThrRec1,3,3,&DiagThr.fltNum106,&DiagThr.recNum106,&sfmd_flg_modTDiffFlt1) && !sfmd_flg_modTDiffFlt2;
|
|
|
|
|
|
|
|
|
//107 充电Mos温度过高2级故障
|
|
|
- sfmd_flg_chrgMosTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && chrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_chrgMosTOverThrFlt2,sfmc_T_chrgMosTOverThrRec2,25,25,&DiagThr.fltNum107,&DiagThr.recNum107,&sfmd_flg_chrgMosTOverFlt2);
|
|
|
+ sfmd_flg_chrgMosTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && chrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_chrgMosTOverThrFlt2,sfmc_T_chrgMosTOverThrRec2,3,3,&DiagThr.fltNum107,&DiagThr.recNum107,&sfmd_flg_chrgMosTOverFlt2);
|
|
|
//108 充电Mos温度过高1级故障
|
|
|
- sfmd_flg_chrgMosTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && chrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_chrgMosTOverThrFlt1,sfmc_T_chrgMosTOverThrRec1,25,25,&DiagThr.fltNum108,&DiagThr.recNum108,&sfmd_flg_chrgMosTOverFlt1) && !sfmd_flg_chrgMosTOverFlt2;
|
|
|
+ sfmd_flg_chrgMosTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && chrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_chrgMosTOverThrFlt1,sfmc_T_chrgMosTOverThrRec1,3,3,&DiagThr.fltNum108,&DiagThr.recNum108,&sfmd_flg_chrgMosTOverFlt1) && !sfmd_flg_chrgMosTOverFlt2;
|
|
|
//109 放电Mos温度过高2级故障
|
|
|
- sfmd_flg_disChrgMosTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && disChrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_disChrgMosTOverThrFlt2,sfmc_T_disChrgMosTOverThrRec2,25,25,&DiagThr.fltNum109,&DiagThr.recNum109,&sfmd_flg_disChrgMosTOverFlt2);
|
|
|
+ sfmd_flg_disChrgMosTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && disChrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_disChrgMosTOverThrFlt2,sfmc_T_disChrgMosTOverThrRec2,3,3,&DiagThr.fltNum109,&DiagThr.recNum109,&sfmd_flg_disChrgMosTOverFlt2);
|
|
|
//110 放电Mos温度过高1级故障
|
|
|
- sfmd_flg_disChrgMosTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && disChrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_disChrgMosTOverThrFlt1,sfmc_T_disChrgMosTOverThrRec1,25,25,&DiagThr.fltNum110,&DiagThr.recNum110,&sfmd_flg_disChrgMosTOverFlt1) && !sfmd_flg_disChrgMosTOverFlt2;
|
|
|
+ sfmd_flg_disChrgMosTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && disChrgFlg && sfmd_flg_chrgMosTRationFlt && sfmd_flg_chrgMosTOpenFlt,ihd_T_mosT,sfmc_T_disChrgMosTOverThrFlt1,sfmc_T_disChrgMosTOverThrRec1,3,3,&DiagThr.fltNum110,&DiagThr.recNum110,&sfmd_flg_disChrgMosTOverFlt1) && !sfmd_flg_disChrgMosTOverFlt2;
|
|
|
|
|
|
|
|
|
//111 快充插头温度过高2级故障
|
|
|
- sfmd_flg_DCPlugTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_DCPlugTRationFlt && sfmd_flg_DCPlugTOpenFlt,ihd_T_DCPlugT,sfmc_T_DCPlugTOverThrFlt2,sfmc_T_DCPlugTOverThrRec2,25,25,&DiagThr.fltNum111,&DiagThr.recNum111,&sfmd_flg_DCPlugTOverFlt2);
|
|
|
+ sfmd_flg_DCPlugTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_DCPlugTRationFlt && sfmd_flg_DCPlugTOpenFlt,ihd_T_DCPlugT,sfmc_T_DCPlugTOverThrFlt2,sfmc_T_DCPlugTOverThrRec2,3,3,&DiagThr.fltNum111,&DiagThr.recNum111,&sfmd_flg_DCPlugTOverFlt2);
|
|
|
//112 快充插头温度过高1级故障
|
|
|
- sfmd_flg_DCPlugTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_DCPlugTRationFlt && sfmd_flg_DCPlugTOpenFlt,ihd_T_DCPlugT,sfmc_T_DCPlugTOverThrFlt1,sfmc_T_DCPlugTOverThrRec1,25,25,&DiagThr.fltNum112,&DiagThr.recNum112,&sfmd_flg_DCPlugTOverFlt1) && !sfmd_flg_DCPlugTOverFlt2;
|
|
|
+ sfmd_flg_DCPlugTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_DCPlugTRationFlt && sfmd_flg_DCPlugTOpenFlt,ihd_T_DCPlugT,sfmc_T_DCPlugTOverThrFlt1,sfmc_T_DCPlugTOverThrRec1,3,3,&DiagThr.fltNum112,&DiagThr.recNum112,&sfmd_flg_DCPlugTOverFlt1) && !sfmd_flg_DCPlugTOverFlt2;
|
|
|
//113 慢充插头温度过高2级故障
|
|
|
- sfmd_flg_ACPlugTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_ACPlugTRationFlt && sfmd_flg_ACPlugTOpenFlt,ihd_T_ACPlugT,sfmc_T_ACPlugTOverThrFlt2,sfmc_T_ACPlugTOverThrRec2,25,25,&DiagThr.fltNum113,&DiagThr.recNum113,&sfmd_flg_ACPlugTOverFlt2);
|
|
|
+ sfmd_flg_ACPlugTOverFlt2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_ACPlugTRationFlt && sfmd_flg_ACPlugTOpenFlt,ihd_T_ACPlugT,sfmc_T_ACPlugTOverThrFlt2,sfmc_T_ACPlugTOverThrRec2,3,3,&DiagThr.fltNum113,&DiagThr.recNum113,&sfmd_flg_ACPlugTOverFlt2);
|
|
|
//114 慢充插头温度过高1级故障
|
|
|
- sfmd_flg_ACPlugTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_ACPlugTRationFlt && sfmd_flg_ACPlugTOpenFlt,ihd_T_ACPlugT,sfmc_T_ACPlugTOverThrFlt1,sfmc_T_ACPlugTOverThrRec1,25,25,&DiagThr.fltNum114,&DiagThr.recNum114,&sfmd_flg_ACPlugTOverFlt1) && !sfmd_flg_ACPlugTOverFlt2;
|
|
|
+ sfmd_flg_ACPlugTOverFlt1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_ACPlugTRationFlt && sfmd_flg_ACPlugTOpenFlt,ihd_T_ACPlugT,sfmc_T_ACPlugTOverThrFlt1,sfmc_T_ACPlugTOverThrRec1,3,3,&DiagThr.fltNum114,&DiagThr.recNum114,&sfmd_flg_ACPlugTOverFlt1) && !sfmd_flg_ACPlugTOverFlt2;
|
|
|
|
|
|
//115 加热板温度过高2级故障
|
|
|
- sfmd_flg_heatPanTOverFlt2_1 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_heatPanT1RationFlt && sfmd_flg_heatPanT1OpenFlt,ihd_T_heatPanT1,sfmc_T_heatPanTOverThrFlt2,sfmc_T_heatPanTOverThrRec2,25,25,&DiagThr.fltNum115_1,&DiagThr.recNum115_1,&sfmd_flg_heatPanTOverFlt2_1);
|
|
|
- sfmd_flg_heatPanTOverFlt2_2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_heatPanT2RationFlt && sfmd_flg_heatPanT2OpenFlt,ihd_T_heatPanT2,sfmc_T_heatPanTOverThrFlt2,sfmc_T_heatPanTOverThrRec2,25,25,&DiagThr.fltNum115_2,&DiagThr.recNum115_2,&sfmd_flg_heatPanTOverFlt2_2);
|
|
|
+ sfmd_flg_heatPanTOverFlt2_1 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_heatPanT1RationFlt && sfmd_flg_heatPanT1OpenFlt,ihd_T_heatPanT1,sfmc_T_heatPanTOverThrFlt2,sfmc_T_heatPanTOverThrRec2,3,3,&DiagThr.fltNum115_1,&DiagThr.recNum115_1,&sfmd_flg_heatPanTOverFlt2_1);
|
|
|
+ sfmd_flg_heatPanTOverFlt2_2 = DiagThrSystem1(1,!sfmd_flg_interComFlt && sfmd_flg_heatPanT2RationFlt && sfmd_flg_heatPanT2OpenFlt,ihd_T_heatPanT2,sfmc_T_heatPanTOverThrFlt2,sfmc_T_heatPanTOverThrRec2,3,3,&DiagThr.fltNum115_2,&DiagThr.recNum115_2,&sfmd_flg_heatPanTOverFlt2_2);
|
|
|
sfmd_flg_heatPanTOverFlt2 = sfmd_flg_heatPanTOverFlt2_1 || sfmd_flg_heatPanTOverFlt2_2;
|
|
|
//116 加热板温度过高1级故障
|
|
|
- sfmd_flg_heatPanTOverFlt1_1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_heatPanT1RationFlt && sfmd_flg_heatPanT1OpenFlt,ihd_T_heatPanT1,sfmc_T_heatPanTOverThrFlt1,sfmc_T_heatPanTOverThrRec1,25,25,&DiagThr.fltNum116_1,&DiagThr.recNum116_1,&sfmd_flg_heatPanTOverFlt1_1) && !sfmd_flg_heatPanTOverFlt2;
|
|
|
- sfmd_flg_heatPanTOverFlt1_2 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_heatPanT2RationFlt && sfmd_flg_heatPanT2OpenFlt,ihd_T_heatPanT2,sfmc_T_heatPanTOverThrFlt1,sfmc_T_heatPanTOverThrRec1,25,25,&DiagThr.fltNum116_2,&DiagThr.recNum116_2,&sfmd_flg_heatPanTOverFlt1_2) && !sfmd_flg_heatPanTOverFlt2;
|
|
|
+ sfmd_flg_heatPanTOverFlt1_1 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_heatPanT1RationFlt && sfmd_flg_heatPanT1OpenFlt,ihd_T_heatPanT1,sfmc_T_heatPanTOverThrFlt1,sfmc_T_heatPanTOverThrRec1,3,3,&DiagThr.fltNum116_1,&DiagThr.recNum116_1,&sfmd_flg_heatPanTOverFlt1_1) && !sfmd_flg_heatPanTOverFlt2;
|
|
|
+ sfmd_flg_heatPanTOverFlt1_2 = DiagThrSystem1(0,!sfmd_flg_interComFlt && sfmd_flg_heatPanT2RationFlt && sfmd_flg_heatPanT2OpenFlt,ihd_T_heatPanT2,sfmc_T_heatPanTOverThrFlt1,sfmc_T_heatPanTOverThrRec1,3,3,&DiagThr.fltNum116_2,&DiagThr.recNum116_2,&sfmd_flg_heatPanTOverFlt1_2) && !sfmd_flg_heatPanTOverFlt2;
|
|
|
sfmd_flg_heatPanTOverFlt1 = sfmd_flg_heatPanTOverFlt1_1 || sfmd_flg_heatPanTOverFlt1_2;
|
|
|
|
|
|
sfmd_I_curr = ihd_I_curr;
|
|
|
sfmd_I_currAbs = (uint16_T) (sfmd_I_curr > 0 ? sfmd_I_curr : - sfmd_I_curr);
|
|
|
//131 充电电流过高
|
|
|
- sfmd_flg_chrgCurrOverFlt = DiagThrSystem1(1,!sfmd_flg_interComFlt && chrgFlg && !sfmd_flg_currOpenFlt,sfmd_I_currAbs,sfmc_I_chrgCurrOverThr,sfmc_I_chrgCurrOverThr,20,20,&DiagThr.fltNum131,&DiagThr.recNum131,&sfmd_flg_chrgCurrOverFlt);
|
|
|
+ sfmd_flg_chrgCurrOverFlt = DiagThrSystem1(1,!sfmd_flg_interComFlt && chrgFlg && !sfmd_flg_currOpenFlt,sfmd_I_currAbs,sfmc_I_chrgCurrOverThr,sfmc_I_chrgCurrOverThr,2,2,&DiagThr.fltNum131,&DiagThr.recNum131,&sfmd_flg_chrgCurrOverFlt);
|
|
|
//132 放电电流过高
|
|
|
- sfmd_flg_disChrgCurrOverFlt = DiagThrSystem1(1,!sfmd_flg_interComFlt && disChrgFlg && !sfmd_flg_currOpenFlt,sfmd_I_currAbs,sfmc_I_disChrgCurrOverThr,sfmc_I_disChrgCurrOverThr ,20,20,&DiagThr.fltNum132,&DiagThr.recNum132,&sfmd_flg_disChrgCurrOverFlt);
|
|
|
-
|
|
|
- // printf("sfmd_flg_currOpenFlt:%d,ihd_st_workStat%d,sfmd_I_currAbs:%d,fltNum131:%d,fltNum132:%d,recNum131:%d,recNum132:%d\n",sfmd_flg_currOpenFlt,ihd_st_workStat,sfmd_I_currAbs,DiagThr.fltNum131,DiagThr.fltNum132,DiagThr.recNum131,DiagThr.recNum132);
|
|
|
+ sfmd_flg_disChrgCurrOverFlt = DiagThrSystem1(1,!sfmd_flg_interComFlt && disChrgFlg && !sfmd_flg_currOpenFlt,sfmd_I_currAbs,sfmc_I_disChrgCurrOverThr,sfmc_I_disChrgCurrOverThr ,2,2,&DiagThr.fltNum132,&DiagThr.recNum132,&sfmd_flg_disChrgCurrOverFlt);
|
|
|
+
|
|
|
//151 充电过流故障不匹配
|
|
|
- sfmd_flg_chrgCurrOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt,sfmd_flg_chrgCurrOverFlt != ihd_flg_chrgCurrOverFlt,&DiagTime.N151,20);
|
|
|
+ sfmd_flg_chrgCurrOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt,sfmd_flg_chrgCurrOverFlt != ihd_flg_chrgCurrOverFlt,&DiagTime.N151,2);
|
|
|
//152 放电过流故障不匹配
|
|
|
- sfmd_flg_disChrgCurrOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt,sfmd_flg_disChrgCurrOverFlt != ihd_flg_disChrgCurrOverFlt,&DiagTime.N152,20);
|
|
|
+ sfmd_flg_disChrgCurrOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt,sfmd_flg_disChrgCurrOverFlt != ihd_flg_disChrgCurrOverFlt,&DiagTime.N152,2);
|
|
|
//153 总压欠压不匹配
|
|
|
- sfmd_flg_battULowMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_battULowFlt2 != ihd_flg_battULowFlt,&DiagTime.N153,20);
|
|
|
+ sfmd_flg_battULowMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_battULowFlt2 != ihd_flg_battULowFlt,&DiagTime.N153,2);
|
|
|
//154 总压过压不匹配
|
|
|
- sfmd_flg_battUOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_battUOverFlt2 != ihd_flg_battUOverFlt,&DiagTime.N154,20);
|
|
|
+ sfmd_flg_battUOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_battUOverFlt2 != ihd_flg_battUOverFlt,&DiagTime.N154,2);
|
|
|
|
|
|
//155 单体欠压故障不匹配
|
|
|
- sfmd_flg_cellULowMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_cellULowFlt2 != ihd_flg_cellULowFlt,&DiagTime.N155,20);
|
|
|
+ sfmd_flg_cellULowMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_cellULowFlt2 != ihd_flg_cellULowFlt,&DiagTime.N155,2);
|
|
|
//156 单体过压故障不匹配
|
|
|
- sfmd_flg_cellUOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_cellUOverFlt2 != ihd_flg_cellUOverFlt,&DiagTime.N156,20);
|
|
|
+ sfmd_flg_cellUOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_cellUOverFlt2 != ihd_flg_cellUOverFlt,&DiagTime.N156,2);
|
|
|
|
|
|
//157 充电模组过温故障不匹配
|
|
|
- sfmd_flg_chrgModTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_chrgModTOverFlt2 != ihd_flg_chrgModTOverFlt,&DiagTime.N157,20);
|
|
|
+ sfmd_flg_chrgModTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_chrgModTOverFlt2 != ihd_flg_chrgModTOverFlt,&DiagTime.N157,2);
|
|
|
//158 充电模组低温故障不匹配
|
|
|
- sfmd_flg_chrgModTLowMisFlt = JudgeTimeSystem(0 && !sfmd_flg_interComFlt,sfmd_flg_chrgModTLowFlt2 != ihd_flg_chrgModTLowFlt,&DiagTime.N158,20);
|
|
|
+ sfmd_flg_chrgModTLowMisFlt = JudgeTimeSystem(0 && !sfmd_flg_interComFlt,sfmd_flg_chrgModTLowFlt2 != ihd_flg_chrgModTLowFlt,&DiagTime.N158,2);
|
|
|
//159 放电模组过温故障不匹配
|
|
|
- sfmd_flg_disChrgModTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt,sfmd_flg_disChrgModTOverFlt2 != ihd_flg_disChrgModTOverFlt,&DiagTime.N159,20);
|
|
|
+ sfmd_flg_disChrgModTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt,sfmd_flg_disChrgModTOverFlt2 != ihd_flg_disChrgModTOverFlt,&DiagTime.N159,2);
|
|
|
//160 放电模组低温故障不匹配
|
|
|
- sfmd_flg_disChrgModTLowMisFlt = JudgeTimeSystem(0 &&!sfmd_flg_interComFlt, sfmd_flg_disChrgModTLowFlt2 != ihd_flg_disChrgModTLowFlt,&DiagTime.N160,20);
|
|
|
+ sfmd_flg_disChrgModTLowMisFlt = JudgeTimeSystem(0 &&!sfmd_flg_interComFlt, sfmd_flg_disChrgModTLowFlt2 != ihd_flg_disChrgModTLowFlt,&DiagTime.N160,2);
|
|
|
|
|
|
//161 充电Mos过温故障不匹配
|
|
|
- sfmd_flg_chrgMosTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_chrgMosTOverFlt2 != ihd_flg_chrgMosTOverFlt,&DiagTime.N161,20);
|
|
|
+ sfmd_flg_chrgMosTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_chrgMosTOverFlt2 != ihd_flg_chrgMosTOverFlt,&DiagTime.N161,2);
|
|
|
//162 放电Mos过温故障不匹配
|
|
|
- sfmd_flg_disChrgMosTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_disChrgMosTOverFlt2 != ihd_flg_disChrgMosTOverFlt,&DiagTime.N162,20);
|
|
|
+ sfmd_flg_disChrgMosTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_disChrgMosTOverFlt2 != ihd_flg_disChrgMosTOverFlt,&DiagTime.N162,2);
|
|
|
|
|
|
|
|
|
//163 soc不匹配
|
|
@@ -729,14 +759,114 @@ void SFM(void)
|
|
|
//164 SOH 不匹配
|
|
|
sfmd_flg_sohMisFlt = !FirstRun_SFM && (!sfmd_flg_interComFlt) && ( (int16_T) (sohd_pct_bcuSoh -ihd_pct_soh ) > 50 || (int16_T) (sohd_pct_bcuSoh -ihd_pct_soh ) < -50);
|
|
|
|
|
|
-
|
|
|
//179 soc跳变
|
|
|
- sfmd_flg_socJumpFlt = ((int16_T) (socd_pct_bcuSoc - socd_pct_bcuSoc_Delay) > 50 ||(int16_T) (socd_pct_bcuSoc - socd_pct_bcuSoc_Delay) < -50) && JudgeTimeSystem(1, 1 ,&DiagTime.N179,2);;
|
|
|
+ sfmd_flg_socJumpFlt = ((int16_T) (socd_pct_bcuSoc - socd_pct_bcuSoc_Delay) > 50 ||(int16_T) (socd_pct_bcuSoc - socd_pct_bcuSoc_Delay) < -50) && JudgeTimeSystem(1, 1 ,&DiagTime.N179,2);
|
|
|
socd_pct_bcuSoc_Delay = socd_pct_bcuSoc;
|
|
|
//180 EE失效
|
|
|
sfmd_flg_EEsaveFlt = ihd_flg_EESaveFlt;
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 21 热失控故障
|
|
|
+ if (sfmd_I_curr > -2 && (sfmd_I_curr_Delay - sfmd_I_curr) > -2 && (sfmd_I_curr_Delay - sfmd_I_curr) < 2)
|
|
|
+ {
|
|
|
+ noDisChrgCnt = (noDisChrgCnt + 1) > 200 ? 200 : (noDisChrgCnt + 1);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ noDisChrgCnt = 0;
|
|
|
+ }
|
|
|
+ sfmd_I_curr_Delay = sfmd_I_curr;
|
|
|
|
|
|
+ if (noDisChrgCnt > 60)
|
|
|
+ {
|
|
|
+ for(i = 0; i < cmnc_num_cellUNum;i++)
|
|
|
+ {
|
|
|
+ if((int16_T)(CellUArry[3][i] - CellUArry[0][i]) < -100)
|
|
|
+ {
|
|
|
+ sfmd_flg_Udrop = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(sfmd_flg_heatclear)
|
|
|
+ {
|
|
|
+ sfmd_flg_Udrop = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ////
|
|
|
+ if(sfmd_flg_volFlt)
|
|
|
+ {
|
|
|
+ sfmd_flg_volFlt_keep = true;
|
|
|
+ }
|
|
|
+ if(sfmd_flg_heatclear)
|
|
|
+ {
|
|
|
+ sfmd_flg_volFlt_keep = false;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ CntA = CntA + 1;
|
|
|
+ if(CntA >= 0)
|
|
|
+ {
|
|
|
+ CntA = 0;
|
|
|
+ for(j = 0;j < 4 && FirstRun_SFM;j++)
|
|
|
+ {
|
|
|
+ for(i = 0; i < cmnc_num_modTNum;i++)
|
|
|
+ {
|
|
|
+ ModTStor[j][i] = sfmv_T_modT[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(j = 0;j < 3;j++)
|
|
|
+ {
|
|
|
+ for(i = 0; i < cmnc_num_modTNum;i++)
|
|
|
+ {
|
|
|
+ ModTStor[j][i] = ModTStor[j+1][i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(i = 0; i < cmnc_num_modTNum;i++)
|
|
|
+ {
|
|
|
+ ModTStor[j][i] = sfmv_T_modT[i];
|
|
|
+ }
|
|
|
+ for(i = 0; i < cmnc_num_modTNum;i++)
|
|
|
+ {
|
|
|
+ if( (int16_T)(ModTStor[3][i] - ModTStor[2][i]) > 2 && (int16_T)(ModTStor[2][i] - ModTStor[1][i]) > 2 && (int16_T)(ModTStor[1][i] - ModTStor[0][i]) > 2)
|
|
|
+ {
|
|
|
+ sfmd_flg_Tup = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sfmd_flg_heatclear)
|
|
|
+ {
|
|
|
+ sfmd_flg_Tup = false;
|
|
|
+ }
|
|
|
+ //
|
|
|
+ if(sfmd_flg_modTOpenFlt)
|
|
|
+ {
|
|
|
+ sfmd_flg_modTOpenFlt_keep = true;
|
|
|
+ }
|
|
|
+ if(sfmd_flg_heatclear)
|
|
|
+ {
|
|
|
+ sfmd_flg_modTOpenFlt_keep = false;
|
|
|
+ }
|
|
|
+ //////
|
|
|
+ if(sfmd_flg_Udrop || sfmd_flg_volFlt_keep || sfmd_flg_Tup || sfmd_flg_modTOpenFlt_keep)
|
|
|
+ {
|
|
|
+ CntB = (CntB + 1) > 200 ? 200 : (CntB + 1);
|
|
|
+ }
|
|
|
+ if((((sfmd_flg_Udrop && sfmd_flg_Tup) || (sfmd_flg_Udrop && sfmd_flg_modTOpenFlt_keep) || (sfmd_flg_volFlt_keep && sfmd_flg_Tup)) && CntB <= 180) || sfmd_flg_heatRunFltEi)
|
|
|
+ {
|
|
|
+ sfmd_flg_heatRunFltEo = true;
|
|
|
+ }
|
|
|
+ if(!sfmd_flg_heatRunFltEo && CntB > 180)
|
|
|
+ {
|
|
|
+ sfmd_flg_heatclear = true;
|
|
|
+ CntB = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ sfmd_flg_heatclear = false;
|
|
|
+ }
|
|
|
+ printf("%d %d %d %d %d %d %d\n",sfmd_flg_Udrop,sfmd_flg_volFlt_keep,sfmd_flg_Tup,sfmd_flg_modTOpenFlt_keep,CntB,sfmd_flg_heatclear,sfmd_flg_heatRunFltEo) ;
|
|
|
+
|
|
|
|
|
|
//================================================================================================================================================================
|
|
|
//================================================================================================================================================================
|
|
@@ -769,7 +899,7 @@ void SFM(void)
|
|
|
FltFlg[18] = 0; FltLevel[18] = 0; FltAct[18] = 0; //19 预留2
|
|
|
FltFlg[19] = 0; FltLevel[19] = 0; FltAct[19] = 0; //20 预留1
|
|
|
|
|
|
- FltFlg[20] = 0; FltLevel[20] = 0; FltAct[20] = 0; //21 热失控;
|
|
|
+ FltFlg[20] = sfmd_flg_heatRunFltEo; FltLevel[20] = 5; FltAct[20] = 255; //21 热失控;
|
|
|
FltFlg[21] = sfmd_flg_chrgMosClosFlt; FltLevel[21] = 4; FltAct[21] = 106; //22充电MOS常闭故障
|
|
|
FltFlg[22] = 0; FltLevel[22] = 0; FltAct[22] = 0; //23充电MOS常开故障
|
|
|
FltFlg[23] = sfmd_flg_disChrgMosClosFlt; FltLevel[23] = 4; FltAct[23] = 106; //24 放电Mos常闭故障
|
|
@@ -1019,14 +1149,14 @@ void SFM(void)
|
|
|
}
|
|
|
sfmd_st_fltAct = sfmd_st_fltAct|FltActArr[i];
|
|
|
}
|
|
|
- /*
|
|
|
+
|
|
|
for(i=0;i < 20;i++)
|
|
|
{
|
|
|
printf("%d ",sfmv_idx_fltCode[i]);
|
|
|
}
|
|
|
printf("\n");
|
|
|
printf("sfmd_st_fltAct:%d,sfmd_st_fltLevel:%d\n\n",sfmd_st_fltAct,sfmd_st_fltLevel);
|
|
|
- */
|
|
|
+
|
|
|
|
|
|
///=====================================================================
|
|
|
//======================================================================
|
|
@@ -1041,7 +1171,7 @@ void SFM(void)
|
|
|
|
|
|
|
|
|
//===============================================================================
|
|
|
-boolean_T DiagThrSystem1(boolean_T Enable, boolean_T precondition, uint16_T Input,uint16_T fltThr,uint16_T recThr,uint16_T fltNumThr,uint16_T recNumThr,uint8_T *fltNum,uint8_T *recNum,boolean_T *fitFlg)
|
|
|
+boolean_T DiagThrSystem1(boolean_T Enable, boolean_T precondition, uint16_T Input,uint16_T fltThr,uint16_T recThr,uint8_T fltNumThr,uint8_T recNumThr,uint8_T *fltNum,uint8_T *recNum,boolean_T *fitFlg)
|
|
|
{
|
|
|
|
|
|
if(Enable && precondition && Input > fltThr)
|
|
@@ -1073,7 +1203,7 @@ boolean_T DiagThrSystem1(boolean_T Enable, boolean_T precondition, uint16_T Inpu
|
|
|
return *fitFlg;
|
|
|
}
|
|
|
//=============================================================================
|
|
|
-boolean_T DiagThrSystem2(boolean_T Enable, boolean_T precondition, uint16_T Input,uint16_T fltThr,uint16_T recThr,uint16_T fltNumThr,uint16_T recNumThr,uint8_T *fltNum,uint8_T *recNum,boolean_T *fitFlg)
|
|
|
+boolean_T DiagThrSystem2(boolean_T Enable, boolean_T precondition, uint16_T Input,uint16_T fltThr,uint16_T recThr,uint8_T fltNumThr,uint8_T recNumThr,uint8_T *fltNum,uint8_T *recNum,boolean_T *fitFlg)
|
|
|
{
|
|
|
if(Enable && precondition && Input < fltThr)
|
|
|
{
|