提交 6f621aed 作者: wysheng

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

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