提交 bf30d83f 作者: wysheng

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

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