12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817 |
- #include "SFM.h"
- boolean_T FirstRun_SFM;
- DiagThrstruct DiagThr;
- DiagTimestruct DiagTime;
- void SFM_Init(void)
- {
- FirstRun_SFM = true;
- }
- void SFM(void)
- {
- boolean_T sfmd_flg_interComFlt;
- boolean_T sfmd_flg_authFlt;
- boolean_T sfmd_flg_HVILFlt;
- boolean_T sfmd_flg_chrgMosClosFlt;
- boolean_T sfmd_flg_disChrgMosClosFlt;
- static uint16_T Time1Cntl;
- static uint16_T heatT1Arr[10];
- static uint16_T SumT1;
- static uint16_T Time2Cntl;
- static uint16_T heatT2Arr[10];
- static uint16_T SumT2;
- static uint8_T Cntl;
- static uint16_T CellUArry[4][cmnc_num_cellUNumMax];
- static uint8_T ErrNr[cmnc_num_cellUNumMax];
- static uint8_T RecNr[cmnc_num_cellUNumMax];
- static boolean_T sfmv_flg_cellUOpenFlt[cmnc_num_cellUNumMax];
- static boolean_T ErrUFlg[cmnc_num_cellUNumMax];
- uint32_T SumU;
- uint16_T UNum;
- boolean_T sfmd_flg_volFlt;
- boolean_T Enable1;
- boolean_T Enable2;
- static uint8_T modTOpenNr[cmnc_num_modTNumMax];
- static uint8_T modTRationNr[cmnc_num_modTNumMax];
- boolean_T sfmd_flg_modTOpenFlt;
- boolean_T sfmv_flg_modTOpenFlt[cmnc_num_modTNumMax];
- boolean_T sfmd_flg_chrgMosTOpenFlt;
- boolean_T sfmd_flg_DCPlugTOpenFlt;
- boolean_T sfmd_flg_ACPlugTOpenFlt;
- static boolean_T sfmd_flg_heatPanT1OpenFlt;
- static boolean_T sfmd_flg_heatPanT2OpenFlt;
- boolean_T sfmd_flg_modTRationFlt;
- boolean_T sfmv_flg_modTRationFlt[cmnc_num_modTNumMax];
- static uint16_T modTArr[cmnc_num_modTNumMax];
- uint16_T Tnum;
- uint32_T SumT;
- boolean_T sfmd_flg_chrgMosTRationFlt;
- boolean_T sfmd_flg_DCPlugTRationFlt;
- boolean_T sfmd_flg_ACPlugTRationFlt;
- static boolean_T sfmd_flg_heatPanT1RationFlt;
- static boolean_T sfmd_flg_heatPanT2RationFlt;
- boolean_T sfmd_flg_chrgMosTRationFltOnce;
- boolean_T sfmd_flg_DCPlugTRationFltOnce;
- boolean_T sfmd_flg_ACPlugTRationFltOnce;
- boolean_T sfmd_flg_heatPanT1RationFltOnce;
- boolean_T sfmd_flg_heatPanT2RationFltOnce;
- static uint16_T ihd_T_mosT_Delay;
- static uint16_T ihd_T_DCPlugT_Delay;
- static uint16_T ihd_T_ACPlugT_Delay;
- static uint16_T ihd_T_heatPanT1_Delay;
- static uint16_T ihd_T_heatPanT2_Delay;
- static uint16_T ihd_T_heatPanT1_Delay1;
- static uint16_T ihd_T_heatPanT2_Delay1;
- boolean_T sfmd_flg_modTAllFlt;
- boolean_T sfmd_flg_heatPanTAllFlt;
- boolean_T sfmd_flg_currOpenFlt;
- uint16_T sfmd_I_currAbs;
- static boolean_T sfmd_flg_cellUOverFlt2;
- static boolean_T sfmd_flg_cellUOverFlt1;
- static boolean_T sfmd_flg_cellULowFlt2;
- static boolean_T sfmd_flg_cellULowFlt1;
- static boolean_T sfmd_flg_cellUDiffFlt2;
- static boolean_T sfmd_flg_cellUDiffFlt1;
- static boolean_T sfmd_flg_battUOverFlt2;
- static boolean_T sfmd_flg_battUOverFlt1;
- static boolean_T sfmd_flg_battULowFlt2;
- static boolean_T sfmd_flg_battULowFlt1;
- boolean_T chrgFlg;
- boolean_T disChrgFlg;
- static boolean_T sfmd_flg_chrgModTOverFlt2;
- static boolean_T sfmd_flg_chrgModTOverFlt1;
- static boolean_T sfmd_flg_chrgModTLowFlt2;
- static boolean_T sfmd_flg_chrgModTLowFlt1;
- static boolean_T sfmd_flg_disChrgModTOverFlt2;
- static boolean_T sfmd_flg_disChrgModTOverFlt1;
- static boolean_T sfmd_flg_disChrgModTLowFlt2;
- static boolean_T sfmd_flg_disChrgModTLowFlt1;
- static boolean_T sfmd_flg_modTDiffFlt2;
- static boolean_T sfmd_flg_modTDiffFlt1;
- static boolean_T sfmd_flg_chrgMosTOverFlt2;
- static boolean_T sfmd_flg_chrgMosTOverFlt1;
- static boolean_T sfmd_flg_disChrgMosTOverFlt2;
- static boolean_T sfmd_flg_disChrgMosTOverFlt1;
- static boolean_T sfmd_flg_DCPlugTOverFlt2;
- static boolean_T sfmd_flg_DCPlugTOverFlt1;
- static boolean_T sfmd_flg_ACPlugTOverFlt2;
- static boolean_T sfmd_flg_ACPlugTOverFlt1;
- static boolean_T sfmd_flg_heatPanTOverFlt2_1;
- static boolean_T sfmd_flg_heatPanTOverFlt2_2;
- boolean_T sfmd_flg_heatPanTOverFlt2;
- static boolean_T sfmd_flg_heatPanTOverFlt1_1;
- static boolean_T sfmd_flg_heatPanTOverFlt1_2;
- static boolean_T sfmd_flg_heatPanTOverFlt1;
- static boolean_T sfmd_flg_chrgCurrOverFlt;
- static boolean_T sfmd_flg_disChrgCurrOverFlt;
- boolean_T sfmd_flg_chrgCurrOverMisFlt;
- boolean_T sfmd_flg_disChrgCurrOverMisFlt;
- boolean_T sfmd_flg_battULowMisFlt;
- boolean_T sfmd_flg_battUOverMisFlt;
- boolean_T sfmd_flg_cellULowMisFlt;
- boolean_T sfmd_flg_cellUOverMisFlt;
- boolean_T sfmd_flg_chrgModTOverMisFlt;
- boolean_T sfmd_flg_chrgModTLowMisFlt;
- boolean_T sfmd_flg_disChrgModTOverMisFlt;
- boolean_T sfmd_flg_disChrgModTLowMisFlt;
- boolean_T sfmd_flg_chrgMosTOverMisFlt;
- boolean_T sfmd_flg_disChrgMosTOverMisFlt;
- boolean_T sfmd_flg_socMisFlt;
- boolean_T sfmd_flg_sohMisFlt;
- boolean_T sfmd_flg_socJumpFlt;
- 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][cmnc_num_modTNumMax];
- static boolean_T sfmd_flg_Tup;
- static boolean_T sfmd_flg_modTOpenFlt_keep;
- static uint16_T CntB;
- int32_T SumR;
- int32_T SumRR;
- boolean_T sfmd_flg_deltRFlt;
- static uint8_T deltRFltNr[cmnc_num_cellUNumMax];
- boolean_T FltFlg[200];
- uint16_T FltLevel[200];
- uint8_T FltAct[200];
- uint16_T FltCodeArr[20];
- uint16_T FltLevelArr[20];
- uint8_T FltActArr[20];
- uint16_T i;
- uint16_T j;
- uint16_T k;
- //初值
- if (FirstRun_SFM)
- {
- memset(&DiagThr, 0, sizeof(DiagThr));
- memset(&DiagTime, 0, sizeof(DiagTime));
- Cntl = 10;
- memset(heatT1Arr, 0, sizeof(heatT1Arr));
- memset(heatT2Arr, 0, sizeof(heatT2Arr));
- memset(ErrNr, 0, sizeof(ErrNr));
- memset(sfmv_flg_cellUOpenFlt, 0, sizeof(sfmv_flg_cellUOpenFlt));
- memset(ErrUFlg, 0, sizeof(ErrUFlg));
- memset(RecNr, 0, sizeof(RecNr));
- memset(modTOpenNr, 0, sizeof(modTOpenNr));
- memset(modTRationNr, 0, sizeof(modTRationNr));
- sfmd_flg_cellUOverFlt2 = false;
- sfmd_flg_cellUOverFlt1 = false;
- sfmd_flg_cellULowFlt2 = false;
- sfmd_flg_cellULowFlt1 = false;
- sfmd_flg_cellUDiffFlt2 = false;
- sfmd_flg_cellUDiffFlt1 = false;
- sfmd_flg_battUOverFlt2 = false;
- sfmd_flg_battUOverFlt1 = false;
- sfmd_flg_battULowFlt2 = false;
- sfmd_flg_battULowFlt1 = false;
- sfmd_flg_chrgModTOverFlt2 = false;
- sfmd_flg_chrgModTOverFlt1 = false;
- sfmd_flg_chrgModTLowFlt2 = false;
- sfmd_flg_chrgModTLowFlt1 = false;
- sfmd_flg_disChrgModTOverFlt2 = false;
- sfmd_flg_disChrgModTOverFlt1 = false;
- sfmd_flg_disChrgModTLowFlt2 = false;
- sfmd_flg_disChrgModTLowFlt1 = false;
- sfmd_flg_modTDiffFlt2 = false;
- sfmd_flg_modTDiffFlt1 = false;
- sfmd_flg_chrgMosTOverFlt2 = false;
- sfmd_flg_chrgMosTOverFlt1 = false;
- sfmd_flg_disChrgMosTOverFlt2 = false;
- sfmd_flg_disChrgMosTOverFlt1 = false;
- sfmd_flg_DCPlugTOverFlt2 = false;
- sfmd_flg_DCPlugTOverFlt1 = false;
- sfmd_flg_ACPlugTOverFlt2 = false;
- sfmd_flg_ACPlugTOverFlt1 = false;
- sfmd_flg_heatPanTOverFlt2_1 = false;
- sfmd_flg_heatPanTOverFlt2_2 = false;
- sfmd_flg_heatPanTOverFlt1_1 = false;
- sfmd_flg_heatPanTOverFlt1_2 = false;
- 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;
- ihd_T_heatPanT1_Delay = ihd_T_heatPanT1;
- ihd_T_heatPanT2_Delay = ihd_T_heatPanT2;
- ihd_T_heatPanT1_Delay1 = ihd_T_heatPanT1;
- ihd_T_heatPanT2_Delay1 = ihd_T_heatPanT2;
- socd_pct_bcuSoc_Delay = socd_pct_bcuSoc;
- }
- // 故障清楚指令
- if (ihd_flg_DTCClear)
- {
- sfmd_flg_mainCirClosFltEi = false;
- sfmd_flg_mainCirClosFltEo = false;
- sfmd_flg_heatCirOpenFltEi = false;
- sfmd_flg_heatCirOpenFltEo = false;
- sfmd_flg_heatCirClosFltEi = false;
- sfmd_flg_heatCirClosFltEo = false;
- sfmd_flg_heatRunFltEi = false;
- sfmd_flg_heatRunFltEo = false;
- }
- //=======================================================================================
- //====================================故障诊断 =======================================
- //=======================================================================================
- //=======================================================================================
- //1 内网通信故障
- if (ihd_flg_urtRecFlt)
- {
- sfmd_flg_interComFlt = true;
- FirstRun_SFM = true;
- }
- else
- {
- sfmd_flg_interComFlt = false;
- }
- //5 认证失败故障
- sfmd_flg_authFlt = (ihd_st_authFaild == 1) && (!sfmd_flg_interComFlt);
- //11 高压互锁故障
- if (ihd_flg_HVILFlt)
- {
- sfmd_flg_HVILFlt = true;
- }
- else
- {
- sfmd_flg_HVILFlt = false;
- }
- //22 充电Mos失效故障
- 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, 2);
- //34 主回路常闭故障 //(充电MOS及放电MOS,主继电器断开 使能)
- sfmd_flg_mainCirClosFltEo = JudgeTimeSystem(!ihd_st_chrgMosControl && !ihd_st_disChrgMosControl && !ihd_st_relayControl, sfmd_I_curr > 5 || sfmd_I_curr < -5, &DiagTime.N34, 5) || sfmd_flg_mainCirClosFltEo || sfmd_flg_mainCirClosFltEi;
- //52 电压开路故障
- Cntl = Cntl + 1;
- if (!sfmd_flg_interComFlt && Cntl >= 0)
- {
- Cntl = 0;
- // 矩阵更新
- for (j = 0; j < 4 && FirstRun_SFM; j++)
- {
- for (i = 0; i < cmnc_num_cellUNum; i++)
- {
- CellUArry[j][i] = ihv_V_cellU[i];
- }
- }
- for (j = 0; j < 3; j++)
- {
- for (i = 0; i < cmnc_num_cellUNum; i++)
- {
- CellUArry[j][i] = CellUArry[j + 1][i];
- }
- }
- for (i = 0; i < cmnc_num_cellUNum; i++)
- {
- CellUArry[j][i] = ihv_V_cellU[i];
- }
- // 故障判断
- for (i = 0; i < cmnc_num_cellUNum - 1; i++)
- {
- 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;
- }
- else
- {
- ErrNr[i] = 0;
- }
- 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;
- ErrUFlg[i + 1] = true;
- }
- if (sfmv_flg_cellUOpenFlt[i])
- {
- for (k = 0; k < i; k++)
- {
- if ((int16_T)(CellUArry[3][i - k] - CellUArry[2][i - k]) < -200)
- {
- sfmv_flg_cellUOpenFlt[i - k] = true;
- ErrUFlg[i - k] = true;
- }
- }
- }
- }
- }
- //
- if (!sfmd_flg_interComFlt)
- {
- sfmd_V_cellUMax = 0;
- sfmd_V_cellUMin = 10000;
- SumU = 0;
- UNum = 0;
- for (i = 0; i < cmnc_num_cellUNum; i++)
- {
- if (!ErrUFlg[i])
- {
- SumU = SumU + ihv_V_cellU[i];
- UNum = UNum + 1;
- if (sfmd_V_cellUMax < ihv_V_cellU[i])
- {
- sfmd_V_cellUMax = ihv_V_cellU[i];
- sfmd_idx_cellUMax = i;
- }
- if (sfmd_V_cellUMin > ihv_V_cellU[i])
- {
- sfmd_V_cellUMin = ihv_V_cellU[i];
- sfmd_idx_cellUMin = i;
- }
- }
- }
- 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++)
- {
- if (!ErrUFlg[i] && (int16_T)(ihv_V_cellU[i] - sfmd_V_cellUAvrg) > 1500)
- {
- ErrUFlg[i] = true;
- }
- if (!ErrUFlg[i] && (int16_T)(ihv_V_cellU[i] - sfmd_V_cellUAvrg) < -1500)
- {
- ErrUFlg[i] = true;
- sfmv_flg_cellUOpenFlt[i] = true;
- }
- }
- }
- else
- {
- sfmd_V_cellUAvrg = SumU / UNum;
- }
- // 恢复
- for (i = 0; i < cmnc_num_cellUNum; i++)
- {
- if (ErrUFlg[i])
- {
- if ((int16_T)(ihv_V_cellU[i] - sfmd_V_cellUAvrg) < 200 && (int16_T)(ihv_V_cellU[i] - sfmd_V_cellUAvrg) > -200)
- {
- RecNr[i] = (RecNr[i] + 1) > 200 ? 200 : (RecNr[i] + 1);
- }
- else
- {
- RecNr[i] = 0;
- }
- if (RecNr[i] >= 2)
- {
- sfmv_flg_cellUOpenFlt[i] = false;
- ErrUFlg[i] = false;
- }
- }
- }
- }
- //=======================电压处理======================================
- SumU = 0;
- sfmd_flg_volFlt = false;
- for (i = 0; i < cmnc_num_cellUNum; i++)
- {
- if (ErrUFlg[i] && !sfmd_flg_interComFlt)
- {
- sfmv_V_cellU[i] = sfmd_V_cellUAvrg;
- }
- else
- {
- sfmv_flg_cellUOpenFlt[i] = false;
- sfmv_V_cellU[i] = ihv_V_cellU[i];
- }
- SumU = SumU + sfmv_V_cellU[i];
- sfmd_flg_volFlt = sfmd_flg_volFlt || sfmv_flg_cellUOpenFlt[i];
- }
- sfmd_V_battU = (uint16_T)(SumU * 0.01);
- //53 模组温度开路故障
- sfmd_flg_modTOpenFlt = false;
- for (i = 0; i < cmnc_num_modTNum; i++)
- {
- if (ihv_T_modT[i] == 10 && !sfmd_flg_interComFlt) //-30℃
- {
- modTOpenNr[i] = (modTOpenNr[i] + 1) > 200 ? 200 : (modTOpenNr[i] + 1);
- }
- else
- {
- modTOpenNr[i] = 0;
- }
- if (modTOpenNr[i] >= 2)
- {
- sfmv_flg_modTOpenFlt[i] = true;
- }
- else
- {
- sfmv_flg_modTOpenFlt[i] = false;
- }
- sfmd_flg_modTOpenFlt = sfmd_flg_modTOpenFlt || sfmv_flg_modTOpenFlt[i];
- }
- //54 Mos温度开路故障
- 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, 2);
- //57 慢充插头温度开路故障
- 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, 2);
- //59 加热板#2温度开路故障
- sfmd_flg_heatPanT2OpenFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, ihd_T_heatPanT2 == 0, &DiagTime.N59, 2);
- //61 模组温度合理性故障
- sfmd_flg_modTRationFlt = false;
- for (i = 0; i < cmnc_num_modTNum && FirstRun_SFM; i++)
- {
- modTArr[i] = ihv_T_modT[i];
- }
- for (i = 0; i < cmnc_num_modTNum; i++)
- {
- if (!sfmv_flg_modTOpenFlt[i] && ((int16_T)(modTArr[i] - ihv_T_modT[i]) > 10 || (int16_T)(modTArr[i] - ihv_T_modT[i]) < -20)&& !sfmd_flg_interComFlt)
- {
- modTRationNr[i] = (modTRationNr[i] + 1) > 200 ? 200 : (modTRationNr[i] + 1);
- }
- else
- {
- modTRationNr[i] = 0;
- modTArr[i] = ihv_T_modT[i];
- }
- if (modTRationNr[i] >= 2)
- {
- sfmv_flg_modTRationFlt[i] = true;
- }
- else
- {
- sfmv_flg_modTRationFlt[i] = false;
- }
- sfmd_flg_modTRationFlt = sfmd_flg_modTRationFlt || sfmv_flg_modTRationFlt[i];
- }
- //62 充电Mos 温度合理性故障
- sfmd_flg_chrgMosTRationFltOnce = !sfmd_flg_interComFlt && !sfmd_flg_chrgMosTOpenFlt && ((int16_T)(ihd_T_mosT - ihd_T_mosT_Delay) < -10 ||(int16_T)(ihd_T_mosT - ihd_T_mosT_Delay) > 20);
- if (!sfmd_flg_chrgMosTRationFltOnce)
- {
- ihd_T_mosT_Delay = ihd_T_mosT;
- }
- 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 ||(int16_T)(ihd_T_DCPlugT - ihd_T_DCPlugT_Delay) > 20);
- if (!sfmd_flg_DCPlugTRationFltOnce)
- {
- ihd_T_DCPlugT_Delay = ihd_T_DCPlugT;
- }
- 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 ||(int16_T)(ihd_T_ACPlugT - ihd_T_ACPlugT_Delay) > 20);
- if (!sfmd_flg_ACPlugTRationFltOnce)
- {
- ihd_T_ACPlugT_Delay = ihd_T_ACPlugT;
- }
- 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 ||(int16_T)(ihd_T_heatPanT1 - ihd_T_heatPanT1_Delay) > 20);
- if (!sfmd_flg_heatPanT1RationFltOnce)
- {
- ihd_T_heatPanT1_Delay = ihd_T_heatPanT1;
- }
- 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 ||(int16_T)(ihd_T_heatPanT2 - ihd_T_heatPanT2_Delay) > 20);
- if (!sfmd_flg_heatPanT2RationFltOnce)
- {
- ihd_T_heatPanT2_Delay = ihd_T_heatPanT2;
- }
- sfmd_flg_heatPanT2RationFlt = JudgeTimeSystem(1, sfmd_flg_heatPanT2RationFltOnce, &DiagTime.N67, 2);
- //68 模组温度全部不可用
- sfmd_flg_modTAllFlt = true;
- for (i = 0; i < cmnc_num_modTNum; i++)
- {
- sfmd_flg_modTAllFlt = sfmd_flg_modTAllFlt && (sfmv_flg_modTOpenFlt[i] || sfmv_flg_modTRationFlt[i]);
- }
- // 温度处理
- sfmd_T_modTMax = 0;
- sfmd_T_modTMin = 200;
- Tnum = 0;
- SumT = 0;
- if (!sfmd_flg_modTAllFlt)
- {
- for (i = 0; i < cmnc_num_modTNum; i++)
- {
- if (!sfmv_flg_modTRationFlt[i] && !sfmv_flg_modTOpenFlt[i])
- {
- SumT = SumT + ihv_T_modT[i];
- Tnum = Tnum + 1;
- if (sfmd_T_modTMax < ihv_T_modT[i])
- {
- sfmd_T_modTMax = ihv_T_modT[i];
- sfmd_idx_modTMax = i;
- }
- if (sfmd_T_modTMin > ihv_T_modT[i])
- {
- sfmd_T_modTMin = ihv_T_modT[i];
- sfmd_idx_modTMin = i;
- }
- }
- }
- for (i = 0; i < cmnc_num_modTNum; i++)
- {
- if (!sfmv_flg_modTRationFlt[i] && !sfmv_flg_modTOpenFlt[i])
- {
- sfmv_T_modT[i] = ihv_T_modT[i];
- }
- else
- {
- sfmv_T_modT[i] = SumT / Tnum;
- }
- }
- }
- //69 加热板温度全部开路故障
- sfmd_flg_heatPanTAllFlt = (sfmd_flg_heatPanT1OpenFlt || sfmd_flg_heatPanT1RationFlt) && (sfmd_flg_heatPanT2OpenFlt || sfmd_flg_heatPanT2RationFlt);
-
- // 71 电流传感器故障
- 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 2);
- //152 放电过流故障不匹配
- 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, 2);
- //154 总压过压不匹配
- 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, 2);
- //156 单体过压故障不匹配
- 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, 2);
- //158 充电模组低温故障不匹配
- 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, 2);
- //160 放电模组低温故障不匹配
- 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, 2);
- //162 放电Mos过温故障不匹配
- sfmd_flg_disChrgMosTOverMisFlt = JudgeTimeSystem(!sfmd_flg_interComFlt, sfmd_flg_disChrgMosTOverFlt2 != ihd_flg_disChrgMosTOverFlt, &DiagTime.N162, 2);
- //163 soc不匹配
- sfmd_flg_socMisFlt = !FirstRun_SFM && (!sfmd_flg_interComFlt) && ((int16_T)(socd_pct_bcuSoc - ihd_pct_soc) > 100 || (int16_T)(socd_pct_bcuSoc - ihd_pct_soc) < -100);
- //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);
- //178
- sfmd_flg_deltRFlt = false;
- if(!cdmd_flg_deltOCVDisable && !sfmd_flg_interComFlt)
- {
- SumR = 0;
- SumRR = 0;
- for (i= 0; i < cmnc_num_cellUNum ; i++)
- {
- SumR = SumR + cdmv_ohm_deltR[i];
- SumRR = SumRR + cdmv_ohm_deltR[i] * cdmv_ohm_deltR[i];
- }
- for(i= 0; i < cmnc_num_cellUNum ; i++)
- {
- if( (cdmv_ohm_deltR[i] - SumR/cmnc_num_cellUNum)/(sqrt(SumRR/cmnc_num_cellUNum)) > 3 && (cdmv_ohm_deltR[i] - SumR/cmnc_num_cellUNum) > 500)
- {
- deltRFltNr[i] = (deltRFltNr[i] + 1) > 200 ? 200 : (deltRFltNr[i] + 1);
- }
- else
- {
- deltRFltNr[i] = 0;
- }
- }
- for(i= 0; i < cmnc_num_cellUNum ; i++)
- {
- if(deltRFltNr[i] > 60)
- {
- sfmd_flg_deltRFlt = true;
- }
- }
- }
- //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);
- 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;
- }
-
- ////32 加热回路常闭故障
- if (!sfmd_flg_heatPanT1OpenFlt && !sfmd_flg_heatPanT1RationFlt && (int16_T)(ihd_T_heatPanT1 - ihd_T_heatPanT1_Delay1) > -10 && (int16_T)(ihd_T_heatPanT1 - ihd_T_heatPanT1_Delay1) < 20 )
- {
- if (FirstRun_SFM)
- {
- for (i = 0; i < 10; i++)
- {
- heatT1Arr[i] = ihd_T_heatPanT1;
- }
- Time1Cntl = 0;
- SumT1 = 0;
- }
- Time1Cntl++;
- SumT1 = SumT1 + ihd_T_heatPanT1;
- if (Time1Cntl >= 60)
- {
- for (i = 0; i < 9; i++)
- {
- heatT1Arr[i] = heatT1Arr[i + 1];
- }
- heatT1Arr[9] = SumT1 / Time1Cntl;
- Time1Cntl = 0;
- SumT1 = 0;
- }
- }
- ihd_T_heatPanT1_Delay1 =ihd_T_heatPanT1;
-
- if (!sfmd_flg_heatPanT2OpenFlt && !sfmd_flg_heatPanT2RationFlt && (int16_T)(ihd_T_heatPanT2 - ihd_T_heatPanT2_Delay1) > -10 && (int16_T)(ihd_T_heatPanT2 - ihd_T_heatPanT2_Delay1) < 20 )
- {
- if (FirstRun_SFM)
- {
- for (i = 0; i < 10; i++)
- {
- heatT2Arr[i] = ihd_T_heatPanT2;
- }
- Time2Cntl = 0;
- SumT2 = 0;
- }
- Time2Cntl++;
- SumT2 = SumT2 + ihd_T_heatPanT2;
- if (Time2Cntl >= 60)
- {
- for (i = 0; i < 9; i++)
- {
- heatT2Arr[i] = heatT2Arr[i + 1];
- }
- heatT2Arr[9] = SumT2 / Time2Cntl;
- Time2Cntl = 0;
- SumT2 = 0;
- }
- }
- ihd_T_heatPanT2_Delay1 =ihd_T_heatPanT2;
- //32 加热回路常闭故障
- 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 加热回路常开故障
- Enable2 = JudgeTimeSystem(1, tmsd_st_heatAct == 1, &DiagTime.N33, 600);
- sfmd_flg_heatCirOpenFltEo = (((int16_T)(heatT2Arr[9] - heatT2Arr[0]) < 5 && (int16_T)(heatT1Arr[9] - heatT1Arr[0]) < 5) && Enable2) || sfmd_flg_heatCirOpenFltEo || sfmd_flg_heatCirOpenFltEi;
- //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) ;
- //================================================================================================================================================================
- //================================================================================================================================================================
- //===========故障码 故障等级 禁止状态===================================================================
- //================================================================================================================================================================
- memset(FltFlg, 0, sizeof(FltFlg));
- memset(FltLevel, 0, sizeof(FltLevel));
- memset(FltAct, 0, sizeof(FltAct));
- FltFlg[0] = sfmd_flg_interComFlt;
- FltLevel[0] = 2;
- FltAct[0] = 2; //1 内网通讯故障
-
- FltFlg[1] = 0;
- FltLevel[1] = 0;
- FltAct[1] = 0; //2 外部通讯故障
-
- FltFlg[2] = 0;
- FltLevel[2] = 0;
- FltAct[2] = 0; //3 通讯模块故障
-
- FltFlg[3] = 0;
- FltLevel[3] = 0;
- FltAct[3] = 0; //4 通讯天线故障
-
- FltFlg[4] = sfmd_flg_authFlt;
- FltLevel[4] = 4;
- FltAct[4] = 34; //5 认证失败
-
- FltFlg[5] = 0;
- FltLevel[5] = 0;
- FltAct[5] = 0; //6 预留#5
-
- FltFlg[6] = 0;
- FltLevel[6] = 0;
- FltAct[6] = 0; //7 预留#4
-
- FltFlg[7] = 0;
- FltLevel[7] = 0;
- FltAct[7] = 0; //8 预留#3
-
- FltFlg[8] = 0;
- FltLevel[8] = 0;
- FltAct[8] = 0; //9 预留#2
-
- FltFlg[9] = 0;
- FltLevel[9] = 0;
- FltAct[9] = 0; //10 预留#1
-
- FltFlg[10] = sfmd_flg_HVILFlt;
- FltLevel[10] = 0;
- FltAct[10] = 0; //11 高压互锁
-
- FltFlg[11] = 0;
- FltLevel[11] = 0;
- FltAct[11] = 0; //12 硬件短路保护
-
- FltFlg[12] = 0;
- FltLevel[12] = 0;
- FltAct[12] = 0; //13 绝缘模块故障
-
- FltFlg[13] = 0;
- FltLevel[13] = 0;
- FltAct[13] = 0; //14 绝缘故障
-
- FltFlg[14] = 0;
- FltLevel[14] = 0;
- FltAct[14] = 0; //15 绝缘告警
-
- FltFlg[15] = 0;
- FltLevel[15] = 0;
- FltAct[15] = 0; //16 预留5
-
- FltFlg[16] = 0;
- FltLevel[16] = 0;
- FltAct[16] = 0; //17 预留4
-
- FltFlg[17] = 0;
- FltLevel[17] = 0;
- FltAct[17] = 0; //18 预留3
-
- FltFlg[18] = 0;
- FltLevel[18] = 0;
- FltAct[18] = 0; //19 预留2
-
- FltFlg[19] = 0;
- FltLevel[19] = 0;
- FltAct[19] = 0; //20 预留1
- 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常闭故障
-
- FltFlg[24] = 0;
- FltLevel[24] = 0;
- FltAct[24] = 0; //25 放电Mos常开故障
-
- FltFlg[25] = 0;
- FltLevel[25] = 0;
- FltAct[25] = 0;
-
- FltFlg[26] = 0;
- FltLevel[26] = 0;
- FltAct[26] = 0;
-
- FltFlg[27] = 0;
- FltLevel[27] = 0;
- FltAct[27] = 0;
-
- FltFlg[28] = 0;
- FltLevel[28] = 0;
- FltAct[28] = 0;
-
- FltFlg[29] = 0;
- FltLevel[29] = 0;
- FltAct[29] = 0;
-
- FltFlg[30] = 0;
- FltLevel[30] = 0;
- FltAct[30] = 0;
-
- FltFlg[31] = sfmd_flg_heatCirClosFltEo;
- FltLevel[31] = 5;
- FltAct[31] = 250; //32 加热回路常闭故障
-
- FltFlg[32] = sfmd_flg_heatCirOpenFltEo;
- FltLevel[32] = 3;
- FltAct[32] = 0; //33 加热回路常开故障
-
- FltFlg[33] = sfmd_flg_mainCirClosFltEo;
- FltLevel[33] = 5;
- FltAct[33] = 250; //34 主回路常闭故障
-
- FltFlg[34] = 0;
- FltLevel[34] = 0;
- FltAct[34] = 0;
-
- FltFlg[35] = 0;
- FltLevel[35] = 0;
- FltAct[35] = 0;
-
- FltFlg[36] = 0;
- FltLevel[36] = 0;
- FltAct[36] = 0;
-
- FltFlg[37] = 0;
- FltLevel[37] = 0;
- FltAct[37] = 0;
-
- FltFlg[38] = 0;
- FltLevel[38] = 0;
- FltAct[38] = 0;
-
- FltFlg[39] = 0;
- FltLevel[39] = 0;
- FltAct[39] = 0;
-
- FltFlg[40] = 0;
- FltLevel[40] = 0;
- FltAct[40] = 0;
-
- FltFlg[41] = 0;
- FltLevel[41] = 0;
- FltAct[41] = 0;
-
- FltFlg[42] = 0;
- FltLevel[42] = 0;
- FltAct[42] = 0;
-
- FltFlg[43] = 0;
- FltLevel[43] = 0;
- FltAct[43] = 0;
-
- FltFlg[44] = 0;
- FltLevel[44] = 0;
- FltAct[44] = 0;
-
- FltFlg[45] = 0;
- FltLevel[45] = 0;
- FltAct[45] = 0;
-
- FltFlg[46] = 0;
- FltLevel[46] = 0;
- FltAct[46] = 0;
-
- FltFlg[47] = 0;
- FltLevel[47] = 0;
- FltAct[47] = 0;
-
- FltFlg[48] = 0;
- FltLevel[48] = 0;
- FltAct[48] = 0;
-
- FltFlg[49] = 0;
- FltLevel[49] = 0;
- FltAct[49] = 0;
-
- FltFlg[50] = 0;
- FltLevel[50] = 0;
- FltAct[50] = 0; //51均衡失效(合一) 暂缺
- FltFlg[51] = sfmd_flg_volFlt;
- FltLevel[51] = 4;
- FltAct[51] = 234; //52电压开路故障(合一)
-
- FltFlg[52] = sfmd_flg_modTOpenFlt;
- FltLevel[52] = 2;
- FltAct[52] = 2; //53温度开路故障(合一)
-
- FltFlg[53] = sfmd_flg_chrgMosTOpenFlt;
- FltLevel[53] = 2;
- FltAct[53] = 130; //54 Mos温度开路故障
-
- FltFlg[54] = 0;
- FltLevel[54] = 0;
- FltAct[54] = 0;
-
- FltFlg[55] = sfmd_flg_DCPlugTOpenFlt;
- FltLevel[55] = 2;
- FltAct[55] = 2; //56 快充插头温度开路故障
-
- FltFlg[56] = sfmd_flg_ACPlugTOpenFlt;
- FltLevel[56] = 2;
- FltAct[56] = 2; //57 慢充插头温度开路故障
-
- FltFlg[57] = sfmd_flg_heatPanT1OpenFlt;
- FltLevel[57] = 2;
- FltAct[57] = 2; //58加热板#1温度开路故障
-
- FltFlg[58] = sfmd_flg_heatPanT2OpenFlt;
- FltLevel[58] = 2;
- FltAct[58] = 2; //59加热板#2温度开路故障
-
- FltFlg[59] = 0;
- FltLevel[59] = 0;
- FltAct[59] = 0;
-
- FltFlg[60] = sfmd_flg_modTRationFlt;
- FltLevel[60] = 2;
- FltAct[60] = 2; //61模组温度合理性故障
-
- FltFlg[61] = sfmd_flg_chrgMosTRationFlt;
- FltLevel[61] = 2;
- FltAct[61] = 130; //62mos温度合理性故障
-
- FltFlg[62] = 0;
- FltLevel[62] = 0;
- FltAct[62] = 0;
-
- FltFlg[63] = sfmd_flg_DCPlugTRationFlt;
- FltLevel[63] = 2;
- FltAct[63] = 2; //64快充插头温度合理性故障
-
- FltFlg[64] = sfmd_flg_ACPlugTRationFlt;
- FltLevel[64] = 2;
- FltAct[64] = 2; //65慢充插头温度合理性故障
-
- FltFlg[65] = sfmd_flg_heatPanT1RationFlt;
- FltLevel[65] = 2;
- FltAct[65] = 2; //66加热板#1温度合理性故障
-
- FltFlg[66] = sfmd_flg_heatPanT2RationFlt;
- FltLevel[66] = 2;
- FltAct[66] = 2; //67加热板#2温度合理性故障
-
- FltFlg[67] = sfmd_flg_modTAllFlt;
- FltLevel[67] = 4;
- FltAct[67] = 250; // 模组温度全不可信
-
- FltFlg[68] = sfmd_flg_heatPanTAllFlt;
- FltLevel[68] = 3;
- FltAct[68] = 18; // 加热板温度全不可信
-
- FltFlg[69] = 0;
- FltLevel[69] = 0;
- FltAct[69] = 0;
- FltFlg[70] = 0;
- FltLevel[70] = 0;
- FltAct[70] = 0; //71 电流传感器故障 暂缺
-
- FltFlg[71] = 0;
- FltLevel[71] = 0;
- FltAct[71] = 0;
-
- FltFlg[72] = 0;
- FltLevel[72] = 0;
- FltAct[72] = 0;
-
- FltFlg[73] = 0;
- FltLevel[73] = 0;
- FltAct[73] = 0;
-
- FltFlg[74] = 0;
- FltLevel[74] = 0;
- FltAct[74] = 0;
-
- FltFlg[75] = 0;
- FltLevel[75] = 0;
- FltAct[75] = 0;
-
- FltFlg[76] = 0;
- FltLevel[76] = 0;
- FltAct[76] = 0;
-
- FltFlg[77] = 0;
- FltLevel[77] = 0;
- FltAct[77] = 0;
-
- FltFlg[78] = 0;
- FltLevel[78] = 0;
- FltAct[78] = 0;
-
- FltFlg[79] = 0;
- FltLevel[79] = 0;
- FltAct[79] = 0;
- FltFlg[80] = sfmd_flg_cellUOverFlt2;
- FltLevel[80] = 4;
- FltAct[80] = 66; //81单体过压2级故障
-
- FltFlg[81] = sfmd_flg_cellUOverFlt1;
- FltLevel[81] = 4;
- FltAct[81] = 66; //82单体过压1级故障
-
- FltFlg[82] = sfmd_flg_cellULowFlt2;
- FltLevel[82] = 4;
- FltAct[82] = 162; //83单体欠压2级故障
-
- FltFlg[83] = sfmd_flg_cellULowFlt1;
- FltLevel[83] = 3;
- FltAct[83] = 131; //84单体欠压1级故障
-
- FltFlg[84] = sfmd_flg_cellUDiffFlt2;
- FltLevel[84] = 3;
- FltAct[84] = 3; //85压差过大2级故障
-
- FltFlg[85] = sfmd_flg_cellUDiffFlt1;
- FltLevel[85] = 2;
- FltAct[85] = 2; //86压差过大1级故障
-
- FltFlg[86] = sfmd_flg_battUOverFlt2;
- FltLevel[86] = 4;
- FltAct[86] = 66; //87总压过压2级故障
-
- FltFlg[87] = sfmd_flg_battUOverFlt1;
- FltLevel[87] = 4;
- FltAct[87] = 66; //88总压过压1级故障
-
- FltFlg[88] = sfmd_flg_battULowFlt2;
- FltLevel[88] = 4;
- FltAct[88] = 162; //89总压欠压2级故障
-
- FltFlg[89] = sfmd_flg_battULowFlt1;
- FltLevel[89] = 3;
- FltAct[89] = 131; //90总压欠压1级故障
-
- FltFlg[90] = 0;
- FltLevel[90] = 0;
- FltAct[90] = 0;
-
- FltFlg[91] = 0;
- FltLevel[91] = 0;
- FltAct[91] = 0;
-
- FltFlg[92] = 0;
- FltLevel[92] = 0;
- FltAct[92] = 0;
-
- FltFlg[93] = 0;
- FltLevel[93] = 0;
- FltAct[93] = 0;
-
- FltFlg[94] = 0;
- FltLevel[94] = 0;
- FltAct[94] = 0;
-
- FltFlg[95] = 0;
- FltLevel[95] = 0;
- FltAct[95] = 0;
- FltFlg[96] = sfmd_flg_chrgModTOverFlt2;
- FltLevel[96] = 4;
- FltAct[96] = 250; //97模组充电温度过高2级故障
-
- FltFlg[97] = sfmd_flg_chrgModTOverFlt1;
- FltLevel[97] = 3;
- FltAct[97] = 145; //98模组充电温度过高1级故障
-
- FltFlg[98] = sfmd_flg_chrgModTLowFlt2;
- FltLevel[98] = 0;
- FltAct[98] = 0; //99模组充电温度过低2级故障 =======
-
- FltFlg[99] = sfmd_flg_chrgModTLowFlt1;
- FltLevel[99] = 0;
- FltAct[99] = 0; //100模组充电温度过低1级故障 =======
-
- FltFlg[100] = sfmd_flg_disChrgModTOverFlt2;
- FltLevel[100] = 4;
- FltAct[100] = 250; //101模组充电温度过高2级故障
-
- FltFlg[101] = sfmd_flg_disChrgModTOverFlt1;
- FltLevel[101] = 3;
- FltAct[101] = 145; //102模组充电温度过高1级故障
-
- FltFlg[102] = sfmd_flg_disChrgModTLowFlt2;
- FltLevel[102] = 0;
- FltAct[102] = 0; //103模组充电温度过低2级故障 ==========
-
- FltFlg[103] = sfmd_flg_disChrgModTLowFlt1;
- FltLevel[103] = 0;
- FltAct[103] = 0; //104模组充电温度过低1级故障 ==========
-
- FltFlg[104] = sfmd_flg_modTDiffFlt2;
- FltLevel[104] = 3;
- FltAct[104] = 19; //105模组温差过大2级故障
-
- FltFlg[105] = sfmd_flg_modTDiffFlt1;
- FltLevel[105] = 1;
- FltAct[105] = 0; //106模组温差过大1级故障
-
- FltFlg[106] = sfmd_flg_chrgMosTOverFlt2;
- FltLevel[106] = 4;
- FltAct[106] = 250; //107 充电Mos温度过高2级故障
-
- FltFlg[107] = sfmd_flg_chrgMosTOverFlt1;
- FltLevel[107] = 3;
- FltAct[107] = 19; //108 充电Mos温度过高1级故障
-
- FltFlg[108] = sfmd_flg_disChrgMosTOverFlt2;
- FltLevel[108] = 4;
- FltAct[108] = 250; //109 放电Mos温度过高2级故障
-
- FltFlg[109] = sfmd_flg_disChrgMosTOverFlt1;
- FltLevel[109] = 3;
- FltAct[109] = 19; //110 放电Mos温度过高1级故障
-
- FltFlg[110] = sfmd_flg_DCPlugTOverFlt2;
- FltLevel[110] = 1;
- FltAct[110] = 0; //111 快充插头温度过高2级故障
-
- FltFlg[111] = sfmd_flg_DCPlugTOverFlt1;
- FltLevel[111] = 1;
- FltAct[111] = 0; //112 快充插头温度过高1级故障
-
- FltFlg[112] = sfmd_flg_ACPlugTOverFlt1;
- FltLevel[112] = 1;
- FltAct[112] = 0; //113 慢充插头温度过高2级故障
-
- FltFlg[113] = sfmd_flg_ACPlugTOverFlt1;
- FltLevel[113] = 1;
- FltAct[113] = 0; //114 慢充插头温度过高1级故障
-
- FltFlg[114] = sfmd_flg_heatPanTOverFlt2;
- FltLevel[114] = 3;
- FltAct[114] = 18; //115 加热板温度过高2级故障
-
- FltFlg[115] = sfmd_flg_heatPanTOverFlt1;
- FltLevel[115] = 1;
- FltAct[115] = 0; //116 加热板温度过高1级故障
-
- FltFlg[116] = 0;
- FltLevel[116] = 0;
- FltAct[116] = 0;
-
- FltFlg[117] = 0;
- FltLevel[117] = 0;
- FltAct[117] = 0;
-
- FltFlg[118] = 0;
- FltLevel[118] = 0;
- FltAct[118] = 0;
-
- FltFlg[119] = 0;
- FltLevel[119] = 0;
- FltAct[119] = 0;
-
- FltFlg[120] = 0;
- FltLevel[120] = 0;
- FltAct[120] = 0;
-
- FltFlg[121] = 0;
- FltLevel[121] = 0;
- FltAct[121] = 0;
-
- FltFlg[122] = 0;
- FltLevel[122] = 0;
- FltAct[122] = 0;
-
- FltFlg[123] = 0;
- FltLevel[123] = 0;
- FltAct[123] = 0;
-
- FltFlg[124] = 0;
- FltLevel[124] = 0;
- FltAct[124] = 0;
-
- FltFlg[125] = 0;
- FltLevel[125] = 0;
- FltAct[125] = 0;
-
- FltFlg[126] = 0;
- FltLevel[126] = 0;
- FltAct[126] = 0;
-
- FltFlg[127] = 0;
- FltLevel[127] = 0;
- FltAct[127] = 0;
-
- FltFlg[128] = 0;
- FltLevel[128] = 0;
- FltAct[128] = 0;
-
- FltFlg[129] = 0;
- FltLevel[129] = 0;
- FltAct[129] = 0;
- FltFlg[130] = sfmd_flg_chrgCurrOverFlt;
- FltLevel[130] = 4;
- FltAct[130] = 66; //131 充电电流过高
-
- FltFlg[131] = sfmd_flg_disChrgCurrOverFlt;
- FltLevel[131] = 4;
- FltAct[131] = 34; //132 放电电流过高
-
- FltFlg[132] = 0;
- FltLevel[132] = 0;
- FltAct[132] = 0;
-
- FltFlg[133] = 0;
- FltLevel[133] = 0;
- FltAct[133] = 0;
-
- FltFlg[134] = 0;
- FltLevel[134] = 0;
- FltAct[134] = 0;
-
- FltFlg[135] = 0;
- FltLevel[135] = 0;
- FltAct[135] = 0;
-
- FltFlg[136] = 0;
- FltLevel[136] = 0;
- FltAct[136] = 0;
-
- FltFlg[137] = 0;
- FltLevel[137] = 0;
- FltAct[137] = 0;
-
- FltFlg[138] = 0;
- FltLevel[138] = 0;
- FltAct[138] = 0;
-
- FltFlg[139] = 0;
- FltLevel[139] = 0;
- FltAct[139] = 0;
-
- FltFlg[140] = 0;
- FltLevel[140] = 0;
- FltAct[140] = 0;
-
- FltFlg[141] = 0;
- FltLevel[141] = 0;
- FltAct[141] = 0;
-
- FltFlg[142] = 0;
- FltLevel[142] = 0;
- FltAct[142] = 0;
-
- FltFlg[143] = 0;
- FltLevel[143] = 0;
- FltAct[143] = 0;
-
- FltFlg[144] = 0;
- FltLevel[144] = 0;
- FltAct[144] = 0;
-
- FltFlg[145] = 0;
- FltLevel[145] = 0;
- FltAct[145] = 0;
-
- FltFlg[146] = 0;
- FltLevel[146] = 0;
- FltAct[146] = 0;
-
- FltFlg[147] = 0;
- FltLevel[147] = 0;
- FltAct[147] = 0;
-
- FltFlg[148] = 0;
- FltLevel[148] = 0;
- FltAct[148] = 0;
-
- FltFlg[149] = 0;
- FltLevel[149] = 0;
- FltAct[149] = 0;
- FltFlg[150] = sfmd_flg_chrgCurrOverMisFlt;
- FltLevel[150] = 1;
- FltAct[150] = 0; //151 充电过流故障不匹配
-
- FltFlg[151] = sfmd_flg_disChrgCurrOverMisFlt;
- FltLevel[151] = 1;
- FltAct[151] = 0; //152 放电过流故障不匹配
-
- FltFlg[152] = sfmd_flg_battULowMisFlt;
- FltLevel[152] = 1;
- FltAct[152] = 0; //153 总压欠压不匹配
-
- FltFlg[153] = sfmd_flg_battUOverMisFlt;
- FltLevel[153] = 1;
- FltAct[153] = 0; //154 总压过压不匹配
-
- FltFlg[154] = sfmd_flg_cellULowMisFlt;
- FltLevel[154] = 1;
- FltAct[154] = 0; //155 单体欠压故障不匹配
-
- FltFlg[155] = sfmd_flg_cellUOverMisFlt;
- FltLevel[155] = 1;
- FltAct[155] = 0; //156 单体过压故障不匹配
-
- FltFlg[156] = sfmd_flg_chrgModTOverMisFlt;
- FltLevel[156] = 1;
- FltAct[156] = 0; //157 充电模组过温故障不匹配
-
- FltFlg[157] = sfmd_flg_chrgModTLowMisFlt;
- FltLevel[157] = 1;
- FltAct[157] = 0; //158 充电模组低温故障不匹配
-
- FltFlg[158] = sfmd_flg_disChrgModTOverMisFlt;
- FltLevel[158] = 1;
- FltAct[158] = 0; //159 放电模组过温故障不匹配
-
- FltFlg[159] = sfmd_flg_disChrgModTLowMisFlt;
- FltLevel[159] = 1;
- FltAct[159] = 0; //160 放电模组低温故障不匹配
-
- FltFlg[160] = sfmd_flg_chrgMosTOverMisFlt;
- FltLevel[160] = 1;
- FltAct[160] = 0; //161 充电Mos过温故障不匹配
-
- FltFlg[161] = sfmd_flg_disChrgMosTOverMisFlt;
- FltLevel[161] = 1;
- FltAct[161] = 0; //162 放电Mos过温故障不匹配
-
- FltFlg[162] = sfmd_flg_socMisFlt;
- FltLevel[162] = 1;
- FltAct[162] = 0; //163 soc不匹配
-
- FltFlg[163] = sfmd_flg_sohMisFlt;
- FltLevel[163] = 1;
- FltAct[163] = 0; //164 SOH 不匹配
-
- FltFlg[164] = 0;
- FltLevel[164] = 0;
- FltAct[164] = 0;
-
- FltFlg[165] = 0;
- FltLevel[165] = 0;
- FltAct[165] = 0;
-
- FltFlg[166] = 0;
- FltLevel[166] = 0;
- FltAct[166] = 0;
-
- FltFlg[167] = 0;
- FltLevel[167] = 0;
- FltAct[167] = 0;
-
- FltFlg[168] = 0;
- FltLevel[168] = 0;
- FltAct[168] = 0;
-
- FltFlg[169] = 0;
- FltLevel[169] = 0;
- FltAct[169] = 0;
-
- FltFlg[170] = 0;
- FltLevel[170] = 0;
- FltAct[170] = 0;
-
- FltFlg[171] = 0;
- FltLevel[171] = 0;
- FltAct[171] = 0;
-
- FltFlg[172] = 0;
- FltLevel[172] = 0;
- FltAct[172] = 0;
-
- FltFlg[173] = 0;
- FltLevel[173] = 0;
- FltAct[173] = 0;
-
- FltFlg[174] = 0;
- FltLevel[174] = 0;
- FltAct[174] = 0;
-
- FltFlg[175] = 0;
- FltLevel[175] = 0;
- FltAct[175] = 0;
-
- FltFlg[176] = 0;
- FltLevel[176] = 0;
- FltAct[176] = 0;
-
- FltFlg[177] = sfmd_flg_deltRFlt;
- FltLevel[177] = 1;
- FltAct[177] = 0;
-
- FltFlg[178] = sfmd_flg_socJumpFlt;
- FltLevel[178] = 1;
- FltAct[178] = 0; //179 soc跳变
-
- FltFlg[179] = sfmd_flg_EEsaveFlt;
- FltLevel[179] = 1;
- FltAct[179] = 0; //180 EE失效
- //==========================================================================================================================================================
- memset(FltCodeArr, 0, sizeof(FltCodeArr));
- memset(FltLevelArr, 0, sizeof(FltLevelArr));
- memset(FltActArr, 0, sizeof(FltActArr));
- sfmd_num_fltNum = 0;
- for (i = 0; i < 200 && sfmd_num_fltNum < 20; i++)
- {
- if (FltFlg[i])
- {
- FltCodeArr[sfmd_num_fltNum] = i + 1;
- FltLevelArr[sfmd_num_fltNum] = FltLevel[i];
- FltActArr[sfmd_num_fltNum] = FltAct[i];
- sfmd_num_fltNum = sfmd_num_fltNum + 1;
- if (i == 50)
- {
- for (j = 0; j < cmnc_num_cellUNum; j++)
- {
- FltCodeArr[sfmd_num_fltNum] = 1001 + j;
- FltLevelArr[sfmd_num_fltNum] = FltLevel[i];
- FltActArr[sfmd_num_fltNum] = FltAct[i];
- sfmd_num_fltNum = sfmd_num_fltNum + 1;
- }
- }
- if (i == 51)
- {
- for (j = 0; j < cmnc_num_cellUNum; j++)
- {
- if (sfmv_flg_cellUOpenFlt[j])
- {
- FltCodeArr[sfmd_num_fltNum] = 2001 + j;
- FltLevelArr[sfmd_num_fltNum] = FltLevel[i];
- FltActArr[sfmd_num_fltNum] = FltAct[i];
- sfmd_num_fltNum = sfmd_num_fltNum + 1;
- }
- }
- }
- if (i == 52)
- {
- for (j = 0; j < cmnc_num_modTNum; j++)
- {
- if (sfmv_flg_modTOpenFlt[j])
- {
- FltCodeArr[sfmd_num_fltNum] = 3001 + j;
- FltLevelArr[sfmd_num_fltNum] = FltLevel[i];
- FltActArr[sfmd_num_fltNum] = FltAct[i];
- sfmd_num_fltNum = sfmd_num_fltNum + 1;
- }
- }
- }
- if (i == 60)
- {
- for (j = 0; j < cmnc_num_modTNum; j++)
- {
- if (sfmv_flg_modTRationFlt[j])
- {
- FltCodeArr[sfmd_num_fltNum] = 3201 + j;
- FltLevelArr[sfmd_num_fltNum] = FltLevel[i];
- FltActArr[sfmd_num_fltNum] = FltAct[i];
- sfmd_num_fltNum = sfmd_num_fltNum + 1;
- }
- }
- }
- }
- }
- memset(sfmv_idx_fltCode, 0, sizeof(sfmv_idx_fltCode));
- sfmd_st_fltAct = 0;
- sfmd_st_fltLevel = 0;
- for (i = 0; i < sfmd_num_fltNum; i++)
- {
- sfmv_idx_fltCode[i] = FltLevelArr[i] * 10000 + FltCodeArr[i];
- if (sfmd_st_fltLevel < FltLevelArr[i])
- {
- sfmd_st_fltLevel = FltLevelArr[i];
- }
- sfmd_st_fltAct = sfmd_st_fltAct | FltActArr[i];
- }
-
- /* for(i=0;i < 20;i++)
- {
- printf("%d ",sfmv_idx_fltCode[i]);
- }
- printf("\n");
-
- */
- ///=====================================================================
- //======================================================================
- sfmd_flg_cellUDisable = sfmd_flg_interComFlt || sfmd_flg_volFlt;
- sfmd_flg_currDisable = sfmd_flg_interComFlt || sfmd_flg_currOpenFlt;
- sfmd_flg_modTDisable = sfmd_flg_interComFlt || sfmd_flg_modTOpenFlt || sfmd_flg_modTRationFlt;
- FirstRun_SFM = false;
- }
- //===============================================================================
- 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)
- {
- *fltNum = (*fltNum + 1) > 200 ? 200 : (*fltNum + 1);
- }
- else
- {
- *fltNum = 0;
- }
- if (Enable && precondition && Input < recThr)
- {
- *recNum = (*recNum + 1) > 200 ? 200 : (*recNum + 1);
- }
- else
- {
- *recNum = 0;
- }
- if ((*fltNum > fltNumThr || (*fitFlg && *recNum < recNumThr)) && precondition)
- {
- *fitFlg = true;
- }
- else
- {
- *fitFlg = false;
- }
- return *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)
- {
- *fltNum = (*fltNum + 1) > 200 ? 200 : (*fltNum + 1);
- }
- else
- {
- *fltNum = 0;
- }
- if (Enable && precondition && Input > recThr)
- {
- *recNum = (*recNum + 1) > 200 ? 200 : (*recNum + 1);
- }
- else
- {
- *recNum = 0;
- }
- if ((*fltNum > fltNumThr || (*fitFlg && *recNum < recNumThr)) && precondition)
- {
- *fitFlg = true;
- }
- else
- {
- *fitFlg = false;
- }
- return *fitFlg;
- }
- //
- boolean_T JudgeTimeSystem(boolean_T Enable, boolean_T Input, uint16_T *N, uint16_T Thr)
- {
- boolean_T fltFlg = false;
- if (Input && Enable)
- {
- *N = (*N + 1) > 20000 ? 20000 : (*N + 1);
- }
- else
- {
- *N = 0;
- }
- if (*N > Thr && Enable)
- {
- fltFlg = true;
- }
- else
- {
- fltFlg = false;
- }
- return fltFlg;
- }
|