提交 6f621aed 作者: wysheng

修复TCU can多包发送;当前故障2004

上级 f0d59927
......@@ -436,7 +436,7 @@ StructTCUEM TCUChgContralTCUEM_B;
StructTCUCControl TCUControlInfo =
{
.ChargingServiceFlag = 2,
.version = 0x0230,
.version = 0x0220,
.ChargeNum =
{
0, 0, 0, 0
......@@ -526,42 +526,46 @@ void TCUMultiPackSendMsg(u8 * pfram, u16 len, EnumTCUCommPgn cmd, u8 Prio, u8 ad
FrameSend.Id.Disp.DA_PS = TCU1939Addr;
FrameSend.Id.Disp.SA = addr;
u16 checkSum = 0;
u8 num = (len + 3 + 2) / 7;
if((len + 3 + 2) % 7) num++;
for (i = 0; i < len; i++)
{
checkSum += pfram[i];
}
checkSum = checkSum + ((len + 3 + 2) / 7 + 1);
checkSum = checkSum + num;
checkSum = checkSum + (u8)len + (u8) (len >> 8);
for (i = 1; i <= ((len + 3 + 2) / 7 + 1); i++) //第一包
for (i = 1; i <= num; i++) //第一包
{
if (i == 1)
{
FrameSend.Data[0] = i;
FrameSend.Data[1] = (len + 3 + 2) / 7 + 1;
FrameSend.Data[1] = num;
FrameSend.Data[2] = (u8)len;
FrameSend.Data[3] = (u8) (len >> 8);
//FrameSend.Data[4] = *pfram++;
memcpy(&FrameSend.Data[4], pfram, 4);
lenFlag += 4;
}
else if (i == ((len + 3 + 2) / 7 + 1)) //最后一包
else if (i == num) //最后一包
{
FrameSend.Data[0] = i;
if(len >= lenFlag)
{
memcpy(&FrameSend.Data[1], &pfram[lenFlag], len - lenFlag + 1);
FrameSend.Data[len - lenFlag+2] = (u8)checkSum;
FrameSend.Data[len - lenFlag + 3] = (u8) (checkSum >> 8);
memset(&FrameSend.Data[len - lenFlag + 4], 0x00, 4 - len + lenFlag);
}
else
if(len < lenFlag)
{
FrameSend.Data[1] = (u8)checkSum;
FrameSend.Data[2] = (u8) (checkSum >> 8);
memset(&FrameSend.Data[3], 0x00, 5);
}
else
{
memcpy(&FrameSend.Data[1], &pfram[lenFlag], len - lenFlag);
FrameSend.Data[len - lenFlag+1] = (u8)checkSum;
FrameSend.Data[len - lenFlag + 2] = (u8) (checkSum >> 8);
if((len - lenFlag + 2)<7)
memset(&FrameSend.Data[len - lenFlag + 3], 0x00, 5 - len + lenFlag);
}
}
......@@ -2273,7 +2277,7 @@ void InformationReporting_23_A(void)
Data[0] = 0x00;
InformainReport2_A.InfRe.Door = PillarError.Value.Door;
InformainReport2_A.InfRe.DCOutConOn = 0x01;
InformainReport2_A.InfRe.DCOutConOn = 0x00;
if (((ChargeError.Value.IsolateWarn == 1) || (ChargeError.Value.IsolateError == 1)) &&
(TCUCurChgRecd.TCUChargeEnable == 1))
......@@ -2290,7 +2294,7 @@ void InformationReporting_23_A(void)
InformainReport2_A.InfRe.UniContactorOff = PillarError.Value.UniContactor;
InformainReport2_A.InfRe.UniContactorOn = 0x00;
memcpy(&Data[1], &InformainReport2_A.data, 2);
TCUSinglePackSendMsg(Data, 8, eCmd_DCConInfor2, 3, ChargerCont1939Addr);
TCUSinglePackSendMsg(Data, 8, eCmd_DCConInfor2, 4, ChargerCont1939Addr);
}
......@@ -2300,7 +2304,7 @@ void InformationReporting_23_B(void)
Data[0] = 0x00;
InformainReport2_B.InfRe.Door = PillarError_B.Value.Door;
InformainReport2_B.InfRe.DCOutConOn = 0x01;
InformainReport2_B.InfRe.DCOutConOn = 0x0;
if (((ChargeError_B.Value.IsolateWarn == 1) || (ChargeError_B.Value.IsolateError == 1)) &&
(TCUCurChgRecd_B.TCUChargeEnable == 1))
......@@ -2317,13 +2321,13 @@ void InformationReporting_23_B(void)
InformainReport2_B.InfRe.UniContactorOff = PillarError_B.Value.UniContactor;
InformainReport2_B.InfRe.UniContactorOn = 0x00;
memcpy(&Data[1], &InformainReport2_B.data, 2);
TCUSinglePackSendMsg(Data, 8, eCmd_DCConInfor2, 3, ChargerCont1939Addr_B);
TCUSinglePackSendMsg(Data, 8, eCmd_DCConInfor2, 4, ChargerCont1939Addr_B);
}
void measuringReporting20_A(void)
{
u8 Data[32]={0};
u8 Data[36]={0};
u8 len = 0;
Data[len++] = 0x00;
......@@ -2354,13 +2358,13 @@ void measuringReporting20_A(void)
Data[len++] = Adc_Get_a_NTemp() + 50;
Data[len++] = Adc_Get_B_PTemp() + 50;
Data[len++] = Adc_Get_B_NTemp() + 50;
TCUMultiPackSendMsg(Data, len, eCmd_DCConMeasu, 6,ChargerCont1939Addr);
TCUMultiPackSendMsg(Data, 34, eCmd_DCConMeasu, 6,ChargerCont1939Addr);
}
void measuringReporting20_B(void)
{
u8 Data[32]={0};
u8 Data[36]={0};
u8 len = 0;
Data[len++] = 0x00;
......@@ -2391,7 +2395,7 @@ void measuringReporting20_B(void)
Data[len++] = Adc_Get_a_NTemp() + 50;
Data[len++] = Adc_Get_B_PTemp() + 50;
Data[len++] = Adc_Get_B_NTemp() + 50;
TCUMultiPackSendMsg(Data, len, eCmd_DCConMeasu, 6, ChargerCont1939Addr_B);
TCUMultiPackSendMsg(Data, 34, eCmd_DCConMeasu, 6, ChargerCont1939Addr_B);
}
......@@ -2423,13 +2427,14 @@ void ChgInfornQueryAck(u8 ChgNum)
data[len++] = (u8) (4000 - TCUControlInfo.DcMinCurrt);
data[len++] = (u8) ((4000 - TCUControlInfo.DcMinCurrt) >> 8);
//memset(data,1,38);
if(ChgNum == 1)
{
TCUMultiPackSendMsg(data, len, eCmd_QueryAck, 6, ChargerCont1939Addr);
TCUMultiPackSendMsg(data, 37, eCmd_QueryAck, 6, ChargerCont1939Addr);
}
else if(ChgNum == 2)
{
TCUMultiPackSendMsg(data, len, eCmd_QueryAck, 6, ChargerCont1939Addr_B);
TCUMultiPackSendMsg(data, 37, eCmd_QueryAck, 6, ChargerCont1939Addr_B);
}
}
......@@ -2512,9 +2517,23 @@ void TcuEMMsg_B(u16 data)
void TCUErroCommAnalysis(StructTCUSend * pPgnRecv)
{
if (pPgnRecv->DA == ChargerCont1939Addr)
{
memcpy(&TCUChgContralTCUEM_A.tcuem, &pPgnRecv->Data[1], 2);
//memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
//TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
//TCUCommuStatus.HeartBeatErrCnt = 0;
//HeartBeatVaild = 0; //心跳失效
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
memcpy(&TCUChgContralTCUEM_B.tcuem, &pPgnRecv->Data[1], 2);
//memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
//TCUCommuStatus_B.ConnectFlag = CONNECT_TIMEOUT;
//TCUCommuStatus_B.HeartBeatErrCnt = 0;
//TCUCommuStatus_B.HeartBeatVaild = 0; //心跳失效
}
}
......
......@@ -132,12 +132,13 @@ void InformationReporting(void)
{
//遥信
static u32 DCConInforSendTime = 0;
if (GetSystemTick() -DCConInforSendTime >= 500)
if (GetSystemTick() - DCConInforSendTime >= 500UL)
{
DCConInforSendTime = GetSystemTick();
if (TCUCommuStatus.VerChkVaild) //版本检验未完成不发送
{
InformationReporting_22_A();
InformationReporting_23_A();
}
......@@ -218,6 +219,7 @@ void ConEMSend(void)
{
if (GetSystemTick() -ConEMSendTick >= 250)
{
ConEMSendTick = GetSystemTick();
if (ConEMSendEcount < 20)
{
ConEMSendEcount++;
......@@ -253,6 +255,7 @@ void ConEMSend(void)
{
if (GetSystemTick() -ConEMSendTick_B >= 250)
{
ConEMSendTick_B = GetSystemTick();
if (ConEMSendEcount_B < 20)
{
ConEMSendEcount_B++;
......@@ -298,6 +301,7 @@ void CommutionConfigurationStage(void)
if (GetSystemTick() - VersionRecvTime >= 500)
{
VersionRecvTime = GetSystemTick();
VersionSendTimes++;
if(VersionSendTimes > 5000/500)
{
......@@ -327,6 +331,7 @@ void CommutionConfigurationStage(void)
if (GetSystemTick() - VersionRecvTime_B >= 500)
{
VersionRecvTime_B = GetSystemTick();
VersionSendTimes_B++;
if(VersionSendTimes_B > 5000/500)
{
......@@ -641,7 +646,7 @@ void TCUCurChgRecordInterface_A(void)
}
else if (TCUCurChgRecd.TCUChgStartNotetrl == 2)
{
if (GetSystemTick() -ChgStartSendTick >= 250)
if (GetSystemTick() -ChgStartSendTick >= 250UL)
{
if (ChgStartSendEcount < 8) //2S
{
......@@ -664,7 +669,7 @@ void TCUCurChgRecordInterface_A(void)
}
else if (TCUCurChgRecd.TCUChgStarCompNotetrl == 2)
{
if ((GetSystemTick() -ChgStartCompSendTick) > (250))
if ((GetSystemTick() -ChgStartCompSendTick) > (250UL))
{
ChgStartCompSendEcount++;
......@@ -699,7 +704,7 @@ void TCUCurChgRecordInterface_A(void)
}
else if (TCUCurChgRecd.TCUChgStopNotetrl == 2)
{
if (GetSystemTick() -ChgStopSendTick >= 250)
if (GetSystemTick() -ChgStopSendTick >= 250UL)
{
if (ChgStopSendEcount < 8)
{
......@@ -723,7 +728,7 @@ void TCUCurChgRecordInterface_A(void)
}
else if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 2) && (0 != TCUCurChgRecd.TCUChargeEnable))
{
if ((GetSystemTick() -ChgRecordSendTick) > (250))
if ((GetSystemTick() -ChgRecordSendTick) > (250UL))
{
ChgRecordSendErr++;
......@@ -771,7 +776,7 @@ void TCUCurChgRecordInterface_B(void)
}
else if (TCUCurChgRecd_B.TCUChgStartNotetrl == 2)
{
if (GetSystemTick() -ChgStartSendTick >= 250)
if (GetSystemTick() -ChgStartSendTick >= 250UL)
{
if (ChgStartSendEcount < 8) //2S
{
......@@ -794,7 +799,7 @@ void TCUCurChgRecordInterface_B(void)
}
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 2)
{
if ((GetSystemTick() -ChgStartCompSendTick) > (250))
if ((GetSystemTick() -ChgStartCompSendTick) > (250UL))
{
ChgStartCompSendEcount++;
......@@ -828,7 +833,7 @@ void TCUCurChgRecordInterface_B(void)
}
else if (TCUCurChgRecd_B.TCUChgStopNotetrl == 2)
{
if (GetSystemTick() -ChgStopSendTick >= 250)
if (GetSystemTick() -ChgStopSendTick >= 250UL)
{
if (ChgStopSendEcount < 8)
{
......@@ -851,7 +856,7 @@ void TCUCurChgRecordInterface_B(void)
}
else if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 2) && (0 != TCUCurChgRecd_B.TCUChargeEnable))
{
if ((GetSystemTick() -ChgRecordSendTick) > (250))
if ((GetSystemTick() -ChgRecordSendTick) > (250UL))
{
ChgRecordSendErr++;
......@@ -1036,7 +1041,7 @@ void SendStatus(void)
static u32 ChgStutusSendTick = 0;
u8 data[8] = {0};
if ((GetSystemTick() -ChgStutusSendTick) > (500))
if ((GetSystemTick() -ChgStutusSendTick) > (500UL))
{
ChgStutusSendTick = GetSystemTick();
data[0] = 0;
......@@ -1097,7 +1102,7 @@ void TCUComm(void const * argument)
u32 sendTick = 0;
for (; ; )
{
if(GetSystemTick() - sendTick >= 10)
if(GetSystemTick() - sendTick >= 10UL)
{
StructChargeSend DataSend;
sendTick = GetSystemTick();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论