提交 d257dcb3 作者: 高增攀

修改,小桔TCU分体未测试

上级 6dff14a0
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES ( 7 ) #define configMAX_PRIORITIES ( 7 )
#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 128 ) #define configMINIMAL_STACK_SIZE ( ( uint16_t ) 128 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24 * 1024 ) ) #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 30 * 1024 ) )
#define configMAX_TASK_NAME_LEN ( 16 ) #define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 1 #define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0 #define configUSE_16_BIT_TICKS 0
......
...@@ -200,7 +200,7 @@ void BMS_24V_Set(EnumSwitchStatus Set) ...@@ -200,7 +200,7 @@ void BMS_24V_Set(EnumSwitchStatus Set)
void ImdWorkSet(EnumSwitchStatus Set) void ImdWorkSet(EnumSwitchStatus Set)
{ {
static EnumSwitchStatus laststa = eSwSta_Off; //static EnumSwitchStatus laststa = eSwSta_Off;
//if(laststa != Set) //if(laststa != Set)
{ {
if(eSwSta_On == Set) // Ե if(eSwSta_On == Set) // Ե
...@@ -213,7 +213,7 @@ void ImdWorkSet(EnumSwitchStatus Set) ...@@ -213,7 +213,7 @@ void ImdWorkSet(EnumSwitchStatus Set)
ImdWrite(0x0017, 0x0003); ImdWrite(0x0017, 0x0003);
ImdWrite(0x01FE, 0x0001); ImdWrite(0x01FE, 0x0001);
} }
laststa = Set; //laststa = Set;
} }
} }
...@@ -534,7 +534,7 @@ void BMS_24V_Set_B(EnumSwitchStatus Set) ...@@ -534,7 +534,7 @@ void BMS_24V_Set_B(EnumSwitchStatus Set)
void ImdWorkSet_B(EnumSwitchStatus Set) void ImdWorkSet_B(EnumSwitchStatus Set)
{ {
static EnumSwitchStatus laststa = eSwSta_Off; //static EnumSwitchStatus laststa = eSwSta_Off;
//if(laststa != Set) //if(laststa != Set)
{ {
if(eSwSta_On == Set) // Ե if(eSwSta_On == Set) // Ե
...@@ -547,7 +547,7 @@ void ImdWorkSet_B(EnumSwitchStatus Set) ...@@ -547,7 +547,7 @@ void ImdWorkSet_B(EnumSwitchStatus Set)
ImdWrite_B(0x0017, 0x0003); ImdWrite_B(0x0017, 0x0003);
ImdWrite_B(0x01FE, 0x0001); ImdWrite_B(0x01FE, 0x0001);
} }
laststa = Set; // laststa = Set;
} }
} }
......
...@@ -569,6 +569,7 @@ u16 Dht12_GetHumi(void) ...@@ -569,6 +569,7 @@ u16 Dht12_GetHumi(void)
return Dht12Data.Dht12Humity; return Dht12Data.Dht12Humity;
} }
extern s16 Adc_Get_B_PTemp(void);
s16 Dht12_GetTemp(void) s16 Dht12_GetTemp(void)
{ {
return Adc_Get_B_PTemp();// Dht12Data.Dht12Temp/100; return Adc_Get_B_PTemp();// Dht12Data.Dht12Temp/100;
......
...@@ -414,7 +414,7 @@ int SendHeartBeat(u8 ChgNum) ...@@ -414,7 +414,7 @@ int SendHeartBeat(u8 ChgNum)
Temp = 0x01; Temp = 0x01;
Data[Len++] = (u8)Temp;//充电接口状态 BIN码 1 Data[Len++] = (u8)Temp;//充电接口状态 BIN码 1
if(((eChgPro_B_ChgRun == ChargeCtrl_B.CurProcess) ||(eChgPro_B_WaitVoltChgRun == ChargeCtrl_B.CurProcess)) if((eChgPro_B_ChgRun == ChargeCtrl_B.CurProcess)
&& (BcsMsg_B.Valid) && (BcsMsg_B.Valid)
) )
{ {
...@@ -619,9 +619,7 @@ int SendHeartBeat(u8 ChgNum) ...@@ -619,9 +619,7 @@ int SendHeartBeat(u8 ChgNum)
Data[Len++] = (u8)Temp;//充电接口状态 BIN码 1 Data[Len++] = (u8)Temp;//充电接口状态 BIN码 1
if(((eChgPro_ChgRun == ChargeCtrl.CurProcess) if(((eChgPro_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess) //|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_WaitVoltChgRun == ChargeCtrl.CurProcess)
) )
&& (BcsMsg.Valid)) && (BcsMsg.Valid))
{ {
...@@ -1097,7 +1095,7 @@ int SendStartTransaction(u8 ChgNum) ...@@ -1097,7 +1095,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = (u8)(sTemp>>16); Data[Len++] = (u8)(sTemp>>16);
Data[Len++] = (u8)(sTemp>>24); Data[Len++] = (u8)(sTemp>>24);
if(((eChgPro_B_ChgRun == ChargeCtrl_B.CurProcess) ||(eChgPro_B_WaitVoltChgRun == ChargeCtrl_B.CurProcess)) if((eChgPro_B_ChgRun == ChargeCtrl_B.CurProcess)
&& (BrmMsg_B.Valid) && (BrmMsg_B.Valid)
) )
{ {
...@@ -1147,7 +1145,7 @@ int SendStartTransaction(u8 ChgNum) ...@@ -1147,7 +1145,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = 0xFF; Data[Len++] = 0xFF;
Data[Len++] = 0xFF; Data[Len++] = 0xFF;
} }
if(((eChgPro_B_ChgRun == ChargeCtrl_B.CurProcess) ||(eChgPro_B_WaitVoltChgRun == ChargeCtrl_B.CurProcess)) if((eChgPro_B_ChgRun == ChargeCtrl_B.CurProcess)
&& (BcpMsg_B.Valid)) && (BcpMsg_B.Valid))
Data[Len++] = BcpMsg_B.StartSoc/10;//起始SOC% BIN码 1 Data[Len++] = BcpMsg_B.StartSoc/10;//起始SOC% BIN码 1
else else
...@@ -1186,9 +1184,7 @@ int SendStartTransaction(u8 ChgNum) ...@@ -1186,9 +1184,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = (u8)(sTemp>>24); Data[Len++] = (u8)(sTemp>>24);
if(((eChgPro_ChgRun == ChargeCtrl.CurProcess) if(((eChgPro_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess) //|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_WaitVoltChgRun == ChargeCtrl.CurProcess)
) )
&& (BrmMsg.Valid)) && (BrmMsg.Valid))
{ {
...@@ -1239,9 +1235,7 @@ int SendStartTransaction(u8 ChgNum) ...@@ -1239,9 +1235,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = 0xFF; Data[Len++] = 0xFF;
} }
if(((eChgPro_ChgRun == ChargeCtrl.CurProcess) if(((eChgPro_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess) // || (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_WaitVoltChgRun == ChargeCtrl.CurProcess)
) )
&& (BcpMsg.Valid)) && (BcpMsg.Valid))
Data[Len++] = BcpMsg.StartSoc/10;//起始SOC% BIN码 1 Data[Len++] = BcpMsg.StartSoc/10;//起始SOC% BIN码 1
......
...@@ -284,7 +284,9 @@ typedef enum ...@@ -284,7 +284,9 @@ typedef enum
eChgStop_PillarReady_UniContactor, eChgStop_PillarReady_UniContactor,
eChgStop_BatVoltOverBatMax, eChgStop_BatVoltOverBatMax,
eChgStop_Run_NoCurr, eChgStop_Run_NoCurr,
eChgStop_Volt_More_10V,
eChgStop_Bcl_TimeOut,
eChgStop_Bcs_TimeOut,
}EnumChgStopType; }EnumChgStopType;
typedef struct typedef struct
...@@ -425,7 +427,8 @@ extern u8 HexToBcd(u8 Hex); ...@@ -425,7 +427,8 @@ extern u8 HexToBcd(u8 Hex);
extern int CopyCode(u32 Des, u32 Scr, u32 Len); extern int CopyCode(u32 Des, u32 Scr, u32 Len);
extern int UpdateFlagSet(u32 Status); extern int UpdateFlagSet(u32 Status);
#define __SoftVer__ (0x010103) //BCD码 如:V1.02 SoftVer = 0x0102 #define __SoftVer__ (0x010108) //BCD码 如:V1.02 SoftVer = 0x0102
#define __SoftVerData__ (0x20200910) //BCD码 如:2020.09.10 Data = 0x20200910
#endif #endif
...@@ -92,13 +92,13 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -92,13 +92,13 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
CurrtOutChkTick = 0; CurrtOutChkTick = 0;
UniChgEnable = FALSE;
UniChgTick = 0; UniChgTick = 0;
u32 NeedPower = 0; u32 NeedPower = 0;
u32 NowPower = 0; u32 NowPower = 0;
u32 NoCurrentCount = 0; u32 NoCurrentCount = 0;
u32 NoCurrentTick = GetSystemTick(); u32 NoCurrentTick = GetSystemTick();
u32 BcsMsg_Tick = 0;
ChargeStopType = eChgStop_None;
while(1) while(1)
{ {
if((GetSystemTick() - CCS_SendTick) > 50) if((GetSystemTick() - CCS_SendTick) > 50)
...@@ -147,20 +147,20 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -147,20 +147,20 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if(DcModuleGroup[3].status == Valid) if(DcModuleGroup[3].status == Valid)
{ {
DcModuleGroup[3].status = Hold_B; DcModuleGroup[3].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[3].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1; DcModuleGroup[3].flag = 1;
} }
else if(DcModuleGroup[1].status == Valid) else if(DcModuleGroup[1].status == Valid)
{ {
DcModuleGroup[1].status = Hold_B; DcModuleGroup[1].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1; DcModuleGroup[1].flag = 1;
} }
else if(DcModuleGroup[0].status == Valid else if(DcModuleGroup[0].status == Valid
&& ChargeCtrl.CurProcess == eChgPro_ChgIdle) && ChargeCtrl.CurProcess == eChgPro_ChgIdle)
{ {
DcModuleGroup[0].status = Hold_B; DcModuleGroup[0].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum;
DcModuleGroup[0].flag = 1; DcModuleGroup[0].flag = 1;
#if (DcModule_ZhongXing == 0) #if (DcModule_ZhongXing == 0)
if(DcModuleGroup[1].status == Hold_B) if(DcModuleGroup[1].status == Hold_B)
...@@ -362,6 +362,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -362,6 +362,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if((GetSystemTick() - BclMsg_B.RecvTick) > MsgTimeout_B_1S) if((GetSystemTick() - BclMsg_B.RecvTick) > MsgTimeout_B_1S)
{ {
CemMsg_B.Cem.Value.Bcl = 1; CemMsg_B.Cem.Value.Bcl = 1;
ChargeStopType = eChgStop_Bcl_TimeOut;
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
ChargeTimerSet_B(eSwSta_Off); ChargeTimerSet_B(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_B_CommBreak; pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
...@@ -369,8 +370,22 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -369,8 +370,22 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
} }
else else
CemMsg_B.Cem.Value.Bcl = 0; CemMsg_B.Cem.Value.Bcl = 0;
if((GetSystemTick() - BcsMsg_B.RecvTick) >(1000+500))
if((GetSystemTick() - BcsMsg_B.RecvTick) > MsgTimeout_B_5S)
{
CemMsg_B.Cem.Value.Bcs = 1;
ChargeStopType = eChgStop_Bcs_TimeOut;
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
ChargeTimerSet_B(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BcsMsg_B.RecvTick) >(1000+500))
{
BcsMsg_Tick++;
if(BcsMsg_Tick >= 10)
{ {
BcsMsg_Tick = 0;
StructChargeSend FrameSend; StructChargeSend FrameSend;
FrameSend.Id.Mult = 0; FrameSend.Id.Mult = 0;
...@@ -391,16 +406,13 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -391,16 +406,13 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
BmsCommSendMsg_B(&FrameSend); BmsCommSendMsg_B(&FrameSend);
//BcsMsg_B.RecvTick= GetSystemTick(); //BcsMsg_B.RecvTick= GetSystemTick();
} }
else if((GetSystemTick() - BcsMsg_B.RecvTick) > MsgTimeout_B_5S)
{
CemMsg_B.Cem.Value.Bcs = 1;
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
ChargeTimerSet_B(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0;
} }
else else
{
CemMsg_B.Cem.Value.Bcs = 0; CemMsg_B.Cem.Value.Bcs = 0;
//BcsMsg_Tick = 0;
}
if(0 != BemMsg_B.Valid) if(0 != BemMsg_B.Valid)
{ {
......
...@@ -97,13 +97,14 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -97,13 +97,14 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
CurrtOutChkTick = 0; CurrtOutChkTick = 0;
UniChgEnable = FALSE;
UniChgTick = 0; UniChgTick = 0;
u32 NeedPower = 0; u32 NeedPower = 0;
u32 NowPower = 0; u32 NowPower = 0;
u32 NowMaxCurrt = 0; u32 NowMaxCurrt = 0;
u32 NoCurrentCount = 0; u32 NoCurrentCount = 0;
u32 NoCurrentTick = GetSystemTick(); u32 NoCurrentTick = GetSystemTick();
u32 BcsMsg_Tick = 0;
ChargeStopType = eChgStop_None;
while (1) while (1)
{ {
if ((GetSystemTick() -CCS_SendTick) > 50) if ((GetSystemTick() -CCS_SendTick) > 50)
...@@ -153,20 +154,20 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -153,20 +154,20 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
if (DcModuleGroup[1].status == Valid) if (DcModuleGroup[1].status == Valid)
{ {
DcModuleGroup[1].status = Hold_A; DcModuleGroup[1].status = Hold_A;
//DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1; DcModuleGroup[1].flag = 1;
} }
else if (DcModuleGroup[3].status == Valid) else if (DcModuleGroup[3].status == Valid)
{ {
DcModuleGroup[3].status = Hold_A; DcModuleGroup[3].status = Hold_A;
//DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1; DcModuleGroup[3].flag = 1;
} }
else if (DcModuleGroup[2].status == Valid else if (DcModuleGroup[2].status == Valid
&& ChargeCtrl_B.CurProcess == eChgPro_ChgIdle) && ChargeCtrl_B.CurProcess == eChgPro_B_ChgIdle)
{ {
DcModuleGroup[2].status = Hold_A; DcModuleGroup[2].status = Hold_A;
//DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
DcModuleGroup[2].flag = 1; DcModuleGroup[2].flag = 1;
#if (DcModule_ZhongXing == 0) #if (DcModule_ZhongXing == 0)
if (DcModuleGroup[3].status == Hold_A) if (DcModuleGroup[3].status == Hold_A)
...@@ -396,7 +397,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -396,7 +397,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
{ {
CemMsg.Cem.Value.Bcl = 1; CemMsg.Cem.Value.Bcl = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum); DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeStopType = eChgStop_Bcl_TimeOut;
ChargeTimerSet(eSwSta_Off); ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak; pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
...@@ -404,8 +405,21 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -404,8 +405,21 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
else else
CemMsg.Cem.Value.Bcl = 0; CemMsg.Cem.Value.Bcl = 0;
if ((GetSystemTick() -BcsMsg.RecvTick) > (1000 + 500)) if ((GetSystemTick() - BcsMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcs = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeStopType = eChgStop_Bcs_TimeOut;
ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
else if ((GetSystemTick() - BcsMsg.RecvTick) > (1000 + 500))
{ {
BcsMsg_Tick++;
if(BcsMsg_Tick >= 10)
{
BcsMsg_Tick = 0;
StructChargeSend FrameSend; StructChargeSend FrameSend;
FrameSend.Id.Mult = 0; FrameSend.Id.Mult = 0;
...@@ -426,14 +440,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -426,14 +440,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
BmsCommSendMsg(&FrameSend); BmsCommSendMsg(&FrameSend);
//BcsMsg.RecvTick = GetSystemTick(); //BcsMsg.RecvTick = GetSystemTick();
} }
else if ((GetSystemTick() -BcsMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcs = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
} }
else else
CemMsg.Cem.Value.Bcs = 0; CemMsg.Cem.Value.Bcs = 0;
......
...@@ -256,9 +256,10 @@ void DcModuleManageProcess_SmartAllocation(void) ...@@ -256,9 +256,10 @@ void DcModuleManageProcess_SmartAllocation(void)
DcModuleManage.ValidNum = Count_A; DcModuleManage.ValidNum = Count_A;
DcModuleManage_All.ValidNum = Count; DcModuleManage_All.ValidNum = Count;
DcModuleManage_B.ValidNum = Count_B; DcModuleManage_B.ValidNum = Count_B;
extern u8 Acc_On_3s_flag;
if (0 == DcModuleManage_All.OnlineFlag) if (0 == DcModuleManage_All.OnlineFlag
;//DcModuleCanInit(); && (Acc_On_3s_flag == 1))
DcModuleCanInit();
} }
...@@ -589,7 +590,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current) ...@@ -589,7 +590,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
StructDcModuleSend DataSend; StructDcModuleSend DataSend;
u32 Temp = 0; u32 Temp = 0;
u8 addr = 0; //u8 addr = 0;
u8 sendCmd = 0; u8 sendCmd = 0;
if(group_index > 3) if(group_index > 3)
...@@ -615,7 +616,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current) ...@@ -615,7 +616,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
{ {
sendCmd = 0x01; sendCmd = 0x01;
} }
else if(ChargeCtrl_B.CurProcess == eChgPro_ImdCheck \ else if(ChargeCtrl_B.CurProcess == eChgPro_B_ImdCheck \
&& DcModuleGroup[group_index].status == Hold_B \ && DcModuleGroup[group_index].status == Hold_B \
&& group_index == 2) && group_index == 2)
{ {
...@@ -625,7 +626,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current) ...@@ -625,7 +626,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++) for (u8 j = 0; j < DcModuleGroup[group_index].num; j++)
{ {
addr = DcModuleGroup[group_index].modules[j].addr; //addr = DcModuleGroup[group_index].modules[j].addr;
DcModuleGroup[group_index].modules[j].cmd = sendCmd; DcModuleGroup[group_index].modules[j].cmd = sendCmd;
DcModuleGroup[group_index].modules[j].VoltageSet = volt; DcModuleGroup[group_index].modules[j].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current; DcModuleGroup[group_index].modules[j].CurrentSet = current;
......
...@@ -79,19 +79,6 @@ typedef struct { ...@@ -79,19 +79,6 @@ typedef struct {
} StructStopCompMeg; } StructStopCompMeg;
typedef enum {
stopIdle = 0,
commStop = 1,
TcuFultStop = 2,
ChgFultStop = 3,
} stopReason;
typedef struct {
//u8 GunNum; //抢号 单枪 0 一机多冲 1-255
stopReason StopReason; //
} StructStopMeg;
typedef struct { typedef struct {
u8 ChargingServiceFlag; //01充电服务停止02充电服务启用 u8 ChargingServiceFlag; //01充电服务停止02充电服务启用
...@@ -452,8 +439,8 @@ extern StructStartMeg StartMeg_B; ...@@ -452,8 +439,8 @@ extern StructStartMeg StartMeg_B;
extern StructStartCompMeg AckStartCompMeg_A; extern StructStartCompMeg AckStartCompMeg_A;
extern StructStartCompMeg AckStartCompMeg_B; extern StructStartCompMeg AckStartCompMeg_B;
extern StructStopMeg StopMeg_A; //extern StructStopMeg StopMeg_A;
extern StructStopMeg StopMeg_B; //extern StructStopMeg StopMeg_B;
extern StructStopCompMeg AckStopCompMeg_A; extern StructStopCompMeg AckStopCompMeg_A;
extern StructStopCompMeg AckStopCompMeg_B; extern StructStopCompMeg AckStopCompMeg_B;
......
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_Meter.h"
void ChgProChgBreak_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CST_SendTick = 0;
u32 DrainResistTick = 0;
u8 ChgEndFlag = 0;
u32 DtcSendTick = 0;
u32 DtcSendCnt = 0;
u32 Dtc = 0;
u32 CstSendCnt = 0;
BmsCanInit();
osDelay(5);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
//BmsPowerSet_AB(eSwSta_Off);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_On);
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CST_Send(&CstMsg);
CST_SendTick = GetSystemTick();
CstSendCnt = 0;
DtcSendCnt = 0;
DtcSendTick = GetSystemTick();
DrainResistTick = GetSystemTick();
Dtc = 0;
if((eChgStop_Shake_CcOpen == ChargeStopType)
|| (eChgStop_Imd_CcOpen == ChargeStopType)
|| (eChgStop_Reco_CcOpen == ChargeStopType)
|| (eChgStop_Conf_CcOpen == ChargeStopType)
|| (eChgStop_BmsReady_CcOpen == ChargeStopType)
|| (eChgStop_PillarReady_CcOpen == ChargeStopType)
|| (eChgStop_Start_CcOpen == ChargeStopType)
|| (eChgStop_Run_CcOpen == ChargeStopType)
|| (eChgStop_ComBreak_CcOpen == ChargeStopType))
{
Dtc = 0x01380DC2;
}
if((eChgStop_Shake_EmerClose == ChargeStopType)
|| (eChgStop_Imd_EmerClose == ChargeStopType)
|| (eChgStop_Reco_EmerClose == ChargeStopType)
|| (eChgStop_Conf_EmerClose == ChargeStopType)
|| (eChgStop_BmsReady_EmerClose == ChargeStopType)
|| (eChgStop_PillarReady_EmerClose == ChargeStopType)
|| (eChgStop_Start_EmerClose == ChargeStopType)
|| (eChgStop_Run_EmerClose == ChargeStopType)
|| (eChgStop_ComBreak_EmerClose == ChargeStopType))
{
Dtc = 0x01480DC2;
}
if((eChgStop_Shake_DoorOpen== ChargeStopType)
|| (eChgStop_Imd_DoorOpen == ChargeStopType)
|| (eChgStop_Reco_DoorOpen == ChargeStopType)
|| (eChgStop_Conf_DoorOpen == ChargeStopType)
|| (eChgStop_BmsReady_DoorOpen == ChargeStopType)
|| (eChgStop_PillarReady_DoorOpen == ChargeStopType)
|| (eChgStop_Start_DoorOpen == ChargeStopType)
|| (eChgStop_Run_DoorOpen == ChargeStopType)
|| (eChgStop_ComBreak_DoorOpen == ChargeStopType))
{
Dtc = 0x01500DC2;//10
}
if((eChgStop_Shake_Contactor == ChargeStopType)
|| (eChgStop_Imd_Contactor == ChargeStopType)
|| (eChgStop_Reco_Contactor == ChargeStopType)
|| (eChgStop_Conf_Contactor == ChargeStopType)
|| (eChgStop_BmsReady_Contactor == ChargeStopType)
|| (eChgStop_PillarReady_Contactor == ChargeStopType)
|| (eChgStop_Start_Contactor == ChargeStopType)
|| (eChgStop_Run_Contactor == ChargeStopType)
|| (eChgStop_ComBreak_Contactor == ChargeStopType))
{
Dtc = 0x01580DC2;//10
}
while(1)
{
if((0 != CST_SendTick) && ((GetSystemTick() - CST_SendTick) > 10))
{
CST_Send(&CstMsg);
CST_SendTick = GetSystemTick();
CstSendCnt++;
if(CstSendCnt > 50)
CST_SendTick = 0;
}
if((0 != DtcSendTick) && ((GetSystemTick() - DtcSendTick) > 500))
{
DtcSendTick = GetSystemTick();
DM1_Send(Dtc);
DM3_Send(1);
DtcSendCnt++;
if(DtcSendCnt > 5)
{
BmsPowerSet_AB(eSwSta_Off);
DtcSendTick = 0;
}
}
ChgPgnRecv(&PgnRecv);
if(0 != DrainResistTick)
{
if((GetDcModuleVolt() < 600) || ((GetSystemTick() - DrainResistTick) > 4000))//С60V
{
DrainResistSet_AB(eSwSta_Off);
ChgEndFlag = 1;
DrainResistTick = 0;
}
}
if((0 != ChgEndFlag) && (DtcSendCnt > 5))
{
LockSet_AB(eSwSta_Off);
FanSet_AB(eSwSta_Off);
}
if((0 == ChargeEnable_AB) && (0 != ChgEndFlag) && (DtcSendCnt > 5))
{//ⲿƽ
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_ChgBreak != pChargeCtrl->CurProcess)
return;
osDelay(5);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
void ChgProChgConfigure_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
BemMsg.Valid = 0;
BcpMsg.Valid = 0;
BmsCanInit();
osDelay(20);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CrmRecog = 0xAA;
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
BcpMsg.RecvTick = GetSystemTick();
while(1)
{
if((GetSystemTick() - CRM_SendTick) > 250)
{
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if((GetSystemTick() - BcpMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcp = 1;
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
else
CemMsg.Cem.Value.Bcp = 0;
if(0 != BcpMsg.Valid)
{//接收到Brm
///////////////////////////////////////////////////////////////////////////////////////
/* if(BcpMsg.StartSoc > 980)
{
ChargeStopType = eChgStop_Conf_StartSoc98;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
else */
/*if(BcpMsg.StartVolt > BcpMsg.ChgMaxVolt)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
ChargeStopType = eChgStop_Conf_BatVoltOverPermitMax;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
else*/ if(BcpMsg.StartVolt > DcModuleAbility.MaxVolt*10)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
ChargeStopType = eChgStop_Conf_StartVoltOverPillarMax;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
else if(DcModuleAbility.MinVolt > BcpMsg.ChgMaxVolt)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
ChargeStopType = eChgStop_Conf_ChgMaxVoltLessPillarMinVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
//////////////////////////////////////////////////////////////////////////////////////
else
{
pChargeCtrl->CurProcess = eChgPro_AB_WaitBmsReady;
pChargeCtrl->Param = 0;
}
}
if(0 != BemMsg.Valid)
{
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
ChargeStopType = eChgStop_Conf_UserCancel;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
{
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Conf_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
ChargeStopType = eChgStop_Conf_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
ChargeStopType = eChgStop_Conf_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
ChargeStopType = eChgStop_Conf_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
ChargeStopType = eChgStop_Conf_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
ChargeStopType = eChgStop_Conf_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
ChargeStopType = eChgStop_Conf_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
ChargeStopType = eChgStop_Conf_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_ChgConfigure != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_ImdJyc.h"
#include "Memory.h"
void ChgProChgRecognize_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
// if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003);
memset(&BemMsg, 0, sizeof(BemMsg));
memset(&CemMsg, 0, sizeof(CemMsg));
memset(&BstMsg, 0, sizeof(BstMsg));
memset(&CstMsg, 0, sizeof(CstMsg));
BrmMsg.Valid = 0;
BemMsg.Valid = 0;
BmsCanInit();
osDelay(20);
// if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CrmRecog = 0x00;
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg.RecvTick = GetSystemTick();
CemMsg.Cem.Value.Brm = 0;
while(1)
{
if((GetSystemTick() - CRM_SendTick) > 250)
{
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if(0 != BrmMsg.Valid)
{//接收到Brm
pChargeCtrl->CurProcess = eChgPro_AB_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BrmMsg.RecvTick) > (MsgTimeout_5S))
{
CemMsg.Cem.Value.Brm = 1;
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
ChargeStopType = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
{
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
ChargeStopType = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
ChargeStopType = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
ChargeStopType = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
ChargeStopType = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
ChargeStopType = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_ChgRecognize != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_ImdJyc.h"
#include "Memory.h"
void ChgProChgRecognizeEx_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
// if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003);
memset(&BemMsg, 0, sizeof(BemMsg));
memset(&CemMsg, 0, sizeof(CemMsg));
memset(&BstMsg, 0, sizeof(BstMsg));
memset(&CstMsg, 0, sizeof(CstMsg));
BrmMsg.Valid = 0;
BemMsg.Valid = 0;
BmsCanInit();
osDelay(20);
// if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CrmRecog = 0x00;
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg.RecvTick = GetSystemTick();
CemMsg.Cem.Value.Brm = 0;
while(1)
{
if((0 != CRM_SendTick) && ((GetSystemTick() - CRM_SendTick) > 250))
{
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if(0 != BrmMsg.Valid)
{//接收到Brm
pChargeCtrl->CurProcess = eChgPro_AB_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BrmMsg.RecvTick) < (MsgTimeout_5S/2))
{
}
else if((GetSystemTick() - BrmMsg.RecvTick) < (MsgTimeout_10S))
{
BmsPowerSet_AB(eSwSta_Off);
CRM_SendTick = 0;
}
else
{
pChargeCtrl->CurProcess = eChgPro_AB_ChgRecognize;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
ChargeStopType = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
{
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) && (0 != PillarError_B.Value.Emergency))
{
ChargeStopType = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
ChargeStopType = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) && (0 != PillarError_B.Value.InVolt))
{
ChargeStopType = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) && (0 != PillarError_B.Value.NoDcmod))
{
ChargeStopType = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) && (0 != PillarError_B.Value.Meter))
{
ChargeStopType = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_ChgRecognizeEx != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Memory.h"
void ChgProChgStart_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRO_SendTick = 0;
u8 CroStarus = 0x00;
u32 CcStatusChkTick = 0;
BemMsg.Valid = 0;
BclMsg.Valid = 0;
BcsMsg.Valid = 0;
BstMsg.Valid = 0;
BmsCanInit();
osDelay(20);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))//完全新国标闭合继电器
DcOutSet_AB(eSwSta_On);
else
DcOutSet_AB(eSwSta_Off);
CroStarus = 0xAA;
CRO_Send(CroStarus);
CRO_SendTick = GetSystemTick();
BclMsg.RecvTick = GetSystemTick();
BcsMsg.RecvTick = GetSystemTick();
while(1)
{
if((GetSystemTick() - CRO_SendTick) > 250)
{
CRO_Send(CroStarus);
CRO_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
{
if((GetSystemTick() - BclMsg.RecvTick) > MsgTimeout_1S)
{
CemMsg.Cem.Value.Bcl = 1;
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if((GetSystemTick() - BcsMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcs = 1;
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
}
else
{
if((GetSystemTick() - BclMsg.RecvTick) > (MsgTimeout_5S*3/2))
{
CemMsg.Cem.Value.Bcl = 1;
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if((GetSystemTick() - BcsMsg.RecvTick) > (MsgTimeout_5S*3/2))
{
CemMsg.Cem.Value.Bcs = 1;
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
}
if((0 != BclMsg.Valid) && (0 != BcsMsg.Valid))
{//接收到Brm
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
{
pChargeCtrl->CurProcess = eChgPro_AB_ChgRun;
pChargeCtrl->Param = 0;
}
else
{
pChargeCtrl->CurProcess = eChgPro_AB_WaitVoltChgRun;
pChargeCtrl->Param = 0;
}
}
if(0 != BemMsg.Valid)
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 != BstMsg.Valid)
{
CstMsg.StopReason.Value.BmsStop = 1;
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_Start_BmsStop;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
CstMsg.StopReason.Value.Manual = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_Start_UserCancel;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.ChgGun = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Start_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Emergency = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Start_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_ChgStart != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_Meter.h"
void ChgProChgStop_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CST_SendTick = 0;
u32 CSD_SendTick = 0;
u32 CEM_SendTick = 0;
u32 CurrtCheckTick = 0;
u32 DrainResistTick = 0;
u32 CcStatusChkTick = 0;
u8 ChgEndFlag = 0;
u32 Bst_RecvTick= 0;
u32 Bsd_RecvTick= 0;
u32 CsdCemSendCnt = 0;
BsdMsg.Valid = 0;
BmsCanInit();
osDelay(5);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
//DcOutSet_AB(eSwSta_On);//有可能是充通信失败等待过来,保存原来状态
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CST_Send(&CstMsg);
CST_SendTick = GetSystemTick();
CemMsg.Cem.Value.Bst = 0;
CemMsg.Cem.Value.Bsd = 0;
CEM_SendTick = 0;
CsdCemSendCnt = 0;
CurrtCheckTick = GetSystemTick();
DrainResistTick = 0;
CSD_SendTick = 0;
if(BstMsg.Valid)
Bst_RecvTick = 0;
else
Bst_RecvTick = GetSystemTick();
Bsd_RecvTick = GetSystemTick();
while(1)
{
if((0 != CST_SendTick) && ((GetSystemTick() - CST_SendTick) > 10))
{
CST_Send(&CstMsg);
CST_SendTick = GetSystemTick();
}
if((0 != CSD_SendTick) && ((GetSystemTick() - CSD_SendTick) > 250))//时间到
{
CsdMsg.ChgMin = GetChgMin();
StopChgEnergy = MeterValue.Energy + MeterValue_B.Energy;
CsdMsg.ChgEnergy = (StopChgEnergy - StartChgEnergy)/10;
CSD_Send(&CsdMsg);
CSD_SendTick = GetSystemTick();
CsdCemSendCnt++;
if(CsdCemSendCnt > 5)
{
BmsPowerSet_AB(eSwSta_Off);
CSD_SendTick = 0;
}
}
if((0 != CEM_SendTick) && ((GetSystemTick() - CEM_SendTick) > 250))
{
CEM_SendTick = GetSystemTick();
if(0 != CemMsg.Cem.Mult)//有通信故障
{
CEM_Send(&CemMsg);
CsdCemSendCnt++;
if(CsdCemSendCnt > 5)
{
BmsPowerSet_AB(eSwSta_Off);
CEM_SendTick = 0;
}
}
}
ChgPgnRecv(&PgnRecv);
if(0 != Bst_RecvTick)
{
if(0 != BstMsg.Valid)
{
CemMsg.Cem.Value.Bst = 0;
Bst_RecvTick = 0;
}
else if((GetSystemTick() - Bst_RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bst = 1;
CEM_SendTick = GetSystemTick();
Bst_RecvTick = 0;
}
}
if(0 != Bsd_RecvTick)
{
if(0 != BsdMsg.Valid)
{
CemMsg.Cem.Value.Bsd = 0;
CSD_SendTick = GetSystemTick();
Bsd_RecvTick = 0;
CST_SendTick = 0;
}
else if((GetSystemTick() - Bsd_RecvTick) > MsgTimeout_10S)
{
if(0 == CemMsg.Cem.Value.Bst)
{
CemMsg.Cem.Value.Bsd = 1;
CEM_SendTick = GetSystemTick();
}
Bsd_RecvTick = 0;
CST_SendTick = 0;
}
}
if(0 != CurrtCheckTick)
{
if((GetDcModuleCurrt_AB() < 50) || ((GetSystemTick() - CurrtCheckTick) > 120))
{//小于5A
DcOutSet_AB(eSwSta_Off);//k1 k2
DrainResistSet_AB(eSwSta_On);//泄放电阻
DrainResistTick = GetSystemTick();
CurrtCheckTick = 0;
}
}
if(0 != DrainResistTick)
{
if((GetDcModuleVolt_AB() < 600) || ((GetSystemTick() - DrainResistTick) > 4000))//小于60V
{
DrainResistSet_AB(eSwSta_Off);
ChgEndFlag = 1;
DrainResistTick = 0;
}
}
if((0 != ChgEndFlag) && (CsdCemSendCnt > 5))
{
LockSet_AB(eSwSta_Off);
FanSet_AB(eSwSta_Off);
}
if((0 == ChargeEnable_AB) && (0 != ChgEndFlag) && (CsdCemSendCnt > 5))
{//外部控制结束充电
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
CcStatusChkTick = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if(eChgPro_AB_ChgStop != pChargeCtrl->CurProcess)
return;
osDelay(5);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
void ChgProCommBeak_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CEM_SendTick = 0;
u32 CurrtCheckTick = 0;
u32 ChgReStartTick = 0;
u32 CcStatusChkTick = 0;
if(0 == CommErrorCount)
{
CommErrFrame[0] = BemMsg.Bem.Mult;
CommErrFrame[1] = CemMsg.Cem.Mult;
}
else if(1 == CommErrorCount)
{
CommErrFrame[2] = BemMsg.Bem.Mult;
CommErrFrame[3] = CemMsg.Cem.Mult;
}
CommErrorCount++;
if(CommErrorCount > 2)
{
CstMsg.StopReason.Value.Truble = 1;//故障停止
CstMsg.StopTruble.Value.Other = 1;//其他故障 通信超时超过三次
ChargeStopType = eChgStop_ComBreak_CommError;
pChargeCtrl->CurProcess = eChgPro_AB_CommError;
pChargeCtrl->Param = 0;
return;
}
BstMsg.Valid = 0;
BmsCanInit();
osDelay(20);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
//DcOutSet_AB(eSwSta_On);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
if(0 != CemMsg.Cem.Mult)
CEM_Send(&CemMsg);
CEM_SendTick = GetSystemTick();
CurrtCheckTick = GetSystemTick();
ChgReStartTick = 0;
while(1)
{
if((0 != CEM_SendTick) && ((GetSystemTick() - CEM_SendTick) > 250))
{
if(0 != CemMsg.Cem.Mult)//有通信故障
CEM_Send(&CemMsg);
CEM_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if(GetDcModuleCurrt_AB() < 50)//小于5A
{
CurrtCheckTick = 0;
if(0 == ChgReStartTick)
{
DcOutSet_AB(eSwSta_Off);//k1 k2
ChgReStartTick = GetSystemTick();
}
}
else
{
if((0 != CurrtCheckTick) && ((GetSystemTick() - CurrtCheckTick) > 5000))
{
DcOutSet_AB(eSwSta_Off);//k1 k2
CurrtCheckTick = 0;
CstMsg.StopReason.Value.Truble = 1;//故障停止
CstMsg.StopTruble.Value.Other = 1;//其他故障 电流故障
CstMsg.StopFault.Value.Currt = 1;//电流不匹配
ChargeStopType = eChgStop_ComBreak_CurtError;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
}
if((0 != ChgReStartTick) && ((GetSystemTick() - ChgReStartTick) > 3500))
{
pChargeCtrl->CurProcess = eChgPro_AB_ChgRecognize;
pChargeCtrl->Param = 0;
}
if(0 != BstMsg.Valid)
{
CstMsg.StopReason.Value.BmsStop = 1;
ChargeStopType = eChgStop_ComBreak_BmsStop;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
CstMsg.StopReason.Value.Manual = 1;
ChargeStopType = eChgStop_ComBreak_UserCancel;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick))
{
DcOutSet_AB(eSwSta_Off);
CcStatusChkTick = 0;
ChargeStopType = eChgStop_ComBreak_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_ComBreak_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_CommBreak != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_Meter.h"
void ChgProCommError_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CurrtCheckTick = 0;
u32 DrainResistTick = 0;
u32 CcStatusChkTick = 0;
u8 ChgEndFlag = 0;
u32 CST_SendTick = 0;
u32 CEM_SendTick = 0;
u32 CemSendCnt = 0;
u32 CstSendCnt = 0;
BsdMsg.Valid = 0;
BmsCanInit();
osDelay(5);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
//DcOutSet_AB(eSwSta_On);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CstSendCnt = 0;
CST_Send(&CstMsg);
CST_SendTick = GetSystemTick();
CemSendCnt = 0;
CEM_Send(&CemMsg);
CEM_SendTick = GetSystemTick();
CurrtCheckTick = GetSystemTick();
DrainResistTick = 0;
while(1)
{
if((0 != CST_SendTick) && ((GetSystemTick() - CST_SendTick) > 10))
{
CST_Send(&CstMsg);
CST_SendTick = GetSystemTick();
CstSendCnt++;
if(CstSendCnt > 50)
CST_SendTick = 0;
}
if((0 != CEM_SendTick) && ((GetSystemTick() - CEM_SendTick) > 250))
{
if(0 != CemMsg.Cem.Mult)//有通信故障
CEM_Send(&CemMsg);
CEM_SendTick = GetSystemTick();
CemSendCnt++;
if(CemSendCnt > 5)
{
BmsPowerSet_AB(eSwSta_Off);
CEM_SendTick = 0;
}
}
ChgPgnRecv(&PgnRecv);
if(0 != CurrtCheckTick)
{
if((GetDcModuleCurrt_AB() < 50) || ((GetSystemTick() - CurrtCheckTick) > 120))
{//小于5A
DcOutSet_AB(eSwSta_Off);//k1 k2
DrainResistSet_AB(eSwSta_On);//泄放电阻
DrainResistTick = GetSystemTick();
CurrtCheckTick = 0;
}
}
if(0 != DrainResistTick)
{
if((GetDcModuleVolt_AB() < 600) || ((GetSystemTick() - DrainResistTick) > 4000))
{//小于60V
DrainResistSet_AB(eSwSta_Off);
ChgEndFlag = 1;
DrainResistTick = 0;
}
}
if((0 != ChgEndFlag) && (CemSendCnt > 5))
{
LockSet_AB(eSwSta_Off);
FanSet_AB(eSwSta_Off);
}
if((0 == ChargeEnable_AB) && (0 != ChgEndFlag) && (CemSendCnt > 5))
{//外部控制结束充电
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
CcStatusChkTick = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
DcOutSet_AB(eSwSta_Off);
}
if(eChgPro_AB_CommError != pChargeCtrl->CurProcess)
return;
osDelay(5);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_Meter.h"
#include "Memory.h"
#include "Drv_ImdJyc.h"
void ChgProShakeHand_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CHM_SendTick = 0;
u32 CcStatusChkTick = 0;
u32 BHM_FirstRecv = 0;
//////这些故障怎么处理????
PillarError.Value.Insulation = 0;
PillarError.Value.ImdDev = 0;
PillarError.Value.DrainResist = 0;
PillarError_B.Value.Insulation = 0;
PillarError_B.Value.ImdDev = 0;
PillarError_B.Value.DrainResist = 0;
ChargeError.Value.DrainResist = 0;
ChargeError.Value.IsolateWarn = 0;//绝缘警告
ChargeError.Value.IsolateError = 0;
ChargeError.Value.VoltOutError = 0;
ChargeError.Value.CurrtOutError = 0;
memset(&BemMsg, 0, sizeof(BemMsg));
memset(&CemMsg, 0, sizeof(CemMsg));
memset(&BstMsg, 0, sizeof(BstMsg));
memset(&CstMsg, 0, sizeof(CstMsg));
memset(&BsdMsg, 0, sizeof(BsdMsg));
memset(&CsdMsg, 0, sizeof(CsdMsg));
CommErrorCount = 0;
CommErrFrame[0] = 0;
CommErrFrame[1] = 0;
CommErrFrame[2] = 0;
CommErrFrame[3] = 0;
StartChgEnergy = MeterValue.Energy + MeterValue_B.Energy;
StopChgEnergy = MeterValue.Energy + MeterValue_B.Energy;
ChargeStopType = eChgStop_None;
BhmMsg.Valid = 0;
BhmMsg.RecvTick = GetSystemTick();
BHM_FirstRecv = 0;
ChargeTimerSet(eSwSta_Off);
CleanChgTimeCnt();
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_On);
DrainResistSet_AB(eSwSta_Off);
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
BmsCanInit();
osDelay(20);
CHM_Send();
CHM_SendTick = GetSystemTick();
while(1)
{
if((0 != CHM_SendTick) && ((GetSystemTick() - CHM_SendTick) > 250))
{
CHM_Send();
CHM_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if(eChgVer_2011 != UserParam.ChgVer)
{
if(0 != BhmMsg.Valid)//新国标
{//已经收到BHM报文,
ChgVer = eChgVer_2015;
if(0 == BHM_FirstRecv)
BHM_FirstRecv = GetSystemTick();
if(0 != ImdValue.Vaild)
{
pChargeCtrl->CurProcess = eChgPro_AB_ImdCheck;
pChargeCtrl->Param = 0;
}
else
{
if((GetSystemTick() - BHM_FirstRecv) > MsgTimeout_5S)
{
ChargeError.Value.IsolateWarn = 1;//绝缘警告
pChargeCtrl->CurProcess = eChgPro_AB_ChgRecognize;
pChargeCtrl->Param = 0;
}
}
}
else if((GetSystemTick() - BhmMsg.RecvTick) > MsgTimeout_5S)
{//旧国标,先断开Bms供电再绝缘检测
ChgVer = eChgVer_2011;
BmsPowerSet_AB(eSwSta_Off);
CHM_SendTick = 0;
if(0 != ImdValue.Vaild)
{
pChargeCtrl->CurProcess = eChgPro_AB_ImdCheck;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BhmMsg.RecvTick) > (MsgTimeout_5S*3/2))
{
BmsPowerSet_AB(eSwSta_On);
pChargeCtrl->CurProcess = eChgPro_AB_ChgRecognize;
pChargeCtrl->Param = 0;
}
}
}
else
{
if(0 != BhmMsg.Valid)//新国标
{
ChgVer = eChgVer_2015;
if(0 == BHM_FirstRecv)
BHM_FirstRecv = GetSystemTick();
if((GetSystemTick() - BHM_FirstRecv) > MsgTimeout_5S)
{
pChargeCtrl->CurProcess = eChgPro_AB_ChgRecognize;
pChargeCtrl->Param = 0;
}
}
else if((GetSystemTick() - BhmMsg.RecvTick) > (MsgTimeout_5S/2))
{//旧国标
ChgVer = eChgVer_2011;
pChargeCtrl->CurProcess = eChgPro_AB_ChgRecognizeEx;
pChargeCtrl->Param = 0;
}
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
ChargeStopType = eChgStop_Shake_UserCancel;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Shake_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Emergency || 0 != PillarError_B.Value.Emergency)
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Door || 0 != PillarError_B.Value.Door )
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Contactor || 0 != PillarError_B.Value.Contactor )
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.UniContactor || 0 != PillarError_B.Value.UniContactor )
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.InVolt || 0 != PillarError_B.Value.InVolt )
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.NoDcmod || 0 != PillarError_B.Value.NoDcmod )
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Meter || 0 != PillarError_B.Value.Meter )
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
DcOutSet_AB(eSwSta_Off);
ChargeStopType = eChgStop_Shake_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_ShakeHand != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
void ChgProWaitBmsReady_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CML_SendTick = 0;
u32 CTS_SendTick = 0;
u32 CcStatusChkTick = 0;
u32 BRO_AA_RecvTick = 0;
BemMsg.Valid = 0;
BroMsg.Valid = 0;
BmsCanInit();
osDelay(20);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CTS_Send();
CTS_SendTick = GetSystemTick();
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick();
BroMsg.RecvTick = GetSystemTick();
BRO_AA_RecvTick = GetSystemTick();
while(1)
{
if((GetSystemTick() - CML_SendTick) > 250)
{
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick();
}
if((GetSystemTick() - CTS_SendTick) > 500)
{
CTS_Send();
CTS_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if((GetSystemTick() - BroMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
else
CemMsg.Cem.Value.Bro = 0;
if((0 != BRO_AA_RecvTick) && ((GetSystemTick() - BRO_AA_RecvTick) > MsgTimeout_60S))
{
CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if((0 != BroMsg.Valid) && (0xAA == BroMsg.Status))
{//接收到Brm
BRO_AA_RecvTick = 0;
pChargeCtrl->CurProcess = eChgPro_AB_WaitPillarReady;
pChargeCtrl->Param = 0;
}
if(0 != BemMsg.Valid)
{
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
ChargeStopType = eChgStop_BmsReady_UserCancel;
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
{
CcStatusChkTick = 0;
ChargeStopType = eChgStop_BmsReady_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
ChargeStopType = eChgStop_BmsReady_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
ChargeStopType = eChgStop_BmsReady_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
ChargeStopType = eChgStop_BmsReady_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
ChargeStopType = eChgStop_BmsReady_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
ChargeStopType = eChgStop_BmsReady_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_WaitBmsReady != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Charge.h"
#include "Drv_BoardIo.h"
#include "Drv_DcModule.h"
#include "Drv_BmsComm.h"
#include "Drv_ImdJyc.h"
#include "Memory.h"
/**************************************************************************************************
** 函数名: GetBatVoltWaitPillarReady_AB
** 输 入: 无
** 输 出: 返回直流口当前电压
** 描 述: 获取直流电压
**************************************************************************************************/
s32 GetBatVoltWaitPillarReady_AB(void)
{
if((ImdValue.Vaild) && (2000 < ImdValue.PnVolt))
return ImdValue.PnVolt;
return BcpMsg.StartVolt;
}
s32 IsBatPnCorrect_AB(void)
{
if(0 == ImdValue.Vaild)
return 0;
if((0 == ImdValue.PositVolt) && (0 == ImdValue.NegatVolt) && (0 == ImdValue.PnVolt))
return -1;
return 1;
}
void ChgProWaitPillarReady_AB(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRO_SendTick = 0;
u8 CroStarus = 0x00;
u32 CcStatusChkTick = 0;
u32 VoltReadyTick = 0;
BemMsg.Valid = 0;
BmsCanInit();
osDelay(20);
ChargeTimerSet(eSwSta_Off);
BmsPowerSet_AB(eSwSta_On);
LockSet_AB(eSwSta_On);
FanSet_AB(eSwSta_On);
ImdWorkSet_AB(eSwSta_Off);
DrainResistSet_AB(eSwSta_Off);
DcOutSet_AB(eSwSta_Off);
CroStarus = 0x00;
CRO_Send(CroStarus);
CRO_SendTick = GetSystemTick();
if((BcpMsg.StartVolt >= DcModuleAbility.MinVolt) && (BcpMsg.StartVolt <= DcModuleAbility.MaxVolt))
DcModuleSet_AB(eSwSta_On, BcpMsg.StartVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
else if(BcpMsg.StartVolt < DcModuleAbility.MinVolt)
DcModuleSet_AB(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
else
{
/* CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_BatVoltOverPillarMax;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
return;*/
DcModuleSet_AB(eSwSta_On, BcpMsg.StartVolt/10, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
}
VoltReadyTick = GetSystemTick();
while(1)
{
if((GetSystemTick() - CRO_SendTick) > 250)
{
CRO_Send(CroStarus);
CRO_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
{
if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_5S/2)))
{
if(-1 == IsBatPnCorrect_AB())
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_BatVoltError;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
/*
else if((eChgVer_2011 != UserParam.ChgVer)
&& ((abs(GetBatVoltWaitPillarReady_AB() - BcpMsg.StartVolt)) > (BcpMsg.StartVolt*5/100)))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
DcOutSet_AB(eSwSta_Off);
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_BatVoltMismatchBcpVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
*/
else if(abs(GetDcModuleVolt_AB()- GetBatVoltWaitPillarReady_AB()) <= 100)
{
VoltReadyTick = 0;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStart;
pChargeCtrl->Param = 0;
}
else
{
if((GetBatVoltWaitPillarReady_AB() >= DcModuleAbility.MinVolt) && (GetBatVoltWaitPillarReady_AB() <= DcModuleAbility.MaxVolt))
DcModuleSet_AB(eSwSta_On, GetBatVoltWaitPillarReady_AB(), DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
else if(GetBatVoltWaitPillarReady_AB() < DcModuleAbility.MinVolt)
DcModuleSet_AB(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
}
}
if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_5S*3)))
{
VoltReadyTick = 0;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStart;
pChargeCtrl->Param = 0;
}
}
/*
else if(eChgVer_2011 != ChgVer)
{
if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_5S*3/5)))
{
VoltReadyTick = 0;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStart;
pChargeCtrl->Param = 0;
}
else if(abs(GetDcModuleVolt_AB()- BcpMsg.StartVolt) <= 100)
{
VoltReadyTick = 0;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStart;
pChargeCtrl->Param = 0;
}
}
*/
else
{
VoltReadyTick = 0;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStart;
pChargeCtrl->Param = 0;
}
if((GetSystemTick() - BroMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bro = 1;
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
else
CemMsg.Cem.Value.Bro = 0;
if(0 != BemMsg.Valid)
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
pChargeCtrl->CurProcess = eChgPro_AB_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_AB)
{//外部控制结束充电
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_UserCancel;
pChargeCtrl->CurProcess = eChgPro_AB_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_AB())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
CcStatusChkTick = 0;
ChargeStopType = eChgStop_PillarReady_CcOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Emergency) || (0 != PillarError_B.Value.Emergency))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_EmerClose;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Door) || (0 != PillarError_B.Value.Door))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Contactor) || (0 != PillarError_B.Value.Contactor))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.UniContactor) || (0 != PillarError_B.Value.UniContactor))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.InVolt) || (0 != PillarError_B.Value.InVolt))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_InVolt;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.NoDcmod) || (0 != PillarError_B.Value.NoDcmod))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if((0 != PillarError.Value.Meter) || (0 != PillarError_B.Value.Meter))
{
DcModuleSet_AB(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum));
ChargeStopType = eChgStop_PillarReady_Meter;
pChargeCtrl->CurProcess = eChgPro_AB_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_AB_WaitPillarReady != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include "Drv_BmsComm.h" #include "Drv_BmsComm.h"
void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) void ChgProChgConfigure(StructChargeCtrl * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0; u32 CRM_SendTick = 0;
...@@ -24,18 +24,19 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -24,18 +24,19 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
LockSet(eSwSta_On); LockSet(eSwSta_On);
FanSet(eSwSta_On); FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off); ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off); //DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off); DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
CrmRecog = 0xAA; CrmRecog = 0xAA;
CRM_Send(CrmRecog); CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
BcpMsg.RecvTick = GetSystemTick(); BcpMsg.RecvTick = GetSystemTick();
while(1) while (1)
{ {
if((GetSystemTick() - CRM_SendTick) > 250) if ((GetSystemTick() -CRM_SendTick) > 250)
{ {
CRM_Send(CrmRecog); CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
...@@ -43,13 +44,19 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -43,13 +44,19 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
ChgPgnRecv(&PgnRecv); ChgPgnRecv(&PgnRecv);
if((GetSystemTick() - BcpMsg.RecvTick) > (2000)) if ((GetSystemTick() -BcpMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcp = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
else if ((GetSystemTick() -BcpMsg.RecvTick) > (2000))
{ {
StructChargeSend FrameSend; StructChargeSend FrameSend;
FrameSend.Id.Mult = 0; FrameSend.Id.Mult = 0;
FrameSend.Id.Disp.Prio = 7; FrameSend.Id.Disp.Prio = 7;
FrameSend.Id.Disp.PF = TPCM>>8; FrameSend.Id.Disp.PF = TPCM >> 8;
FrameSend.Id.Disp.DA_PS = Card1939Addr; FrameSend.Id.Disp.DA_PS = Card1939Addr;
FrameSend.Id.Disp.SA = Charger1939Addr; FrameSend.Id.Disp.SA = Charger1939Addr;
FrameSend.Data[0] = 0x13; FrameSend.Data[0] = 0x13;
...@@ -63,28 +70,25 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -63,28 +70,25 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
FrameSend.Len = 8; FrameSend.Len = 8;
BmsCommSendMsg(&FrameSend); BmsCommSendMsg(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick(); //BrmMsg.RecvTick = GetSystemTick();
} }
else if((GetSystemTick() - BcpMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcp = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
else else
CemMsg.Cem.Value.Bcp = 0; CemMsg.Cem.Value.Bcp = 0;
if(0 != BcpMsg.Valid) if (0 != BcpMsg.Valid)
{//接收到Brm { //接收到Brm
///////////////////////////////////////////////////////////////////////////////////////
/* if(BcpMsg.StartSoc > 980) ///////////////////////////////////////////////////////////////////////////////////////
/* if(BcpMsg.StartSoc > 980)
{ {
ChargeStopType = eChgStop_Conf_StartSoc98; ChargeStopType = eChgStop_Conf_StartSoc98;
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else */ else */
if(BcpMsg.StartVolt > BcpMsg.ChgMaxVolt) if (BcpMsg.StartVolt > BcpMsg.ChgMaxVolt && (eChgVer_2011 != UserParam.ChgVer))
{ {
CstMsg.StopReason.Value.Truble = 1; CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1; CstMsg.StopTruble.Value.Other = 1;
...@@ -93,7 +97,7 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -93,7 +97,7 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if(BcpMsg.StartVolt > DcModuleAbility.MaxVolt) else if (BcpMsg.StartVolt > DcModuleAbility.MaxVolt && (eChgVer_2011 != UserParam.ChgVer))
{ {
CstMsg.StopReason.Value.Truble = 1; CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1; CstMsg.StopTruble.Value.Other = 1;
...@@ -102,7 +106,7 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -102,7 +106,7 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if(DcModuleAbility.MinVolt > BcpMsg.ChgMaxVolt) else if (DcModuleAbility.MinVolt > BcpMsg.ChgMaxVolt && (eChgVer_2011 != UserParam.ChgVer))
{ {
CstMsg.StopReason.Value.Truble = 1; CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1; CstMsg.StopTruble.Value.Other = 1;
...@@ -111,7 +115,8 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -111,7 +115,8 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
else else
{ {
pChargeCtrl->CurProcess = eChgPro_WaitBmsReady; pChargeCtrl->CurProcess = eChgPro_WaitBmsReady;
...@@ -119,78 +124,89 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl) ...@@ -119,78 +124,89 @@ void ChgProChgConfigure(StructChargeCtrl *pChargeCtrl)
} }
} }
if(0 != BemMsg.Valid) if (0 != BemMsg.Valid)
{ {
pChargeCtrl->CurProcess = eChgPro_CommBreak; pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 == TCUCurChgRecd.TCUChargeEnable) if (0 == TCUCurChgRecd.TCUChargeEnable)
{//外部控制结束充电 { //外部控制结束充电
ChargeStopType = eChgStop_Conf_UserCancel; ChargeStopType = eChgStop_Conf_UserCancel;
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead()) if (eSwSta_On != CcStatusRead())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick * 2))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
ChargeStopType = eChgStop_Conf_CcOpen; ChargeStopType = eChgStop_Conf_CcOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Emergency)
if (0 != PillarError.Value.Emergency)
{ {
ChargeStopType = eChgStop_Conf_EmerClose; ChargeStopType = eChgStop_Conf_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Door)
if (0 != PillarError.Value.Door)
{ {
ChargeStopType = eChgStop_Conf_DoorOpen; ChargeStopType = eChgStop_Conf_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Contactor)
if (0 != PillarError.Value.Contactor)
{ {
ChargeStopType = eChgStop_Conf_Contactor; ChargeStopType = eChgStop_Conf_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.UniContactor)
if (0 != PillarError.Value.UniContactor)
{ {
ChargeStopType = eChgStop_Conf_Contactor; ChargeStopType = eChgStop_Conf_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.InVolt)
if (0 != PillarError.Value.InVolt)
{ {
ChargeStopType = eChgStop_Conf_InVolt; ChargeStopType = eChgStop_Conf_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.NoDcmod)
if (0 != PillarError.Value.NoDcmod)
{ {
ChargeStopType = eChgStop_Conf_NoDcmod; ChargeStopType = eChgStop_Conf_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Meter)
if (0 != PillarError.Value.Meter)
{ {
ChargeStopType = eChgStop_Conf_Meter; ChargeStopType = eChgStop_Conf_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_ChgConfigure != pChargeCtrl->CurProcess)
if (eChgPro_ChgConfigure != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
} }
} }
...@@ -12,7 +12,7 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -12,7 +12,7 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CcStatusChkTick = 0; u32 CcStatusChkTick = 0;
u32 CcStatusChkTick_AB = 0;
ChargeError.Value.DrainResist = 0; ChargeError.Value.DrainResist = 0;
ChargeError.Value.IsolateWarn = 0;//없鍍쒸멩 ChargeError.Value.IsolateWarn = 0;//없鍍쒸멩
...@@ -45,7 +45,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -45,7 +45,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
memset(&BmvMsg, 0xFF, sizeof(BmvMsg)); memset(&BmvMsg, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg, 0xFF, sizeof(BmtMsg)); memset(&BmtMsg, 0xFF, sizeof(BmtMsg));
BmvMsg.Valid = 0;
BmtMsg.Valid = 0;
u32 OneSecondTick = GetSystemTick(); u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0; u32 LockCount = 0;
while(1) while(1)
...@@ -151,49 +152,6 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -151,49 +152,6 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On == CcStatusRead_AB())
{
if(0 == CcStatusChkTick_AB)
CcStatusChkTick_AB = GetSystemTick();
}
else
CcStatusChkTick_AB = 0;
if((0 != CcStatusChkTick_AB) && ((GetSystemTick() - CcStatusChkTick_AB) > 1500))
{
CcStatusChkTick_AB = 0;
if(0 != ChargeEnable_AB)
{
pChargeCtrl->CurProcess = eChgPro_AB_ShakeHand;
pChargeCtrl->Param = 0;
if( (0 != PillarError.Value.Emergency)
|| (0 != PillarError.Value.NoDcmod)
|| (0 != PillarError.Value.Meter)
|| (0 != PillarError.Value.Memory)
|| (0 != PillarError.Value.Lcd)
|| (0 != PillarError.Value.Door)
|| (0 != PillarError.Value.Contactor)
|| (0 != PillarError.Value.UniContactor)
|| (0 != PillarError.Value.InVolt)
|| (0 != PillarError_B.Value.Emergency)
|| (0 != PillarError_B.Value.NoDcmod)
|| (0 != PillarError_B.Value.Meter)
|| (0 != PillarError_B.Value.Memory)
|| (0 != PillarError_B.Value.Lcd)
|| (0 != PillarError_B.Value.Door)
|| (0 != PillarError_B.Value.Contactor)
|| (0 != PillarError_B.Value.UniContactor)
|| (0 != PillarError_B.Value.InVolt)
)
{
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
}
}
if(eChgPro_ChgIdle != pChargeCtrl->CurProcess) if(eChgPro_ChgIdle != pChargeCtrl->CurProcess)
return; return;
......
...@@ -8,16 +8,16 @@ ...@@ -8,16 +8,16 @@
#include "Drv_ImdJyc.h" #include "Drv_ImdJyc.h"
#include "Memory.h" #include "Memory.h"
void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl)
void ChgProChgRecognize(StructChargeCtrl * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0; u32 CRM_SendTick = 0;
u8 CrmRecog; u8 CrmRecog;
u32 CcStatusChkTick = 0; u32 CcStatusChkTick = 0;
// if(ImdValue.Vaild) // if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003); // ImdWrite(0x0017, 0x0003);
memset(&BemMsg, 0, sizeof(BemMsg)); memset(&BemMsg, 0, sizeof(BemMsg));
memset(&CemMsg, 0, sizeof(CemMsg)); memset(&CemMsg, 0, sizeof(CemMsg));
memset(&BstMsg, 0, sizeof(BstMsg)); memset(&BstMsg, 0, sizeof(BstMsg));
...@@ -27,17 +27,18 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl) ...@@ -27,17 +27,18 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl)
BemMsg.Valid = 0; BemMsg.Valid = 0;
BmsCanInit(); BmsCanInit();
osDelay(20); osDelay(20);
// if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003);
// if(ImdValue.Vaild)
// ImdWrite(0x0017, 0x0003);
ChargeTimerSet(eSwSta_Off); ChargeTimerSet(eSwSta_Off);
BmsPowerSet(eSwSta_On); BmsPowerSet(eSwSta_On);
LockSet(eSwSta_On); LockSet(eSwSta_On);
FanSet(eSwSta_On); FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off); ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off); //DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off); DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
CrmRecog = 0x00; CrmRecog = 0x00;
CRM_Send(CrmRecog); CRM_Send(CrmRecog);
...@@ -45,9 +46,9 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl) ...@@ -45,9 +46,9 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl)
BrmMsg.RecvTick = GetSystemTick(); BrmMsg.RecvTick = GetSystemTick();
CemMsg.Cem.Value.Brm = 0; CemMsg.Cem.Value.Brm = 0;
while(1) while (1)
{ {
if((GetSystemTick() - CRM_SendTick) > 250) if ((GetSystemTick() -CRM_SendTick) > 250)
{ {
CRM_Send(CrmRecog); CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
...@@ -55,19 +56,25 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl) ...@@ -55,19 +56,25 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl)
ChgPgnRecv(&PgnRecv); ChgPgnRecv(&PgnRecv);
if(0 != BrmMsg.Valid) if (0 != BrmMsg.Valid)
{//接收到Brm { //接收到Brm
pChargeCtrl->CurProcess = eChgPro_ChgConfigure; pChargeCtrl->CurProcess = eChgPro_ChgConfigure;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if((GetSystemTick() - BrmMsg.RecvTick) > (2000)) else if ((GetSystemTick() -BrmMsg.RecvTick) > (MsgTimeout_5S))
{
CemMsg.Cem.Value.Brm = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
else if ((GetSystemTick() -BrmMsg.RecvTick) > (2000))
{ {
StructChargeSend FrameSend; StructChargeSend FrameSend;
FrameSend.Id.Mult = 0; FrameSend.Id.Mult = 0;
FrameSend.Id.Disp.Prio = 7; FrameSend.Id.Disp.Prio = 7;
FrameSend.Id.Disp.PF = TPCM>>8; FrameSend.Id.Disp.PF = TPCM >> 8;
FrameSend.Id.Disp.DA_PS = Card1939Addr; FrameSend.Id.Disp.DA_PS = Card1939Addr;
FrameSend.Id.Disp.SA = Charger1939Addr; FrameSend.Id.Disp.SA = Charger1939Addr;
FrameSend.Data[0] = 0x13; FrameSend.Data[0] = 0x13;
...@@ -81,82 +88,88 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl) ...@@ -81,82 +88,88 @@ void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl)
FrameSend.Len = 8; FrameSend.Len = 8;
BmsCommSendMsg(&FrameSend); BmsCommSendMsg(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick(); //BrmMsg.RecvTick = GetSystemTick();
} }
else if((GetSystemTick() - BrmMsg.RecvTick) > (MsgTimeout_5S))
{
CemMsg.Cem.Value.Brm = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == TCUCurChgRecd.TCUChargeEnable)
{//外部控制结束充电 if (0 == TCUCurChgRecd.TCUChargeEnable)
{ //外部控制结束充电
ChargeStopType = eChgStop_Reco_UserCancle; ChargeStopType = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead()) if (eSwSta_On != CcStatusRead())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick * 2))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
ChargeStopType = eChgStop_Reco_CcOpen; ChargeStopType = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Emergency)
if (0 != PillarError.Value.Emergency)
{ {
ChargeStopType = eChgStop_Reco_EmerClose; ChargeStopType = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Door)
if (0 != PillarError.Value.Door)
{ {
ChargeStopType = eChgStop_Reco_DoorOpen; ChargeStopType = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Contactor)
if (0 != PillarError.Value.Contactor)
{ {
ChargeStopType = eChgStop_Reco_Contactor; ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.UniContactor)
if (0 != PillarError.Value.UniContactor)
{ {
ChargeStopType = eChgStop_Reco_Contactor; ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.InVolt)
if (0 != PillarError.Value.InVolt)
{ {
ChargeStopType = eChgStop_Reco_InVolt; ChargeStopType = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.NoDcmod)
if (0 != PillarError.Value.NoDcmod)
{ {
ChargeStopType = eChgStop_Reco_NoDcmod; ChargeStopType = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Meter)
if (0 != PillarError.Value.Meter)
{ {
ChargeStopType = eChgStop_Reco_Meter; ChargeStopType = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_ChgRecognize != pChargeCtrl->CurProcess)
if (eChgPro_ChgRecognize != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
} }
} }
...@@ -57,18 +57,10 @@ void ChgProChgRecognizeEx(StructChargeCtrl *pChargeCtrl) ...@@ -57,18 +57,10 @@ void ChgProChgRecognizeEx(StructChargeCtrl *pChargeCtrl)
if(0 != BrmMsg.Valid) if(0 != BrmMsg.Valid)
{//接收到Brm {//接收到Brm
//if(1 == TCUCurChgRecd.TCUChargeEnable)
{
pChargeCtrl->CurProcess = eChgPro_ChgConfigure; pChargeCtrl->CurProcess = eChgPro_ChgConfigure;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
//else if(2 == TCUCurChgRecd.TCUChargeEnable)
{
// if(TCUCurChgRecd.VehicleVerification == 0)
// TCUCurChgRecd.VehicleVerification = 1;
}
}
else if((GetSystemTick() - BrmMsg.RecvTick) < (MsgTimeout_5S/2)) else if((GetSystemTick() - BrmMsg.RecvTick) < (MsgTimeout_5S/2))
{ {
......
...@@ -95,9 +95,9 @@ void ChgProShakeHand(StructChargeCtrl *pChargeCtrl) ...@@ -95,9 +95,9 @@ void ChgProShakeHand(StructChargeCtrl *pChargeCtrl)
{ {
if( GetDCVoltBeforInsulation() >100) if( GetDCVoltBeforInsulation() >100)
{ {
ChargeStopType = eChgStop_Imd_IsolateError; ChargeStopType = eChgStop_Volt_More_10V;
pChargeCtrl->CurProcess = eChgPro_ChgStop; pChargeCtrl->CurProcess = eChgPro_ChgStop;
TCUCurChgRecd.TCUChgStopType = 0x1d; //TCUCurChgRecd.TCUChgStopType = 0x1d;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else else
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
#include "Memory.h" #include "Memory.h"
extern StructDcModuleManage DcModuleManage_All; extern StructDcModuleManage DcModuleManage_All;
void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl)
void ChgProWaitBmsReady(StructChargeCtrl * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CML_SendTick = 0; u32 CML_SendTick = 0;
...@@ -26,31 +28,39 @@ void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl) ...@@ -26,31 +28,39 @@ void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl)
LockSet(eSwSta_On); LockSet(eSwSta_On);
FanSet(eSwSta_On); FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off); ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off); //DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off); DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
CTS_Send(); CTS_Send();
CTS_SendTick = GetSystemTick(); CTS_SendTick = GetSystemTick();
//if(0 != UserParam.ChgFun.Value.SigUniChg) //if(0 != UserParam.ChgFun.Value.SigUniChg)
// CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt); // CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
//else //else
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt); CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt,
4000 - (DcModuleAbility.MaxCurrt * (DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)),
4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick(); CML_SendTick = GetSystemTick();
BroMsg.RecvTick = GetSystemTick(); BroMsg.RecvTick = GetSystemTick();
BRO_AA_RecvTick = GetSystemTick(); BRO_AA_RecvTick = GetSystemTick();
CemMsg.Cem.Mult =0; CemMsg.Cem.Mult = 0;
while(1)
while (1)
{ {
if((GetSystemTick() - CML_SendTick) > 250) if ((GetSystemTick() -CML_SendTick) > 250)
{ {
//if(0 != UserParam.ChgFun.Value.SigUniChg) //if(0 != UserParam.ChgFun.Value.SigUniChg)
// CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)), 4000 - DcModuleAbility.MinCurrt); // CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
//else //else
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt); CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt,
4000 - (DcModuleAbility.MaxCurrt * (DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)),
4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick(); CML_SendTick = GetSystemTick();
} }
if((GetSystemTick() - CTS_SendTick) > 480)
if ((GetSystemTick() -CTS_SendTick) > 480)
{ {
CTS_Send(); CTS_Send();
CTS_SendTick = GetSystemTick(); CTS_SendTick = GetSystemTick();
...@@ -58,100 +68,133 @@ void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl) ...@@ -58,100 +68,133 @@ void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl)
ChgPgnRecv(&PgnRecv); ChgPgnRecv(&PgnRecv);
if((GetSystemTick() - BroMsg.RecvTick) > MsgTimeout_5S) if ((GetSystemTick() -BroMsg.RecvTick) > MsgTimeout_5S)
{ {
CemMsg.Cem.Value.Bro = 1; CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak; pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if ((GetSystemTick() -BroMsg.RecvTick) > MsgTimeout_5S / 2)
{
StructChargeSend FrameSend;
FrameSend.Id.Mult = 0;
FrameSend.Id.Disp.Prio = 7;
FrameSend.Id.Disp.PF = TPCM >> 8;
FrameSend.Id.Disp.DA_PS = Card1939Addr;
FrameSend.Id.Disp.SA = Charger1939Addr;
FrameSend.Data[0] = 0x13;
FrameSend.Data[1] = 0x09;
FrameSend.Data[2] = 0x00;
FrameSend.Data[3] = 0x02;
FrameSend.Data[4] = 0xFe;
FrameSend.Data[5] = 0x00;
FrameSend.Data[6] = 0x11;
FrameSend.Data[7] = 0x00;
FrameSend.Len = 8;
BmsCommSendMsg(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick();
}
else else
CemMsg.Cem.Value.Bro = 0; CemMsg.Cem.Value.Bro = 0;
if((0 != BRO_AA_RecvTick) && ((GetSystemTick() - BRO_AA_RecvTick) > MsgTimeout_60S)) if ((0 != BRO_AA_RecvTick) && ((GetSystemTick() -BRO_AA_RecvTick) > MsgTimeout_60S))
{ {
CemMsg.Cem.Value.Bro = 1; CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak; pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if((0 != BroMsg.Valid) && (0xAA == BroMsg.Status)) if ((0 != BroMsg.Valid) && (0xAA == BroMsg.Status))
{//接收到Brm { //接收到Brm
BRO_AA_RecvTick = 0; BRO_AA_RecvTick = 0;
pChargeCtrl->CurProcess = eChgPro_WaitPillarReady; pChargeCtrl->CurProcess = eChgPro_WaitPillarReady;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != BemMsg.Valid) if (0 != BemMsg.Valid)
{ {
pChargeCtrl->CurProcess = eChgPro_CommBreak; pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 == TCUCurChgRecd.TCUChargeEnable) if (0 == TCUCurChgRecd.TCUChargeEnable)
{//外部控制结束充电 { //外部控制结束充电
ChargeStopType = eChgStop_BmsReady_UserCancel; ChargeStopType = eChgStop_BmsReady_UserCancel;
pChargeCtrl->CurProcess = eChgPro_ChgIdle; pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead()) if (eSwSta_On != CcStatusRead())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick * 2))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick * 2))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
ChargeStopType = eChgStop_BmsReady_CcOpen; ChargeStopType = eChgStop_BmsReady_CcOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Emergency)
if (0 != PillarError.Value.Emergency)
{ {
ChargeStopType = eChgStop_BmsReady_EmerClose; ChargeStopType = eChgStop_BmsReady_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Door)
if (0 != PillarError.Value.Door)
{ {
ChargeStopType = eChgStop_BmsReady_DoorOpen; ChargeStopType = eChgStop_BmsReady_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Contactor)
if (0 != PillarError.Value.Contactor)
{ {
ChargeStopType = eChgStop_BmsReady_Contactor; ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.UniContactor)
if (0 != PillarError.Value.UniContactor)
{ {
ChargeStopType = eChgStop_BmsReady_Contactor; ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.InVolt)
if (0 != PillarError.Value.InVolt)
{ {
ChargeStopType = eChgStop_BmsReady_InVolt; ChargeStopType = eChgStop_BmsReady_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.NoDcmod)
if (0 != PillarError.Value.NoDcmod)
{ {
ChargeStopType = eChgStop_BmsReady_NoDcmod; ChargeStopType = eChgStop_BmsReady_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError.Value.Meter)
if (0 != PillarError.Value.Meter)
{ {
ChargeStopType = eChgStop_BmsReady_Meter; ChargeStopType = eChgStop_BmsReady_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak; pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_WaitBmsReady != pChargeCtrl->CurProcess)
if (eChgPro_WaitBmsReady != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
} }
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include "Drv_BmsComm.h" #include "Drv_BmsComm.h"
void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) void ChgProChgConfigure_B(StructChargeCtrl_B * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0; u32 CRM_SendTick = 0;
...@@ -24,18 +24,19 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -24,18 +24,19 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On); FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off); ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off); //DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
CrmRecog = 0xAA; CrmRecog = 0xAA;
CRM_Send_B(CrmRecog); CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
BcpMsg_B.RecvTick = GetSystemTick(); BcpMsg_B.RecvTick = GetSystemTick();
while(1) while (1)
{ {
if((GetSystemTick() - CRM_SendTick) > 250) if ((GetSystemTick() -CRM_SendTick) > 250)
{ {
CRM_Send_B(CrmRecog); CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
...@@ -43,13 +44,19 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -43,13 +44,19 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
ChgPgnRecv_B(&PgnRecv); ChgPgnRecv_B(&PgnRecv);
if((GetSystemTick() - BcpMsg_B.RecvTick) > 2000) if ((GetSystemTick() -BcpMsg_B.RecvTick) > MsgTimeout_B_5S)
{
CemMsg_B.Cem.Value.Bcp = 1;
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0;
}
else if ((GetSystemTick() -BcpMsg_B.RecvTick) > 2000)
{ {
StructChargeSend FrameSend; StructChargeSend FrameSend;
FrameSend.Id.Mult = 0; FrameSend.Id.Mult = 0;
FrameSend.Id.Disp.Prio = 7; FrameSend.Id.Disp.Prio = 7;
FrameSend.Id.Disp.PF = TPCM>>8; FrameSend.Id.Disp.PF = TPCM >> 8;
FrameSend.Id.Disp.DA_PS = Card1939Addr; FrameSend.Id.Disp.DA_PS = Card1939Addr;
FrameSend.Id.Disp.SA = Charger1939Addr; FrameSend.Id.Disp.SA = Charger1939Addr;
FrameSend.Data[0] = 0x13; FrameSend.Data[0] = 0x13;
...@@ -63,28 +70,25 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -63,28 +70,25 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
FrameSend.Len = 8; FrameSend.Len = 8;
BmsCommSendMsg_B(&FrameSend); BmsCommSendMsg_B(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick(); //BrmMsg.RecvTick = GetSystemTick();
} }
else if((GetSystemTick() - BcpMsg_B.RecvTick) > MsgTimeout_B_5S)
{
CemMsg_B.Cem.Value.Bcp = 1;
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0;
}
else else
CemMsg_B.Cem.Value.Bcp = 0; CemMsg_B.Cem.Value.Bcp = 0;
if(0 != BcpMsg_B.Valid) if (0 != BcpMsg_B.Valid)
{//接收到Brm { //接收到Brm
///////////////////////////////////////////////////////////////////////////////////////
/* if(BcpMsg_B.StartSoc > 980) ///////////////////////////////////////////////////////////////////////////////////////
/* if(BcpMsg_B.StartSoc > 980)
{ {
ChargeStopType_B = eChgStop_Conf_StartSoc98; ChargeStopType_B = eChgStop_Conf_StartSoc98;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else */ else */
if(BcpMsg_B.StartVolt > BcpMsg_B.ChgMaxVolt) if (BcpMsg_B.StartVolt > BcpMsg_B.ChgMaxVolt && (eChgVer_2011 != UserParam.ChgVer))
{ {
CstMsg_B.StopReason.Value.Truble = 1; CstMsg_B.StopReason.Value.Truble = 1;
CstMsg_B.StopTruble.Value.Other = 1; CstMsg_B.StopTruble.Value.Other = 1;
...@@ -93,7 +97,7 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -93,7 +97,7 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if(BcpMsg_B.StartVolt > DcModuleAbility.MaxVolt) else if (BcpMsg_B.StartVolt > DcModuleAbility.MaxVolt && (eChgVer_2011 != UserParam.ChgVer))
{ {
CstMsg_B.StopReason.Value.Truble = 1; CstMsg_B.StopReason.Value.Truble = 1;
CstMsg_B.StopTruble.Value.Other = 1; CstMsg_B.StopTruble.Value.Other = 1;
...@@ -102,7 +106,7 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -102,7 +106,7 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if(DcModuleAbility.MinVolt > BcpMsg_B.ChgMaxVolt) else if (DcModuleAbility.MinVolt > BcpMsg_B.ChgMaxVolt && (eChgVer_2011 != UserParam.ChgVer))
{ {
CstMsg_B.StopReason.Value.Truble = 1; CstMsg_B.StopReason.Value.Truble = 1;
CstMsg_B.StopTruble.Value.Other = 1; CstMsg_B.StopTruble.Value.Other = 1;
...@@ -111,7 +115,8 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -111,7 +115,8 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
else else
{ {
pChargeCtrl->CurProcess = eChgPro_B_WaitBmsReady; pChargeCtrl->CurProcess = eChgPro_B_WaitBmsReady;
...@@ -119,78 +124,89 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -119,78 +124,89 @@ void ChgProChgConfigure_B(StructChargeCtrl_B *pChargeCtrl)
} }
} }
if(0 != BemMsg_B.Valid) if (0 != BemMsg_B.Valid)
{ {
pChargeCtrl->CurProcess = eChgPro_B_CommBreak; pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 == TCUCurChgRecd_B.TCUChargeEnable) if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{//外部控制结束充电 { //外部控制结束充电
ChargeStopType_B = eChgStop_Conf_UserCancel; ChargeStopType_B = eChgStop_Conf_UserCancel;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead_B()) if (eSwSta_On != CcStatusRead_B())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B * 2))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B * 2))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Conf_CcOpen; ChargeStopType_B = eChgStop_Conf_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Emergency)
if (0 != PillarError_B.Value.Emergency)
{ {
ChargeStopType_B = eChgStop_Conf_EmerClose; ChargeStopType_B = eChgStop_Conf_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Door)
if (0 != PillarError_B.Value.Door)
{ {
ChargeStopType_B = eChgStop_Conf_DoorOpen; ChargeStopType_B = eChgStop_Conf_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Contactor)
if (0 != PillarError_B.Value.Contactor)
{ {
ChargeStopType_B = eChgStop_Conf_Contactor; ChargeStopType_B = eChgStop_Conf_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.UniContactor)
if (0 != PillarError_B.Value.UniContactor)
{ {
ChargeStopType_B = eChgStop_Conf_Contactor; ChargeStopType_B = eChgStop_Conf_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.InVolt)
if (0 != PillarError_B.Value.InVolt)
{ {
ChargeStopType_B = eChgStop_Conf_InVolt; ChargeStopType_B = eChgStop_Conf_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.NoDcmod)
if (0 != PillarError_B.Value.NoDcmod)
{ {
ChargeStopType_B = eChgStop_Conf_NoDcmod; ChargeStopType_B = eChgStop_Conf_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Meter)
if (0 != PillarError_B.Value.Meter)
{ {
ChargeStopType_B = eChgStop_Conf_Meter; ChargeStopType_B = eChgStop_Conf_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_B_ChgConfigure != pChargeCtrl->CurProcess)
if (eChgPro_B_ChgConfigure != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
} }
} }
...@@ -8,13 +8,14 @@ ...@@ -8,13 +8,14 @@
#include "Memory.h" #include "Memory.h"
#include "Drv_SmartAllocation.h" #include "Drv_SmartAllocation.h"
void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProChgIdle_B(StructChargeCtrl_B * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CcStatusChkTick = 0; u32 CcStatusChkTick = 0;
ChargeError_B.Value.DrainResist = 0; ChargeError_B.Value.DrainResist = 0;
ChargeError_B.Value.IsolateWarn = 0;//없鍍쒸멩 ChargeError_B.Value.IsolateWarn = 0; //없鍍쒸멩
ChargeError_B.Value.IsolateError = 0; ChargeError_B.Value.IsolateError = 0;
ChargeError_B.Value.VoltOutError = 0; ChargeError_B.Value.VoltOutError = 0;
ChargeError_B.Value.CurrtOutError = 0; ChargeError_B.Value.CurrtOutError = 0;
...@@ -24,11 +25,13 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -24,11 +25,13 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
BmsPowerSet_B(eSwSta_Off); BmsPowerSet_B(eSwSta_Off);
LockSet_B(eSwSta_Off); LockSet_B(eSwSta_Off);
FanSet_B(eSwSta_Off); FanSet_B(eSwSta_Off);
//붚없鍍친욥off--겜on //붚없鍍친욥off--겜on
ImdWorkSet_B(eSwSta_Off); ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off); //DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
BmsCanInit_B(); BmsCanInit_B();
osDelay(20); osDelay(20);
...@@ -43,12 +46,16 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -43,12 +46,16 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
memset(&BmvMsg_B, 0xFF, sizeof(BmvMsg)); memset(&BmvMsg_B, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg_B, 0xFF, sizeof(BmtMsg)); memset(&BmtMsg_B, 0xFF, sizeof(BmtMsg));
BmvMsg_B.Valid = 0;
BmtMsg_B.Valid = 0;
u32 OneSecondTick = GetSystemTick(); u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0; u32 LockCount = 0;
while(1)
while (1)
{ {
memset(&BemMsg_B, 0, sizeof(BemMsg)); memset(&BemMsg_B, 0, sizeof(BemMsg));
if(0 == UserParam.ChgFun.Value.Num_B)
if (0 == UserParam.ChgFun.Value.Num_B)
{ {
osDelay(1000); osDelay(1000);
continue; continue;
...@@ -56,10 +63,11 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -56,10 +63,11 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
ChgPgnRecv_B(&PgnRecv); ChgPgnRecv_B(&PgnRecv);
if(eSwSta_On == CcStatusRead_B()) if (eSwSta_On == CcStatusRead_B())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
ACContactorSetCount = 0; ACContactorSetCount = 0;
} }
else else
...@@ -68,10 +76,12 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -68,10 +76,12 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
ChargeStopType_B = eChgStop_None; ChargeStopType_B = eChgStop_None;
memset(&BstMsg_B, 0, sizeof(BstMsg)); memset(&BstMsg_B, 0, sizeof(BstMsg));
memset(&BsmMsg_B, 0, sizeof(BsmMsg)); memset(&BsmMsg_B, 0, sizeof(BsmMsg));
if(eSwSta_Off == CcStatusRead())
if (eSwSta_Off == CcStatusRead())
{ {
ACContactorSetCount++; ACContactorSetCount++;
if(ACContactorSetCount > 600)
if (ACContactorSetCount > 600)
{ {
ACContactorSet(eSwSta_Off); ACContactorSet(eSwSta_Off);
ACContactorSetCount = 601; ACContactorSetCount = 601;
...@@ -86,17 +96,19 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -86,17 +96,19 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
} }
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > 1500)) if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > 1500))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
if(0 != TCUCurChgRecd_B.TCUChargeEnable)
if (0 != TCUCurChgRecd_B.TCUChargeEnable)
{ {
if(DcModuleGroup[2].status == Hold_A) if (DcModuleGroup[2].status == Hold_A)
{ {
DcModuleGroup[2].status = Valid; DcModuleGroup[2].status = Valid;
DcModuleGroup[2].flag = 0; DcModuleGroup[2].flag = 0;
SendDataToDcModule_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt); SendDataToDcModule_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt);
} }
pChargeCtrl->CurProcess = eChgPro_B_ShakeHand; pChargeCtrl->CurProcess = eChgPro_B_ShakeHand;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
...@@ -104,31 +116,33 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -104,31 +116,33 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
ACContactorSet(eSwSta_On); ACContactorSet(eSwSta_On);
} }
if((GetSystemTick() - OneSecondTick) >= 1000) if ((GetSystemTick() -OneSecondTick) >= 1000)
{ {
OneSecondTick = GetSystemTick(); OneSecondTick = GetSystemTick();
if(LockGet_B()==eSwSta_On)
if (LockGet_B() == eSwSta_On)
{ {
LockCount++; LockCount++;
if(LockCount>=10)
if (LockCount >= 10)
{ {
LockCount = 10; LockCount = 10;
} }
else if(LockCount >= 6) else if (LockCount >= 6)
{ {
LockCount = 10; LockCount = 10;
LockSet_B(eSwSta_Off); LockSet_B(eSwSta_Off);
} }
else if(LockCount >= 5) else if (LockCount >= 5)
{ {
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
} }
else if(LockCount >= 3) else if (LockCount >= 3)
{ {
//LockCount = 10; //LockCount = 10;
LockSet_B(eSwSta_Off); LockSet_B(eSwSta_Off);
} }
else if(LockCount >= 2) else if (LockCount >= 2)
{ {
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
} }
...@@ -139,25 +153,21 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -139,25 +153,21 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
} }
} }
if( if ((0 != PillarError_B.Value.Emergency) || (0 != PillarError_B.Value.NoDcmod) ||
(0 != PillarError_B.Value.Emergency) (0 != PillarError_B.Value.Meter) || (0 != PillarError_B.Value.Memory) ||
|| (0 != PillarError_B.Value.NoDcmod) (0 != PillarError_B.Value.Lcd) || (0 != PillarError_B.Value.Door) ||
|| (0 != PillarError_B.Value.Meter) (0 != PillarError_B.Value.Contactor) || (0 != PillarError_B.Value.UniContactor) ||
|| (0 != PillarError_B.Value.Memory) (0 != PillarError_B.Value.InVolt))
|| (0 != PillarError_B.Value.Lcd)
|| (0 != PillarError_B.Value.Door)
|| (0 != PillarError_B.Value.Contactor)
|| (0 != PillarError_B.Value.UniContactor)
|| (0 != PillarError_B.Value.InVolt)
)
{ {
pChargeCtrl->CurProcess = eChgPro_B_ChgIdle; pChargeCtrl->CurProcess = eChgPro_B_ChgIdle;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_B_ChgIdle != pChargeCtrl->CurProcess)
if (eChgPro_B_ChgIdle != pChargeCtrl->CurProcess)
return; return;
osDelay(100); osDelay(100);
} }
} }
...@@ -8,16 +8,16 @@ ...@@ -8,16 +8,16 @@
#include "Drv_ImdJyc.h" #include "Drv_ImdJyc.h"
#include "Memory.h" #include "Memory.h"
void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProChgRecognize_B(StructChargeCtrl_B * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0; u32 CRM_SendTick = 0;
u8 CrmRecog; u8 CrmRecog;
u32 CcStatusChkTick = 0; u32 CcStatusChkTick = 0;
// if(ImdValue_B.Vaild) // if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003); // ImdWrite_B(0x0017, 0x0003);
memset(&BemMsg_B, 0, sizeof(BemMsg_B)); memset(&BemMsg_B, 0, sizeof(BemMsg_B));
memset(&CemMsg_B, 0, sizeof(CemMsg_B)); memset(&CemMsg_B, 0, sizeof(CemMsg_B));
memset(&BstMsg_B, 0, sizeof(BstMsg_B)); memset(&BstMsg_B, 0, sizeof(BstMsg_B));
...@@ -27,17 +27,18 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -27,17 +27,18 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl)
BemMsg_B.Valid = 0; BemMsg_B.Valid = 0;
BmsCanInit_B(); BmsCanInit_B();
osDelay(20); osDelay(20);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
ChargeTimerSet_B(eSwSta_Off); ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On); BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On); FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off); ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off); //DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
CrmRecog = 0x00; CrmRecog = 0x00;
CRM_Send_B(CrmRecog); CRM_Send_B(CrmRecog);
...@@ -45,9 +46,9 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -45,9 +46,9 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl)
BrmMsg_B.RecvTick = GetSystemTick(); BrmMsg_B.RecvTick = GetSystemTick();
CemMsg_B.Cem.Value.Brm = 0; CemMsg_B.Cem.Value.Brm = 0;
while(1) while (1)
{ {
if((GetSystemTick() - CRM_SendTick) > 250) if ((GetSystemTick() -CRM_SendTick) > 250)
{ {
CRM_Send_B(CrmRecog); CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
...@@ -55,18 +56,24 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -55,18 +56,24 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl)
ChgPgnRecv_B(&PgnRecv); ChgPgnRecv_B(&PgnRecv);
if(0 != BrmMsg_B.Valid) if (0 != BrmMsg_B.Valid)
{//接收到Brm { //接收到Brm
pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure; pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if((GetSystemTick() - BrmMsg_B.RecvTick) > (2000)) else if ((GetSystemTick() -BrmMsg_B.RecvTick) > (MsgTimeout_B_5S))
{
CemMsg_B.Cem.Value.Brm = 1;
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0;
}
else if ((GetSystemTick() -BrmMsg_B.RecvTick) > (2000))
{ {
StructChargeSend FrameSend; StructChargeSend FrameSend;
FrameSend.Id.Mult = 0; FrameSend.Id.Mult = 0;
FrameSend.Id.Disp.Prio = 7; FrameSend.Id.Disp.Prio = 7;
FrameSend.Id.Disp.PF = TPCM>>8; FrameSend.Id.Disp.PF = TPCM >> 8;
FrameSend.Id.Disp.DA_PS = Card1939Addr; FrameSend.Id.Disp.DA_PS = Card1939Addr;
FrameSend.Id.Disp.SA = Charger1939Addr; FrameSend.Id.Disp.SA = Charger1939Addr;
FrameSend.Data[0] = 0x13; FrameSend.Data[0] = 0x13;
...@@ -80,82 +87,88 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -80,82 +87,88 @@ void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl)
FrameSend.Len = 8; FrameSend.Len = 8;
BmsCommSendMsg_B(&FrameSend); BmsCommSendMsg_B(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick(); //BrmMsg.RecvTick = GetSystemTick();
} }
else if((GetSystemTick() - BrmMsg_B.RecvTick) > (MsgTimeout_B_5S))
{
CemMsg_B.Cem.Value.Brm = 1;
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == TCUCurChgRecd_B.TCUChargeEnable)
{//外部控制结束充电 if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{ //外部控制结束充电
ChargeStopType_B = eChgStop_Reco_UserCancle; ChargeStopType_B = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead_B()) if (eSwSta_On != CcStatusRead_B())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B * 2))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B * 2))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Reco_CcOpen; ChargeStopType_B = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Emergency)
if (0 != PillarError_B.Value.Emergency)
{ {
ChargeStopType_B = eChgStop_Reco_EmerClose; ChargeStopType_B = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Door)
if (0 != PillarError_B.Value.Door)
{ {
ChargeStopType_B = eChgStop_Reco_DoorOpen; ChargeStopType_B = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Contactor)
if (0 != PillarError_B.Value.Contactor)
{ {
ChargeStopType_B = eChgStop_Reco_Contactor; ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.UniContactor)
if (0 != PillarError_B.Value.UniContactor)
{ {
ChargeStopType_B = eChgStop_Reco_Contactor; ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.InVolt)
if (0 != PillarError_B.Value.InVolt)
{ {
ChargeStopType_B = eChgStop_Reco_InVolt; ChargeStopType_B = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.NoDcmod)
if (0 != PillarError_B.Value.NoDcmod)
{ {
ChargeStopType_B = eChgStop_Reco_NoDcmod; ChargeStopType_B = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Meter)
if (0 != PillarError_B.Value.Meter)
{ {
ChargeStopType_B = eChgStop_Reco_Meter; ChargeStopType_B = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_B_ChgRecognize != pChargeCtrl->CurProcess)
if (eChgPro_B_ChgRecognize != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
} }
} }
...@@ -8,16 +8,16 @@ ...@@ -8,16 +8,16 @@
#include "Drv_ImdJyc.h" #include "Drv_ImdJyc.h"
#include "Memory.h" #include "Memory.h"
void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProChgRecognizeEx_B(StructChargeCtrl_B * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0; u32 CRM_SendTick = 0;
u8 CrmRecog; u8 CrmRecog;
u32 CcStatusChkTick = 0; u32 CcStatusChkTick = 0;
// if(ImdValue_B.Vaild) // if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003); // ImdWrite_B(0x0017, 0x0003);
memset(&BemMsg_B, 0, sizeof(BemMsg_B)); memset(&BemMsg_B, 0, sizeof(BemMsg_B));
memset(&CemMsg_B, 0, sizeof(CemMsg_B)); memset(&CemMsg_B, 0, sizeof(CemMsg_B));
memset(&BstMsg_B, 0, sizeof(BstMsg_B)); memset(&BstMsg_B, 0, sizeof(BstMsg_B));
...@@ -27,17 +27,18 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -27,17 +27,18 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl)
BemMsg_B.Valid = 0; BemMsg_B.Valid = 0;
BmsCanInit_B(); BmsCanInit_B();
osDelay(20); osDelay(20);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
ChargeTimerSet_B(eSwSta_Off); ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On); BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On); FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off); ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off); //DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
CrmRecog = 0x00; CrmRecog = 0x00;
CRM_Send_B(CrmRecog); CRM_Send_B(CrmRecog);
...@@ -45,9 +46,9 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -45,9 +46,9 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl)
BrmMsg_B.RecvTick = GetSystemTick(); BrmMsg_B.RecvTick = GetSystemTick();
CemMsg_B.Cem.Value.Brm = 0; CemMsg_B.Cem.Value.Brm = 0;
while(1) while (1)
{ {
if((0 != CRM_SendTick) && ((GetSystemTick() - CRM_SendTick) > 250)) if ((0 != CRM_SendTick) && ((GetSystemTick() -CRM_SendTick) > 250))
{ {
CRM_Send_B(CrmRecog); CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick(); CRM_SendTick = GetSystemTick();
...@@ -55,16 +56,16 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -55,16 +56,16 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl)
ChgPgnRecv_B(&PgnRecv); ChgPgnRecv_B(&PgnRecv);
if(0 != BrmMsg_B.Valid) if (0 != BrmMsg_B.Valid)
{//接收到Brm { //接收到Brm
pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure; pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
else if((GetSystemTick() - BrmMsg_B.RecvTick) < (MsgTimeout_B_5S/2)) else if ((GetSystemTick() -BrmMsg_B.RecvTick) < (MsgTimeout_B_5S / 2))
{ {
} }
else if((GetSystemTick() - BrmMsg_B.RecvTick) < (MsgTimeout_B_10S)) else if ((GetSystemTick() -BrmMsg_B.RecvTick) < (MsgTimeout_B_10S))
{ {
//BmsPowerSet_B(eSwSta_Off); //BmsPowerSet_B(eSwSta_Off);
CRM_SendTick = 0; CRM_SendTick = 0;
...@@ -75,70 +76,79 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -75,70 +76,79 @@ void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl)
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 == TCUCurChgRecd_B.TCUChargeEnable) if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{//外部控制结束充电 { //外部控制结束充电
ChargeStopType_B = eChgStop_Reco_UserCancle; ChargeStopType_B = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead_B()) if (eSwSta_On != CcStatusRead_B())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B * 2))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B * 2))
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Reco_CcOpen; ChargeStopType_B = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Emergency)
if (0 != PillarError_B.Value.Emergency)
{ {
ChargeStopType_B = eChgStop_Reco_EmerClose; ChargeStopType_B = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Door)
if (0 != PillarError_B.Value.Door)
{ {
ChargeStopType_B = eChgStop_Reco_DoorOpen; ChargeStopType_B = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Contactor)
if (0 != PillarError_B.Value.Contactor)
{ {
ChargeStopType_B = eChgStop_Reco_Contactor; ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.UniContactor)
if (0 != PillarError_B.Value.UniContactor)
{ {
ChargeStopType_B = eChgStop_Reco_Contactor; ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.InVolt)
if (0 != PillarError_B.Value.InVolt)
{ {
ChargeStopType_B = eChgStop_Reco_InVolt; ChargeStopType_B = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.NoDcmod)
if (0 != PillarError_B.Value.NoDcmod)
{ {
ChargeStopType_B = eChgStop_Reco_NoDcmod; ChargeStopType_B = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Meter)
if (0 != PillarError_B.Value.Meter)
{ {
ChargeStopType_B = eChgStop_Reco_Meter; ChargeStopType_B = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_B_ChgRecognizeEx != pChargeCtrl->CurProcess)
if (eChgPro_B_ChgRecognizeEx != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "Drv_BmsComm.h" #include "Drv_BmsComm.h"
void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl) void ChgProCommBeak_B(StructChargeCtrl_B * pChargeCtrl)
{ {
StructPgnRecv PgnRecv; StructPgnRecv PgnRecv;
u32 CEM_SendTick = 0; u32 CEM_SendTick = 0;
...@@ -14,22 +14,23 @@ void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -14,22 +14,23 @@ void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl)
u32 ChgReStartTick = 0; u32 ChgReStartTick = 0;
u32 CcStatusChkTick = 0; u32 CcStatusChkTick = 0;
if(0 == CommErrorCount_B) if (0 == CommErrorCount_B)
{ {
CommErrFrame_B[0] = BemMsg_B.Bem.Mult; CommErrFrame_B[0] = BemMsg_B.Bem.Mult;
CommErrFrame_B[1] = CemMsg_B.Cem.Mult; CommErrFrame_B[1] = CemMsg_B.Cem.Mult;
} }
else if(1 == CommErrorCount_B) else if (1 == CommErrorCount_B)
{ {
CommErrFrame_B[2] = BemMsg_B.Bem.Mult; CommErrFrame_B[2] = BemMsg_B.Bem.Mult;
CommErrFrame_B[3] = CemMsg_B.Cem.Mult; CommErrFrame_B[3] = CemMsg_B.Cem.Mult;
} }
CommErrorCount_B++; CommErrorCount_B++;
if(CommErrorCount_B > 3)
if (CommErrorCount_B > 3)
{ {
CstMsg_B.StopReason.Value.Truble = 1;//故障停止 CstMsg_B.StopReason.Value.Truble = 1; //故障停止
CstMsg_B.StopTruble.Value.Other = 1;//其他故障 通信超时超过三次 CstMsg_B.StopTruble.Value.Other = 1; //其他故障 通信超时超过三次
ChargeStopType_B = eChgStop_ComBreak_CommError; ChargeStopType_B = eChgStop_ComBreak_CommError;
pChargeCtrl->CurProcess = eChgPro_B_CommError; pChargeCtrl->CurProcess = eChgPro_B_CommError;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
...@@ -45,81 +46,87 @@ void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -45,81 +46,87 @@ void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl)
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On); FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off); ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off); //DrainResistSet_B(eSwSta_Off);
//DcOutSet_B(eSwSta_On); //DcOutSet_B(eSwSta_On);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
if(0 != CemMsg_B.Cem.Mult) if (0 != CemMsg_B.Cem.Mult)
CEM_Send_B(&CemMsg_B); CEM_Send_B(&CemMsg_B);
CEM_SendTick = GetSystemTick(); CEM_SendTick = GetSystemTick();
CurrtCheckTick = GetSystemTick(); CurrtCheckTick = GetSystemTick();
ChgReStartTick = 0; ChgReStartTick = 0;
while(1) while (1)
{ {
if((0 != CEM_SendTick) && ((GetSystemTick() - CEM_SendTick) > 250)) if ((0 != CEM_SendTick) && ((GetSystemTick() -CEM_SendTick) > 250))
{ {
if(0 != CemMsg_B.Cem.Mult)//有通信故障 if (0 != CemMsg_B.Cem.Mult) //有通信故障
CEM_Send_B(&CemMsg_B); CEM_Send_B(&CemMsg_B);
CEM_SendTick = GetSystemTick(); CEM_SendTick = GetSystemTick();
} }
ChgPgnRecv_B(&PgnRecv); ChgPgnRecv_B(&PgnRecv);
if(GetDcModuleCurrt_B() < 50)//小于5A if (GetDcModuleCurrt_B() < 50) //小于5A
{ {
CurrtCheckTick = 0; CurrtCheckTick = 0;
if(0 == ChgReStartTick)
if (0 == ChgReStartTick)
{ {
DcOutSet_B(eSwSta_Off);//k1 k2 DcOutSet_B(eSwSta_Off); //k1 k2
ChgReStartTick = GetSystemTick(); ChgReStartTick = GetSystemTick();
} }
} }
else else
{ {
if((0 != CurrtCheckTick) && ((GetSystemTick() - CurrtCheckTick) > 5000)) if ((0 != CurrtCheckTick) && ((GetSystemTick() -CurrtCheckTick) > 5000))
{ {
DcOutSet_B(eSwSta_Off);//k1 k2 DcOutSet_B(eSwSta_Off); //k1 k2
CurrtCheckTick = 0; CurrtCheckTick = 0;
CstMsg_B.StopReason.Value.Truble = 1;//故障停止 CstMsg_B.StopReason.Value.Truble = 1; //故障停止
CstMsg_B.StopTruble.Value.Other = 1;//其他故障 电流故障 CstMsg_B.StopTruble.Value.Other = 1; //其他故障 电流故障
CstMsg_B.StopFault.Value.Currt = 1;//电流不匹配 CstMsg_B.StopFault.Value.Currt = 1; //电流不匹配
ChargeStopType_B = eChgStop_ComBreak_CurtError; ChargeStopType_B = eChgStop_ComBreak_CurtError;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
} }
if((0 != ChgReStartTick) && ((GetSystemTick() - ChgReStartTick) > 3500)) if ((0 != ChgReStartTick) && ((GetSystemTick() -ChgReStartTick) > 3500))
{ {
pChargeCtrl->CurProcess = eChgPro_B_ChgRecognize; pChargeCtrl->CurProcess = eChgPro_B_ChgRecognize;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != BstMsg_B.Valid) if (0 != BstMsg_B.Valid)
{ {
CstMsg_B.StopReason.Value.BmsStop = 1; CstMsg_B.StopReason.Value.BmsStop = 1;
ChargeStopType_B = eChgStop_ComBreak_BmsStop; ChargeStopType_B = eChgStop_ComBreak_BmsStop;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 == TCUCurChgRecd_B.TCUChargeEnable)
{//外部控制结束充电 if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{ //外部控制结束充电
CstMsg_B.StopReason.Value.Manual = 1; CstMsg_B.StopReason.Value.Manual = 1;
ChargeStopType_B = eChgStop_ComBreak_UserCancel; ChargeStopType_B = eChgStop_ComBreak_UserCancel;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop; pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eSwSta_On != CcStatusRead_B()) if (eSwSta_On != CcStatusRead_B())
{ {
if(0 == CcStatusChkTick) if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
} }
else else
CcStatusChkTick = 0; CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B))
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
CcStatusChkTick = 0; CcStatusChkTick = 0;
...@@ -127,57 +134,66 @@ void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -127,57 +134,66 @@ void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl)
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Emergency)
if (0 != PillarError_B.Value.Emergency)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_EmerClose; ChargeStopType_B = eChgStop_ComBreak_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Door)
if (0 != PillarError_B.Value.Door)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_DoorOpen; ChargeStopType_B = eChgStop_ComBreak_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Contactor)
if (0 != PillarError_B.Value.Contactor)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Contactor; ChargeStopType_B = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.UniContactor)
if (0 != PillarError_B.Value.UniContactor)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Contactor; ChargeStopType_B = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.InVolt)
if (0 != PillarError_B.Value.InVolt)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_InVolt; ChargeStopType_B = eChgStop_ComBreak_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.NoDcmod)
if (0 != PillarError_B.Value.NoDcmod)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_NoDcmod; ChargeStopType_B = eChgStop_ComBreak_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(0 != PillarError_B.Value.Meter)
if (0 != PillarError_B.Value.Meter)
{ {
DcOutSet_B(eSwSta_Off); DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Meter; ChargeStopType_B = eChgStop_ComBreak_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak; pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0; pChargeCtrl->Param = 0;
} }
if(eChgPro_B_CommBreak != pChargeCtrl->CurProcess)
if (eChgPro_B_CommBreak != pChargeCtrl->CurProcess)
return; return;
osDelay(25); osDelay(25);
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论