提交 d257dcb3 作者: 高增攀

修改,小桔TCU分体未测试

上级 6dff14a0
......@@ -92,7 +92,7 @@
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES ( 7 )
#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 configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0
......
......@@ -200,7 +200,7 @@ void BMS_24V_Set(EnumSwitchStatus Set)
void ImdWorkSet(EnumSwitchStatus Set)
{
static EnumSwitchStatus laststa = eSwSta_Off;
//static EnumSwitchStatus laststa = eSwSta_Off;
//if(laststa != Set)
{
if(eSwSta_On == Set) // Ե
......@@ -213,7 +213,7 @@ void ImdWorkSet(EnumSwitchStatus Set)
ImdWrite(0x0017, 0x0003);
ImdWrite(0x01FE, 0x0001);
}
laststa = Set;
//laststa = Set;
}
}
......@@ -534,7 +534,7 @@ void BMS_24V_Set_B(EnumSwitchStatus Set)
void ImdWorkSet_B(EnumSwitchStatus Set)
{
static EnumSwitchStatus laststa = eSwSta_Off;
//static EnumSwitchStatus laststa = eSwSta_Off;
//if(laststa != Set)
{
if(eSwSta_On == Set) // Ե
......@@ -547,7 +547,7 @@ void ImdWorkSet_B(EnumSwitchStatus Set)
ImdWrite_B(0x0017, 0x0003);
ImdWrite_B(0x01FE, 0x0001);
}
laststa = Set;
// laststa = Set;
}
}
......
......@@ -569,6 +569,7 @@ u16 Dht12_GetHumi(void)
return Dht12Data.Dht12Humity;
}
extern s16 Adc_Get_B_PTemp(void);
s16 Dht12_GetTemp(void)
{
return Adc_Get_B_PTemp();// Dht12Data.Dht12Temp/100;
......
......@@ -414,7 +414,7 @@ int SendHeartBeat(u8 ChgNum)
Temp = 0x01;
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)
)
{
......@@ -619,9 +619,7 @@ int SendHeartBeat(u8 ChgNum)
Data[Len++] = (u8)Temp;//充电接口状态 BIN码 1
if(((eChgPro_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_WaitVoltChgRun == ChargeCtrl.CurProcess)
//|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
)
&& (BcsMsg.Valid))
{
......@@ -1097,7 +1095,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = (u8)(sTemp>>16);
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)
)
{
......@@ -1147,7 +1145,7 @@ int SendStartTransaction(u8 ChgNum)
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))
Data[Len++] = BcpMsg_B.StartSoc/10;//起始SOC% BIN码 1
else
......@@ -1186,9 +1184,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = (u8)(sTemp>>24);
if(((eChgPro_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_WaitVoltChgRun == ChargeCtrl.CurProcess)
//|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
)
&& (BrmMsg.Valid))
{
......@@ -1239,9 +1235,7 @@ int SendStartTransaction(u8 ChgNum)
Data[Len++] = 0xFF;
}
if(((eChgPro_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_ChgRun == ChargeCtrl.CurProcess)
|| (eChgPro_AB_WaitVoltChgRun == ChargeCtrl.CurProcess)
// || (eChgPro_WaitVoltChgRun == ChargeCtrl.CurProcess)
)
&& (BcpMsg.Valid))
Data[Len++] = BcpMsg.StartSoc/10;//起始SOC% BIN码 1
......
......@@ -284,7 +284,9 @@ typedef enum
eChgStop_PillarReady_UniContactor,
eChgStop_BatVoltOverBatMax,
eChgStop_Run_NoCurr,
eChgStop_Volt_More_10V,
eChgStop_Bcl_TimeOut,
eChgStop_Bcs_TimeOut,
}EnumChgStopType;
typedef struct
......@@ -425,7 +427,8 @@ extern u8 HexToBcd(u8 Hex);
extern int CopyCode(u32 Des, u32 Scr, u32 Len);
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
......@@ -92,13 +92,13 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
CurrtOutChkTick = 0;
UniChgEnable = FALSE;
UniChgTick = 0;
u32 NeedPower = 0;
u32 NowPower = 0;
u32 NoCurrentCount = 0;
u32 NoCurrentTick = GetSystemTick();
u32 BcsMsg_Tick = 0;
ChargeStopType = eChgStop_None;
while(1)
{
if((GetSystemTick() - CCS_SendTick) > 50)
......@@ -147,20 +147,20 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if(DcModuleGroup[3].status == Valid)
{
DcModuleGroup[3].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleManage_B.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1;
}
else if(DcModuleGroup[1].status == Valid)
{
DcModuleGroup[1].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1;
}
else if(DcModuleGroup[0].status == Valid
&& ChargeCtrl.CurProcess == eChgPro_ChgIdle)
{
DcModuleGroup[0].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum;
DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum;
DcModuleGroup[0].flag = 1;
#if (DcModule_ZhongXing == 0)
if(DcModuleGroup[1].status == Hold_B)
......@@ -362,6 +362,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if((GetSystemTick() - BclMsg_B.RecvTick) > MsgTimeout_B_1S)
{
CemMsg_B.Cem.Value.Bcl = 1;
ChargeStopType = eChgStop_Bcl_TimeOut;
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
ChargeTimerSet_B(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_B_CommBreak;
......@@ -369,39 +370,50 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
}
else
CemMsg_B.Cem.Value.Bcl = 0;
if((GetSystemTick() - BcsMsg_B.RecvTick) >(1000+500))
{
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_B(&FrameSend);
//BcsMsg_B.RecvTick= GetSystemTick();
}
else if((GetSystemTick() - BcsMsg_B.RecvTick) > MsgTimeout_B_5S)
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;
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_B(&FrameSend);
//BcsMsg_B.RecvTick= GetSystemTick();
}
}
else
{
CemMsg_B.Cem.Value.Bcs = 0;
//BcsMsg_Tick = 0;
}
if(0 != BemMsg_B.Valid)
{
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
......
......@@ -97,13 +97,14 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
CurrtOutChkTick = 0;
UniChgEnable = FALSE;
UniChgTick = 0;
u32 NeedPower = 0;
u32 NowPower = 0;
u32 NowMaxCurrt = 0;
u32 NoCurrentCount = 0;
u32 NoCurrentTick = GetSystemTick();
u32 BcsMsg_Tick = 0;
ChargeStopType = eChgStop_None;
while (1)
{
if ((GetSystemTick() -CCS_SendTick) > 50)
......@@ -153,20 +154,20 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
if (DcModuleGroup[1].status == Valid)
{
DcModuleGroup[1].status = Hold_A;
//DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1;
}
else if (DcModuleGroup[3].status == Valid)
{
DcModuleGroup[3].status = Hold_A;
//DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1;
}
else if (DcModuleGroup[2].status == Valid
&& ChargeCtrl_B.CurProcess == eChgPro_ChgIdle)
&& ChargeCtrl_B.CurProcess == eChgPro_B_ChgIdle)
{
DcModuleGroup[2].status = Hold_A;
//DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
DcModuleGroup[2].flag = 1;
#if (DcModule_ZhongXing == 0)
if (DcModuleGroup[3].status == Hold_A)
......@@ -396,7 +397,7 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
{
CemMsg.Cem.Value.Bcl = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeStopType = eChgStop_Bcl_TimeOut;
ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
......@@ -404,37 +405,43 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
else
CemMsg.Cem.Value.Bcl = 0;
if ((GetSystemTick() -BcsMsg.RecvTick) > (1000 + 500))
{
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);
//BcsMsg.RecvTick = GetSystemTick();
}
else if ((GetSystemTick() -BcsMsg.RecvTick) > MsgTimeout_5S)
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;
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);
//BcsMsg.RecvTick = GetSystemTick();
}
}
else
CemMsg.Cem.Value.Bcs = 0;
......
......@@ -256,9 +256,10 @@ void DcModuleManageProcess_SmartAllocation(void)
DcModuleManage.ValidNum = Count_A;
DcModuleManage_All.ValidNum = Count;
DcModuleManage_B.ValidNum = Count_B;
if (0 == DcModuleManage_All.OnlineFlag)
;//DcModuleCanInit();
extern u8 Acc_On_3s_flag;
if (0 == DcModuleManage_All.OnlineFlag
&& (Acc_On_3s_flag == 1))
DcModuleCanInit();
}
......@@ -589,7 +590,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
StructDcModuleSend DataSend;
u32 Temp = 0;
u8 addr = 0;
//u8 addr = 0;
u8 sendCmd = 0;
if(group_index > 3)
......@@ -615,7 +616,7 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
{
sendCmd = 0x01;
}
else if(ChargeCtrl_B.CurProcess == eChgPro_ImdCheck \
else if(ChargeCtrl_B.CurProcess == eChgPro_B_ImdCheck \
&& DcModuleGroup[group_index].status == Hold_B \
&& group_index == 2)
{
......@@ -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++)
{
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].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current;
......
......@@ -79,19 +79,6 @@ typedef struct {
} StructStopCompMeg;
typedef enum {
stopIdle = 0,
commStop = 1,
TcuFultStop = 2,
ChgFultStop = 3,
} stopReason;
typedef struct {
//u8 GunNum; //抢号 单枪 0 一机多冲 1-255
stopReason StopReason; //
} StructStopMeg;
typedef struct {
u8 ChargingServiceFlag; //01充电服务停止02充电服务启用
......@@ -452,8 +439,8 @@ extern StructStartMeg StartMeg_B;
extern StructStartCompMeg AckStartCompMeg_A;
extern StructStartCompMeg AckStartCompMeg_B;
extern StructStopMeg StopMeg_A;
extern StructStopMeg StopMeg_B;
//extern StructStopMeg StopMeg_A;
//extern StructStopMeg StopMeg_B;
extern StructStopCompMeg AckStopCompMeg_A;
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);
}
}
......@@ -12,7 +12,7 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CcStatusChkTick = 0;
u32 CcStatusChkTick_AB = 0;
ChargeError.Value.DrainResist = 0;
ChargeError.Value.IsolateWarn = 0;//없鍍쒸멩
......@@ -45,7 +45,8 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
memset(&BmvMsg, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg, 0xFF, sizeof(BmtMsg));
BmvMsg.Valid = 0;
BmtMsg.Valid = 0;
u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0;
while(1)
......@@ -151,49 +152,6 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
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)
return;
......
......@@ -8,155 +8,168 @@
#include "Drv_ImdJyc.h"
#include "Memory.h"
void ChgProChgRecognize(StructChargeCtrl *pChargeCtrl)
void ChgProChgRecognize(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(eSwSta_On);
LockSet(eSwSta_On);
FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.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_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BrmMsg.RecvTick) > (2000))
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(eSwSta_On);
LockSet(eSwSta_On);
FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
CrmRecog = 0x00;
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg.RecvTick = GetSystemTick();
CemMsg.Cem.Value.Brm = 0;
while (1)
{
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();
if ((GetSystemTick() -CRM_SendTick) > 250)
{
CRM_Send(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if (0 != BrmMsg.Valid)
{ //接收到Brm
pChargeCtrl->CurProcess = eChgPro_ChgConfigure;
pChargeCtrl->Param = 0;
}
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;
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();
}
if (0 == TCUCurChgRecd.TCUChargeEnable)
{ //外部控制结束充电
ChargeStopType = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
}
if (eSwSta_On != CcStatusRead())
{
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_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Emergency)
{
ChargeStopType = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Door)
{
ChargeStopType = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Contactor)
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.UniContactor)
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.InVolt)
{
ChargeStopType = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.NoDcmod)
{
ChargeStopType = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Meter)
{
ChargeStopType = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (eChgPro_ChgRecognize != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
else if((GetSystemTick() - BrmMsg.RecvTick) > (MsgTimeout_5S))
{
CemMsg.Cem.Value.Brm = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == TCUCurChgRecd.TCUChargeEnable)
{//外部控制结束充电
ChargeStopType = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead())
{
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_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Emergency)
{
ChargeStopType = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Door)
{
ChargeStopType = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Contactor)
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.UniContactor)
{
ChargeStopType = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.InVolt)
{
ChargeStopType = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.NoDcmod)
{
ChargeStopType = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Meter)
{
ChargeStopType = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_ChgRecognize != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
......@@ -57,17 +57,9 @@ void ChgProChgRecognizeEx(StructChargeCtrl *pChargeCtrl)
if(0 != BrmMsg.Valid)
{//接收到Brm
//if(1 == TCUCurChgRecd.TCUChargeEnable)
{
pChargeCtrl->CurProcess = eChgPro_ChgConfigure;
pChargeCtrl->Param = 0;
}
//else if(2 == TCUCurChgRecd.TCUChargeEnable)
{
// if(TCUCurChgRecd.VehicleVerification == 0)
// TCUCurChgRecd.VehicleVerification = 1;
}
pChargeCtrl->CurProcess = eChgPro_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BrmMsg.RecvTick) < (MsgTimeout_5S/2))
{
......
......@@ -95,9 +95,9 @@ void ChgProShakeHand(StructChargeCtrl *pChargeCtrl)
{
if( GetDCVoltBeforInsulation() >100)
{
ChargeStopType = eChgStop_Imd_IsolateError;
ChargeStopType = eChgStop_Volt_More_10V;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
TCUCurChgRecd.TCUChgStopType = 0x1d;
//TCUCurChgRecd.TCUChgStopType = 0x1d;
pChargeCtrl->Param = 0;
}
else
......
......@@ -8,152 +8,195 @@
#include "Memory.h"
extern StructDcModuleManage DcModuleManage_All;
void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl)
void ChgProWaitBmsReady(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(eSwSta_On);
LockSet(eSwSta_On);
FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
CTS_Send();
CTS_SendTick = GetSystemTick();
//if(0 != UserParam.ChgFun.Value.SigUniChg)
// CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
//else
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick();
BroMsg.RecvTick = GetSystemTick();
BRO_AA_RecvTick = GetSystemTick();
CemMsg.Cem.Mult =0;
while(1)
{
if((GetSystemTick() - CML_SendTick) > 250)
{
//if(0 != UserParam.ChgFun.Value.SigUniChg)
// CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
//else
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick();
}
if((GetSystemTick() - CTS_SendTick) > 480)
{
CTS_Send();
CTS_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if((GetSystemTick() - BroMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_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_CommBreak;
pChargeCtrl->Param = 0;
}
if((0 != BroMsg.Valid) && (0xAA == BroMsg.Status))
{//接收到Brm
BRO_AA_RecvTick = 0;
pChargeCtrl->CurProcess = eChgPro_WaitPillarReady;
pChargeCtrl->Param = 0;
}
if(0 != BemMsg.Valid)
{
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
if(0 == TCUCurChgRecd.TCUChargeEnable)
{//外部控制结束充电
ChargeStopType = eChgStop_BmsReady_UserCancel;
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead())
{
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_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Emergency)
{
ChargeStopType = eChgStop_BmsReady_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Door)
{
ChargeStopType = eChgStop_BmsReady_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Contactor)
{
ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.UniContactor)
{
ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.InVolt)
{
ChargeStopType = eChgStop_BmsReady_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.NoDcmod)
{
ChargeStopType = eChgStop_BmsReady_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Meter)
{
ChargeStopType = eChgStop_BmsReady_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_WaitBmsReady != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
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(eSwSta_On);
LockSet(eSwSta_On);
FanSet(eSwSta_On);
ImdWorkSet(eSwSta_Off);
//DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
CTS_Send();
CTS_SendTick = GetSystemTick();
//if(0 != UserParam.ChgFun.Value.SigUniChg)
// CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
//else
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt,
4000 - (DcModuleAbility.MaxCurrt * (DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)),
4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick();
BroMsg.RecvTick = GetSystemTick();
BRO_AA_RecvTick = GetSystemTick();
CemMsg.Cem.Mult = 0;
while (1)
{
if ((GetSystemTick() -CML_SendTick) > 250)
{
//if(0 != UserParam.ChgFun.Value.SigUniChg)
// CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt, 4000 - (DcModuleAbility.MaxCurrt*(DcModuleManage.ValidNum + DcModuleManage_B.ValidNum)), 4000 - DcModuleAbility.MinCurrt);
//else
CML_Send(DcModuleAbility.MaxVolt, DcModuleAbility.MinVolt,
4000 - (DcModuleAbility.MaxCurrt * (DcModuleManage.ValidNum + DcModuleManage_All.ValidNum)),
4000 - DcModuleAbility.MinCurrt);
CML_SendTick = GetSystemTick();
}
if ((GetSystemTick() -CTS_SendTick) > 480)
{
CTS_Send();
CTS_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if ((GetSystemTick() -BroMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
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
CemMsg.Cem.Value.Bro = 0;
if ((0 != BRO_AA_RecvTick) && ((GetSystemTick() -BRO_AA_RecvTick) > MsgTimeout_60S))
{
CemMsg.Cem.Value.Bro = 1;
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
if ((0 != BroMsg.Valid) && (0xAA == BroMsg.Status))
{ //接收到Brm
BRO_AA_RecvTick = 0;
pChargeCtrl->CurProcess = eChgPro_WaitPillarReady;
pChargeCtrl->Param = 0;
}
if (0 != BemMsg.Valid)
{
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
}
if (0 == TCUCurChgRecd.TCUChargeEnable)
{ //外部控制结束充电
ChargeStopType = eChgStop_BmsReady_UserCancel;
pChargeCtrl->CurProcess = eChgPro_ChgIdle;
pChargeCtrl->Param = 0;
}
if (eSwSta_On != CcStatusRead())
{
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_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Emergency)
{
ChargeStopType = eChgStop_BmsReady_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Door)
{
ChargeStopType = eChgStop_BmsReady_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Contactor)
{
ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.UniContactor)
{
ChargeStopType = eChgStop_BmsReady_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.InVolt)
{
ChargeStopType = eChgStop_BmsReady_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.NoDcmod)
{
ChargeStopType = eChgStop_BmsReady_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError.Value.Meter)
{
ChargeStopType = eChgStop_BmsReady_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
}
if (eChgPro_WaitBmsReady != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
......@@ -8,156 +8,166 @@
#include "Memory.h"
#include "Drv_SmartAllocation.h"
void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProChgIdle_B(StructChargeCtrl_B * pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CcStatusChkTick = 0;
ChargeError_B.Value.DrainResist = 0;
ChargeError_B.Value.IsolateWarn = 0;//없鍍쒸멩
ChargeError_B.Value.IsolateError = 0;
ChargeError_B.Value.VoltOutError = 0;
ChargeError_B.Value.CurrtOutError = 0;
ChargeTimerSet_B(eSwSta_Off);
CleanChgTimeCnt_B();
BmsPowerSet_B(eSwSta_Off);
LockSet_B(eSwSta_Off);
FanSet_B(eSwSta_Off);
//붚없鍍친욥off--겜on
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
BmsCanInit_B();
osDelay(20);
u32 ACContactorSetCount = 0;
memset(&BemMsg_B, 0, sizeof(BemMsg));
memset(&CemMsg_B, 0, sizeof(CemMsg));
memset(&BstMsg_B, 0, sizeof(BstMsg));
memset(&CstMsg_B, 0, sizeof(CstMsg));
memset(&BsdMsg_B, 0, sizeof(BsdMsg));
memset(&CsdMsg_B, 0, sizeof(CsdMsg));
memset(&BmvMsg_B, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg_B, 0xFF, sizeof(BmtMsg));
u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0;
while(1)
{
memset(&BemMsg_B, 0, sizeof(BemMsg));
if(0 == UserParam.ChgFun.Value.Num_B)
{
osDelay(1000);
continue;
}
ChgPgnRecv_B(&PgnRecv);
if(eSwSta_On == CcStatusRead_B())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
ACContactorSetCount = 0;
}
else
{
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_None;
memset(&BstMsg_B, 0, sizeof(BstMsg));
memset(&BsmMsg_B, 0, sizeof(BsmMsg));
if(eSwSta_Off == CcStatusRead())
{
ACContactorSetCount++;
if(ACContactorSetCount > 600)
StructPgnRecv PgnRecv;
u32 CcStatusChkTick = 0;
ChargeError_B.Value.DrainResist = 0;
ChargeError_B.Value.IsolateWarn = 0; //없鍍쒸멩
ChargeError_B.Value.IsolateError = 0;
ChargeError_B.Value.VoltOutError = 0;
ChargeError_B.Value.CurrtOutError = 0;
ChargeTimerSet_B(eSwSta_Off);
CleanChgTimeCnt_B();
BmsPowerSet_B(eSwSta_Off);
LockSet_B(eSwSta_Off);
FanSet_B(eSwSta_Off);
//붚없鍍친욥off--겜on
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
BmsCanInit_B();
osDelay(20);
u32 ACContactorSetCount = 0;
memset(&BemMsg_B, 0, sizeof(BemMsg));
memset(&CemMsg_B, 0, sizeof(CemMsg));
memset(&BstMsg_B, 0, sizeof(BstMsg));
memset(&CstMsg_B, 0, sizeof(CstMsg));
memset(&BsdMsg_B, 0, sizeof(BsdMsg));
memset(&CsdMsg_B, 0, sizeof(CsdMsg));
memset(&BmvMsg_B, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg_B, 0xFF, sizeof(BmtMsg));
BmvMsg_B.Valid = 0;
BmtMsg_B.Valid = 0;
u32 OneSecondTick = GetSystemTick();
u32 LockCount = 0;
while (1)
{
memset(&BemMsg_B, 0, sizeof(BemMsg));
if (0 == UserParam.ChgFun.Value.Num_B)
{
ACContactorSet(eSwSta_Off);
ACContactorSetCount = 601;
}
}
else
{
ACContactorSetCount = 0;
}
}
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > 1500))
{
CcStatusChkTick = 0;
if(0 != TCUCurChgRecd_B.TCUChargeEnable)
{
if(DcModuleGroup[2].status == Hold_A)
{
DcModuleGroup[2].status = Valid;
DcModuleGroup[2].flag = 0;
SendDataToDcModule_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt);
osDelay(1000);
continue;
}
pChargeCtrl->CurProcess = eChgPro_B_ShakeHand;
pChargeCtrl->Param = 0;
}
ACContactorSet(eSwSta_On);
}
ChgPgnRecv_B(&PgnRecv);
if((GetSystemTick() - OneSecondTick) >= 1000)
{
OneSecondTick = GetSystemTick();
if(LockGet_B()==eSwSta_On)
if (eSwSta_On == CcStatusRead_B())
{
LockCount++;
if(LockCount>=10)
if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
ACContactorSetCount = 0;
}
else
{
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_None;
memset(&BstMsg_B, 0, sizeof(BstMsg));
memset(&BsmMsg_B, 0, sizeof(BsmMsg));
if (eSwSta_Off == CcStatusRead())
{
LockCount = 10;
ACContactorSetCount++;
if (ACContactorSetCount > 600)
{
ACContactorSet(eSwSta_Off);
ACContactorSetCount = 601;
}
}
else if(LockCount >= 6)
else
{
LockCount = 10;
LockSet_B(eSwSta_Off);
ACContactorSetCount = 0;
}
else if(LockCount >= 5)
}
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > 1500))
{
CcStatusChkTick = 0;
if (0 != TCUCurChgRecd_B.TCUChargeEnable)
{
LockSet_B(eSwSta_On);
if (DcModuleGroup[2].status == Hold_A)
{
DcModuleGroup[2].status = Valid;
DcModuleGroup[2].flag = 0;
SendDataToDcModule_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt);
}
pChargeCtrl->CurProcess = eChgPro_B_ShakeHand;
pChargeCtrl->Param = 0;
}
else if(LockCount >= 3)
ACContactorSet(eSwSta_On);
}
if ((GetSystemTick() -OneSecondTick) >= 1000)
{
OneSecondTick = GetSystemTick();
if (LockGet_B() == eSwSta_On)
{
//LockCount = 10;
LockSet_B(eSwSta_Off);
LockCount++;
if (LockCount >= 10)
{
LockCount = 10;
}
else if (LockCount >= 6)
{
LockCount = 10;
LockSet_B(eSwSta_Off);
}
else if (LockCount >= 5)
{
LockSet_B(eSwSta_On);
}
else if (LockCount >= 3)
{
//LockCount = 10;
LockSet_B(eSwSta_Off);
}
else if (LockCount >= 2)
{
LockSet_B(eSwSta_On);
}
}
else if(LockCount >= 2)
else
{
LockSet_B(eSwSta_On);
LockCount = 0;
}
}
else
if ((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))
{
LockCount = 0;
pChargeCtrl->CurProcess = eChgPro_B_ChgIdle;
pChargeCtrl->Param = 0;
}
if (eChgPro_B_ChgIdle != pChargeCtrl->CurProcess)
return;
osDelay(100);
}
if(
(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_B_ChgIdle;
pChargeCtrl->Param = 0;
}
if(eChgPro_B_ChgIdle != pChargeCtrl->CurProcess)
return;
osDelay(100);
}
}
......@@ -8,154 +8,167 @@
#include "Drv_ImdJyc.h"
#include "Memory.h"
void ChgProChgRecognize_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProChgRecognize_B(StructChargeCtrl_B * pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
memset(&BemMsg_B, 0, sizeof(BemMsg_B));
memset(&CemMsg_B, 0, sizeof(CemMsg_B));
memset(&BstMsg_B, 0, sizeof(BstMsg_B));
memset(&CstMsg_B, 0, sizeof(CstMsg_B));
BrmMsg_B.Valid = 0;
BemMsg_B.Valid = 0;
BmsCanInit_B();
osDelay(20);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
CrmRecog = 0x00;
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg_B.RecvTick = GetSystemTick();
CemMsg_B.Cem.Value.Brm = 0;
while(1)
{
if((GetSystemTick() - CRM_SendTick) > 250)
{
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv_B(&PgnRecv);
if(0 != BrmMsg_B.Valid)
{//接收到Brm
pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BrmMsg_B.RecvTick) > (2000))
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
memset(&BemMsg_B, 0, sizeof(BemMsg_B));
memset(&CemMsg_B, 0, sizeof(CemMsg_B));
memset(&BstMsg_B, 0, sizeof(BstMsg_B));
memset(&CstMsg_B, 0, sizeof(CstMsg_B));
BrmMsg_B.Valid = 0;
BemMsg_B.Valid = 0;
BmsCanInit_B();
osDelay(20);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
CrmRecog = 0x00;
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg_B.RecvTick = GetSystemTick();
CemMsg_B.Cem.Value.Brm = 0;
while (1)
{
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_B(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick();
if ((GetSystemTick() -CRM_SendTick) > 250)
{
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv_B(&PgnRecv);
if (0 != BrmMsg_B.Valid)
{ //接收到Brm
pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure;
pChargeCtrl->Param = 0;
}
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;
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_B(&FrameSend);
//BrmMsg.RecvTick = GetSystemTick();
}
if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{ //外部控制结束充电
ChargeStopType_B = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if (eSwSta_On != CcStatusRead_B())
{
if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B * 2))
{
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Emergency)
{
ChargeStopType_B = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Door)
{
ChargeStopType_B = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Contactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.UniContactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.InVolt)
{
ChargeStopType_B = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.NoDcmod)
{
ChargeStopType_B = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Meter)
{
ChargeStopType_B = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (eChgPro_B_ChgRecognize != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
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)
{//外部控制结束充电
ChargeStopType_B = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_B())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B * 2))
{
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Emergency)
{
ChargeStopType_B = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Door)
{
ChargeStopType_B = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Contactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.UniContactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.InVolt)
{
ChargeStopType_B = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.NoDcmod)
{
ChargeStopType_B = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Meter)
{
ChargeStopType_B = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_B_ChgRecognize != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
......@@ -8,141 +8,151 @@
#include "Drv_ImdJyc.h"
#include "Memory.h"
void ChgProChgRecognizeEx_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProChgRecognizeEx_B(StructChargeCtrl_B * pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
memset(&BemMsg_B, 0, sizeof(BemMsg_B));
memset(&CemMsg_B, 0, sizeof(CemMsg_B));
memset(&BstMsg_B, 0, sizeof(BstMsg_B));
memset(&CstMsg_B, 0, sizeof(CstMsg_B));
BrmMsg_B.Valid = 0;
BemMsg_B.Valid = 0;
BmsCanInit_B();
osDelay(20);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
CrmRecog = 0x00;
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg_B.RecvTick = GetSystemTick();
CemMsg_B.Cem.Value.Brm = 0;
while(1)
{
if((0 != CRM_SendTick) && ((GetSystemTick() - CRM_SendTick) > 250))
{
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv_B(&PgnRecv);
if(0 != BrmMsg_B.Valid)
{//接收到Brm
pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if((GetSystemTick() - BrmMsg_B.RecvTick) < (MsgTimeout_B_5S/2))
{
}
else if((GetSystemTick() - BrmMsg_B.RecvTick) < (MsgTimeout_B_10S))
{
//BmsPowerSet_B(eSwSta_Off);
CRM_SendTick = 0;
}
else
{
pChargeCtrl->CurProcess = eChgPro_B_ChgRecognize;
pChargeCtrl->Param = 0;
}
if(0 == TCUCurChgRecd_B.TCUChargeEnable)
{//外部控制结束充电
ChargeStopType_B = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_B())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B * 2))
{
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Emergency)
{
ChargeStopType_B = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Door)
{
ChargeStopType_B = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Contactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.UniContactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.InVolt)
{
ChargeStopType_B = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.NoDcmod)
{
ChargeStopType_B = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Meter)
{
ChargeStopType_B = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_B_ChgRecognizeEx != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
StructPgnRecv PgnRecv;
u32 CRM_SendTick = 0;
u8 CrmRecog;
u32 CcStatusChkTick = 0;
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
memset(&BemMsg_B, 0, sizeof(BemMsg_B));
memset(&CemMsg_B, 0, sizeof(CemMsg_B));
memset(&BstMsg_B, 0, sizeof(BstMsg_B));
memset(&CstMsg_B, 0, sizeof(CstMsg_B));
BrmMsg_B.Valid = 0;
BemMsg_B.Valid = 0;
BmsCanInit_B();
osDelay(20);
// if(ImdValue_B.Vaild)
// ImdWrite_B(0x0017, 0x0003);
ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
DcOutSet_B(eSwSta_Off);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
CrmRecog = 0x00;
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
BrmMsg_B.RecvTick = GetSystemTick();
CemMsg_B.Cem.Value.Brm = 0;
while (1)
{
if ((0 != CRM_SendTick) && ((GetSystemTick() -CRM_SendTick) > 250))
{
CRM_Send_B(CrmRecog);
CRM_SendTick = GetSystemTick();
}
ChgPgnRecv_B(&PgnRecv);
if (0 != BrmMsg_B.Valid)
{ //接收到Brm
pChargeCtrl->CurProcess = eChgPro_B_ChgConfigure;
pChargeCtrl->Param = 0;
}
else if ((GetSystemTick() -BrmMsg_B.RecvTick) < (MsgTimeout_B_5S / 2))
{
}
else if ((GetSystemTick() -BrmMsg_B.RecvTick) < (MsgTimeout_B_10S))
{
//BmsPowerSet_B(eSwSta_Off);
CRM_SendTick = 0;
}
else
{
pChargeCtrl->CurProcess = eChgPro_B_ChgRecognize;
pChargeCtrl->Param = 0;
}
if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{ //外部控制结束充电
ChargeStopType_B = eChgStop_Reco_UserCancle;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if (eSwSta_On != CcStatusRead_B())
{
if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B * 2))
{
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_Reco_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Emergency)
{
ChargeStopType_B = eChgStop_Reco_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Door)
{
ChargeStopType_B = eChgStop_Reco_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Contactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.UniContactor)
{
ChargeStopType_B = eChgStop_Reco_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.InVolt)
{
ChargeStopType_B = eChgStop_Reco_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.NoDcmod)
{
ChargeStopType_B = eChgStop_Reco_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Meter)
{
ChargeStopType_B = eChgStop_Reco_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (eChgPro_B_ChgRecognizeEx != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
......@@ -6,180 +6,196 @@
#include "Drv_BmsComm.h"
void ChgProCommBeak_B(StructChargeCtrl_B *pChargeCtrl)
void ChgProCommBeak_B(StructChargeCtrl_B * pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CEM_SendTick = 0;
u32 CurrtCheckTick = 0;
u32 ChgReStartTick = 0;
u32 CcStatusChkTick = 0;
if(0 == CommErrorCount_B)
{
CommErrFrame_B[0] = BemMsg_B.Bem.Mult;
CommErrFrame_B[1] = CemMsg_B.Cem.Mult;
}
else if(1 == CommErrorCount_B)
{
CommErrFrame_B[2] = BemMsg_B.Bem.Mult;
CommErrFrame_B[3] = CemMsg_B.Cem.Mult;
}
CommErrorCount_B++;
if(CommErrorCount_B > 3)
{
CstMsg_B.StopReason.Value.Truble = 1;//故障停止
CstMsg_B.StopTruble.Value.Other = 1;//其他故障 通信超时超过三次
ChargeStopType_B = eChgStop_ComBreak_CommError;
pChargeCtrl->CurProcess = eChgPro_B_CommError;
pChargeCtrl->Param = 0;
return;
}
BstMsg_B.Valid = 0;
BmsCanInit_B();
osDelay(20);
ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
//DcOutSet_B(eSwSta_On);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum);
if(0 != CemMsg_B.Cem.Mult)
CEM_Send_B(&CemMsg_B);
CEM_SendTick = GetSystemTick();
CurrtCheckTick = GetSystemTick();
ChgReStartTick = 0;
while(1)
{
if((0 != CEM_SendTick) && ((GetSystemTick() - CEM_SendTick) > 250))
{
if(0 != CemMsg_B.Cem.Mult)//有通信故障
CEM_Send_B(&CemMsg_B);
CEM_SendTick = GetSystemTick();
}
ChgPgnRecv_B(&PgnRecv);
if(GetDcModuleCurrt_B() < 50)//小于5A
{
CurrtCheckTick = 0;
if(0 == ChgReStartTick)
{
DcOutSet_B(eSwSta_Off);//k1 k2
ChgReStartTick = GetSystemTick();
}
}
else
{
if((0 != CurrtCheckTick) && ((GetSystemTick() - CurrtCheckTick) > 5000))
{
DcOutSet_B(eSwSta_Off);//k1 k2
CurrtCheckTick = 0;
CstMsg_B.StopReason.Value.Truble = 1;//故障停止
CstMsg_B.StopTruble.Value.Other = 1;//其他故障 电流故障
CstMsg_B.StopFault.Value.Currt = 1;//电流不匹配
ChargeStopType_B = eChgStop_ComBreak_CurtError;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
}
if((0 != ChgReStartTick) && ((GetSystemTick() - ChgReStartTick) > 3500))
{
pChargeCtrl->CurProcess = eChgPro_B_ChgRecognize;
pChargeCtrl->Param = 0;
}
if(0 != BstMsg_B.Valid)
{
CstMsg_B.StopReason.Value.BmsStop = 1;
ChargeStopType_B = eChgStop_ComBreak_BmsStop;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if(0 == TCUCurChgRecd_B.TCUChargeEnable)
{//外部控制结束充电
CstMsg_B.StopReason.Value.Manual = 1;
ChargeStopType_B = eChgStop_ComBreak_UserCancel;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead_B())
{
if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick_B))
{
DcOutSet_B(eSwSta_Off);
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_ComBreak_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Emergency)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Door)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Contactor)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.UniContactor)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.InVolt)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.NoDcmod)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(0 != PillarError_B.Value.Meter)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if(eChgPro_B_CommBreak != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
StructPgnRecv PgnRecv;
u32 CEM_SendTick = 0;
u32 CurrtCheckTick = 0;
u32 ChgReStartTick = 0;
u32 CcStatusChkTick = 0;
if (0 == CommErrorCount_B)
{
CommErrFrame_B[0] = BemMsg_B.Bem.Mult;
CommErrFrame_B[1] = CemMsg_B.Cem.Mult;
}
else if (1 == CommErrorCount_B)
{
CommErrFrame_B[2] = BemMsg_B.Bem.Mult;
CommErrFrame_B[3] = CemMsg_B.Cem.Mult;
}
CommErrorCount_B++;
if (CommErrorCount_B > 3)
{
CstMsg_B.StopReason.Value.Truble = 1; //故障停止
CstMsg_B.StopTruble.Value.Other = 1; //其他故障 通信超时超过三次
ChargeStopType_B = eChgStop_ComBreak_CommError;
pChargeCtrl->CurProcess = eChgPro_B_CommError;
pChargeCtrl->Param = 0;
return;
}
BstMsg_B.Valid = 0;
BmsCanInit_B();
osDelay(20);
ChargeTimerSet_B(eSwSta_Off);
BmsPowerSet_B(eSwSta_On);
LockSet_B(eSwSta_On);
FanSet_B(eSwSta_On);
ImdWorkSet_B(eSwSta_Off);
//DrainResistSet_B(eSwSta_Off);
//DcOutSet_B(eSwSta_On);
DcModuleSet_B(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage_B.ValidNum);
if (0 != CemMsg_B.Cem.Mult)
CEM_Send_B(&CemMsg_B);
CEM_SendTick = GetSystemTick();
CurrtCheckTick = GetSystemTick();
ChgReStartTick = 0;
while (1)
{
if ((0 != CEM_SendTick) && ((GetSystemTick() -CEM_SendTick) > 250))
{
if (0 != CemMsg_B.Cem.Mult) //有通信故障
CEM_Send_B(&CemMsg_B);
CEM_SendTick = GetSystemTick();
}
ChgPgnRecv_B(&PgnRecv);
if (GetDcModuleCurrt_B() < 50) //小于5A
{
CurrtCheckTick = 0;
if (0 == ChgReStartTick)
{
DcOutSet_B(eSwSta_Off); //k1 k2
ChgReStartTick = GetSystemTick();
}
}
else
{
if ((0 != CurrtCheckTick) && ((GetSystemTick() -CurrtCheckTick) > 5000))
{
DcOutSet_B(eSwSta_Off); //k1 k2
CurrtCheckTick = 0;
CstMsg_B.StopReason.Value.Truble = 1; //故障停止
CstMsg_B.StopTruble.Value.Other = 1; //其他故障 电流故障
CstMsg_B.StopFault.Value.Currt = 1; //电流不匹配
ChargeStopType_B = eChgStop_ComBreak_CurtError;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
}
if ((0 != ChgReStartTick) && ((GetSystemTick() -ChgReStartTick) > 3500))
{
pChargeCtrl->CurProcess = eChgPro_B_ChgRecognize;
pChargeCtrl->Param = 0;
}
if (0 != BstMsg_B.Valid)
{
CstMsg_B.StopReason.Value.BmsStop = 1;
ChargeStopType_B = eChgStop_ComBreak_BmsStop;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if (0 == TCUCurChgRecd_B.TCUChargeEnable)
{ //外部控制结束充电
CstMsg_B.StopReason.Value.Manual = 1;
ChargeStopType_B = eChgStop_ComBreak_UserCancel;
pChargeCtrl->CurProcess = eChgPro_B_ChgStop;
pChargeCtrl->Param = 0;
}
if (eSwSta_On != CcStatusRead_B())
{
if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
CcStatusChkTick = 0;
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick_B))
{
DcOutSet_B(eSwSta_Off);
CcStatusChkTick = 0;
ChargeStopType_B = eChgStop_ComBreak_CcOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Emergency)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_EmerClose;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Door)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Contactor)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.UniContactor)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Contactor;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.InVolt)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_InVolt;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.NoDcmod)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (0 != PillarError_B.Value.Meter)
{
DcOutSet_B(eSwSta_Off);
ChargeStopType_B = eChgStop_ComBreak_Meter;
pChargeCtrl->CurProcess = eChgPro_B_ChgBreak;
pChargeCtrl->Param = 0;
}
if (eChgPro_B_CommBreak != pChargeCtrl->CurProcess)
return;
osDelay(25);
}
}
#include "Thd_Lcd.h"
#define ScrnBmsInfor_AB ((u16)16)
#define BtnBmsInfor_AB_Cancel ((u16)0x1601)
#define BtnBmsInfor_AB_Next ((u16)0x000B)
#define BtnBmsInfor_AB_Last ((u16)0x000A)
#define DataBmsInfor_AB_MaxtVolt ((u16)0x0025)
#define DataBmsInfor_AB_MaxCurrt ((u16)0x0026)
#define DataBmsInfor_AB_NeedVolt ((u16)0x0027)
#define DataBmsInfor_AB_CurSoc ((u16)0x0028)
#define DataBmsInfor_AB_MaxTemp ((u16)0x0029)
#define DataBmsInfor_AB_BatEnergy ((u16)0x002A)
#define DataBmsInfor_AB_NeedCurrt ((u16)0x002B)
#define DataBmsInfor_AB_BatTemp ((u16)0x002C)
#define DataBmsInfor_AB_PerBatVoltHi ((u16)0x0034)
#define DataBmsInfor_AB_PerBatVoltLo ((u16)0x0035)
#define DataBmsInfor_AB_BatType ((u16)0x4000)
#define VarBmsInfor_AB_Position ((u16)0x003C)
void BmsInforPaint_AB(void)
{
char Str[64];
LcdShowData16(VarBmsInfor_AB_Position, 3);
if(BcpMsg.Valid)
{
LcdShowData16(DataBmsInfor_AB_MaxtVolt, BcpMsg.ChgMaxVolt);
LcdShowData16(DataBmsInfor_AB_MaxCurrt, (s16)(4000 - BcpMsg.ChgMaxCurrt));
LcdShowData16(DataBmsInfor_AB_MaxTemp, (s16)BcpMsg.MaxTemp - 50);
LcdShowData16(DataBmsInfor_AB_BatEnergy, BcpMsg.BatEnergy);
}
else
{
LcdShowData16(DataBmsInfor_AB_MaxtVolt, 0);
LcdShowData16(DataBmsInfor_AB_MaxCurrt, 0);
LcdShowData16(DataBmsInfor_AB_MaxTemp, 0);
LcdShowData16(DataBmsInfor_AB_BatEnergy, 0);
}
if(BclMsg.Valid)
{
LcdShowData16(DataBmsInfor_AB_NeedVolt, BclMsg.NeedVolt);
LcdShowData16(DataBmsInfor_AB_NeedCurrt, (s16)(4000 - BclMsg.NeedCurrt));
}
else
{
LcdShowData16(DataBmsInfor_AB_NeedVolt, 0);
LcdShowData16(DataBmsInfor_AB_NeedCurrt, 0);
}
if(BcsMsg.Valid)
LcdShowData16(DataBmsInfor_AB_CurSoc, BcsMsg.CurSoc);
else
LcdShowData16(DataBmsInfor_AB_CurSoc, 0);
if(BsmMsg.Valid)
LcdShowData16(DataBmsInfor_AB_BatTemp, (s16)BsmMsg.HighTemp - 50);
else
LcdShowData16(DataBmsInfor_AB_BatTemp, 0);
if(BsdMsg.Valid)
{
LcdShowData16(DataBmsInfor_AB_PerBatVoltLo, BsdMsg.PerMinVolt);
LcdShowData16(DataBmsInfor_AB_PerBatVoltHi, BsdMsg.PerMaxVolt);
}
else
{
LcdShowData16(DataBmsInfor_AB_PerBatVoltLo, 0);
if(BcsMsg.Valid)
LcdShowData16(DataBmsInfor_AB_PerBatVoltHi, BcsMsg.BatVoltAndGroup.Value.Volt);
}
if(eChgPro_AB_CommError== ChargeCtrl.CurProcess)
{
snprintf(Str, sizeof(Str), "%08X %06X %08X %06X", CommErrFrame[0], CommErrFrame[1], CommErrFrame[2], CommErrFrame[3]);
LcdShowStr(DataBmsInfor_AB_BatType, (u8*)Str, (strlen(Str)+1));
}
else if(BrmMsg.Valid)
{
switch(BrmMsg.BatType)
{
case 0x01:
snprintf(Str, sizeof(Str), "Ǧ");
break;
case 0x02:
snprintf(Str, sizeof(Str), "");
break;
case 0x03:
snprintf(Str, sizeof(Str), "﮵");
break;
case 0x04:
snprintf(Str, sizeof(Str), "﮵");
break;
case 0x05:
snprintf(Str, sizeof(Str), "﮵");
break;
case 0x06:
snprintf(Str, sizeof(Str), "Ԫϵ");
break;
case 0x07:
snprintf(Str, sizeof(Str), "ۺӵ");
break;
case 0x08:
snprintf(Str, sizeof(Str), "﮵");
break;
case 0xFF:
snprintf(Str, sizeof(Str), "");
break;
default:
snprintf(Str, sizeof(Str), "δ֪");
break;
}
LcdShowStr(DataBmsInfor_AB_BatType, (u8*)Str, (strlen(Str)+1));
}
else
{
snprintf(Str, sizeof(Str), "ͨѶ");
LcdShowStr(DataBmsInfor_AB_BatType, (u8*)Str, (strlen(Str)+1));
}
LcdShowPage(ScrnBmsInfor_AB);
}
typedef struct
{
u32 RePainTick;
}StructBmsInforUpdate;
void BmsInforUpdate_AB(StructBmsInforUpdate *pUpdate)
{
if((GetSystemTick() - pUpdate->RePainTick) >= 1590)
{
pUpdate->RePainTick = GetSystemTick();
BmsInforPaint_AB();
}
}
#define TimeOutTime (30*1000)
void LcdProBmsInfor_AB(StructLcdCtrl *pLcdCtrl)
{
StructLcdDwinFrame Frame;
u32 ScreenChkTick;
u32 Temp;
StructBmsInforUpdate Update;
u32 TimeOutTick;
//IdleLedSet(eSwSta_Off);
//ChgLedSet(eSwSta_On);
pCurChgRecd_AB = &CurChgRecd;
ScreenChkTick = GetSystemTick();
BmsInforPaint_AB();
Update.RePainTick = GetSystemTick();
TimeOutTick = GetSystemTick();
while(1)
{
if(TRUE == LcdFrameRecv(&Frame))
{
switch(Frame.FrameCmd)
{
case eLcdCmd_RdReg:
if(eLcdRegAddr_Page == Frame.Ctrl.RdReg.Addr)
{
Temp = Frame.Ctrl.RdReg.Data[0]*256 + Frame.Ctrl.RdReg.Data[1];
if(ScrnBmsInfor_AB != Temp)
LcdShowPage(ScrnBmsInfor_AB);
}
break;
case eLcdCmd_RdVar:
Temp = Frame.Ctrl.RdVar.AddrH*256 + Frame.Ctrl.RdVar.AddrL;
if(0 == Temp)
{
Temp = Frame.Ctrl.RdVar.Data[0] << 8;
Temp += Frame.Ctrl.RdVar.Data[1];
switch(Temp)
{
case BtnBmsInfor_AB_Cancel:
pLcdCtrl->CurScreen = eLcdPro_AB_ChargeScreen;
//pLcdCtrl->CurScreen = GetLcdProcess(eLcdPro_AB_ChargeSummary);
pLcdCtrl->Param = 0;
break;
case BtnBmsInfor_AB_Next:
pLcdCtrl->CurScreen = eLcdPro_AB_CommuInfor;
//pLcdCtrl->CurScreen = GetLcdProcess(eLcdPro_AB_ChargeSummary);
pLcdCtrl->Param = 0;
case BtnBmsInfor_AB_Last:
pLcdCtrl->CurScreen = eLcdPro_AB_CommuInfor;
//pLcdCtrl->CurScreen = GetLcdProcess(eLcdPro_AB_ChargeSummary);
pLcdCtrl->Param = 0;
break;
default:
LcdShowPage(ScrnBmsInfor_AB);
break;
}
}
break;
default:
break;
}
}
if((GetSystemTick() - ScreenChkTick) >= CheckSreenTime)
{
ScreenChkTick = GetSystemTick();
LcdGetPage();
}
if(eLcdPro_AB_BmsInfor != pLcdCtrl->CurScreen)
return;
if((GetSystemTick() - TimeOutTick) > TimeOutTime)
{
TimeOutTick = GetSystemTick();
pLcdCtrl->CurScreen = eLcdPro_AB_ChargeScreen;
//pLcdCtrl->CurScreen = GetLcdProcess(eLcdPro_AB_ChargeSummary);
pLcdCtrl->Param = 0;
}
BmsInforUpdate_AB(&Update);
osDelay(100);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论