提交 5a5d23e5 作者: wysheng

修复一些错误

1. 错误的发送停止充电完成
2. BMS需求电压 电流
上级 6152cb7a
......@@ -47,7 +47,7 @@ void TCURxIrqHandle(void)
StructTCUSend Frame;
Union1939Id Id1939 =
{
.Mult = 0,
.Mult = 0,
};
IrSta = MCP2515_B_ReadStatus();
portBASE_TYPE taskWoken = pdFALSE;
......@@ -80,7 +80,7 @@ void TCURxIrqHandle(void)
if (Id1939.Disp.DP)
Frame.Pgn += 0x010000;
}
else
else
{
Frame.DA = 0xFF;
Frame.Pgn = (Id1939.Disp.PF << 8) +Id1939.Disp.DA_PS;
......@@ -91,23 +91,23 @@ void TCURxIrqHandle(void)
switch (Frame.Pgn)
{
case eCmd_start: // 充电启动帧
case eCmd_stop: // 充电停止帧
case eCmd_time: // 对时帧
case eCmd_versi: // 版本校验帧
case eCmd_param: // 下发充电参数信息帧
case eCmd_SerCon: // 充电服务启停控制帧
case eCmd_Gun: // 电子锁可控制帧
case eCmd_power: // 功率调节控制帧
case eCmd_Query: // 充电桩配置信息查询帧
case eCmd_verificationAck: //车辆验证应答帧
////////////状态帧/////////////////
case eCmd_startCompAck: // 充电启动完成应答帧
case eCmd_stopCompAck: // 充电停止完成应答帧
case eCmd_start: // 充电启动帧
case eCmd_stop: // 充电停止帧
case eCmd_time: // 对时帧
case eCmd_versi: // 版本校验帧
case eCmd_param: // 下发充电参数信息帧
case eCmd_SerCon: // 充电服务启停控制帧
case eCmd_Gun: // 电子锁可控制帧
case eCmd_power: // 功率调节控制帧
case eCmd_Query: // 充电桩配置信息查询帧
case eCmd_verificationAck: //车辆验证应答帧
////////////状态帧/////////////////
case eCmd_startCompAck: // 充电启动完成应答帧
case eCmd_stopCompAck: // 充电停止完成应答帧
///////////数据帧/直流////////////
case eCmd_DCTCUMeasu: // 计费单元遥测帧
///////////心跳帧///////////
case eCmd_TcuHeart: // 计费单元心跳
case eCmd_TcuHeart: // 计费单元心跳
case eCmd_TCUErroComm: // 计费单元错误帧
Frame.Prio = Id1939.Disp.Prio;
Frame.DP = Id1939.Disp.DP;
......@@ -126,7 +126,7 @@ void TCURxIrqHandle(void)
Frame.Data[5] = RxMsg.Data[5];
Frame.Data[6] = RxMsg.Data[6];
Frame.Data[7] = RxMsg.Data[7];
//if(Frame.DA == ChargerCont1939Addr)
{
if (pdTRUE == xQueueSendFromISR(TCUMsg, &Frame, &taskWoken))
......@@ -174,7 +174,7 @@ void TCURxIrqHandle(void)
if (Id1939.Disp.DP)
Frame.Pgn += 0x010000;
}
else
else
{
Frame.DA = 0xFF;
Frame.Pgn = (Id1939.Disp.PF << 8) +Id1939.Disp.DA_PS;
......@@ -185,24 +185,24 @@ void TCURxIrqHandle(void)
switch (Frame.Pgn)
{
case eCmd_start: // 充电启动帧
case eCmd_stop: // 充电停止帧
case eCmd_time: // 对时帧
case eCmd_versi: //版本校验帧
case eCmd_param: // 下发充电参数信息帧
case eCmd_SerCon: // 充电服务启停控制帧
case eCmd_Gun: // 电子锁可控制帧
case eCmd_power: // 功率调节控制帧
case eCmd_Query: // 充电桩配置信息查询帧
case eCmd_verificationAck: //车辆验证应答帧
////////////状态帧/////////////////
case eCmd_startCompAck: // 充电启动完成应答帧
case eCmd_stopCompAck: // 充电停止完成应答帧
case eCmd_start: // 充电启动帧
case eCmd_stop: // 充电停止帧
case eCmd_time: // 对时帧
case eCmd_versi: //版本校验帧
case eCmd_param: // 下发充电参数信息帧
case eCmd_SerCon: // 充电服务启停控制帧
case eCmd_Gun: // 电子锁可控制帧
case eCmd_power: // 功率调节控制帧
case eCmd_Query: // 充电桩配置信息查询帧
case eCmd_verificationAck: //车辆验证应答帧
////////////状态帧/////////////////
case eCmd_startCompAck: // 充电启动完成应答帧
case eCmd_stopCompAck: // 充电停止完成应答帧
///////////数据帧/直流////////////
///////////心跳帧///////////
case eCmd_TcuHeart: // 计费单元心跳
case eCmd_TCUErroComm: // 计费单元错误帧
case eCmd_TcuHeart: // 计费单元心跳
case eCmd_TCUErroComm: // 计费单元错误帧
Frame.Prio = Id1939.Disp.Prio;
Frame.DP = Id1939.Disp.DP;
Frame.PF = Id1939.Disp.PF;
......@@ -350,7 +350,7 @@ u8 TCUCommInit(void)
//osMessageQDef(TCUMsg_B, 64, StructPgnRecv);
//TCUMsg_B = osMessageCreate(osMessageQ(TCUMsg_B), NULL);
TCUCanInit();
return TRUE;
}
......@@ -435,8 +435,8 @@ StructTCUEM TCUChgContralTCUEM_B;
StructTCUCControl TCUControlInfo =
{
.ChargingServiceFlag = 2,
.version = 0x0220,
.ChargingServiceFlag = 2,
.version = 0x0220,
.ChargeNum =
{
0, 0, 0, 0
......@@ -447,19 +447,19 @@ StructTCUCControl TCUControlInfo =
},
.DeviceModel =
{
0xFF, 0xff,
0xFF, 0xff,
},
//设备型号
.HardwareVersion =
{
0xFF, 0xff,
0xFF, 0xff,
},
//硬件版本
.SoftwareVersion =
{
0xFF, 0xff,
0xFF, 0xff,
},
//软件版本
......@@ -473,7 +473,7 @@ StructTCUCControl TCUControlInfo =
.DcMaxVolt = 7500, //模块最大电压 XXX.xV
.DcMinVolt = 3000, //模块最小电压 XXX.xV
.DcMaxCurrt = 2400, //模块最大电流 XX.xA
.DcMinCurrt = 0, //模块最小电流 XX.xA
.DcMinCurrt = 0, //模块最小电流 XX.xA
.PowerControl_A =
{
2, 0, 100
......@@ -528,7 +528,7 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio, u8 ad
u16 checkSum = 0;
u8 num = (len + 3 + 2) / 7;
if((len + 3 + 2) % 7) num++;
for (i = 0; i < len; i++)
{
checkSum += pfram[i];
......@@ -551,13 +551,13 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio, u8 ad
else if (i == num) //最后一包
{
FrameSend.Data[0] = i;
if(len < lenFlag)
{
FrameSend.Data[1] = (u8)checkSum;
FrameSend.Data[2] = (u8) (checkSum >> 8);
memset(&FrameSend.Data[3], 0x00, 5);
}
else
{
......@@ -567,9 +567,9 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio, u8 ad
if((len - lenFlag + 2)<7)
memset(&FrameSend.Data[len - lenFlag + 3], 0x00, 5 - len + lenFlag);
}
}
else
else
{
FrameSend.Data[0] = i;
memcpy(&FrameSend.Data[1], &pfram[lenFlag], 7);
......@@ -612,7 +612,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
TCUCtrl.Param = 0;
TCUCurChgRecd.TCUChgStartNotetrl = 1; //回复充电开始发送标志位
}
else
else
{
TCUCurChgRecd.StarValid = 0; //参数下发失败
TCUCurChgRecd.TCUChgStartNotetrl = 1; //回复充电开始发送标志位
......@@ -622,7 +622,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
{
; //启动逻辑处理阶段不做处理
}
else
else
{
TCUCurChgRecd.TCUChgStartNotetrl = 1; //回复充电开始发送标志位
}
......@@ -638,7 +638,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
StartMeg_B.PlugToChgFlag = 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))
{
......@@ -648,7 +648,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
TCUCtrl.Param = 0;
TCUCurChgRecd_B.TCUChgStartNotetrl = 1; //回复充电开始发送标志位
}
else
else
{
TCUCurChgRecd_B.StarValid = 0; //参数下发失败
TCUCurChgRecd_B.TCUChgStartNotetrl = 1; //回复充电开始发送标志位
......@@ -713,7 +713,7 @@ u8 AllowDTUStartCharge(u8 * Reason)
*Reason = 0x1F;
else if (PillarError.Value.OutCurrt)
*Reason = 0x21;
else
else
{
*Reason = 0x00;
TCUCurChgRecd.StarChgResult = 1; //成功
......@@ -768,7 +768,7 @@ u8 AllowDTUStartCharge_B(u8 * Reason)
*Reason = 0x1F;
else if (PillarError_B.Value.OutCurrt)
*Reason = 0x21;
else
else
{
*Reason = 0x00;
TCUCurChgRecd_B.StarChgResult = 1; //成功
......@@ -794,7 +794,7 @@ void StartMegAck_A(void)
if (FALSE == AllowDTUStartCharge(&Reason))
Data[2] = 0x01;
else
else
Data[2] = 0x00;
Data[3] = Reason;
......@@ -819,7 +819,7 @@ void StartMegAck_B(void)
if (FALSE == AllowDTUStartCharge_B(&Reason))
Data[2] = 0x01;
else
else
Data[2] = 0x00;
Data[3] = Reason;
......@@ -890,7 +890,7 @@ u8 AllowDTUStartCompCharge(u8 * Reason)
*Reason = 0x30;
else if (TCUCurChgRecd.TCUStartCompresult == 2)
*Reason = 0x01; //控制导引故障
else
else
* Reason = 0x28; //其他故障
return FALSE;
......@@ -956,7 +956,7 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason)
*Reason = 0x30;
else if (TCUCurChgRecd_B.TCUStartCompresult == 2)
*Reason = 0x01; //控制导引故障
else
else
* Reason = 0x28; //其他故障
return FALSE;
......@@ -974,7 +974,7 @@ void startCompSend_A(void)
if (FALSE == AllowDTUStartCompCharge(&reason))
Data[len++] = 0x01;
else
else
Data[len++] = 0x00;
Data[len++] = reason;
......@@ -989,7 +989,7 @@ void startCompSend_A(void)
Data[len++] = 0x00;
Data[len++] = 0x00;
}
else
else
{
Data[len++] = 0x01;
Data[len++] = 0x01;
......@@ -998,7 +998,7 @@ void startCompSend_A(void)
if (ChgVer == eChgVer_2011)
Data[len++] = 0x01;
else
else
Data[len++] = 0x00;
Data[len++] = BrmMsg.BatType;
......@@ -1032,11 +1032,11 @@ void startCompSend_A(void)
Data[len++] = 0xDC; // BIN码 2
Data[len++] = 0x05; // 最大输出电流
Data[len++] = 0xa0; // BIN码 2
Data[len++] = 0x0F; //最小输出电流0A
Data[len++] = 0x0F; //最小输出电流0A
memcpy(&Data[len], BrmMsg.Vin, 17); //车辆识别码 BIN码 17
len += 17;
TCUMultiPackSendMsg(Data, len, eCmd_startComp, 4,ChargerCont1939Addr);
TCUMultiPackSendMsg(Data, 55, eCmd_startComp, 4,ChargerCont1939Addr);
}
......@@ -1052,7 +1052,7 @@ void startCompSend_B(void)
if (FALSE == AllowDTUStartCompCharge_B(&reason))
Data[len++] = 0x01;
else
else
Data[len++] = 0x00;
Data[len++] = reason;
......@@ -1067,7 +1067,7 @@ void startCompSend_B(void)
Data[len++] = 0x00;
Data[len++] = 0x00;
}
else
else
{
Data[len++] = 0x01;
Data[len++] = 0x01;
......@@ -1076,7 +1076,7 @@ void startCompSend_B(void)
if (ChgVer_B == eChgVer_2011)
Data[len++] = 0x01;
else
else
Data[len++] = 0x00;
Data[len++] = BrmMsg_B.BatType;
......@@ -1110,10 +1110,10 @@ void startCompSend_B(void)
Data[len++] = 0xDC; // BIN码 2
Data[len++] = 0x05; // 最大输出电流
Data[len++] = 0xa0; // BIN码 2
Data[len++] = 0x0F; //最小输出电流0A
Data[len++] = 0x0F; //最小输出电流0A
memcpy(&Data[len], BrmMsg_B.Vin, 17); //车辆识别码 BIN码 17
len += 17;
TCUMultiPackSendMsg(Data, len, eCmd_startComp, 4,ChargerCont1939Addr_B); //多包传输
TCUMultiPackSendMsg(Data, 55, eCmd_startComp, 4,ChargerCont1939Addr_B); //多包传输
}
......@@ -1130,7 +1130,7 @@ void ACkStartCompMeg(StructTCUSend * pPgnRecv)
TCUCurChgRecd.TCUChargeEnable = 0;
}
TCUCurChgRecd.TCUChgStarCompNotetrl = 3;
TCUCurChgRecd.TCUChgStarCompNotetrl = 0;
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
......@@ -1138,12 +1138,12 @@ void ACkStartCompMeg(StructTCUSend * pPgnRecv)
AckStartCompMeg_B.LoadSswitch = pPgnRecv->Data[1];
AckStartCompMeg_B.AckFlag = pPgnRecv->Data[2];
if (AckStartCompMeg_A.AckFlag == 01)
if (AckStartCompMeg_B.AckFlag == 01)
{
TCUCurChgRecd_B.TCUChargeEnable = 0;
}
TCUCurChgRecd_B.TCUChgStarCompNotetrl = 3;
TCUCurChgRecd_B.TCUChgStarCompNotetrl = 0;
}
}
......@@ -1181,7 +1181,7 @@ void StopMegAck_A(void)
TCUCurChgRecd.TCUChargeEnable = 0; //Bms停止标志
Data[1] = 00;
}
else
else
Data[1] = 01;
TCUSinglePackSendMsg(Data, 8, eCmd_stopAck, 4,ChargerCont1939Addr);
......@@ -1202,7 +1202,7 @@ void StopMegAck_B(void)
Data[1] = 00;
TCUCurChgRecd_B.TCUChargeEnable = 0; //b枪Bms停止标志
}
else
else
Data[1] = 01;
TCUSinglePackSendMsg(Data, 8, eCmd_stopAck, 4,ChargerCont1939Addr_B);
......@@ -1279,7 +1279,7 @@ void GetStopReason_A(u8 * stopReason)
*stopReason = 0x2B;
else if (ChargeCtrl.CurProcess == eChgPro_ChgBreak)
*stopReason = 0x2D;
else
else
* stopReason = 0x2c;
return;
......@@ -1355,7 +1355,7 @@ void GetStopReason_B(u8 * stopReason)
*stopReason = 0x2B;
else if (ChargeCtrl_B.CurProcess == eChgPro_B_ChgBreak)
*stopReason = 0x2D;
else
else
* stopReason = 0x2c;
return;
......@@ -1516,7 +1516,7 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
StructTime TimeBlock;
cp56time2a * time = NULL;
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.CommStage = TimeStage;
......@@ -1525,8 +1525,8 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
{
TCUCommuStatus_B.CommStage = TimeStage;
}
memcpy(time, &pPgnRecv->Data[1], 7);
TimeBlock.Year = time->year + 2000;
TimeBlock.Mon = time->month;
......@@ -1585,9 +1585,9 @@ void TCUVersionCheck(StructTCUSend * pPgnRecv)
{
TCUCommuStatus.VerChkVaild = 1; //版本校验成功
TCUCommuStatus.CommStage = VersionStage;
}
else
else
TCUCommuStatus.VerChkVaild = 0; //版本校验失败
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
......@@ -1598,12 +1598,12 @@ void TCUVersionCheck(StructTCUSend * pPgnRecv)
{
TCUCommuStatus_B.VerChkVaild = 1; //版本校验成功
TCUCommuStatus_B.CommStage = VersionStage;
}
else
else
TCUCommuStatus_B.VerChkVaild = 0; //版本校验失败
}
return;
......@@ -1628,7 +1628,7 @@ void TCUVersionCheckSent(u8 ChgNum)
{
TCUSinglePackSendMsg(Data, 8, eCmd_versiAck, 6,ChargerCont1939Addr_B);
}
}
......@@ -1662,16 +1662,16 @@ void TCUParamAck(u8 ChgNum)
if (TCUCommuStatus.VerChkVaild == 0)
Data[2] = 1; //版本校验失败
else
else
Data[2] = 2; //心跳超时
}
else
else
{
Data[1] = 0;
Data[2] = 0;
TCUCommuStatus.ParamVaild = 1;
}
TCUSinglePackSendMsg(Data, 8, eCmd_paramAck, 6,ChargerCont1939Addr);
}
else if(ChgNum == 2)
......@@ -1683,19 +1683,19 @@ void TCUParamAck(u8 ChgNum)
if (TCUCommuStatus_B.VerChkVaild == 0)
Data[2] = 1; //版本校验失败
else
else
Data[2] = 2; //心跳超时
}
else
else
{
Data[1] = 0;
Data[2] = 0;
TCUCommuStatus_B.ParamVaild = 1;
}
TCUSinglePackSendMsg(Data, 8, eCmd_paramAck, 6,ChargerCont1939Addr_B);
}
}
......@@ -1704,18 +1704,18 @@ void SerConAckAnalysis(StructTCUSend * pPgnRecv)
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.CommStage = ServiceContralStage;
if ((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02))
TCUCommuStatus.ServiceContralVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus.HeartBeatVaild))
TCUCommuStatus.ServiceContralVaildValue = 2; //通讯超时
else if (TCUCommuStatus.VerChkVaild == 0)
TCUCommuStatus.ServiceContralVaildValue = 3; //版本校验未完成
TCUCommuStatus.ServiceContralVaildValue = 3; //版本校验未完成
else if (TCUCommuStatus.ParamVaild == 0)
TCUCommuStatus.ServiceContralVaildValue = 4; //参数下发为未完成
else if (TCUCurChgRecd.TCUChargeEnable == 1)
TCUCommuStatus.ServiceContralVaildValue = 05;
else
else
TCUCommuStatus.ServiceContralVaildValue = 0;
TCUCommuStatus.ChargingServiceSetValue = pPgnRecv->Data[1];
......@@ -1726,18 +1726,18 @@ void SerConAckAnalysis(StructTCUSend * pPgnRecv)
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.CommStage = ServiceContralStage;
if ((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02))
TCUCommuStatus_B.ServiceContralVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus_B.HeartBeatVaild))
TCUCommuStatus_B.ServiceContralVaildValue = 2; //通讯超时
else if (TCUCommuStatus_B.VerChkVaild == 0)
TCUCommuStatus_B.ServiceContralVaildValue = 3; //版本校验未完成
TCUCommuStatus_B.ServiceContralVaildValue = 3; //版本校验未完成
else if (TCUCommuStatus_B.ParamVaild == 0)
TCUCommuStatus_B.ServiceContralVaildValue = 4; //参数下发为未完成
else if (TCUCurChgRecd_B.TCUChargeEnable == 1)
TCUCommuStatus_B.ServiceContralVaildValue = 05;
else
else
TCUCommuStatus_B.ServiceContralVaildValue = 0;
TCUCommuStatus_B.ChargingServiceSetValue = pPgnRecv->Data[1];
......@@ -1745,7 +1745,7 @@ void SerConAckAnalysis(StructTCUSend * pPgnRecv)
if (TCUCommuStatus_B.ServiceContralVaildValue == 0)
TCUControlInfo.ChargingServiceFlag = pPgnRecv->Data[1];
}
}
......@@ -1767,7 +1767,7 @@ void SerConAck(u8 ChgNum)
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus.ServiceContralVaildValue; //失败
......@@ -1784,7 +1784,7 @@ void SerConAck(u8 ChgNum)
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus_B.ServiceContralVaildValue; //失败
......@@ -1800,7 +1800,7 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.CommStage = ElectLockStage;
TCUCommuStatus.ElectLockSetValue = pPgnRecv->Data[2];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
......@@ -1809,28 +1809,28 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus.HeartBeatVaild))
TCUCommuStatus.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus.VerChkVaild == 0)
TCUCommuStatus.ElectLockVaildValue = 3; //版本校验未完成
TCUCommuStatus.ElectLockVaildValue = 3; //版本校验未完成
else if (TCUCommuStatus.ParamVaild == 0)
TCUCommuStatus.ElectLockVaildValue = 4; //参数下发为未完成
else if (TCUCurChgRecd.TCUChargeEnable == 1)
TCUCommuStatus.ElectLockVaildValue = 05;
else if (PillarError.Value.EleLock == 1)
TCUCommuStatus.ElectLockVaildValue = 07; //电子锁故障
else
else
TCUCommuStatus.ServiceContralVaildValue = 0;
if ((TCUCommuStatus.ServiceContralVaildValue == 0) || (TCUCommuStatus.ServiceContralVaildValue == 0x07))
{
if (TCUCommuStatus.ElectLockSetValue == 01)
LockSet(eSwSta_On);
else
else
LockSet(eSwSta_Off);
}
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.CommStage = ElectLockStage;
TCUCommuStatus_B.ElectLockSetValue = pPgnRecv->Data[2];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
......@@ -1839,21 +1839,21 @@ void ElectControlAnalysis(StructTCUSend * pPgnRecv)
else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus_B.HeartBeatVaild))
TCUCommuStatus_B.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus_B.VerChkVaild == 0)
TCUCommuStatus_B.ElectLockVaildValue = 3; //版本校验未完成
TCUCommuStatus_B.ElectLockVaildValue = 3; //版本校验未完成
else if (TCUCommuStatus_B.ParamVaild == 0)
TCUCommuStatus_B.ElectLockVaildValue = 4; //参数下发为未完成
else if (TCUCurChgRecd_B.TCUChargeEnable == 1)
TCUCommuStatus_B.ElectLockVaildValue = 05;
else if (PillarError.Value.EleLock == 1)
TCUCommuStatus_B.ElectLockVaildValue = 07; //电子锁故障
else
else
TCUCommuStatus_B.ServiceContralVaildValue = 0;
if ((TCUCommuStatus_B.ServiceContralVaildValue == 0) || (TCUCommuStatus_B.ServiceContralVaildValue == 0x07))
{
if (TCUCommuStatus_B.ElectLockSetValue == 01)
LockSet(eSwSta_On);
else
else
LockSet(eSwSta_Off);
}
}
......@@ -1867,7 +1867,7 @@ void ElectControlAck(u8 ChgNum)
0
};
if(ChgNum == 1)
{
Data[0] = 0;
......@@ -1882,7 +1882,7 @@ void ElectControlAck(u8 ChgNum)
Data[3] = 00; //成功
}
else
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus.ServiceContralVaildValue; //失败
......@@ -1903,7 +1903,7 @@ void ElectControlAck(u8 ChgNum)
Data[3] = 00; //成功
}
else
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus_B.ServiceContralVaildValue; //失败
......@@ -1926,7 +1926,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus.PowerControlVaildValue = 1; //数据合法性校验失败
else
else
{
TCUCommuStatus.PowerControlVaildValue = 0; //数据合法性校验成功
......@@ -1940,7 +1940,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
{
TCUControlInfo.PowerControl_A.Percentage = pPgnRecv->Data[3];
}
}
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
......@@ -1954,7 +1954,7 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus_B.PowerControlVaildValue = 1; //数据合法性校验失败
else
else
{
TCUCommuStatus_B.PowerControlVaildValue = 0; //数据合法性校验成功
......@@ -1968,10 +1968,10 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
{
TCUControlInfo.PowerControl_B.Percentage = pPgnRecv->Data[3];
}
}
}
}
......@@ -1981,7 +1981,7 @@ void PowerControlAck(u8 ChgNum)
{
0
};
if(ChgNum == 1)
{
Data[0] = 0;
......@@ -1995,7 +1995,7 @@ void PowerControlAck(u8 ChgNum)
Data[4] = 0;
Data[5] = 0;
}
else
else
{
Data[4] = 01;
Data[5] = TCUCommuStatus.PowerControlVaildValue; //失败
......@@ -2014,7 +2014,7 @@ void PowerControlAck(u8 ChgNum)
Data[4] = 0;
Data[5] = 0;
}
else
else
{
Data[4] = 01;
Data[5] = TCUCommuStatus_B.PowerControlVaildValue; //失败
......@@ -2079,7 +2079,7 @@ void InformationReporting_22_A(void)
if ((ChargeStopType == eChgStop_PillarReady_BatVoltError) && (TCUCurChgRecd.TCUChargeEnable == 1))
InformainReport_A.InfRe.BattPola = 01;
else
else
InformainReport_A.InfRe.BattPola = 0;
InformainReport_A.InfRe.ContGuid = 0; //控制导引
......@@ -2088,7 +2088,7 @@ void InformationReporting_22_A(void)
if ((BstMsg.StopTruble.Value.ComponentTemp == 0x01) && (TCUCurChgRecd.TCUChargeEnable == 1))
InformainReport_A.InfRe.ConnTemp = 0x01;
else
else
InformainReport_A.InfRe.ConnTemp = 0x00;
InformainReport_A.InfRe.PutBack = PillarError.Value.PutBack;
......@@ -2099,7 +2099,7 @@ void InformationReporting_22_A(void)
(0 != CemMsg.Cem.Value.Bcs) || (0 != CemMsg.Cem.Value.Bcl) || (0 != CemMsg.Cem.Value.Bst) ||
(0 != CemMsg.Cem.Value.Bsd)) && (TCUCurChgRecd.TCUChargeEnable == 1))
InformainReport_A.InfRe.BMSComm = 01;
else
else
InformainReport_A.InfRe.BMSComm = 00;
InformainReport_A.InfRe.InVoltHi = 00;
......@@ -2107,12 +2107,12 @@ void InformationReporting_22_A(void)
if ((ChargeStopType == eChgStop_Run_VoltOutHighErr) && (TCUCurChgRecd.TCUChargeEnable == 1))
InformainReport_A.InfRe.DcVolHi = 01;
else
else
InformainReport_A.InfRe.DcVolHi = 0;
if ((ChargeStopType == eChgStop_Run_CurrtOutHighErr) && (TCUCurChgRecd.TCUChargeEnable == 1))
InformainReport_A.InfRe.DCCurrHi = 01;
else
else
InformainReport_A.InfRe.DCCurrHi = 0;
......@@ -2138,14 +2138,14 @@ void InformationReporting_22_A(void)
((InformainReport_A.data[2] &0xfD) != 0) || ((InformainReport_A.data[3] &0x00) != 0) ||
((InformainReport_A.data[4] &0x00) != 0) || ((InformainReport2_B.data & 0x07CB) != 0))
InformainReport_A.InfRe.sumFalt = 01;
else
else
InformainReport_A.InfRe.sumFalt = 00;
if (((InformainReport_A.data[0] &0x00) != 0) || ((InformainReport_A.data[1] &0x00) != 0) ||
((InformainReport_A.data[2] &0x10) != 0) || ((InformainReport_A.data[3] &0xFF) != 0) ||
((InformainReport_A.data[4] &0x0f) != 0) || ((InformainReport2_B.data & 0x52) != 0))
InformainReport_A.InfRe.sumWarm = 01;
else
else
InformainReport_A.InfRe.sumWarm = 00;
memcpy(&Data[1], InformainReport_A.data, 5);
......@@ -2195,7 +2195,7 @@ void InformationReporting_22_B(void)
if ((ChargeStopType_B == eChgStop_PillarReady_BatVoltError) && (TCUCurChgRecd_B.TCUChargeEnable == 1))
InformainReport_B.InfRe.BattPola = 01;
else
else
InformainReport_B.InfRe.BattPola = 0;
InformainReport_B.InfRe.ContGuid = 0; //控制导引
......@@ -2204,7 +2204,7 @@ void InformationReporting_22_B(void)
if ((BstMsg_B.StopTruble.Value.ComponentTemp == 0x01) && (TCUCurChgRecd_B.TCUChargeEnable == 1))
InformainReport_B.InfRe.ConnTemp = 0x01;
else
else
InformainReport_B.InfRe.ConnTemp = 0x00;
InformainReport_B.InfRe.PutBack = PillarError_B.Value.PutBack;
......@@ -2215,7 +2215,7 @@ void InformationReporting_22_B(void)
(0 != CemMsg_B.Cem.Value.Bcs) || (0 != CemMsg_B.Cem.Value.Bcl) || (0 != CemMsg_B.Cem.Value.Bst) ||
(0 != CemMsg_B.Cem.Value.Bsd)) && (TCUCurChgRecd_B.TCUChargeEnable == 1))
InformainReport_B.InfRe.BMSComm = 01;
else
else
InformainReport_B.InfRe.BMSComm = 00;
InformainReport_B.InfRe.InVoltHi = 00;
......@@ -2223,12 +2223,12 @@ void InformationReporting_22_B(void)
if ((ChargeStopType_B == eChgStop_Run_VoltOutHighErr) && (TCUCurChgRecd_B.TCUChargeEnable == 1))
InformainReport_B.InfRe.DcVolHi = 01;
else
else
InformainReport_B.InfRe.DcVolHi = 0;
if ((ChargeStopType_B == eChgStop_Run_CurrtOutHighErr) && (TCUCurChgRecd_B.TCUChargeEnable == 1))
InformainReport_B.InfRe.DCCurrHi = 01;
else
else
InformainReport_B.InfRe.DCCurrHi = 0;
......@@ -2254,14 +2254,14 @@ void InformationReporting_22_B(void)
((InformainReport_B.data[2] &0xfD) != 0) || ((InformainReport_B.data[3] &0x00) != 0) ||
((InformainReport_B.data[4] &0x00) != 0) || ((InformainReport2_B.data & 0x07CB) != 0))
InformainReport_B.InfRe.sumFalt = 01;
else
else
InformainReport_B.InfRe.sumFalt = 00;
if (((InformainReport_B.data[0] &0x00) != 0) || ((InformainReport_B.data[1] &0x00) != 0) ||
((InformainReport_B.data[2] &0x10) != 0) || ((InformainReport_B.data[3] &0xFF) != 0) ||
((InformainReport_B.data[4] &0x0f) != 0) || ((InformainReport2_B.data & 0x52) != 0))
InformainReport_B.InfRe.sumWarm = 0x01;
else
else
InformainReport_B.InfRe.sumWarm = 0x00;
memcpy(&Data[1], InformainReport_B.data, 5);
......@@ -2282,7 +2282,7 @@ void InformationReporting_23_A(void)
if (((ChargeError.Value.IsolateWarn == 1) || (ChargeError.Value.IsolateError == 1)) &&
(TCUCurChgRecd.TCUChargeEnable == 1))
InformainReport2_A.InfRe.ImdWarm = 0x01;
else
else
InformainReport2_A.InfRe.ImdWarm = 0x00;
InformainReport2_A.InfRe.DrainResist = 0x00;
......@@ -2309,7 +2309,7 @@ void InformationReporting_23_B(void)
if (((ChargeError_B.Value.IsolateWarn == 1) || (ChargeError_B.Value.IsolateError == 1)) &&
(TCUCurChgRecd_B.TCUChargeEnable == 1))
InformainReport2_B.InfRe.ImdWarm = 0x01;
else
else
InformainReport2_B.InfRe.ImdWarm = 0x00;
InformainReport2_B.InfRe.DrainResist = 0x00;
......@@ -2331,33 +2331,68 @@ void measuringReporting20_A(void)
u8 len = 0;
Data[len++] = 0x00;
//充电输出电压
Data[len++] = GetDcModuleVolt();
Data[len++] = GetDcModuleVolt() >> 8;
Data[len++] = GetDcModuleCurrt();
Data[len++] = GetDcModuleCurrt() >> 8;
//充电输出电流
Data[len++] = 4000-GetDcModuleCurrt();
Data[len++] = (4000-GetDcModuleCurrt()) >> 8;
//SOC
Data[len++] = BcsMsg.CurSoc;
Data[len++] = BsmMsg.HighTemp;
//电池组最低温度
Data[len++] = BsmMsg.LowTemp;
//电池组最高温度
Data[len++] = BsmMsg.HighTemp;
//单体电池最高 电压
Data[len++] = BcsMsg.BatVoltAndGroup.Value.Volt;
Data[len++] = BcsMsg.BatVoltAndGroup.Value.Volt >> 8;
//单体电池最低 电压
Data[len++] = BcsMsg.BatVoltAndGroup.Value.Volt;
Data[len++] = BcsMsg.BatVoltAndGroup.Value.Volt >> 8;
//充电机环境温 度
Data[len++] = Dht12_GetTemp() + 50;
//充电导引电压
Data[len++] = 0;
Data[len++] = 0;
//BMS需求电压
Data[len++] = BclMsg.NeedVolt;
Data[len++] = BclMsg.NeedVolt >> 8; //12V
Data[len++] = BclMsg.NeedVolt >> 8;
//BMS需求电流
Data[len++] = BclMsg.NeedCurrt;
Data[len++] = BclMsg.NeedCurrt >> 8;
//充电模式
Data[len++] = BclMsg.ChgType;
//BMS充电电压测量值
Data[len++] = BcsMsg.ChgVolt;
Data[len++] = BcsMsg.ChgVolt >> 8; //12V
Data[len++] = BcsMsg.ChgVolt >> 8;
//BMS充电电流测量值
Data[len++] = BcsMsg.ChgCurrt;
Data[len++] = BcsMsg.ChgCurrt >> 8;
//估算剩余充电时间
Data[len++] = BcsMsg.RemainMin;
Data[len++] = BcsMsg.RemainMin>>8;
//充电接口温度探头1温度(充电接口1 DC+)
Data[len++] = Adc_Get_a_PTemp() + 50;
//充电接口温度探头2温度(充电接口1 DC-)
Data[len++] = Adc_Get_a_NTemp() + 50;
//充电接口温度探头3温度(充电接口2 DC+)
Data[len++] = Adc_Get_B_PTemp() + 50;
//充电接口温度探头4温度(充电接口2 DC-)
Data[len++] = Adc_Get_B_NTemp() + 50;
//电能表当前读数
len += 4;
TCUMultiPackSendMsg(Data, 34, eCmd_DCConMeasu, 6,ChargerCont1939Addr);
}
......@@ -2370,16 +2405,21 @@ void measuringReporting20_B(void)
Data[len++] = 0x00;
Data[len++] = GetDcModuleVolt_B();
Data[len++] = GetDcModuleVolt_B() >> 8;
Data[len++] = GetDcModuleCurrt_B();
Data[len++] = GetDcModuleCurrt_B() >> 8;
Data[len++] = 4000-GetDcModuleCurrt_B();
Data[len++] = (4000-GetDcModuleCurrt_B()) >> 8;
Data[len++] = BcsMsg_B.CurSoc;
Data[len++] = BsmMsg_B.HighTemp;
Data[len++] = BsmMsg_B.LowTemp;
Data[len++] = BsmMsg_B.HighTemp;
Data[len++] = BcsMsg_B.BatVoltAndGroup.Value.Volt;
Data[len++] = BcsMsg_B.BatVoltAndGroup.Value.Volt >> 8;
Data[len++] = BcsMsg_B.BatVoltAndGroup.Value.Volt;
Data[len++] = BcsMsg_B.BatVoltAndGroup.Value.Volt >> 8;
Data[len++] = Dht12_GetTemp() + 50;
//充电导引电压
Data[len++] = 0;
Data[len++] = 0;
Data[len++] = BclMsg_B.NeedVolt;
Data[len++] = BclMsg_B.NeedVolt >> 8; //12V
Data[len++] = BclMsg_B.NeedCurrt;
......@@ -2390,7 +2430,7 @@ void measuringReporting20_B(void)
Data[len++] = BcsMsg_B.ChgCurrt;
Data[len++] = BcsMsg_B.ChgCurrt >> 8;
Data[len++] = BcsMsg_B.RemainMin;
Data[len++] = BcsMsg_B.RemainMin>>8;
Data[len++] = Adc_Get_a_PTemp() + 50;
Data[len++] = Adc_Get_a_NTemp() + 50;
Data[len++] = Adc_Get_B_PTemp() + 50;
......@@ -2403,7 +2443,7 @@ void ChgInfornQueryAck(u8 ChgNum)
{
u8 len = 0;
u8 data[64]={0};
data[len++] = 0;
memcpy(&data[len], TCUControlInfo.ManufacturerCode, 4);
len += 4;
......@@ -2436,7 +2476,7 @@ void ChgInfornQueryAck(u8 ChgNum)
{
TCUMultiPackSendMsg(data, 37, eCmd_QueryAck, 6, ChargerCont1939Addr_B);
}
}
......@@ -2524,7 +2564,7 @@ void TCUErroCommAnalysis(StructTCUSend * pPgnRecv)
//TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
//TCUCommuStatus.HeartBeatErrCnt = 0;
//HeartBeatVaild = 0; //心跳失效
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
......@@ -2539,13 +2579,33 @@ void TCUErroCommAnalysis(StructTCUSend * pPgnRecv)
void TCUMeasuRecv(StructTCUSend * pPgnRecv)
{
u16 temp = 0;
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.DCMeasuErrCnt = 0;
//充电电量
temp = pPgnRecv->Data[2];
temp = (temp<<8) + pPgnRecv->Data[1];
MeterValue.Energy = temp;
//充电时长
temp = pPgnRecv->Data[4];
temp = (temp<<8) + pPgnRecv->Data[3];
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.DCMeasuErrCnt = 0;
//充电电量
temp = pPgnRecv->Data[2];
temp = (temp<<8) + pPgnRecv->Data[1];
MeterValue_B.Energy = temp;
//充电时长
temp = pPgnRecv->Data[4];
temp = (temp<<8) + pPgnRecv->Data[3];
}
}
......
......@@ -141,13 +141,13 @@ void DcModuleManageProcess_SmartAllocation(void)
Flag = Flag << 1;
}
DcModuleManage_All.ValidNum = Count;
//DcModuleManage_All.ValidNum = Count;
for (i = 0; i < DcModuleGroupSize; i++)
{
Currt = 0;
Volt = 0;
Count = 0;
status = DcModuleGroup[i].modules[0].status;
for (j = 0; j < DcModuleGroup[i].num; j++)
{
......@@ -169,43 +169,22 @@ void DcModuleManageProcess_SmartAllocation(void)
DcModuleGroup[i].modules[j].status = Invalid;
}
status = status | DcModuleGroup[i].modules[j].status;
}
DcModuleGroup[i].ValidNum = Count;
DcModuleGroup[i].Voltage = Volt / Count;
DcModuleGroup[i].Current = Currt;
}
for (i = 0; i < DcModuleGroupSize; i++)
{
status = DcModuleGroup[i].modules[0].status;
if (DcModuleGroup[i].num != DcModuleGroup[i].ValidNum)
{
}
if (DcModuleGroup[i].num > 1)
{
if (status != Valid)
{
if (DcModuleGroup[i].modules[1].status != Valid)
{
DcModuleGroup[i].status = Invalid;
if (status == Invalid)
DcModuleGroup[i].status = status;
else if (DcModuleGroup[i].status == Invalid)
DcModuleGroup[i].status = status;
}
}
}
else
{
if (status != Valid)
{
DcModuleGroup[i].status = Invalid;
}
}
}
Currt = 0;
Currt_A = 0;
Currt_B = 0;
......@@ -216,6 +195,10 @@ void DcModuleManageProcess_SmartAllocation(void)
Count_A = 0;
Count_B = 0;
u8 groupCount = 0;
u8 groupCount_A = 0;
u8 groupCount_B = 0;
for (i = 0; i < DcModuleGroupSize; i++)
{
if (DcModuleGroup[i].status == Valid)
......@@ -223,27 +206,48 @@ void DcModuleManageProcess_SmartAllocation(void)
Volt += DcModuleGroup[i].Voltage;
Currt += DcModuleGroup[i].Current;
Count += DcModuleGroup[i].ValidNum;
groupCount++;
}
else if (DcModuleGroup[i].status == Hold_A)
{
Volt_A += DcModuleGroup[i].Voltage;
Currt_A += DcModuleGroup[i].Current;
Count_A += DcModuleGroup[i].ValidNum;
groupCount_A++;
}
else if (DcModuleGroup[i].status == Hold_B)
{
Volt_B += DcModuleGroup[i].Voltage;
Currt_B += DcModuleGroup[i].Current;
Count_B += DcModuleGroup[i].ValidNum;
groupCount_B++;
}
}
DcModuleCtrl.ActualCurrt = Currt_A;
DcModuleCtrl.ActualVolt = Volt_A;
DcModuleCtrl_ALL.ActualCurrt = Currt_A;
DcModuleCtrl_ALL.ActualVolt = Volt_A;
if (groupCount_A)
DcModuleCtrl.ActualVolt = Volt_A / groupCount_A;
else
DcModuleCtrl.ActualVolt = 0;
DcModuleCtrl_ALL.ActualCurrt = Currt;
if (groupCount)
DcModuleCtrl_ALL.ActualVolt = Volt / groupCount;
else
DcModuleCtrl_ALL.ActualVolt = 0;
DcModuleCtrl_B.ActualCurrt = Currt_B;
DcModuleCtrl_B.ActualVolt = Volt_B;
if (groupCount_B)
DcModuleCtrl_B.ActualVolt = Volt_B / (groupCount_B);
else
DcModuleCtrl_B.ActualVolt = 0;
DcModuleManage.ValidNum = Count_A;
DcModuleManage_All.ValidNum = Count;
......@@ -273,93 +277,98 @@ void DcModuleCtrlProcess_SmartAllocation(void)
StructDcModuleSend DataSend;
u32 Temp;
u8 addr;
u32 Volt = 0;
u8 Cmd = 0;
u32 Volt = 0;
u8 Cmd = 0;
Temp = 0;
for (u8 i = 0; i < DcModuleGroupSize; i++)
{
if (status[i] != DcModuleGroup[i].status)
{
Temp = 1;
Volt = DcModuleAbility.MinVolt * 100;
Temp = 1;
Volt = DcModuleAbility.MinVolt * 100;
if (DcModuleGroup[i].status == Valid)
{
//关机
if (status[i] == Hold_A)
{
if(i == 0)
if (i == 0)
{
DcModuleManage.SetVolt = DcModuleAbility.MinVolt * 100;
DcModuleManage.SetCurrt = DcModuleAbility.MinCurrt * 100;
DcModuleManage.Cmd = 0xAA; //关机
DcModuleManage.Cmd = 0xAA; //关机
}
else if(i == 1)
else if (i == 1)
{
GPIO_ResetBits(RELAY_K1K2_Port,RELAY_K1K2_Pin);
GPIO_ResetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin);
}
else if(i == 2)
else if (i == 2)
{
GPIO_ResetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin);
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else// if(i == 3)
else // if(i == 3)
{
GPIO_ResetBits(RELAY_K3K4_Port,RELAY_K3K4_Pin);
GPIO_ResetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
}
}
else if (status[i] == Hold_B)
{
if(i==2)
if (i == 2)
{
DcModuleManage_B.SetVolt = DcModuleAbility.MinVolt * 100;
DcModuleManage_B.SetCurrt = DcModuleAbility.MinCurrt * 100;
DcModuleManage_B.Cmd = 0xAA; //关机
DcModuleManage_B.Cmd = 0xAA; //关机
}
else if(i == 0)
else if (i == 0)
{
GPIO_ResetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin);
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else if(i == 1)
else if (i == 1)
{
GPIO_ResetBits(RELAY_K7K8_Port,RELAY_K7K8_Pin);
GPIO_ResetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);
}
else// if(i == 3)
else // if(i == 3)
{
GPIO_ResetBits(RELAY_K9K10_Port,RELAY_K9K10_Pin);
GPIO_ResetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
}
}
//Volt = DcModuleAbility.MinVolt * 100;
Cmd = 0xAA; //关机
Cmd = 0xAA; //关机
}
else if (DcModuleGroup[i].status == Hold_A)
{
if(i!=0) //升压
if (i != 0) //升压
{
Volt = DcModuleManage.SetVolt;
Volt = DcModuleManage.SetVolt;
}
else if(status[i] == Hold_B)
else if (status[i] == Hold_B)
{
GPIO_ResetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin);
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
Cmd = 0x55; //开机
Cmd = 0x55; //开机
}
else if (DcModuleGroup[i].status == Hold_B)
{
if(i!=2) //升压
if (i != 2) //升压
{
Volt = DcModuleManage.SetVolt;
Volt = DcModuleManage.SetVolt;
}
else if(status[i] == Hold_A)
else if (status[i] == Hold_A)
{
GPIO_ResetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin);
GPIO_ResetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
Cmd = 0x55; //开机
Cmd = 0x55; //开机
}
else
{
}
for (u8 j = 0; j < DcModuleGroup[i].num; j++)
{
addr = DcModuleGroup[i].modules[j].addr;
......@@ -371,7 +380,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
Temp = DcModuleAbility.MinCurrt * 100;
DataSend.Data[2] = (u8) (Temp >> 8);
DataSend.Data[3] = (u8) (Temp >> 0);
Temp = Volt;//DcModuleAbility.MinVolt * 100;
Temp = Volt; //DcModuleAbility.MinVolt * 100;
DataSend.Data[4] = (u8) (Temp >> 24);
DataSend.Data[5] = (u8) (Temp >> 16);
DataSend.Data[6] = (u8) (Temp >> 8);
......@@ -382,7 +391,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
//osDelay(10);
}
DataSend.Id = 0x1307C080 + addr;
DataSend.Len = 8;
DataSend.Data[0] = 0x02;
......@@ -392,7 +401,7 @@ void DcModuleCtrlProcess_SmartAllocation(void)
DataSend.Data[4] = 0x00;
DataSend.Data[5] = 0x00;
DataSend.Data[6] = 0x00;
DataSend.Data[7] = Cmd; //关机
DataSend.Data[7] = Cmd; //关机
//放入队列
if (pdTRUE != xQueueSend(DcModeMsg, &DataSend, 0))
......@@ -400,12 +409,14 @@ void DcModuleCtrlProcess_SmartAllocation(void)
//osDelay(10);
}
}
status[i] = DcModuleGroup[i].status;
}
}
if(Temp) return;
if (Temp)
return;
Temp = 0;
......@@ -413,7 +424,8 @@ void DcModuleCtrlProcess_SmartAllocation(void)
{
if (status1[i] != DcModuleGroup[i].status)
{
Temp = 1;
Temp = 1;
if (DcModuleGroup[i].status == Valid)
{
//切换继电器
......@@ -423,63 +435,65 @@ void DcModuleCtrlProcess_SmartAllocation(void)
}
else if (status[i] == Hold_B)
{
}
}
else if (DcModuleGroup[i].status == Hold_A)
{
//切换继电器
if(i==0)
if (i == 0)
{
}
else if(i == 1)
else if (i == 1)
{
GPIO_SetBits(RELAY_K1K2_Port,RELAY_K1K2_Pin);
GPIO_SetBits(RELAY_K1K2_Port, RELAY_K1K2_Pin);
}
else if(i == 2)
else if (i == 2)
{
GPIO_SetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin);
GPIO_SetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else// if(i == 3)
else // if(i == 3)
{
GPIO_SetBits(RELAY_K3K4_Port,RELAY_K3K4_Pin);
GPIO_SetBits(RELAY_K3K4_Port, RELAY_K3K4_Pin);
}
}
else if (DcModuleGroup[i].status == Hold_B)
{
//切换继电器
if(i==2)
if (i == 2)
{
}
else if(i == 0)
else if (i == 0)
{
GPIO_SetBits(RELAY_K5K6_Port,RELAY_K5K6_Pin);
GPIO_SetBits(RELAY_K5K6_Port, RELAY_K5K6_Pin);
}
else if(i == 1)
else if (i == 1)
{
GPIO_SetBits(RELAY_K7K8_Port,RELAY_K7K8_Pin);
GPIO_SetBits(RELAY_K7K8_Port, RELAY_K7K8_Pin);
}
else// if(i == 3)
else // if(i == 3)
{
GPIO_SetBits(RELAY_K9K10_Port,RELAY_K9K10_Pin);
GPIO_SetBits(RELAY_K9K10_Port, RELAY_K9K10_Pin);
}
}
else
{
//切换继电器
}
status1[i] = DcModuleGroup[i].status;
}
}
if(Temp) return;
if (Temp)
return;
if (LastFlag_A != DcModuleCtrl.CtrlFlag)
{
LastFlag_A = DcModuleCtrl.CtrlFlag;
......
......@@ -115,15 +115,15 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
MaxCurrt = abs((s32)BclMsg_B.NeedCurrt - 4000);
NeedCurrt = abs((s32)BclMsg_B.NeedCurrt - 4000);
static s16 GetCurrt_bak;
if(abs((s16)GetDcModuleCurrt_B()-GetCurrt_bak)<10 //ȶ
&& (abs((s16)NeedCurrt-(s16)GetDcModuleCurrt_B())>(DcModuleAbility.MaxCurrt*10))
&& (abs((s16)NeedCurrt-(s16)GetDcModuleCurrt_B())>(DcModuleAbility.MaxCurrt*10))
)
{
if(0 == UniChgTick)
UniChgTick = GetSystemTick();
if((GetSystemTick() - UniChgTick) > (5 * 1000))
{
if(NeedCurrt > GetDcModuleCurrt_B())
......@@ -169,14 +169,14 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
{
UniChgTick = 0;
GetCurrt_bak = GetDcModuleCurrt_B();
}
if(NeedCurrt > MaxCurrt)
NeedCurrt = MaxCurrt;
if(NeedCurrt > (DcModuleAbility.MaxCurrt*DcModuleManage_B.ValidNum))
NeedCurrt = DcModuleAbility.MaxCurrt*DcModuleManage_B.ValidNum;
if(NeedCurrt > (DcModuleAbility.MaxCurrt*(DcModuleManage_B.ValidNum+DcModuleManage_All.ValidNum)))
NeedCurrt = DcModuleAbility.MaxCurrt*(DcModuleManage_B.ValidNum+DcModuleManage_All.ValidNum);
MaxVolt = BcpMsg_B.ChgMaxVolt;
NeedVolt = BclMsg_B.NeedVolt;
......@@ -188,7 +188,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
CcsChgEnable = 1;
DcModuleSet_B(eSwSta_On, NeedVolt, NeedCurrt);
ChargeTimerSet_B(eSwSta_On);
}
}
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer_B))
{
......@@ -240,7 +240,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
}
}
if(0 != BsmMsg_B.Valid)
{
......@@ -342,6 +342,30 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
}
else
CemMsg_B.Cem.Value.Bcl = 0;
if(((GetSystemTick() - BcsMsg_B.RecvTick) >1000+500)&&(eChgVer_2011 == UserParam.ChgVer))
{
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;//ֶ֡
if((GetSystemTick() - BcsMsg_B.RecvTick) > MsgTimeout_B_5S)
{
......@@ -372,7 +396,7 @@ void ChgProChgRun_B(StructChargeCtrl_B *pChargeCtrl)
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable_B)
if(0 == TCUCurChgRecd_B.TCUChargeEnable)
{//ⲿƽ
CstMsg_B.StopReason.Value.Manual = 1;
CST_Send_B(&CstMsg_B);
......
......@@ -15,46 +15,51 @@
s32 GetChgVoltChgRun(void)
{
if(ImdValue.Vaild)
return ImdValue.PnVolt;
//if(eMeterSta_Unavail != MeterComm.Status)
// return MeterValue.Voltage;
if(BcsMsg.Valid)
return BcsMsg.ChgVolt;
return -1;
if (ImdValue.Vaild)
return ImdValue.PnVolt;
//if(eMeterSta_Unavail != MeterComm.Status)
// return MeterValue.Voltage;
if (BcsMsg.Valid)
return BcsMsg.ChgVolt;
return - 1;
}
s32 GetChgCurrtChgRun(void)
{
//if(eMeterSta_Unavail != MeterComm.Status)
// return MeterValue.Current/100;
if(BcsMsg.Valid)
return abs((s32)BcsMsg.ChgCurrt - 4000);
return -1;
//if(eMeterSta_Unavail != MeterComm.Status)
// return MeterValue.Current/100;
if (BcsMsg.Valid)
return abs((s32) BcsMsg.ChgCurrt - 4000);
return - 1;
}
extern StructDcModuleManage DcModuleManage_All;
void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
void ChgProChgRun(StructChargeCtrl * pChargeCtrl)
{
StructPgnRecv PgnRecv;
u32 CCS_SendTick = 0;
u32 CcStatusChkTick = 0;
u32 SocStopTick = 0;
StructPgnRecv PgnRecv;
u32 CCS_SendTick = 0;
u32 CcStatusChkTick = 0;
u32 SocStopTick = 0;
u16 MaxCurrt = 0;
u16 NeedCurrt = 0;
u16 MaxCurrt = 0;
u16 NeedCurrt = 0;
u16 MaxVolt = 0;
u16 NeedVolt = 0;
u16 MaxVolt = 0;
u16 NeedVolt = 0;
u16 CcsChgEnable = 0;
u16 CcsChgEnable = 0;
u32 BmsPauseTick = 0;
u32 BmsPauseTick = 0;
s32 Temp = 0;
u32 CurrtOutChkTick = 0;
s32 Temp = 0;
u32 CurrtOutChkTick = 0;
u32 UniChgTick = 0;
u32 UniChgTick = 0;
memset(&BemMsg, 0, sizeof(BemMsg));
memset(&CemMsg, 0, sizeof(CemMsg));
......@@ -65,11 +70,11 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
memset(&BmvMsg, 0xFF, sizeof(BmvMsg));
memset(&BmtMsg, 0xFF, sizeof(BmtMsg));
BmvMsg.Valid = 0;
BmtMsg.Valid = 0;
BmvMsg.Valid = 0;
BmtMsg.Valid = 0;
BemMsg.Valid = 0;
BstMsg.Valid = 0;
BemMsg.Valid = 0;
BstMsg.Valid = 0;
BmsCanInit();
osDelay(20);
......@@ -81,458 +86,519 @@ void ChgProChgRun(StructChargeCtrl *pChargeCtrl)
DrainResistSet(eSwSta_Off);
DcOutSet(eSwSta_On);
CcsChgEnable = 1;
CCS_Send(GetDcModuleVolt(), (4000-GetDcModuleCurrt()), GetChgMin(), CcsChgEnable);
CCS_SendTick = GetSystemTick();
BclMsg.RecvTick = GetSystemTick();
BcsMsg.RecvTick = GetSystemTick();
CcsChgEnable = 1;
CCS_Send(GetDcModuleVolt(), (4000 - GetDcModuleCurrt()), GetChgMin(), CcsChgEnable);
CCS_SendTick = GetSystemTick();
BclMsg.RecvTick = GetSystemTick();
BcsMsg.RecvTick = GetSystemTick();
BmsPauseTick = 0;
BmsPauseTick = 0;
CurrtOutChkTick = 0;
CurrtOutChkTick = 0;
UniChgEnable = FALSE;
UniChgTick = 0;
UniChgEnable = FALSE;
UniChgTick = 0;
while(1)
while (1)
{
if((GetSystemTick() - CCS_SendTick) > 50)
if ((GetSystemTick() -CCS_SendTick) > 50)
{
CCS_Send( MeterValue.Voltage, (4000- MeterValue.Current/100), GetChgMin(), CcsChgEnable);
CCS_SendTick = GetSystemTick();
CCS_Send(MeterValue.Voltage, (4000 - MeterValue.Current / 100), GetChgMin(), CcsChgEnable);
CCS_SendTick = GetSystemTick();
}
ChgPgnRecv(&PgnRecv);
if((0 != ChargePauseFlag) || (0 != BmsPauseTick))
if ((0 != ChargePauseFlag) || (0 != BmsPauseTick))
{
CcsChgEnable = 0;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
CcsChgEnable = 0;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
}
else if(0 != BclMsg.Valid)
else if (0 != BclMsg.Valid)
{
if(eChgVer_2011 != UserParam.ChgVer)
MaxCurrt = abs((s32)BcpMsg.ChgMaxCurrt - 4000);
else
MaxCurrt = abs((s32)BclMsg.NeedCurrt - 4000);
if (eChgVer_2011 != UserParam.ChgVer)
MaxCurrt = abs((s32) BcpMsg.ChgMaxCurrt - 4000);
else
MaxCurrt = abs((s32) BclMsg.NeedCurrt - 4000);
NeedCurrt = abs((s32) BclMsg.NeedCurrt - 4000);
NeedCurrt = abs((s32)BclMsg.NeedCurrt - 4000);
static s16 GetCurrt_bak;
static s16 GetCurrt_bak;
if(abs((s16)GetDcModuleCurrt()-GetCurrt_bak)<10 //ȶ
&& (abs((s16)NeedCurrt-(s16)GetDcModuleCurrt())>(DcModuleAbility.MaxCurrt*10))
)
if (abs((s16) GetDcModuleCurrt() -GetCurrt_bak) < 10 //ȶ
&& (abs((s16) NeedCurrt - (s16) GetDcModuleCurrt()) > (DcModuleAbility.MaxCurrt * 10)))
{
if(0 == UniChgTick)
if (0 == UniChgTick)
UniChgTick = GetSystemTick();
if((GetSystemTick() - UniChgTick) > (10 * 1000))
if ((GetSystemTick() -UniChgTick) > (10 * 1000))
{
if(NeedCurrt > GetDcModuleCurrt())
if (NeedCurrt > GetDcModuleCurrt())
{
if(DcModuleGroup[1].status == Valid)
if (DcModuleGroup[1].status == Valid)
{
DcModuleGroup[1].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[1].ValidNum;
}
else if(DcModuleGroup[3].status == Valid)
else if (DcModuleGroup[3].status == Valid)
{
DcModuleGroup[3].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[3].ValidNum;
}
else if(DcModuleGroup[2].status == Valid)
else if (DcModuleGroup[2].status == Valid)
{
DcModuleGroup[2].status = Hold_A;
DcModuleManage.ValidNum += DcModuleGroup[2].ValidNum;
if (DcModuleGroup[3].status == Hold_A)
{
DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
}
}
}
else
else
{
if(DcModuleGroup[2].status == Hold_A)
if (DcModuleGroup[2].status == Hold_A)
{
DcModuleGroup[2].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[2].ValidNum;
}
else if(DcModuleGroup[3].status == Hold_A)
else if (DcModuleGroup[3].status == Hold_A)
{
DcModuleGroup[3].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[3].ValidNum;
}
else if(DcModuleGroup[1].status == Hold_A)
else if (DcModuleGroup[1].status == Hold_A)
{
DcModuleGroup[1].status = Valid;
DcModuleManage.ValidNum -= DcModuleGroup[1].ValidNum;
}
}
UniChgTick = 0;
UniChgTick = 0;
}
}
else
else
{
UniChgTick = 0;
GetCurrt_bak = GetDcModuleCurrt();
UniChgTick = 0;
GetCurrt_bak = GetDcModuleCurrt();
}
if(NeedCurrt > MaxCurrt)
if (NeedCurrt > MaxCurrt)
NeedCurrt = MaxCurrt;
if(NeedCurrt > (DcModuleAbility.MaxCurrt*DcModuleManage.ValidNum))
NeedCurrt = DcModuleAbility.MaxCurrt*DcModuleManage.ValidNum;
MaxVolt = BcpMsg.ChgMaxVolt;
NeedVolt = BclMsg.NeedVolt;
if(NeedVolt > MaxVolt)
if (NeedCurrt > (DcModuleAbility.MaxCurrt * (DcModuleManage.ValidNum+DcModuleManage_All.ValidNum)))
NeedCurrt = DcModuleAbility.MaxCurrt * (DcModuleManage.ValidNum+DcModuleManage_All.ValidNum);
MaxVolt = BcpMsg.ChgMaxVolt;
NeedVolt = BclMsg.NeedVolt;
if (NeedVolt > MaxVolt)
NeedVolt = MaxVolt;
if(NeedVolt > DcModuleAbility.MaxVolt)
if (NeedVolt > DcModuleAbility.MaxVolt)
NeedVolt = DcModuleAbility.MaxVolt;
CcsChgEnable = 1;
CcsChgEnable = 1;
DcModuleSet(eSwSta_On, NeedVolt, NeedCurrt);
ChargeTimerSet(eSwSta_On);
}
/*ѹ쳣ж*/
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
if ((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
{
Temp = GetChgVoltChgRun();
if((0 != CcsChgEnable) && (Temp >= DcModuleAbility.MinVolt) && (Temp > GetDcModuleVoltSet()))
Temp = GetChgVoltChgRun();
if ((0 != CcsChgEnable) && (Temp >= DcModuleAbility.MinVolt) && (Temp > GetDcModuleVoltSet()))
{
if((Temp - GetDcModuleVoltSet()) > (GetDcModuleVoltSet()*5/100))
if ((Temp - GetDcModuleVoltSet()) > (GetDcModuleVoltSet() * 5 / 100))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Volt = 1;
ChargeError.Value.VoltOutError = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt,
DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_VoltOutHighErr;
ChargeStopType = eChgStop_Run_VoltOutHighErr;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
}
}
/*쳣ж*/
if((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
if ((eChgVer_2011 != UserParam.ChgVer) && (eChgVer_2011 != ChgVer))
{
Temp = GetChgCurrtChgRun();
if((0 != CcsChgEnable) && (Temp > (DcModuleAbility.MinCurrt*DcModuleManage.ValidNum)) && (Temp > GetDcModuleCurrtSet()))
Temp = GetChgCurrtChgRun();
if ((0 != CcsChgEnable) && (Temp > (DcModuleAbility.MinCurrt * DcModuleManage.ValidNum)) &&
(Temp > GetDcModuleCurrtSet ()))
{
if((Temp - GetDcModuleCurrtSet()) > (GetDcModuleCurrtSet()*10/100))
if ((Temp - GetDcModuleCurrtSet()) > (GetDcModuleCurrtSet() * 10 / 100))
{
if(0 == CurrtOutChkTick)
CurrtOutChkTick = GetSystemTick();
if (0 == CurrtOutChkTick)
CurrtOutChkTick = GetSystemTick();
}
else
else
CurrtOutChkTick = 0;
}
else
else
CurrtOutChkTick = 0;
if((0 != CurrtOutChkTick) && ((GetSystemTick() - CurrtOutChkTick) > 10000))
if ((0 != CurrtOutChkTick) && ((GetSystemTick() -CurrtOutChkTick) > 10000))
{
CurrtOutChkTick = 0;
CurrtOutChkTick = 0;
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CstMsg.StopFault.Value.Currt = 1;
ChargeError.Value.CurrtOutError = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_CurrtOutHighErr;
ChargeStopType = eChgStop_Run_CurrtOutHighErr;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
}
if(0 != BsmMsg.Valid)
if (0 != BsmMsg.Valid)
{
if(0x00 != BsmMsg.BatSta.Value.Volt)
if (0x00 != BsmMsg.BatSta.Value.Volt)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopFault.Value.Volt = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_SinglBatVolt;
ChargeStopType = eChgStop_Run_SinglBatVolt;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
else if(0x00 != BsmMsg.BatSta.Value.Soc)
else if (0x00 != BsmMsg.BatSta.Value.Soc)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_SocOver;
ChargeStopType = eChgStop_Run_SocOver;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
else if(0x01 == BsmMsg.BatSta.Value.Currt)
else if (0x01 == BsmMsg.BatSta.Value.Currt)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopFault.Value.Currt = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_CurrtOver;
ChargeStopType = eChgStop_Run_CurrtOver;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
else if(0x01 == BsmMsg.BatSta.Value.Temp)
else if (0x01 == BsmMsg.BatSta.Value.Temp)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_BatTempOver;
ChargeStopType = eChgStop_Run_BatTempOver;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0x01 == BsmMsg.ChgSta.Value.Imd)
if (0x01 == BsmMsg.ChgSta.Value.Imd)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_BatIsolate;
ChargeStopType = eChgStop_Run_BatIsolate;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0x01 == BsmMsg.ChgSta.Value.Connect)
if (0x01 == BsmMsg.ChgSta.Value.Connect)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_Cc2Error;
ChargeStopType = eChgStop_Run_Cc2Error;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
else if(0x00 == BsmMsg.ChgSta.Value.ChgEnable)
else if (0x00 == BsmMsg.ChgSta.Value.ChgEnable)
{
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
if(0 == BmsPauseTick)
if (0 == BmsPauseTick)
BmsPauseTick = GetSystemTick();
if((0 != BmsPauseTick) && ((GetSystemTick() - BmsPauseTick) > MsgTimeout_10M))
if ((0 != BmsPauseTick) && ((GetSystemTick() -BmsPauseTick) > MsgTimeout_10M))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt,
DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_BmsPause;
ChargeStopType = eChgStop_Run_BmsPause;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
}
else if(0x01 == BsmMsg.ChgSta.Value.ChgEnable)
else if (0x01 == BsmMsg.ChgSta.Value.ChgEnable)
BmsPauseTick = 0;
}
if((GetSystemTick() - BclMsg.RecvTick) > MsgTimeout_1S)
if ((GetSystemTick() -BclMsg.RecvTick) > MsgTimeout_1S)
{
CemMsg.Cem.Value.Bcl = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
else
else
CemMsg.Cem.Value.Bcl = 0;
if((GetSystemTick() - BcsMsg.RecvTick) > MsgTimeout_5S)
if (((GetSystemTick() -BcsMsg.RecvTick) > 1000 + 500) && (eChgVer_2011 == UserParam.ChgVer))
{
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; //ֶ֡
if ((GetSystemTick() -BcsMsg.RecvTick) > MsgTimeout_5S)
{
CemMsg.Cem.Value.Bcs = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
else
else
CemMsg.Cem.Value.Bcs = 0;
if(0 != BemMsg.Valid)
if (0 != BemMsg.Valid)
{
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
pChargeCtrl->CurProcess = eChgPro_CommBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != BstMsg.Valid)
if (0 != BstMsg.Valid)
{
CstMsg.StopReason.Value.BmsStop = 1;
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_BmsStop;
ChargeStopType = eChgStop_Run_BmsStop;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 == ChargeEnable)
{//ⲿƽ
if (0 == TCUCurChgRecd.TCUChargeEnable)
{ //ⲿƽ
CstMsg.StopReason.Value.Manual = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_UserCancel;
ChargeStopType = eChgStop_Run_UserCancel;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if((BcsMsg.Valid) && (BcsMsg.CurSoc >= 100))
if ((BcsMsg.Valid) && (BcsMsg.CurSoc >= 100))
{
if(0 == SocStopTick)
if (0 == SocStopTick)
SocStopTick = GetSystemTick();
}
else
else
SocStopTick = 0;
if((0 != SocStopTick) && ((GetSystemTick() - SocStopTick) > (MsgTimeout_60S*2)))
{//ⲿƽ
if ((0 != SocStopTick) && ((GetSystemTick() -SocStopTick) > (MsgTimeout_60S * 2)))
{ //ⲿƽ
CstMsg.StopReason.Value.AutoSet = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_Soc98;
ChargeStopType = eChgStop_Run_Soc98;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if((BcsMsg.Valid) && (BcsMsg.BatVoltAndGroup.Value.Volt > BcpMsg.PerBatMaxVolt) && (1 == UserParam.ChgFun.Value.BatCellJud))
if ((BcsMsg.Valid) && (BcsMsg.BatVoltAndGroup.Value.Volt > BcpMsg.PerBatMaxVolt) &&
(1 == UserParam.ChgFun.Value.BatCellJud))
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopFault.Value.Volt = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
ChargeTimerSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_SinglBatVoltOverPermitMax;
ChargeStopType = eChgStop_Run_SinglBatVoltOverPermitMax;
pChargeCtrl->CurProcess = eChgPro_ChgStop;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(eSwSta_On != CcStatusRead())
if (eSwSta_On != CcStatusRead())
{
if(0 == CcStatusChkTick)
if (0 == CcStatusChkTick)
CcStatusChkTick = GetSystemTick();
}
else
else
CcStatusChkTick = 0;
if((0 != CcStatusChkTick) && ((GetSystemTick() - CcStatusChkTick) > CC_CheckTick))
if ((0 != CcStatusChkTick) && ((GetSystemTick() -CcStatusChkTick) > CC_CheckTick))
{
CstMsg.StopReason.Value.Manual = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Run_CcOpen;
CcStatusChkTick = 0;
ChargeStopType = eChgStop_Run_CcOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Emergency)
if (0 != PillarError.Value.Emergency)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Emergency = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_EmerClose;
ChargeStopType = eChgStop_Run_EmerClose;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Door)
if (0 != PillarError.Value.Door)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_DoorOpen;
ChargeStopType = eChgStop_Run_DoorOpen;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Contactor)
if (0 != PillarError.Value.Contactor)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_Contactor;
ChargeStopType = eChgStop_Run_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.UniContactor)
if (0 != PillarError.Value.UniContactor)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_Contactor;
ChargeStopType = eChgStop_Run_Contactor;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.InVolt)
if (0 != PillarError.Value.InVolt)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_InVolt;
ChargeStopType = eChgStop_Run_InVolt;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.NoDcmod)
if (0 != PillarError.Value.NoDcmod)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_NoDcmod;
ChargeStopType = eChgStop_Run_NoDcmod;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(0 != PillarError.Value.Meter)
if (0 != PillarError.Value.Meter)
{
CstMsg.StopReason.Value.Truble = 1;
CstMsg.StopTruble.Value.Other = 1;
CST_Send(&CstMsg);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt*DcModuleManage.ValidNum);
DcModuleSet(eSwSta_Off, DcModuleAbility.MinVolt, DcModuleAbility.MinCurrt * DcModuleManage.ValidNum);
DcOutSet(eSwSta_Off);
ChargeStopType = eChgStop_Run_Meter;
ChargeStopType = eChgStop_Run_Meter;
pChargeCtrl->CurProcess = eChgPro_ChgBreak;
pChargeCtrl->Param = 0;
pChargeCtrl->Param = 0;
}
if(eChgPro_ChgRun != pChargeCtrl->CurProcess)
if (eChgPro_ChgRun != pChargeCtrl->CurProcess)
return;
osDelay(5);
}
}
......
......@@ -17,26 +17,26 @@ extern void TCUCanInit(void);
StructTCUCommuStatus TCUCommuStatus =
{
.CommStage = HeartStage,
.ParamVaild = 0,
0,
.CommStage = HeartStage,
.ParamVaild = 0,
0,
0
};
StructTCUCommuStatus TCUCommuStatus_B =
{
.CommStage = HeartStage,
.ParamVaild = 0,
0,
{
.CommStage = HeartStage,
.ParamVaild = 0,
0,
0
};
const StructTCUCommuParam TCUCommuParam =
{
.HeartPeriod = 1,
.HeartErrCntMax = 3,
.HeartTimeout = 1,
.SignInPeriod = 60,
.HeartPeriod = 1,
.HeartErrCntMax = 3,
.HeartTimeout = 1,
.SignInPeriod = 60,
};
......@@ -59,7 +59,7 @@ void TCURecvProcess(void)
break;
case eCmd_time: // 对时帧
TCUtimeSet(&pPgnRecv); //时间设置
TCUtimeSet(&pPgnRecv); //时间设置
break;
case eCmd_versi: //版本校验帧
......@@ -82,7 +82,7 @@ void TCURecvProcess(void)
PowerControlAnalysis(&pPgnRecv);
break;
case eCmd_Query: // 充电桩配置信息查询帧
case eCmd_Query: // 充电桩配置信息查询帧
if(pPgnRecv.DA == ChargerCont1939Addr)
{
TCUCommuStatus.CommStage = ChgInfornQueryStage;
......@@ -91,14 +91,14 @@ void TCURecvProcess(void)
{
TCUCommuStatus_B.CommStage = ChgInfornQueryStage;
}
break;
case eCmd_verificationAck: //车辆验证应答帧
verificationAck(&pPgnRecv);
break;
////////////状态帧/////////////////
////////////状态帧/////////////////
case eCmd_startCompAck: // 充电启动完成应答帧
ACkStartCompMeg(&pPgnRecv);
break;
......@@ -110,7 +110,7 @@ void TCURecvProcess(void)
///////////数据帧/直流////////////
case eCmd_DCTCUMeasu: // 计费单元遥测帧
TCUMeasuRecv(&pPgnRecv);
break;
///////////心跳帧///////////
......@@ -121,7 +121,7 @@ void TCURecvProcess(void)
case eCmd_TCUErroComm: // 计费单元错误帧
TCUErroCommAnalysis(&pPgnRecv);
break;
default:
break;
}
......@@ -138,7 +138,7 @@ void InformationReporting(void)
if (TCUCommuStatus.VerChkVaild) //版本检验未完成不发送
{
InformationReporting_22_A();
InformationReporting_23_A();
}
......@@ -148,7 +148,7 @@ void InformationReporting(void)
InformationReporting_22_B();
InformationReporting_23_B();
}
}
}
......@@ -160,7 +160,7 @@ void DCMeasuring_A(void)
if ((GetSystemTick() - DCMeasuRecvTime) > 1000)
{
DCMeasuRecvTime = GetSystemTick();
if (TCUCommuStatus.VerChkVaild) //版本检验未完成不发送
{
TCUCommuStatus.DCMeasuErrCnt++;
......@@ -172,12 +172,12 @@ void DCMeasuring_A(void)
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit(); //can通讯接口初始化
}
else
else
{
measuringReporting20_A();
}
}
if (TCUCommuStatus_B.VerChkVaild) //版本检验未完成不发送
{
TCUCommuStatus_B.DCMeasuErrCnt++;
......@@ -189,12 +189,12 @@ void DCMeasuring_A(void)
TCUCommuStatus_B.HeartBeatVaild = 0; //心跳失效
//TCUCanInit();
}
else
else
{
measuringReporting20_B();
}
}
}
}
......@@ -225,7 +225,7 @@ void ConEMSend(void)
ConEMSendEcount++;
TcuEMMsg(TCUCommuStatus.ErrData.Mult);
}
else
else
{
ConEMSendTick = 0;
TCUCommuStatus.ConEMSendFlag = 0;
......@@ -236,7 +236,7 @@ void ConEMSend(void)
ConEMSendEcount = 0;
}
}
else
else
{
ConEMSendTick = 0;
TCUCommuStatus.ConEMSendFlag = 0;
......@@ -261,7 +261,7 @@ void ConEMSend(void)
ConEMSendEcount_B++;
TcuEMMsg_B(TCUCommuStatus_B.ErrData.Mult);
}
else
else
{
ConEMSendTick_B = 0;
TCUCommuStatus_B.ConEMSendFlag = 0;
......@@ -270,7 +270,7 @@ void ConEMSend(void)
}
}
}
else
else
{
ConEMSendTick_B = 0;
TCUCommuStatus_B.ConEMSendFlag = 0;
......@@ -285,10 +285,10 @@ void ConEMSend(void)
void CommutionConfigurationStage(void)
{
static EnumTCUCommStage oldStage;
static EnumTCUCommStage oldStage;
static u32 VersionRecvTime = 0;
static u32 VersionSendTimes = 0;
static EnumTCUCommStage oldStage_B;
static EnumTCUCommStage oldStage_B;
static u32 VersionRecvTime_B = 0;
static u32 VersionSendTimes_B = 0;
if (TCUCommuStatus.CommStage == VersionStage)
......@@ -308,19 +308,19 @@ void CommutionConfigurationStage(void)
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
TCUCommuStatus.CommStage = HeartStage;
}
else
{
TCUVersionCheckSent(1);
}
}
}
if (TCUCommuStatus_B.CommStage == VersionStage)
{
if(oldStage_B != VersionStage)
......@@ -335,21 +335,21 @@ void CommutionConfigurationStage(void)
VersionSendTimes_B++;
if(VersionSendTimes_B > 5000/500)
{
TCUCommuStatus_B.ErrData.Value.Param = 1;
TCUCommuStatus_B.ConEMSendFlag = 1;
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
TCUVersionCheckSent(2);
}
}
}
oldStage = TCUCommuStatus.CommStage;
oldStage_B = TCUCommuStatus_B.CommStage;
}
......@@ -364,7 +364,7 @@ void TCUPillarHeartBeat(void)
}
SendTick = GetSystemTick();
TCUHeartBeat_A();
TCUCommuStatus.HeartBeatErrCnt++;
......@@ -392,11 +392,11 @@ void TCUPillarHeartBeat(void)
void CommutionRunStage(void)
{
static EnumTCUCommStage oldStage;
static EnumTCUCommStage oldStage;
static u32 sendTick = 0;
static u8 sendTimes = 0;
static EnumTCUCommStage oldStage_B;
static EnumTCUCommStage oldStage_B;
static u32 sendTick_B = 0;
static u8 sendTimes_B = 0;
......@@ -411,7 +411,7 @@ void CommutionRunStage(void)
sendTick_B = 0;
sendTimes_B = 0;
}
if ((TCUCommuStatus.CommStage == ChageParamStage))
{
if(GetSystemTick() - sendTick >= 500)
......@@ -495,7 +495,7 @@ void CommutionRunStage(void)
SerConAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ServiceContralStage))
......@@ -513,7 +513,7 @@ void CommutionRunStage(void)
SerConAck(2);
}
}
}
if ((TCUCommuStatus.CommStage == ElectLockStage))
......@@ -565,7 +565,7 @@ void CommutionRunStage(void)
PowerControlAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == PowerControlStage))
......@@ -583,9 +583,9 @@ void CommutionRunStage(void)
PowerControlAck(2);
}
}
}
if ((TCUCommuStatus.CommStage == ChgInfornQueryStage))
{
if(GetSystemTick() - sendTick >= 500)
......@@ -601,7 +601,7 @@ void CommutionRunStage(void)
ChgInfornQueryAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ChgInfornQueryStage))
......@@ -619,9 +619,9 @@ void CommutionRunStage(void)
ChgInfornQueryAck(2);
}
}
}
oldStage = TCUCommuStatus.CommStage;
oldStage_B = TCUCommuStatus_B.CommStage;
}
......@@ -653,7 +653,7 @@ void TCUCurChgRecordInterface_A(void)
ChgStartSendEcount++;
StartMegAck_A(); //启动帧发送
}
else
else
{
ChgStartSendTick = 0;
TCUCurChgRecd.TCUChgStartNotetrl = 0; //停止发送
......@@ -663,7 +663,7 @@ void TCUCurChgRecordInterface_A(void)
}
else if (TCUCurChgRecd.TCUChgStarCompNotetrl == 1)
{
stopCompSend_A();
startCompSend_A();
ChgStartCompSendTick = GetSystemTick();
TCUCurChgRecd.TCUChgStarCompNotetrl = 2;
}
......@@ -678,7 +678,7 @@ void TCUCurChgRecordInterface_A(void)
startCompSend_A();
ChgRecordSendTick = GetSystemTick();
}
else
else
{ //超时大于,保存
TCUCommuStatus.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus.ErrData.Value.startCompAck = 1;
......@@ -711,7 +711,7 @@ void TCUCurChgRecordInterface_A(void)
ChgStopSendEcount++;
StopMegAck_A();
}
else
else
{
ChgStopSendTick = 0;
TCUCurChgRecd.TCUChgStopNotetrl = 0; //停止发送
......@@ -725,6 +725,7 @@ void TCUCurChgRecordInterface_A(void)
stopCompSend_A();
ChgRecordSendTick = GetSystemTick();
TCUCurChgRecd.TCUChgStopCompNotetrl = 2;
ChgRecordSendErr = 0;
}
else if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 2) && (0 != TCUCurChgRecd.TCUChargeEnable))
{
......@@ -737,7 +738,7 @@ void TCUCurChgRecordInterface_A(void)
stopCompSend_A();
ChgRecordSendTick = GetSystemTick();
}
else
else
{ //超时大于,保存
TCUCommuStatus.ConEMSendFlag = 1;
TCUCommuStatus.ErrData.Value.stopCompAck = 1;
......@@ -783,7 +784,7 @@ void TCUCurChgRecordInterface_B(void)
ChgStartSendEcount++;
StartMegAck_B(); //启动帧发送
}
else
else
{
ChgStartSendTick = 0;
TCUCurChgRecd_B.TCUChgStartNotetrl = 0; //停止发送
......@@ -793,9 +794,10 @@ void TCUCurChgRecordInterface_B(void)
}
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 1)
{
stopCompSend_B();
startCompSend_B();
ChgStartCompSendTick = GetSystemTick();
TCUCurChgRecd_B.TCUChgStarCompNotetrl = 2;
ChgStartCompSendEcount = 0;
}
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 2)
{
......@@ -808,7 +810,7 @@ void TCUCurChgRecordInterface_B(void)
startCompSend_B();
ChgRecordSendTick = GetSystemTick();
}
else
else
{ //超时大于,保存
TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus_B.ErrData.Value.startCompAck = 1;
......@@ -840,7 +842,7 @@ void TCUCurChgRecordInterface_B(void)
ChgStopSendEcount++;
StopMegAck_B();
}
else
else
{
ChgStopSendTick = 0;
TCUCurChgRecd_B.TCUChgStopNotetrl = 0; //停止发送
......@@ -865,7 +867,7 @@ void TCUCurChgRecordInterface_B(void)
stopCompSend_B();
ChgRecordSendTick = GetSystemTick();
}
else
else
{ //超时大于,保存
TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus_B.ErrData.Value.stopCompAck = 1;
......@@ -887,16 +889,16 @@ u8 TcuGetChgStatus(void)
{
u8 status = 0;
static u8 old_status = 0;
if(eSwSta_Off == CcStatusRead())
{
status = 0x00;
}
else if(old_status == 0)
else// if(old_status == 0)
{
status = 0x01;
}
if(ChargeCtrl.CurProcess == eChgPro_ShakeHand)
{
status = 0x02;
......@@ -942,35 +944,35 @@ u8 TcuGetChgStatus(void)
{
status = 0x0b;
}
else if((ChargeCtrl.CurProcess == eChgPro_ChgIdle)\
/*else if((ChargeCtrl.CurProcess == eChgPro_ChgIdle)\
&& (old_status == 0x0b))
{
status = 0x0b;
}
old_status = status;
}*/
//old_status = status;
return status;
}
u8 TcuGetChgStatus_B(void)
{
/*
00H:车辆未连接
00H:车辆未连接
01H:车辆已连接
02H:参数握手阶段
02H:参数握手阶段
03H:绝缘监测阶段
04H:参数辨识阶段
05H:参数配置阶段
06H:预充电阶段
07H:正式充电阶段
08H:充电暂停
09H:充电停止中
0AH:充电停止完成
09H:充电停止中
0AH:充电停止完成
0BH:充电完成
*/
u8 status = 0;
static u8 old_status = 0;
if(eSwSta_Off == CcStatusRead_B())
{
status = 0x00;
......@@ -979,7 +981,7 @@ u8 TcuGetChgStatus_B(void)
{
status = 0x01;
}
if(ChargeCtrl_B.CurProcess == eChgPro_B_ShakeHand)
{
status = 0x02;
......@@ -1031,7 +1033,7 @@ u8 TcuGetChgStatus_B(void)
status = 0x0b;
}
old_status = status;
return status;
}
......@@ -1056,7 +1058,7 @@ void SendStatus(void)
data[1] = TcuGetChgStatus_B();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr_B);
}
}
}
......@@ -1111,8 +1113,8 @@ void TCUComm(void const * argument)
TCUSendMsg(&DataSend);
}
}
TCURecvProcess(); //帧接收
TCUWorkProcess(); //遥测遥信息处理
TCULinkProcess(); //心跳包处理配置信息
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论