提交 bf30d83f 作者: wysheng

修复:电子锁,第二次充电无法启动

上级 64788d77
...@@ -897,7 +897,7 @@ EnumSwitchStatus SPDGet(void) ...@@ -897,7 +897,7 @@ EnumSwitchStatus SPDGet(void)
static void FanDelayHandle(void const *Param) static void FanDelayHandle(void const *Param)
{ {
Fan_Port->BSRRH = Fan_Pin; Fan_Port->BSRRH = Fan_Pin;
ACContactorSet(eSwSta_Off); //ACContactorSet(eSwSta_Off);
} }
void FanInit(void) void FanInit(void)
{ {
......
...@@ -616,12 +616,12 @@ void StartMeg(StructTCUSend * pPgnRecv) ...@@ -616,12 +616,12 @@ void StartMeg(StructTCUSend * pPgnRecv)
//StartMeg_A.GunNum = 0;//pPgnRecv->Data[0]; //StartMeg_A.GunNum = 0;//pPgnRecv->Data[0];
StartMeg_A.LoadSswitch = pPgnRecv->Data[1]; StartMeg_A.LoadSswitch = pPgnRecv->Data[1];
StartMeg_A.PlugToChgFlag = pPgnRecv->Data[2]; StartMeg_A.StarChgType = pPgnRecv->Data[2];
StartMeg_A.AuxiliaryPower = pPgnRecv->Data[3]; StartMeg_A.AuxiliaryPower = pPgnRecv->Data[3];
StartMeg_A.ParallelCharging = pPgnRecv->Data[4]; StartMeg_A.ParallelCharging = pPgnRecv->Data[4];
if ((StartMeg_A.LoadSswitch == 1) || (StartMeg_A.LoadSswitch == 2) && (StartMeg_A.PlugToChgFlag == 0) || if (((StartMeg_A.LoadSswitch == 1) || (StartMeg_A.LoadSswitch == 2) )
(StartMeg_A.PlugToChgFlag == 1)) && ((StartMeg_A.StarChgType == 0) ||(StartMeg_A.StarChgType == 1)))
{ {
TCUCurChgRecd.StarValid = 1; TCUCurChgRecd.StarValid = 1;
TCUCurChgRecd.StarChgType = pPgnRecv->Data[2]; TCUCurChgRecd.StarChgType = pPgnRecv->Data[2];
...@@ -640,7 +640,7 @@ void StartMeg(StructTCUSend * pPgnRecv) ...@@ -640,7 +640,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
BMS_24V_Set(eSwSta_On); BMS_24V_Set(eSwSta_On);
} }
if(StartMeg_A.PlugToChgFlag == 1) if(StartMeg_A.StarChgType == 1)
{ {
TCUCurChgRecd.VehicleVerification = 0; TCUCurChgRecd.VehicleVerification = 0;
} }
...@@ -668,12 +668,12 @@ void StartMeg(StructTCUSend * pPgnRecv) ...@@ -668,12 +668,12 @@ void StartMeg(StructTCUSend * pPgnRecv)
{ {
ChargeStopType_B = eChgStop_None; ChargeStopType_B = eChgStop_None;
StartMeg_B.LoadSswitch = pPgnRecv->Data[1]; StartMeg_B.LoadSswitch = pPgnRecv->Data[1];
StartMeg_B.PlugToChgFlag = pPgnRecv->Data[2]; StartMeg_B.StarChgType = pPgnRecv->Data[2];
StartMeg_B.AuxiliaryPower = pPgnRecv->Data[3]; StartMeg_B.AuxiliaryPower = pPgnRecv->Data[3];
StartMeg_B.ParallelCharging = pPgnRecv->Data[4]; StartMeg_B.ParallelCharging = pPgnRecv->Data[4];
if ((StartMeg_B.LoadSswitch == 1) || (StartMeg_B.LoadSswitch == 2) && (StartMeg_B.PlugToChgFlag == 0) || if (((StartMeg_B.LoadSswitch == 1) || (StartMeg_B.LoadSswitch == 2))
(StartMeg_B.PlugToChgFlag == 1)) && ((StartMeg_B.StarChgType == 0) ||(StartMeg_B.StarChgType == 1)))
{ {
TCUCurChgRecd_B.StarValid = 1; TCUCurChgRecd_B.StarValid = 1;
TCUCurChgRecd_B.StarChgType = pPgnRecv->Data[2]; TCUCurChgRecd_B.StarChgType = pPgnRecv->Data[2];
...@@ -692,7 +692,7 @@ void StartMeg(StructTCUSend * pPgnRecv) ...@@ -692,7 +692,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
BMS_24V_Set_B(eSwSta_On); BMS_24V_Set_B(eSwSta_On);
} }
if(StartMeg_B.PlugToChgFlag == 1) if(StartMeg_B.StarChgType == 1)
{ {
TCUCurChgRecd_B.VehicleVerification = 0; TCUCurChgRecd_B.VehicleVerification = 0;
} }
...@@ -884,7 +884,7 @@ void StartMegAck_A(void) ...@@ -884,7 +884,7 @@ void StartMegAck_A(void)
Data[3] = Reason; Data[3] = Reason;
Data[4] = StartMeg_A.LoadSswitch; Data[4] = StartMeg_A.LoadSswitch;
Data[5] = StartMeg_A.PlugToChgFlag; Data[5] = StartMeg_A.StarChgType;
Data[6] = StartMeg_A.AuxiliaryPower; Data[6] = StartMeg_A.AuxiliaryPower;
Data[7] = StartMeg_A.ParallelCharging; Data[7] = StartMeg_A.ParallelCharging;
TCUSinglePackSendMsg(Data, 8, eCmd_startAck, 4, ChargerCont1939Addr); TCUSinglePackSendMsg(Data, 8, eCmd_startAck, 4, ChargerCont1939Addr);
...@@ -909,7 +909,7 @@ void StartMegAck_B(void) ...@@ -909,7 +909,7 @@ void StartMegAck_B(void)
Data[3] = Reason; Data[3] = Reason;
Data[4] = StartMeg_B.LoadSswitch; Data[4] = StartMeg_B.LoadSswitch;
Data[5] = StartMeg_B.PlugToChgFlag; Data[5] = StartMeg_B.StarChgType;
Data[6] = StartMeg_B.AuxiliaryPower; Data[6] = StartMeg_B.AuxiliaryPower;
Data[7] = StartMeg_B.ParallelCharging; Data[7] = StartMeg_B.ParallelCharging;
TCUSinglePackSendMsg(Data, 8, eCmd_startAck, 4, ChargerCont1939Addr_B); TCUSinglePackSendMsg(Data, 8, eCmd_startAck, 4, ChargerCont1939Addr_B);
...@@ -1016,7 +1016,7 @@ u8 AllowDTUStartCompCharge(u8 * Reason) ...@@ -1016,7 +1016,7 @@ u8 AllowDTUStartCompCharge(u8 * Reason)
*Reason = 0x29; //29H:BCL报文接收超时 *Reason = 0x29; //29H:BCL报文接收超时
else if (CemMsg.Cem.Value.Bcs == 1) else if (CemMsg.Cem.Value.Bcs == 1)
*Reason = 0x2A; //2AH:BCS报文接收超时 *Reason = 0x2A; //2AH:BCS报文接收超时
else if ((VerificaInfo.result == 1) && (StartMeg_A.PlugToChgFlag == 1)) else if ((VerificaInfo.result == 1) && (StartMeg_A.StarChgType == 1))
*Reason = 0x3F; //3DH: 车辆验证确认帧超时 *Reason = 0x3F; //3DH: 车辆验证确认帧超时
else if (TCUCommuStatus.ErrData.Value.verificationAck == 1) else if (TCUCommuStatus.ErrData.Value.verificationAck == 1)
*Reason = 0x3D; //3FH:车辆鉴权不通过 *Reason = 0x3D; //3FH:车辆鉴权不通过
...@@ -1086,7 +1086,7 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason) ...@@ -1086,7 +1086,7 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason)
*Reason = 0x29; //29H:BCL报文接收超时 *Reason = 0x29; //29H:BCL报文接收超时
else if (CemMsg_B.Cem.Value.Bcs == 1) else if (CemMsg_B.Cem.Value.Bcs == 1)
*Reason = 0x2A; //2AH:BCS报文接收超时 *Reason = 0x2A; //2AH:BCS报文接收超时
else if ((VerificaInfo_B.result == 1) && (StartMeg_B.PlugToChgFlag == 1)) else if ((VerificaInfo_B.result == 1) && (StartMeg_B.StarChgType == 1))
*Reason = 0x3F; *Reason = 0x3F;
else if (TCUCommuStatus_B.ErrData.Value.verificationAck == 1) else if (TCUCommuStatus_B.ErrData.Value.verificationAck == 1)
*Reason = 0x3D; *Reason = 0x3D;
...@@ -1341,9 +1341,8 @@ void StopMegAck_A(void) ...@@ -1341,9 +1341,8 @@ void StopMegAck_A(void)
Data[0] = 0x00; Data[0] = 0x00;
if (TCUCurChgRecd.TCUChargeEnable == 1) if (TCUCurChgRecd.TCUChargeEnable == 0)
{ {
TCUCurChgRecd.TCUChargeEnable = 0; //Bms停止标志
Data[1] = 00; Data[1] = 00;
} }
else else
...@@ -1362,10 +1361,9 @@ void StopMegAck_B(void) ...@@ -1362,10 +1361,9 @@ void StopMegAck_B(void)
Data[0] = 0x00; Data[0] = 0x00;
if (TCUCurChgRecd_B.TCUChargeEnable == 1) if (TCUCurChgRecd_B.TCUChargeEnable == 0)
{ {
Data[1] = 00; Data[1] = 00;
TCUCurChgRecd_B.TCUChargeEnable = 0; //b枪Bms停止标志
} }
else else
Data[1] = 01; Data[1] = 01;
...@@ -2115,11 +2113,11 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv) ...@@ -2115,11 +2113,11 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
TCUCommuStatus.CommStage = ElectLockStage; TCUCommuStatus.CommStage = ElectLockStage;
TCUCommuStatus.ElectLockSetValue = pPgnRecv->Data[2]; TCUCommuStatus.ElectLockSetValue = pPgnRecv->Data[2];
TCUCommuStatus.ElectLockNum = pPgnRecv->Data[1];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02))) if ((pPgnRecv->Data[2] != 0x01) &&(pPgnRecv->Data[2] != 0x02))
TCUCommuStatus.ElectLockVaildValue = 1; //数据合法性校验失败 TCUCommuStatus.ElectLockVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus.HeartBeatVaild)) else if (TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT)
TCUCommuStatus.ElectLockVaildValue = 2; //通讯超时 TCUCommuStatus.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus.VerChkVaild == 0) else if (TCUCommuStatus.VerChkVaild == 0)
TCUCommuStatus.ElectLockVaildValue = 3; //版本校验未完成 TCUCommuStatus.ElectLockVaildValue = 3; //版本校验未完成
...@@ -2134,10 +2132,10 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv) ...@@ -2134,10 +2132,10 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
if ((TCUCommuStatus.ElectLockVaildValue == 0) || (TCUCommuStatus.ElectLockVaildValue == 0x07)) if ((TCUCommuStatus.ElectLockVaildValue == 0) || (TCUCommuStatus.ElectLockVaildValue == 0x07))
{ {
if (TCUCommuStatus.ElectLockSetValue == 01) //if (TCUCommuStatus.ElectLockSetValue == 01)
LockSet(eSwSta_On); LockSet(eSwSta_On);
else //else
LockSet(eSwSta_Off); // LockSet(eSwSta_Off);
} }
} }
else if (pPgnRecv->DA == ChargerCont1939Addr_B) else if (pPgnRecv->DA == ChargerCont1939Addr_B)
...@@ -2145,11 +2143,10 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv) ...@@ -2145,11 +2143,10 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
TCUCommuStatus_B.CommStage = ElectLockStage; TCUCommuStatus_B.CommStage = ElectLockStage;
TCUCommuStatus_B.ElectLockSetValue = pPgnRecv->Data[2]; TCUCommuStatus_B.ElectLockSetValue = pPgnRecv->Data[2];
TCUCommuStatus_B.ElectLockNum = pPgnRecv->Data[1];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) && if ((pPgnRecv->Data[2] != 0x01) &&(pPgnRecv->Data[2] != 0x02))
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus_B.ElectLockVaildValue = 1; //数据合法性校验失败 TCUCommuStatus_B.ElectLockVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus_B.HeartBeatVaild)) else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT) )
TCUCommuStatus_B.ElectLockVaildValue = 2; //通讯超时 TCUCommuStatus_B.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus_B.VerChkVaild == 0) else if (TCUCommuStatus_B.VerChkVaild == 0)
TCUCommuStatus_B.ElectLockVaildValue = 3; //版本校验未完成 TCUCommuStatus_B.ElectLockVaildValue = 3; //版本校验未完成
...@@ -2164,10 +2161,10 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv) ...@@ -2164,10 +2161,10 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
if ((TCUCommuStatus_B.ElectLockVaildValue == 0) || (TCUCommuStatus_B.ElectLockVaildValue == 0x07)) if ((TCUCommuStatus_B.ElectLockVaildValue == 0) || (TCUCommuStatus_B.ElectLockVaildValue == 0x07))
{ {
if (TCUCommuStatus_B.ElectLockSetValue == 01) //if (TCUCommuStatus_B.ElectLockSetValue == 01)
LockSet_B(eSwSta_On); LockSet_B(eSwSta_On);
else //else
LockSet_B(eSwSta_Off); // LockSet_B(eSwSta_Off);
} }
} }
} }
...@@ -2184,9 +2181,9 @@ void ElectControlAck(u8 ChgNum) ...@@ -2184,9 +2181,9 @@ void ElectControlAck(u8 ChgNum)
if (ChgNum == 1) if (ChgNum == 1)
{ {
Data[0] = 0; Data[0] = 0;
Data[1] = 1;//当前需要操作电子锁序号,从 1 开始。 Data[1] = TCUCommuStatus.ElectLockNum;//当前需要操作电子锁序号,从 1 开始。
Data[2] = TCUCommuStatus.ElectLockSetValue; Data[2] = TCUCommuStatus.ElectLockSetValue;
if (PillarError.Value.EleLock == 1) if (PillarError.Value.EleLock == 1)
TCUCommuStatus.ElectLockVaildValue = 0x07; TCUCommuStatus.ElectLockVaildValue = 0x07;
...@@ -2207,9 +2204,9 @@ void ElectControlAck(u8 ChgNum) ...@@ -2207,9 +2204,9 @@ void ElectControlAck(u8 ChgNum)
else if (ChgNum == 2) else if (ChgNum == 2)
{ {
Data[0] = 0; Data[0] = 0;
Data[1] = 1;//当前需要操作电子锁序号,从 1 开始。 Data[1] = TCUCommuStatus_B.ElectLockNum;//当前需要操作电子锁序号,从 1 开始。
Data[2] = TCUCommuStatus_B.ElectLockSetValue; Data[2] = TCUCommuStatus_B.ElectLockSetValue;
if (PillarError_B.Value.EleLock == 1) if (PillarError_B.Value.EleLock == 1)
TCUCommuStatus_B.ElectLockVaildValue = 0x07; TCUCommuStatus_B.ElectLockVaildValue = 0x07;
...@@ -2951,6 +2948,7 @@ void TCUErroCommAnalysis(StructTCUSend * pPgnRecv) ...@@ -2951,6 +2948,7 @@ void TCUErroCommAnalysis(StructTCUSend * pPgnRecv)
//TCUCommuStatus.HeartBeatErrCnt = 0; //TCUCommuStatus.HeartBeatErrCnt = 0;
//HeartBeatVaild = 0; //心跳失效 //HeartBeatVaild = 0; //心跳失效
TCUCurChgRecd.TCUChargeEnable = 0; //超时停机
} }
else if (pPgnRecv->DA == ChargerCont1939Addr_B) else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{ {
...@@ -2960,6 +2958,7 @@ void TCUErroCommAnalysis(StructTCUSend * pPgnRecv) ...@@ -2960,6 +2958,7 @@ void TCUErroCommAnalysis(StructTCUSend * pPgnRecv)
//TCUCommuStatus_B.HeartBeatErrCnt = 0; //TCUCommuStatus_B.HeartBeatErrCnt = 0;
//TCUCommuStatus_B.HeartBeatVaild = 0; //心跳失效 //TCUCommuStatus_B.HeartBeatVaild = 0; //心跳失效
TCUCurChgRecd_B.TCUChargeEnable = 0; //超时停机
} }
} }
......
...@@ -57,7 +57,7 @@ typedef struct ...@@ -57,7 +57,7 @@ typedef struct
{ {
//u8 GunNum; //抢号 单枪 0 一机多冲 1-255 //u8 GunNum; //抢号 单枪 0 一机多冲 1-255
u8 LoadSswitch;//负荷控制开关 是否根据用户型号提供不同输出功率 01启用02关闭其他无效 u8 LoadSswitch;//负荷控制开关 是否根据用户型号提供不同输出功率 01启用02关闭其他无效
u8 PlugToChgFlag;//即插即充标识 00非 01 即插即充other:invalid u8 StarChgType;//即插即充标识 00非 01 即插即充other:invalid
u8 AuxiliaryPower;//辅助电源选择:00H:使用12V(默认)01H: 24V(优先使用12V探测,失败后切24V电源探测)其他:无效 u8 AuxiliaryPower;//辅助电源选择:00H:使用12V(默认)01H: 24V(优先使用12V探测,失败后切24V电源探测)其他:无效
u8 ParallelCharging;//并充(两把枪充一辆车)选择:00H:关闭(默认) 01H:启用 其他:无效 u8 ParallelCharging;//并充(两把枪充一辆车)选择:00H:关闭(默认) 01H:启用 其他:无效
}StructStartMeg; }StructStartMeg;
......
...@@ -183,7 +183,7 @@ Reset_Handler ...@@ -183,7 +183,7 @@ Reset_Handler
// BLX R0 // BLX R0
LDR R0, =__iar_program_start LDR R0, =__iar_program_start
BX R0 BX R0
PUBWEAK NMI_Handler PUBWEAK NMI_Handler
......
...@@ -14,8 +14,8 @@ s32 GetChgVoltChgRun_B(void) ...@@ -14,8 +14,8 @@ s32 GetChgVoltChgRun_B(void)
{ {
if(ImdValue_B.Vaild) if(ImdValue_B.Vaild)
return ImdValue_B.PnVolt; return ImdValue_B.PnVolt;
if(eMeterSta_Unavail != MeterComm.Status_B) //if(eMeterSta_Unavail != MeterComm.Status_B)
return MeterValue_B.Voltage; // return MeterValue_B.Voltage;
if(BcsMsg_B.Valid) if(BcsMsg_B.Valid)
return BcsMsg_B.ChgVolt; return BcsMsg_B.ChgVolt;
return -1; return -1;
...@@ -137,25 +137,27 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -137,25 +137,27 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if(DcModuleGroup[3].status == Valid) if(DcModuleGroup[3].status == Valid)
{ {
DcModuleGroup[3].status = Hold_B; DcModuleGroup[3].status = Hold_B;
//DcModuleManage_B.ValidNum += DcModuleGroup[3].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[3].ValidNum;
DcModuleGroup[3].flag = 1; DcModuleGroup[3].flag = 1;
} }
else if(DcModuleGroup[1].status == Valid) else if(DcModuleGroup[1].status == Valid)
{ {
DcModuleGroup[1].status = Hold_B; DcModuleGroup[1].status = Hold_B;
//DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[1].ValidNum;
DcModuleGroup[1].flag = 1; DcModuleGroup[1].flag = 1;
} }
else if(DcModuleGroup[0].status == Valid) else if(DcModuleGroup[0].status == Valid)
{ {
DcModuleGroup[0].status = Hold_B; DcModuleGroup[0].status = Hold_B;
//DcModuleManage.ValidNum += DcModuleGroup[0].ValidNum; DcModuleManage_B.ValidNum += DcModuleGroup[0].ValidNum;
DcModuleGroup[0].flag = 1; DcModuleGroup[0].flag = 1;
#if (DcModule_ZhongXing == 0)
if(DcModuleGroup[1].status == Hold_B) if(DcModuleGroup[1].status == Hold_B)
{ {
DcModuleGroup[1].status = Valid; DcModuleGroup[1].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[1].ValidNum;
} }
#endif
} }
} }
else if(NeedCurrt < (DcModuleAbility.MaxCurrt*DcModuleManage_B.ValidNum)) else if(NeedCurrt < (DcModuleAbility.MaxCurrt*DcModuleManage_B.ValidNum))
...@@ -163,17 +165,17 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -163,17 +165,17 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
if(DcModuleGroup[0].status == Hold_B) if(DcModuleGroup[0].status == Hold_B)
{ {
DcModuleGroup[0].status = Valid; DcModuleGroup[0].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[0].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[0].ValidNum;
} }
else if(DcModuleGroup[1].status == Hold_B) else if(DcModuleGroup[1].status == Hold_B)
{ {
DcModuleGroup[1].status = Valid; DcModuleGroup[1].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[1].ValidNum;
} }
else if(DcModuleGroup[3].status == Hold_B) else if(DcModuleGroup[3].status == Hold_B)
{ {
DcModuleGroup[3].status = Valid; DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum; DcModuleManage_B.ValidNum -= DcModuleGroup[3].ValidNum;
} }
} }
......
...@@ -157,11 +157,13 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl) ...@@ -157,11 +157,13 @@ void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
DcModuleGroup[2].status = Hold_A; DcModuleGroup[2].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum; DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
DcModuleGroup[2].flag = 1; DcModuleGroup[2].flag = 1;
#if (DcModule_ZhongXing == 0)
if (DcModuleGroup[3].status == Hold_A) if (DcModuleGroup[3].status == Hold_A)
{ {
DcModuleGroup[3].status = Valid; DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum; DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
} }
#endif
} }
} }
else if(NeedCurrt < (DcModuleAbility.MaxCurrt * DcModuleManage.ValidNum)) else if(NeedCurrt < (DcModuleAbility.MaxCurrt * DcModuleManage.ValidNum))
......
...@@ -689,7 +689,7 @@ void DcModuleCtrlProcess_SmartAllocation(void) ...@@ -689,7 +689,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
addr = DcModuleGroup[i].modules[j].addr; addr = DcModuleGroup[i].modules[j].addr;
DcModuleManage_B.Cmd = 0x55; //开机 DcModuleManage_B.Cmd = 0x55; //开机
DcModuleGroup[i].modules[j].cmd = 0x55; //DcModuleGroup[i].modules[j].cmd = 0x55;
SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt, SendDataToDcModule(addr, DcModuleManage_B.Cmd, DcModuleManage_B.SetVolt,
DcModuleManage_B.SetCurrt); DcModuleManage_B.SetCurrt);
} }
...@@ -831,8 +831,9 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current) ...@@ -831,8 +831,9 @@ void SendDataToDcModule_ZhongXing(u8 group_index, u8 cmd, u32 volt, u32 current)
for (u8 j = 0; j < DcModuleGroup[group_index].num; j++) for (u8 j = 0; j < DcModuleGroup[group_index].num; j++)
{ {
addr = DcModuleGroup[group_index].modules[j].addr; addr = DcModuleGroup[group_index].modules[j].addr;
DcModuleGroup[group_index].modules[j].cmd = cmd; DcModuleGroup[group_index].modules[j].cmd = sendCmd;
DcModuleGroup[group_index].modules[j].VoltageSet = volt;
DcModuleGroup[group_index].modules[j].CurrentSet = current;
DataSend.Id = 0x18059FA0; DataSend.Id = 0x18059FA0;
DataSend.Len = 8; DataSend.Len = 8;
DataSend.Data[0] = 0x10 | sendCmd; DataSend.Data[0] = 0x10 | sendCmd;
......
...@@ -34,6 +34,7 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -34,6 +34,7 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
BmsCanInit(); BmsCanInit();
osDelay(20); osDelay(20);
u32 ACContactorSetCount = 0;
//TCUCurChgRecd.TCUChargeEnable = 1; //TCUCurChgRecd.TCUChargeEnable = 1;
while(1) while(1)
{ {
...@@ -43,11 +44,27 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl) ...@@ -43,11 +44,27 @@ void ChgProChgIdle(StructChargeCtrl *pChargeCtrl)
{ {
if(0 == CcStatusChkTick) if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
ACContactorSetCount = 0;
} }
else else
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
CemMsg.Cem.Mult = 0; CemMsg.Cem.Mult = 0;
if(eSwSta_Off == CcStatusRead_B())
{
ACContactorSetCount++;
if(ACContactorSetCount > 600)
{
ACContactorSet(eSwSta_Off);
ACContactorSetCount = 601;
}
}
else
{
ACContactorSetCount = 0;
}
} }
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > 1500)) if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > 1500))
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "Drv_ImdJyc.h" #include "Drv_ImdJyc.h"
#define ImdCheckFreq (200)//ms #define ImdCheckFreq (200)//ms
#define DcModOutTimeOut (11000)//ms #define DcModOutTimeOut (22000)//ms
#define VoltWaitTimeOut (1000)//ms #define VoltWaitTimeOut (1000)//ms
#define ChkWaitTimeOut (12000)//(8500)//ms #define ChkWaitTimeOut (12000)//(8500)//ms
#define ChkTimeOut (1500)//ms #define ChkTimeOut (1500)//ms
...@@ -117,7 +117,7 @@ void ImdProcess(EnumImdChkStep *pImdChckStep) ...@@ -117,7 +117,7 @@ void ImdProcess(EnumImdChkStep *pImdChckStep)
else else
Tmep = DcModuleAbility.MinVolt; Tmep = DcModuleAbility.MinVolt;
SendDataToDcModule_A(eSwSta_On, Tmep, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); SendDataToDcModule_A(eSwSta_On, Tmep, DcModuleAbility.MinCurrt/* *DcModuleManage.ValidNum */);
*pImdChckStep = eImdStep_DcModOut; *pImdChckStep = eImdStep_DcModOut;
ImdTimeout = 0; ImdTimeout = 0;
break; break;
......
...@@ -29,7 +29,6 @@ void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl) ...@@ -29,7 +29,6 @@ void ChgProWaitBmsReady(StructChargeCtrl *pChargeCtrl)
//DrainResistSet(eSwSta_Off); //DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_Off); DcOutSet(eSwSta_Off);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
CTS_Send(); CTS_Send();
CTS_SendTick = GetSystemTick(); CTS_SendTick = GetSystemTick();
if(0 != UserParam.ChgFun.Value.SigUniChg) if(0 != UserParam.ChgFun.Value.SigUniChg)
......
...@@ -59,9 +59,9 @@ void ChgProWaitPillarReady(StructChargeCtrl *pChargeCtrl) ...@@ -59,9 +59,9 @@ void ChgProWaitPillarReady(StructChargeCtrl *pChargeCtrl)
CRO_SendTick = GetSystemTick(); CRO_SendTick = GetSystemTick();
if((BcpMsg.StartVolt >= DcModuleAbility.MinVolt) && (BcpMsg.StartVolt <= DcModuleAbility.MaxVolt)) if((BcpMsg.StartVolt >= DcModuleAbility.MinVolt) && (BcpMsg.StartVolt <= DcModuleAbility.MaxVolt))
SendDataToDcModule_A(eSwSta_On, BcpMsg.StartVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); SendDataToDcModule_A(eSwSta_On, BcpMsg.StartVolt, DcModuleAbility.MinCurrt/* *DcModuleManage.ValidNum */);
else if(BcpMsg.StartVolt < DcModuleAbility.MinVolt) else if(BcpMsg.StartVolt < DcModuleAbility.MinVolt)
SendDataToDcModule_A(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); SendDataToDcModule_A(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt/* *DcModuleManage.ValidNum */);
else else
{ {
CstMsg.StopReason.Value.Truble = 1; CstMsg.StopReason.Value.Truble = 1;
...@@ -149,9 +149,9 @@ void ChgProWaitPillarReady(StructChargeCtrl *pChargeCtrl) ...@@ -149,9 +149,9 @@ void ChgProWaitPillarReady(StructChargeCtrl *pChargeCtrl)
else else
{ {
if((GetBatVoltWaitPillarReady() >= DcModuleAbility.MinVolt) && (GetBatVoltWaitPillarReady() <= DcModuleAbility.MaxVolt)) if((GetBatVoltWaitPillarReady() >= DcModuleAbility.MinVolt) && (GetBatVoltWaitPillarReady() <= DcModuleAbility.MaxVolt))
SendDataToDcModule_A(eSwSta_On, GetBatVoltWaitPillarReady(), DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); SendDataToDcModule_A(eSwSta_On, GetBatVoltWaitPillarReady(), DcModuleAbility.MinCurrt/* *DcModuleManage.ValidNum */);
else if(GetBatVoltWaitPillarReady() < DcModuleAbility.MinVolt) else if(GetBatVoltWaitPillarReady() < DcModuleAbility.MinVolt)
SendDataToDcModule_A(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum); SendDataToDcModule_A(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt/* *DcModuleManage.ValidNum */);
} }
} }
if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_60S))) if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_60S)))
......
...@@ -31,7 +31,7 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -31,7 +31,7 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
BmsCanInit_B(); BmsCanInit_B();
osDelay(20); osDelay(20);
u32 ACContactorSetCount = 0;
while(1) while(1)
{ {
if(0 == UserParam.ChgFun.Value.Num_B) if(0 == UserParam.ChgFun.Value.Num_B)
...@@ -46,11 +46,26 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -46,11 +46,26 @@ void ChgProChgIdle_B(StructChargeCtrl_B *pChargeCtrl)
{ {
if(0 == CcStatusChkTick) if(0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick(); CcStatusChkTick = GetSystemTick();
ACContactorSetCount = 0;
} }
else else
{ {
CcStatusChkTick = 0; CcStatusChkTick = 0;
CemMsg_B.Cem.Mult = 0; CemMsg_B.Cem.Mult = 0;
if(eSwSta_Off == CcStatusRead())
{
ACContactorSetCount++;
if(ACContactorSetCount > 600)
{
ACContactorSet(eSwSta_Off);
ACContactorSetCount = 601;
}
}
else
{
ACContactorSetCount = 0;
}
} }
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > 1500)) if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > 1500))
......
...@@ -117,7 +117,7 @@ void ImdProcess_B(EnumImdChkStep *pImdChckStep) ...@@ -117,7 +117,7 @@ void ImdProcess_B(EnumImdChkStep *pImdChckStep)
else else
Tmep = DcModuleAbility.MinVolt; Tmep = DcModuleAbility.MinVolt;
SendDataToDcModule_B(eSwSta_On, Tmep, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); SendDataToDcModule_B(eSwSta_On, Tmep, DcModuleAbility.MinCurrt/* *DcModuleManage_B.ValidNum */);
*pImdChckStep = eImdStep_DcModOut; *pImdChckStep = eImdStep_DcModOut;
ImdTimeout = 0; ImdTimeout = 0;
break; break;
......
...@@ -59,9 +59,9 @@ void ChgProWaitPillarReady_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -59,9 +59,9 @@ void ChgProWaitPillarReady_B(StructChargeCtrl_B *pChargeCtrl)
CRO_SendTick = GetSystemTick(); CRO_SendTick = GetSystemTick();
if((BcpMsg_B.StartVolt >= DcModuleAbility.MinVolt) && (BcpMsg_B.StartVolt <= DcModuleAbility.MaxVolt)) if((BcpMsg_B.StartVolt >= DcModuleAbility.MinVolt) && (BcpMsg_B.StartVolt <= DcModuleAbility.MaxVolt))
SendDataToDcModule_B(eSwSta_On, BcpMsg_B.StartVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); SendDataToDcModule_B(eSwSta_On, BcpMsg_B.StartVolt, DcModuleAbility.MinCurrt/* *DcModuleManage_B.ValidNum */);
else if(BcpMsg_B.StartVolt < DcModuleAbility.MinVolt) else if(BcpMsg_B.StartVolt < DcModuleAbility.MinVolt)
SendDataToDcModule_B(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); SendDataToDcModule_B(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt/* *DcModuleManage_B.ValidNum */);
else else
{ {
CstMsg_B.StopReason.Value.Truble = 1; CstMsg_B.StopReason.Value.Truble = 1;
...@@ -124,9 +124,9 @@ void ChgProWaitPillarReady_B(StructChargeCtrl_B *pChargeCtrl) ...@@ -124,9 +124,9 @@ void ChgProWaitPillarReady_B(StructChargeCtrl_B *pChargeCtrl)
else else
{ {
if((GetBatVoltWaitPillarReady_B() >= DcModuleAbility.MinVolt) && (GetBatVoltWaitPillarReady_B() <= DcModuleAbility.MaxVolt)) if((GetBatVoltWaitPillarReady_B() >= DcModuleAbility.MinVolt) && (GetBatVoltWaitPillarReady_B() <= DcModuleAbility.MaxVolt))
SendDataToDcModule_B(eSwSta_On, GetBatVoltWaitPillarReady_B(), DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); SendDataToDcModule_B(eSwSta_On, GetBatVoltWaitPillarReady_B(), DcModuleAbility.MinCurrt/* *DcModuleManage_B.ValidNum */);
else if(GetBatVoltWaitPillarReady_B() < DcModuleAbility.MinVolt) else if(GetBatVoltWaitPillarReady_B() < DcModuleAbility.MinVolt)
SendDataToDcModule_B(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage_B.ValidNum); SendDataToDcModule_B(eSwSta_On, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt/* *DcModuleManage_B.ValidNum */);
} }
} }
if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_B_60S))) if((0 != VoltReadyTick) && ((GetSystemTick() - VoltReadyTick) > (MsgTimeout_B_60S)))
......
...@@ -536,6 +536,8 @@ void CommutionRunStage(void) ...@@ -536,6 +536,8 @@ void CommutionRunStage(void)
if(sendTimes > 2000/500) if(sendTimes > 2000/500)
{ {
TCUCommuStatus.CommStage = HeartStage; TCUCommuStatus.CommStage = HeartStage;
if (TCUCommuStatus.ElectLockSetValue == 2)
LockSet(eSwSta_Off);
} }
else else
{ {
...@@ -550,9 +552,11 @@ void CommutionRunStage(void) ...@@ -550,9 +552,11 @@ void CommutionRunStage(void)
{ {
sendTimes_B++; sendTimes_B++;
sendTick_B = GetSystemTick(); sendTick_B = GetSystemTick();
if(sendTimes > 2000/500) if(sendTimes_B > 2000/500)
{ {
TCUCommuStatus_B.CommStage = HeartStage; TCUCommuStatus_B.CommStage = HeartStage;
if (TCUCommuStatus_B.ElectLockSetValue == 2)
LockSet_B(eSwSta_Off);
} }
else else
{ {
...@@ -637,11 +641,11 @@ void CommutionRunStage(void) ...@@ -637,11 +641,11 @@ void CommutionRunStage(void)
{ {
if(GetSystemTick() - sendTick_B >= 500) if(GetSystemTick() - sendTick_B >= 500)
{ {
sendTimes_B++; sendTimes++;
sendTick_B = GetSystemTick(); sendTick = GetSystemTick();
if(sendTimes_B > 2000/500) if(sendTimes > 2000/500)
{ {
TCUCommuStatus_B.CommStage = HeartStage; TCUCommuStatus.CommStage = HeartStage;
} }
else else
{ {
...@@ -690,20 +694,21 @@ void TCUCurChgRecordInterface_A(void) ...@@ -690,20 +694,21 @@ void TCUCurChgRecordInterface_A(void)
if (GetSystemTick() -ChgStartSendTick >= 250UL) if (GetSystemTick() -ChgStartSendTick >= 250UL)
{ {
ChgStartSendTick = GetSystemTick(); ChgStartSendTick = GetSystemTick();
ChgStartSendEcount++;
if (ChgStartSendEcount < 8) //2S if (ChgStartSendEcount < 8) //2S
{ {
ChgStartSendEcount++;
StartMegAck_A(); //启动帧发送 StartMegAck_A(); //启动帧发送
} }
else else
{ {
TCUCurChgRecd.TCUChgStartNotetrl = 0; //停止发送 TCUCurChgRecd.TCUChgStartNotetrl = 0; //停止发送
TCUCurChgRecd.StarChgResult = 0;
} }
} }
} }
else else
{ {
ChgStartSendTick = GetSystemTick(); ChgStartSendTick = 0;
ChgStartSendEcount = 0; ChgStartSendEcount = 0;
} }
...@@ -721,47 +726,34 @@ void TCUCurChgRecordInterface_A(void) ...@@ -721,47 +726,34 @@ void TCUCurChgRecordInterface_A(void)
{ //超时大于,保存 { //超时大于,保存
TCUCommuStatus.ConEMSendFlag = 1; //错误帧发送 TCUCommuStatus.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus.ErrData.Value.startCompAck = 1; TCUCommuStatus.ErrData.Value.startCompAck = 1;
TCUCurChgRecd.TCUChgStarCompNotetrl = 3; TCUCurChgRecd.TCUChgStarCompNotetrl = 0;
TCUCurChgRecd.TCUChargeEnable = 0; //超时停机 TCUCurChgRecd.TCUChargeEnable = 0; //超时停机
ChgStartCompSendEcount = 0;
} }
} }
} }
else if (TCUCurChgRecd.TCUChgStarCompNotetrl == 3)
{
TCUCurChgRecd.TCUStartCompresult = 0; //
TCUCurChgRecd.TCUChargeEnable = 0; //归零
TCUCurChgRecd.StarChgType = 0;
}
else else
{ {
TCUCurChgRecd.TCUStartCompresult = 0; //
//TCUCurChgRecd.StarChgType = 0;
ChgStartCompSendEcount = 0; ChgStartCompSendEcount = 0;
ChgRecordSendTick = GetSystemTick(); ChgRecordSendTick = 0;
} }
if (TCUCurChgRecd.TCUChgStopNotetrl == 1) //停止帧逻辑 if (TCUCurChgRecd.TCUChgStopNotetrl == 1)
{
StopMegAck_A(); //停止帧发送
ChgStopSendTick = GetSystemTick();
TCUCurChgRecd.TCUChgStopNotetrl = 2;
}
else if (TCUCurChgRecd.TCUChgStopNotetrl == 2)
{ {
if (GetSystemTick() -ChgStopSendTick >= 250UL) if (GetSystemTick() -ChgStopSendTick >= 250UL)
{ {
ChgStopSendTick = GetSystemTick(); ChgStopSendTick = GetSystemTick();
ChgStopSendEcount++;
if (ChgStopSendEcount < 8) if (ChgStopSendEcount < 8)
{ {
ChgStopSendEcount++;
StopMegAck_A(); StopMegAck_A();
} }
else else
{ {
ChgStopSendTick = 0;
TCUCurChgRecd.TCUChgStopNotetrl = 0; //停止发送 TCUCurChgRecd.TCUChgStopNotetrl = 0; //停止发送
ChgStopSendEcount = 0;
if(TCUCurChgRecd.TCUChgStopCompNotetrl == 0 if(TCUCurChgRecd.TCUChgStopCompNotetrl == 0
&& ChargeCtrl.CurProcess == eChgPro_ChgIdle && ChargeCtrl.CurProcess == eChgPro_ChgIdle
&& TCUCtrl.CurScreen == eLcdPro_TCUMainMenu) && TCUCtrl.CurScreen == eLcdPro_TCUMainMenu)
...@@ -771,40 +763,40 @@ void TCUCurChgRecordInterface_A(void) ...@@ -771,40 +763,40 @@ void TCUCurChgRecordInterface_A(void)
} }
} }
} }
else if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 1) //停止完成帧逻辑 else
/*&& (0 != TCUCurChgRecd.TCUChargeEnable)*/)
{ {
stopCompSend_A(); ChgStopSendTick = 0;
ChgRecordSendTick = GetSystemTick(); ChgStopSendEcount = 0;
TCUCurChgRecd.TCUChgStopCompNotetrl = 2;
ChgRecordSendErr = 0;
} }
else if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 2) /*&& (0 != TCUCurChgRecd.TCUChargeEnable)*/)
if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 1) //停止完成帧逻辑
/*&& (0 != TCUCurChgRecd.TCUChargeEnable)*/)
{ {
if ((GetSystemTick() -ChgRecordSendTick) > (250UL)) if ((GetSystemTick() -ChgRecordSendTick) > (250UL))
{ {
ChgRecordSendErr++; ChgRecordSendErr++;
ChgRecordSendTick = GetSystemTick();
if (ChgRecordSendErr < 20) //超时5S if (ChgRecordSendErr < 20) //超时5S
{ //超时小于20次 { //超时小于20次
stopCompSend_A(); stopCompSend_A();
ChgRecordSendTick = GetSystemTick();
} }
else else
{ //超时大于,保存 { //超时大于,保存
TCUCommuStatus.ConEMSendFlag = 1; TCUCommuStatus.ConEMSendFlag = 1;
TCUCommuStatus.ErrData.Value.stopCompAck = 1; TCUCommuStatus.ErrData.Value.stopCompAck = 1;
TCUCurChgRecd.TCUChgStopCompNotetrl = 3; TCUCurChgRecd.TCUChgStopCompNotetrl = 3;
ChgRecordSendErr = 0;
} }
} }
} }
else if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 3) /*&& (0 != TCUCurChgRecd.TCUChargeEnable)*/) else if(TCUCurChgRecd.TCUChgStopCompNotetrl == 3)
{ {
TCUCurChgRecd.TCUChgStopCompNotetrl = 0; //超时触发
TCUCurChgRecd.TCUChargeEnable = 0; //归零
TCUCurChgRecd.TCUChgStopType = 0; TCUCurChgRecd.TCUChgStopType = 0;
TCUCurChgRecd.TCUChgStopCompNotetrl = 0;
}
else
{
ChgRecordSendTick = 0;
ChgRecordSendErr = 0; ChgRecordSendErr = 0;
} }
} }
...@@ -823,126 +815,111 @@ void TCUCurChgRecordInterface_B(void) ...@@ -823,126 +815,111 @@ void TCUCurChgRecordInterface_B(void)
if (TCUCurChgRecd_B.TCUChgStartNotetrl == 1) //启动帧逻辑 if (TCUCurChgRecd_B.TCUChgStartNotetrl == 1) //启动帧逻辑
{ {
StartMegAck_B(); //启动帧发送
ChgStartSendTick = GetSystemTick();
TCUCurChgRecd_B.TCUChgStartNotetrl = 2;
}
else if (TCUCurChgRecd_B.TCUChgStartNotetrl == 2)
{
if (GetSystemTick() -ChgStartSendTick >= 250UL) if (GetSystemTick() -ChgStartSendTick >= 250UL)
{ {
ChgStartSendTick = GetSystemTick(); ChgStartSendTick = GetSystemTick();
ChgStartSendEcount++;
if (ChgStartSendEcount < 8) //2S if (ChgStartSendEcount < 8) //2S
{ {
ChgStartSendEcount++;
StartMegAck_B(); //启动帧发送 StartMegAck_B(); //启动帧发送
} }
else else
{ {
ChgStartSendTick = 0; TCUCurChgRecd_B.TCUChgStartNotetrl = 0; //停止发送
TCUCurChgRecd_B.TCUChgStartNotetrl = 0; //停止发送 TCUCurChgRecd_B.StarChgResult = 0;
ChgStartSendEcount = 0;
if(TCUCurChgRecd_B.TCUChgStopCompNotetrl == 0
&& ChargeCtrl_B.CurProcess == eChgPro_ChgIdle
&& TCUCtrl_B.CurScreen == eLcdPro_TCUMainMenu)
{
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 1;
}
} }
} }
} }
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 1) else
{ {
startCompSend_B(); ChgStartSendTick = 0;
ChgStartCompSendTick = GetSystemTick(); ChgStartSendEcount = 0;
TCUCurChgRecd_B.TCUChgStarCompNotetrl = 2;
ChgStartCompSendEcount = 0;
} }
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 2)
if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 1)
{ {
if ((GetSystemTick() -ChgStartCompSendTick) > (250UL)) if ((GetSystemTick() -ChgStartCompSendTick) > (250UL))
{ {
ChgStartCompSendEcount++; ChgStartCompSendEcount++;
ChgRecordSendTick = GetSystemTick();
if (ChgRecordSendErr < 20) //超时5S if (ChgRecordSendErr < 20) //超时5S
{ //超时小于20次 { //超时小于20次
startCompSend_B(); startCompSend_B();
ChgRecordSendTick = GetSystemTick();
} }
else else
{ //超时大于,保存 { //超时大于,保存
TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送 TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus_B.ErrData.Value.startCompAck = 1; TCUCommuStatus_B.ErrData.Value.startCompAck = 1;
TCUCurChgRecd_B.TCUChargeEnable = 0; //超时停机 TCUCurChgRecd_B.TCUChargeEnable = 0; //超时停机
TCUCurChgRecd_B.TCUChgStarCompNotetrl = 3; TCUCurChgRecd_B.TCUChgStarCompNotetrl = 0;
ChgStartCompSendEcount = 0;
} }
} }
} }
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 3) else
{ {
TCUCurChgRecd_B.TCUStartCompresult = 0; // TCUCurChgRecd_B.TCUStartCompresult = 0;
TCUCurChgRecd_B.TCUChargeEnable = 0; //归零 //TCUCurChgRecd_B.StarChgType = 0;
TCUCurChgRecd_B.StarChgType = 0;
ChgStartCompSendEcount = 0; ChgStartCompSendEcount = 0;
ChgRecordSendTick = 0;
} }
else if (TCUCurChgRecd_B.TCUChgStopNotetrl == 1)
{ if (TCUCurChgRecd_B.TCUChgStopNotetrl == 1)
StopMegAck_B();
ChgStopSendTick = GetSystemTick();
TCUCurChgRecd_B.TCUChgStopNotetrl = 2;
}
else if (TCUCurChgRecd_B.TCUChgStopNotetrl == 2)
{ {
if (GetSystemTick() -ChgStopSendTick >= 250UL) if (GetSystemTick() -ChgStopSendTick >= 250UL)
{ {
ChgStopSendTick = GetSystemTick(); ChgStopSendTick = GetSystemTick();
ChgStopSendEcount++;
if (ChgStopSendEcount < 8) if (ChgStopSendEcount < 8)
{ {
ChgStopSendEcount++;
StopMegAck_B(); StopMegAck_B();
} }
else else
{ {
ChgStopSendTick = 0;
TCUCurChgRecd_B.TCUChgStopNotetrl = 0; //停止发送 TCUCurChgRecd_B.TCUChgStopNotetrl = 0; //停止发送
ChgStopSendEcount = 0;
if(TCUCurChgRecd_B.TCUChgStopCompNotetrl == 0
&& ChargeCtrl_B.CurProcess == eChgPro_ChgIdle
&& TCUCtrl_B.CurScreen == eLcdPro_TCUMainMenu)
{
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 1;
}
} }
} }
} }
else if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 1)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/) else
{ {
stopCompSend_B(); ChgStopSendTick = 0;
ChgRecordSendTick = GetSystemTick(); ChgStopSendEcount = 0;
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 2;
} }
else if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 2)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/)
if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 1)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/)
{ {
if ((GetSystemTick() -ChgRecordSendTick) > (250UL)) if ((GetSystemTick() -ChgRecordSendTick) > (250UL))
{ {
ChgRecordSendErr++; ChgRecordSendErr++;
ChgRecordSendTick = GetSystemTick();
if (ChgRecordSendErr < 20) //超时5S if (ChgRecordSendErr < 20) //超时5S
{ //超时小于20次 { //超时小于20次
stopCompSend_B(); stopCompSend_B();
ChgRecordSendTick = GetSystemTick();
} }
else else
{ //超时大于,保存 { //超时大于,保存
TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送 TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus_B.ErrData.Value.stopCompAck = 1; TCUCommuStatus_B.ErrData.Value.stopCompAck = 1;
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 3; TCUCurChgRecd_B.TCUChgStopCompNotetrl = 3;
ChgRecordSendErr = 0;
} }
} }
} }
else if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 3)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/) else if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 3)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/)
{ {
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 0; //超时触发 TCUCurChgRecd_B.TCUChgStopCompNotetrl = 0; //超时触发
TCUCurChgRecd_B.TCUChargeEnable = 0; //归零
TCUCurChgRecd_B.TCUChgStopType = 0; TCUCurChgRecd_B.TCUChgStopType = 0;
}
else
{
ChgRecordSendErr = 0; ChgRecordSendErr = 0;
ChgRecordSendTick = 0;
} }
} }
......
...@@ -55,6 +55,7 @@ typedef struct { ...@@ -55,6 +55,7 @@ typedef struct {
u8 ChargingServiceSetValue; //保留下发设置值 u8 ChargingServiceSetValue; //保留下发设置值
u8 ServiceContralVaildValue; //服务控制下发失败原因 0成功 u8 ServiceContralVaildValue; //服务控制下发失败原因 0成功
u8 ElectLockNum;
u8 ElectLockSetValue; //保留下发设置值 u8 ElectLockSetValue; //保留下发设置值
u8 ElectLockVaildValue; //电子锁控制下发失败原因 0成功 u8 ElectLockVaildValue; //电子锁控制下发失败原因 0成功
......
...@@ -99,7 +99,7 @@ void TCUProPrstart(StructTCUCtrl *pLcdCtrl) ...@@ -99,7 +99,7 @@ void TCUProPrstart(StructTCUCtrl *pLcdCtrl)
if(TCUCurChgRecd.StarChgResult== 1)//允许启动 if(TCUCurChgRecd.StarChgResult== 1)//允许启动
{ {
TCUCurChgRecd.TCUChargeEnable = 1; TCUCurChgRecd.TCUChargeEnable = 1;
if(StartMeg_A.PlugToChgFlag) if(StartMeg_A.StarChgType)
{ {
TCUCurChgRecd.TCUChargeEnable = 2; TCUCurChgRecd.TCUChargeEnable = 2;
PlugToChgTick = GetSystemTick(); PlugToChgTick = GetSystemTick();
...@@ -125,7 +125,7 @@ void TCUProPrstart_B(StructTCUCtrl *pLcdCtrl) ...@@ -125,7 +125,7 @@ void TCUProPrstart_B(StructTCUCtrl *pLcdCtrl)
if(TCUCurChgRecd_B.StarChgResult== 1)//允许启动 if(TCUCurChgRecd_B.StarChgResult== 1)//允许启动
{ {
TCUCurChgRecd_B.TCUChargeEnable = 1; TCUCurChgRecd_B.TCUChargeEnable = 1;
if(StartMeg_B.PlugToChgFlag) if(StartMeg_B.StarChgType)
{ {
TCUCurChgRecd_B.TCUChargeEnable = 2; TCUCurChgRecd_B.TCUChargeEnable = 2;
PlugToChgTick_B = GetSystemTick(); PlugToChgTick_B = GetSystemTick();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论