提交 f0d59927 作者: wysheng

拆分AB枪与TCU通讯

上级 91b7b8ce
......@@ -127,16 +127,16 @@ void TCURxIrqHandle(void)
Frame.Data[6] = RxMsg.Data[6];
Frame.Data[7] = RxMsg.Data[7];
if(Frame.DA == ChargerCont1939Addr)
//if(Frame.DA == ChargerCont1939Addr)
{
if (pdTRUE == xQueueSendFromISR(TCUMsg, &Frame, &taskWoken))
portEND_SWITCHING_ISR(taskWoken);
}
else if(Frame.DA == ChargerCont1939Addr_B)
/*else if(Frame.DA == ChargerCont1939Addr_B)
{
if (pdTRUE == xQueueSendFromISR(TCUMsg_B, &Frame, &taskWoken))
portEND_SWITCHING_ISR(taskWoken);
}
}*/
break;
......@@ -221,16 +221,16 @@ void TCURxIrqHandle(void)
Frame.Data[6] = RxMsg.Data[6];
Frame.Data[7] = RxMsg.Data[7];
if(Frame.DA == ChargerCont1939Addr)
//if(Frame.DA == ChargerCont1939Addr)
{
if (pdTRUE == xQueueSendFromISR(TCUMsg, &Frame, &taskWoken))
portEND_SWITCHING_ISR(taskWoken);
}
else if(Frame.DA == ChargerCont1939Addr_B)
/*else if(Frame.DA == ChargerCont1939Addr_B)
{
if (pdTRUE == xQueueSendFromISR(TCUMsg_B, &Frame, &taskWoken))
portEND_SWITCHING_ISR(taskWoken);
}
}*/
break;
......@@ -346,9 +346,9 @@ u8 TCUCommInit(void)
osMessageQDef(TCUMsg, 64, StructPgnRecv);
TCUMsg = osMessageCreate(osMessageQ(TCUMsg), NULL);
TCUMsg_B = NULL;
osMessageQDef(TCUMsg_B, 64, StructPgnRecv);
TCUMsg_B = osMessageCreate(osMessageQ(TCUMsg_B), NULL);
//TCUMsg_B = NULL;
//osMessageQDef(TCUMsg_B, 64, StructPgnRecv);
//TCUMsg_B = osMessageCreate(osMessageQ(TCUMsg_B), NULL);
TCUCanInit();
return TRUE;
......@@ -618,10 +618,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
{
; //启动逻辑处理阶段不做处理
}
else //if((TCUCurChgRecd.TCUChgStartNotetrl ==0)
// &&(TCUCurChgRecd.TCUChargeEnable !=0)
// )
else
{
TCUCurChgRecd.TCUChgStartNotetrl = 1; //回复充电开始发送标志位
}
......@@ -658,10 +655,7 @@ void StartMeg(StructTCUSend * pPgnRecv)
{
; //启动逻辑处理阶段不做处理
}
else //if((TCUCurChgRecd_B.TCUChgStartNotetrl ==0)
// &&(TCUCurChgRecd_B.TCUChargeEnable !=0)
// )
else
{
TCUCurChgRecd_B.TCUChgStartNotetrl = 1; //充电阶段
}
......@@ -954,7 +948,7 @@ u8 AllowDTUStartCompCharge_B(u8 * Reason)
*Reason = 0x28;
else if ((VerificaInfo_B.result == 1) && (StartMeg_B.PlugToChgFlag == 1))
*Reason = 0x29;
else if (TCUCommuStatus.ErrData_B.Value.verificationAck == 1)
else if (TCUCommuStatus_B.ErrData.Value.verificationAck == 1)
*Reason = 0x30;
else if (TCUCurChgRecd.TCUStartCompresult == 2)
*Reason = 0x01; //控制导引故障
......@@ -1297,7 +1291,7 @@ void GetStopReason_B(u8 * stopReason)
*stopReason = 02;
else if (TCUCurChgRecd_B.TCUChgStopType == 3)
*stopReason = 03;
else if (TCUCommuStatus.ErrData_B.Value.startCompAck == 1)
else if (TCUCommuStatus_B.ErrData.Value.startCompAck == 1)
*stopReason = 0x04;
else if (ChargeStopType_B == eChgStop_Run_CcOpen)
*stopReason = 0x05; //控制导引超时//充电过程中充电导引枪连接
......@@ -1499,16 +1493,17 @@ void AckTCUHeartBeat(StructTCUSend * pPgnRecv)
if (pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus.HeartBeatVaild = 1; //控制器检测tcu心跳状态
}
if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.HeartBeatErrCnt_B = 0;
TCUCommuStatus_B.HeartBeatErrCnt = 0;
TCUCommuStatus_B.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus_B.HeartBeatVaild = 1; //控制器检测tcu心跳状态
}
TCUCommuStatus.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus.HeartBeatVaild = 1; //控制器检测tcu心跳状态
}
......@@ -1520,16 +1515,14 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
TCUCommuStatus.CommStage = TimeStage;
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
TCUCommuStatus_B.CommStage = TimeStage;
}
TCUCommuStatus.CommStage = TimeStage;
memcpy(time, &pPgnRecv->Data[1], 7);
TimeBlock.Year = time->year + 2000;
TimeBlock.Mon = time->month;
......@@ -1546,7 +1539,7 @@ void TCUtimeSet(StructTCUSend * pPgnRecv)
}
void TCUtimeSetAck(void)
void TCUtimeSetAck(u8 ChgNum)
{
u8 Data[8] =
{
......@@ -1555,7 +1548,7 @@ void TCUtimeSetAck(void)
StructTime Time;
cp56time2a * time = NULL;
Data[0] = 0;//TCUCommuStatus.ChgNum;
Data[0] = 0;
StampToTime(RtcGetTime(), &Time);
time->year = Time.Year - 2000;
time->month = Time.Mon;
......@@ -1564,11 +1557,11 @@ void TCUtimeSetAck(void)
time->min = Time.Min;
time->msec = (((u16) Time.Sec) * 1000);
memcpy(&Data[1], time, 7);
if(TCUCommuStatus.ChgNum == 1)
if(ChgNum == 1)
{
TCUSinglePackSendMsg(Data, 8, eCmd_timeAck, 6,ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
TCUSinglePackSendMsg(Data, 8, eCmd_timeAck, 6,ChargerCont1939Addr_B);
}
......@@ -1579,32 +1572,41 @@ void TCUVersionCheck(StructTCUSend * pPgnRecv)
{
u16 version;
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
version = (((u16) pPgnRecv->Data[2]) << 8) +pPgnRecv->Data[1];
if (TCUControlInfo.version <= version)
{
TCUCommuStatus.VerChkVaild = 1; //版本校验成功
TCUCommuStatus.CommStage = VersionStage;
}
else
TCUCommuStatus.VerChkVaild = 0; //版本校验失败
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
}
version = (((u16) pPgnRecv->Data[2]) << 8) +pPgnRecv->Data[1];
version = (((u16) pPgnRecv->Data[2]) << 8) +pPgnRecv->Data[1];
if (TCUControlInfo.version <= version)
{
TCUCommuStatus.VerChkVaild = 1; //版本校验成功
TCUCommuStatus.CommStage = VersionStage;
if (TCUControlInfo.version <= version)
{
TCUCommuStatus_B.VerChkVaild = 1; //版本校验成功
TCUCommuStatus_B.CommStage = VersionStage;
}
else
TCUCommuStatus_B.VerChkVaild = 0; //版本校验失败
}
else
TCUCommuStatus.VerChkVaild = 0; //版本校验失败
return;
}
void TCUVersionCheckSent(void)
void TCUVersionCheckSent(u8 ChgNum)
{
u8 Data[8] =
{
......@@ -1614,11 +1616,11 @@ void TCUVersionCheckSent(void)
Data[0] = 0;
Data[1] = TCUControlInfo.version;
Data[2] = (u8) (TCUControlInfo.version >> 8);
if(TCUCommuStatus.ChgNum == 1)
if(ChgNum == 1)
{
TCUSinglePackSendMsg(Data, 8, eCmd_versiAck, 6,ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
TCUSinglePackSendMsg(Data, 8, eCmd_versiAck, 6,ChargerCont1939Addr_B);
}
......@@ -1630,46 +1632,63 @@ void TCUParam(StructTCUSend * pPgnRecv)
{
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
TCUCommuStatus.CommStage = ChageParamStage;
memcpy(TCUControlInfo.ChargeNum, &pPgnRecv->Data[0], 8);
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
TCUCommuStatus_B.CommStage = ChageParamStage;
memcpy(TCUControlInfo.ChargeNum, &pPgnRecv->Data[0], 8);
}
TCUCommuStatus.CommStage = ChageParamStage;
memcpy(TCUControlInfo.ChargeNum, &pPgnRecv->Data[0], 8);
}
void TCUParamAck(void)
void TCUParamAck(u8 ChgNum)
{
u8 Data[8];
memset(Data,0,8);
Data[0] = 0;//TCUCommuStatus.ChgNum;
Data[0] = 0;
if ((TCUCommuStatus.VerChkVaild == 0) || (TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT))
if(ChgNum == 1)
{
TCUCommuStatus.ParamVaild = 0;
Data[1] = 01; //失败
if ((TCUCommuStatus.VerChkVaild == 0) || (TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT))
{
TCUCommuStatus.ParamVaild = 0;
Data[1] = 01; //失败
if (TCUCommuStatus.VerChkVaild == 0)
Data[2] = 1; //版本校验失败
if (TCUCommuStatus.VerChkVaild == 0)
Data[2] = 1; //版本校验失败
else
Data[2] = 2; //心跳超时
}
else
Data[2] = 2; //心跳超时
}
else
{
Data[1] = 0;
Data[2] = 0;
TCUCommuStatus.ParamVaild = 1;
}
if(TCUCommuStatus.ChgNum == 1)
{
{
Data[1] = 0;
Data[2] = 0;
TCUCommuStatus.ParamVaild = 1;
}
TCUSinglePackSendMsg(Data, 8, eCmd_paramAck, 6,ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
if ((TCUCommuStatus_B.VerChkVaild == 0) || (TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT))
{
TCUCommuStatus_B.ParamVaild = 0;
Data[1] = 01; //失败
if (TCUCommuStatus_B.VerChkVaild == 0)
Data[2] = 1; //版本校验失败
else
Data[2] = 2; //心跳超时
}
else
{
Data[1] = 0;
Data[2] = 0;
TCUCommuStatus_B.ParamVaild = 1;
}
TCUSinglePackSendMsg(Data, 8, eCmd_paramAck, 6,ChargerCont1939Addr_B);
}
......@@ -1678,64 +1697,94 @@ void TCUParamAck(void)
void SerConAckAnalysis(StructTCUSend * pPgnRecv)
{
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
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; //版本校验未完成
else if (TCUCommuStatus.ParamVaild == 0)
TCUCommuStatus.ServiceContralVaildValue = 4; //参数下发为未完成
else if (TCUCurChgRecd.TCUChargeEnable == 1)
TCUCommuStatus.ServiceContralVaildValue = 05;
else
TCUCommuStatus.ServiceContralVaildValue = 0;
TCUCommuStatus.ChargingServiceSetValue = pPgnRecv->Data[1];
if (TCUCommuStatus.ServiceContralVaildValue == 0)
TCUControlInfo.ChargingServiceFlag = pPgnRecv->Data[1];
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.CommStage = ServiceContralStage;
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; //版本校验未完成
else if (TCUCommuStatus_B.ParamVaild == 0)
TCUCommuStatus_B.ServiceContralVaildValue = 4; //参数下发为未完成
else if (TCUCurChgRecd_B.TCUChargeEnable == 1)
TCUCommuStatus_B.ServiceContralVaildValue = 05;
else
TCUCommuStatus_B.ServiceContralVaildValue = 0;
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; //版本校验未完成
else if (TCUCommuStatus.ParamVaild == 0)
TCUCommuStatus.ServiceContralVaildValue = 4; //参数下发为未完成
else if ((TCUCurChgRecd.TCUChargeEnable == 1) || (TCUCurChgRecd_B.TCUChargeEnable == 1))
TCUCommuStatus.ServiceContralVaildValue = 05;
else
TCUCommuStatus.ServiceContralVaildValue = 0;
TCUCommuStatus_B.ChargingServiceSetValue = pPgnRecv->Data[1];
TCUCommuStatus.ChargingServiceSetValue = pPgnRecv->Data[1];
if (TCUCommuStatus_B.ServiceContralVaildValue == 0)
TCUControlInfo.ChargingServiceFlag = pPgnRecv->Data[1];
}
if (TCUCommuStatus.ServiceContralVaildValue == 0)
TCUControlInfo.ChargingServiceFlag = pPgnRecv->Data[1];
}
void SerConAck(void)
void SerConAck(u8 ChgNum)
{
u8 Data[8] =
{
0
};
Data[0] = 0;//TCUCommuStatus.ChgNum;
Data[1] = TCUCommuStatus.ChargingServiceSetValue;
if (TCUCommuStatus.ServiceContralVaildValue == 0)
{
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus.ServiceContralVaildValue; //失败
}
if(TCUCommuStatus.ChgNum == 1)
if(ChgNum == 1)
{
Data[0] = 0;
Data[1] = TCUCommuStatus.ChargingServiceSetValue;
if (TCUCommuStatus.ServiceContralVaildValue == 0)
{
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus.ServiceContralVaildValue; //失败
}
TCUSinglePackSendMsg(Data, 8, eCmd_SerConAck, 4,ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
Data[0] = 0;
Data[1] = TCUCommuStatus_B.ChargingServiceSetValue;
if (TCUCommuStatus_B.ServiceContralVaildValue == 0)
{
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus_B.ServiceContralVaildValue; //失败
}
TCUSinglePackSendMsg(Data, 8, eCmd_SerConAck, 4,ChargerCont1939Addr_B);
}
......@@ -1744,88 +1793,117 @@ void SerConAck(void)
void ElectControlAnalysis(StructTCUSend * pPgnRecv)
{
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.CommStage = ElectLockStage;
TCUCommuStatus.CommStage = ElectLockStage;
TCUCommuStatus.ElectLockSetValue = pPgnRecv->Data[2];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus.ElectLockVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus.HeartBeatVaild))
TCUCommuStatus.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus.VerChkVaild == 0)
TCUCommuStatus.ElectLockVaildValue = 3; //版本校验未完成
else if (TCUCommuStatus.ParamVaild == 0)
TCUCommuStatus.ElectLockVaildValue = 4; //参数下发为未完成
else if ((TCUCurChgRecd.TCUChargeEnable == 1) || (TCUCurChgRecd_B.TCUChargeEnable == 1))
TCUCommuStatus.ElectLockVaildValue = 05;
else if (PillarError.Value.EleLock == 1)
TCUCommuStatus.ElectLockVaildValue = 07; //电子锁故障
else
TCUCommuStatus.ServiceContralVaildValue = 0;
TCUCommuStatus.ElectLockSetValue = pPgnRecv->Data[2];
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus.ElectLockVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus.HeartBeatVaild))
TCUCommuStatus.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus.VerChkVaild == 0)
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
TCUCommuStatus.ServiceContralVaildValue = 0;
if ((TCUCommuStatus.ServiceContralVaildValue == 0) || (TCUCommuStatus.ServiceContralVaildValue == 0x07))
{
if (TCUCommuStatus.ChgNum == 1)
if ((TCUCommuStatus.ServiceContralVaildValue == 0) || (TCUCommuStatus.ServiceContralVaildValue == 0x07))
{
if (TCUCommuStatus.ElectLockSetValue == 01)
LockSet(eSwSta_On);
else
LockSet(eSwSta_Off);
}
else if (TCUCommuStatus.ChgNum == 2)
{
}
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) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus_B.ElectLockVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus_B.HeartBeatVaild))
TCUCommuStatus_B.ElectLockVaildValue = 2; //通讯超时
else if (TCUCommuStatus_B.VerChkVaild == 0)
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
TCUCommuStatus_B.ServiceContralVaildValue = 0;
if (TCUCommuStatus.ElectLockSetValue == 01)
if ((TCUCommuStatus_B.ServiceContralVaildValue == 0) || (TCUCommuStatus_B.ServiceContralVaildValue == 0x07))
{
if (TCUCommuStatus_B.ElectLockSetValue == 01)
LockSet(eSwSta_On);
else
LockSet(eSwSta_Off);
}
}
}
void ElectControlAck(void)
void ElectControlAck(u8 ChgNum)
{
u8 Data[8] =
{
0
};
Data[0] = 0;//TCUCommuStatus.ChgNum;
Data[1] = TCUCommuStatus.ElectLockSetValue;
if(ChgNum == 1)
{
Data[0] = 0;
Data[1] = TCUCommuStatus.ElectLockSetValue;
if (PillarError.Value.EleLock == 1)
TCUCommuStatus.ServiceContralVaildValue = 0x07;
if (PillarError.Value.EleLock == 1)
TCUCommuStatus.ServiceContralVaildValue = 0x07;
if (TCUCommuStatus.ElectLockVaildValue == 0)
{
Data[2] = 00; //成功
if (TCUCommuStatus.ElectLockVaildValue == 0)
{
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus.ServiceContralVaildValue; //失败
}
if(TCUCommuStatus.ChgNum == 1)
{
Data[3] = 00; //成功
}
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus.ServiceContralVaildValue; //失败
}
TCUSinglePackSendMsg(Data, 8, eCmd_GunAck, 4, ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
Data[0] = 0;
Data[1] = TCUCommuStatus_B.ElectLockSetValue;
if (PillarError.Value.EleLock == 1)
TCUCommuStatus_B.ServiceContralVaildValue = 0x07;
if (TCUCommuStatus_B.ElectLockVaildValue == 0)
{
Data[2] = 00; //成功
Data[3] = 00; //成功
}
else
{
Data[2] = 01; //失败
Data[3] = TCUCommuStatus_B.ServiceContralVaildValue; //失败
}
TCUSinglePackSendMsg(Data, 8, eCmd_GunAck, 4,ChargerCont1939Addr_B);
}
}
......@@ -1833,30 +1911,21 @@ void ElectControlAck(void)
void PowerControlAnalysis(StructTCUSend * pPgnRecv)
{
//TCUCommuStatus.ChgNum = pPgnRecv->Data[0];
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
}
TCUCommuStatus.CommStage = PowerControlStage;
TCUCommuStatus.CommStage = PowerControlStage;
TCUCommuStatus.PowerControltype = pPgnRecv->Data[1];
TCUCommuStatus.PowerControlParam = pPgnRecv->Data[2] + (u16)
pPgnRecv->Data[3] << 8;
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus.PowerControlVaildValue = 1; //数据合法性校验失败
else
{
TCUCommuStatus.PowerControlVaildValue = 0; //数据合法性校验成功
TCUCommuStatus.PowerControltype = pPgnRecv->Data[1];
TCUCommuStatus.PowerControlParam = pPgnRecv->Data[2] + ((u16)pPgnRecv->Data[3]) << 8;
if (pPgnRecv->DA == ChargerCont1939Addr) //a枪
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus.PowerControlVaildValue = 1; //数据合法性校验失败
else
{
TCUCommuStatus.PowerControlVaildValue = 0; //数据合法性校验成功
TCUControlInfo.PowerControl_A.ControlType = pPgnRecv->Data[1];
if (pPgnRecv->Data[1] == 01)
......@@ -1867,9 +1936,24 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
{
TCUControlInfo.PowerControl_A.Percentage = pPgnRecv->Data[3];
}
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B) //b枪
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.CommStage = PowerControlStage;
TCUCommuStatus_B.PowerControltype = pPgnRecv->Data[1];
TCUCommuStatus_B.PowerControlParam = pPgnRecv->Data[2] + ((u16)pPgnRecv->Data[3]) << 8;
if (((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02)) || ((pPgnRecv->Data[2] != 0x01) &&
(pPgnRecv->Data[2] != 0x02)))
TCUCommuStatus_B.PowerControlVaildValue = 1; //数据合法性校验失败
else
{
TCUCommuStatus_B.PowerControlVaildValue = 0; //数据合法性校验成功
TCUControlInfo.PowerControl_B.ControlType = pPgnRecv->Data[1];
if (pPgnRecv->Data[1] == 01)
......@@ -1880,40 +1964,57 @@ void PowerControlAnalysis(StructTCUSend * pPgnRecv)
{
TCUControlInfo.PowerControl_B.Percentage = pPgnRecv->Data[3];
}
}
}
}
void PowerControlAck(void)
void PowerControlAck(u8 ChgNum)
{
u8 Data[8] =
{
0
};
Data[0] = 0;//TCUCommuStatus.ChgNum;
Data[1] = TCUCommuStatus.PowerControltype;
Data[2] = (u8)
TCUCommuStatus.PowerControlParam;
Data[3] = (u8) (TCUCommuStatus.PowerControlParam >> 8);
if (TCUCommuStatus.PowerControlVaildValue == 0)
{
Data[4] = 0;
Data[5] = 0;
}
else
{
Data[4] = 01;
Data[5] = TCUCommuStatus.PowerControlVaildValue; //失败
}
if(TCUCommuStatus.ChgNum == 1)
if(ChgNum == 1)
{
Data[0] = 0;
Data[1] = TCUCommuStatus.PowerControltype;
Data[2] = (u8)
TCUCommuStatus.PowerControlParam;
Data[3] = (u8) (TCUCommuStatus.PowerControlParam >> 8);
if (TCUCommuStatus.PowerControlVaildValue == 0)
{
Data[4] = 0;
Data[5] = 0;
}
else
{
Data[4] = 01;
Data[5] = TCUCommuStatus.PowerControlVaildValue; //失败
}
TCUSinglePackSendMsg(Data, 8, eCmd_powerAck, 4, ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
Data[0] = 0;
Data[1] = TCUCommuStatus_B.PowerControltype;
Data[2] = TCUCommuStatus_B.PowerControlParam;
Data[3] = (u8) (TCUCommuStatus_B.PowerControlParam >> 8);
if (TCUCommuStatus_B.PowerControlVaildValue == 0)
{
Data[4] = 0;
Data[5] = 0;
}
else
{
Data[4] = 01;
Data[5] = TCUCommuStatus_B.PowerControlVaildValue; //失败
}
TCUSinglePackSendMsg(Data, 8, eCmd_powerAck, 4, ChargerCont1939Addr_B);
}
}
......@@ -2294,7 +2395,7 @@ void measuringReporting20_B(void)
}
void ChgInfornQueryAck(void)
void ChgInfornQueryAck(u8 ChgNum)
{
u8 len = 0;
u8 data[64]={0};
......@@ -2322,11 +2423,11 @@ void ChgInfornQueryAck(void)
data[len++] = (u8) (4000 - TCUControlInfo.DcMinCurrt);
data[len++] = (u8) ((4000 - TCUControlInfo.DcMinCurrt) >> 8);
if(TCUCommuStatus.ChgNum == 1)
if(ChgNum == 1)
{
TCUMultiPackSendMsg(data, len, eCmd_QueryAck, 6, ChargerCont1939Addr);
}
else if(TCUCommuStatus.ChgNum == 2)
else if(ChgNum == 2)
{
TCUMultiPackSendMsg(data, len, eCmd_QueryAck, 6, ChargerCont1939Addr_B);
}
......@@ -2425,7 +2526,7 @@ void TCUMeasuRecv(StructTCUSend * pPgnRecv)
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.DCMeasuErrCnt_B = 0;
TCUCommuStatus_B.DCMeasuErrCnt = 0;
}
}
......
......@@ -293,7 +293,7 @@ extern void StartMeg ( StructTCUSend* pPgnRecv );
extern void StartMegAck_A(void);
extern void StartMegAck_B(void);
extern void AckTCUHeartBeat(StructTCUSend* pPgnRecv);
extern void TCUParamAck(void);
extern void TCUParamAck(u8);
extern void startCompSend_A(void);
extern void startCompSend_B(void);
......@@ -308,22 +308,22 @@ extern void stopCompAck( StructTCUSend* pPgnRecv);
extern void TCUHeartBeat_A(void);
extern void TCUHeartBeat_B(void);
extern void TCUtimeSet(StructTCUSend* pPgnRecv);
extern void TCUtimeSetAck(void);
extern void TCUtimeSetAck(u8);
extern void TCUVersionCheck(StructTCUSend* pPgnRecv);
extern void TCUVersionCheckSent(void);
extern void TCUVersionCheckSent(u8);
extern void SerConAckAnalysis(StructTCUSend* pPgnRecv);
extern void SerConAck(void);
extern void SerConAck(u8);
extern void ElectControlAnalysis(StructTCUSend* pPgnRecv);
extern void ElectControlAck(void);
extern void ElectControlAck(u8);
extern void PowerControlAnalysis(StructTCUSend* pPgnRecv);
extern void PowerControlAck(void);
extern void PowerControlAck(u8);
extern void InformationReporting_22_A (void);
extern void InformationReporting_22_B (void);
extern void InformationReporting_23_A (void);
extern void InformationReporting_23_B(void);
extern void measuringReporting20_A(void);
extern void measuringReporting20_B(void);
extern void ChgInfornQueryAck(void);
extern void ChgInfornQueryAck(u8);
extern void verification(void);
extern void verificationAck(StructTCUSend* pPgnRecv);
extern void TcuEMMsg( u16 data);
......
......@@ -17,7 +17,6 @@ extern void TCUCanInit(void);
StructTCUCommuStatus TCUCommuStatus =
{
.ChgNum = 0,
.CommStage = HeartStage,
.ParamVaild = 0,
0,
......@@ -25,8 +24,7 @@ StructTCUCommuStatus TCUCommuStatus =
};
StructTCUCommuStatus TCUCommuStatus_B =
{
.ChgNum = 0,
{
.CommStage = HeartStage,
.ParamVaild = 0,
0,
......@@ -85,17 +83,15 @@ void TCURecvProcess(void)
break;
case eCmd_Query: // 充电桩配置信息查询帧
//TCUCommuStatus.ChgNum = pPgnRecv.Data[0];
if(pPgnRecv.DA == ChargerCont1939Addr)
{
TCUCommuStatus.ChgNum = 1;
TCUCommuStatus.CommStage = ChgInfornQueryStage;
}
else if(pPgnRecv.DA == ChargerCont1939Addr_B)
{
TCUCommuStatus.ChgNum = 2;
TCUCommuStatus_B.CommStage = ChgInfornQueryStage;
}
TCUCommuStatus.CommStage = ChgInfornQueryStage;
break;
case eCmd_verificationAck: //车辆验证应答帧
......@@ -132,7 +128,6 @@ void TCURecvProcess(void)
}
void InformationReporting(void)
{
//遥信
......@@ -140,11 +135,18 @@ void InformationReporting(void)
if (GetSystemTick() -DCConInforSendTime >= 500)
{
DCConInforSendTime = GetSystemTick();
InformationReporting_22_A();
InformationReporting_23_A();
InformationReporting_22_B();
InformationReporting_23_B();
if (TCUCommuStatus.VerChkVaild) //版本检验未完成不发送
{
InformationReporting_22_A();
InformationReporting_23_A();
}
if (TCUCommuStatus_B.VerChkVaild) //版本检验未完成不发送
{
InformationReporting_22_B();
InformationReporting_23_B();
}
}
}
......@@ -156,34 +158,42 @@ void DCMeasuring_A(void)
if ((GetSystemTick() - DCMeasuRecvTime) > 1000)
{
TCUCommuStatus.DCMeasuErrCnt++;
DCMeasuRecvTime = GetSystemTick();
if (TCUCommuStatus.DCMeasuErrCnt > 5)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit(); //can通讯接口初始化
}
else
{
measuringReporting20_A();
}
TCUCommuStatus.DCMeasuErrCnt_B++;
if (TCUCommuStatus.DCMeasuErrCnt_B > 5)
if (TCUCommuStatus.VerChkVaild) //版本检验未完成不发送
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit();
TCUCommuStatus.DCMeasuErrCnt++;
if (TCUCommuStatus.DCMeasuErrCnt > 5)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit(); //can通讯接口初始化
}
else
{
measuringReporting20_A();
}
}
else
if (TCUCommuStatus_B.VerChkVaild) //版本检验未完成不发送
{
measuringReporting20_B();
TCUCommuStatus_B.DCMeasuErrCnt++;
if (TCUCommuStatus_B.DCMeasuErrCnt > 5)
{
memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus_B.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus_B.HeartBeatErrCnt = 0;
TCUCommuStatus_B.HeartBeatVaild = 0; //心跳失效
//TCUCanInit();
}
else
{
measuringReporting20_B();
}
}
}
}
......@@ -233,26 +243,26 @@ void ConEMSend(void)
}
}
if (TCUCommuStatus.ConEMSendFlag_B == 1)
if (TCUCommuStatus_B.ConEMSendFlag == 1)
{
TcuEMMsg_B(TCUCommuStatus.ErrData_B.Mult); //帧超时
TcuEMMsg_B(TCUCommuStatus_B.ErrData.Mult); //帧超时
ConEMSendTick_B = GetSystemTick();
TCUCommuStatus.ConEMSendFlag_B = 2;
TCUCommuStatus_B.ConEMSendFlag = 2;
}
else if (TCUCommuStatus.ConEMSendFlag_B == 2)
else if (TCUCommuStatus_B.ConEMSendFlag == 2)
{
if (GetSystemTick() -ConEMSendTick_B >= 250)
{
if (ConEMSendEcount_B < 20)
{
ConEMSendEcount_B++;
TcuEMMsg_B(TCUCommuStatus.ErrData_B.Mult);
TcuEMMsg_B(TCUCommuStatus_B.ErrData.Mult);
}
else
{
ConEMSendTick_B = 0;
TCUCommuStatus.ConEMSendFlag_B = 0;
TCUCommuStatus.ErrData_B.Mult = 0;
TCUCommuStatus_B.ConEMSendFlag = 0;
TCUCommuStatus_B.ErrData.Mult = 0;
ConEMSendEcount_B = 0;
}
}
......@@ -260,10 +270,10 @@ void ConEMSend(void)
else
{
ConEMSendTick_B = 0;
TCUCommuStatus.ConEMSendFlag_B = 0;
TCUCommuStatus_B.ConEMSendFlag = 0;
if (TCUCurChgRecd_B.TCUChargeEnable == 0)
TCUCommuStatus.ErrData_B.Mult = 0; //主动停机结束帧发送完成或主动TCU停机时置0
TCUCommuStatus_B.ErrData.Mult = 0; //主动停机结束帧发送完成或主动TCU停机时置0
ConEMSendEcount_B = 0;
}
......@@ -275,6 +285,9 @@ void CommutionConfigurationStage(void)
static EnumTCUCommStage oldStage;
static u32 VersionRecvTime = 0;
static u32 VersionSendTimes = 0;
static EnumTCUCommStage oldStage_B;
static u32 VersionRecvTime_B = 0;
static u32 VersionSendTimes_B = 0;
if (TCUCommuStatus.CommStage == VersionStage)
{
if(oldStage != VersionStage)
......@@ -288,30 +301,52 @@ void CommutionConfigurationStage(void)
VersionSendTimes++;
if(VersionSendTimes > 5000/500)
{
if (TCUCommuStatus.ChgNum == 1)
{
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
}
else
{
TCUCommuStatus.ErrData_B.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag_B = 1;
}
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
TCUCommuStatus.CommStage = HeartStage;
}
else
{
TCUVersionCheckSent();
TCUVersionCheckSent(1);
}
}
}
if (TCUCommuStatus_B.CommStage == VersionStage)
{
if(oldStage_B != VersionStage)
{
VersionRecvTime_B = 0;
VersionSendTimes_B = 0;
}
if (GetSystemTick() - VersionRecvTime_B >= 500)
{
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;
}
......@@ -327,9 +362,6 @@ void TCUPillarHeartBeat(void)
TCUHeartBeat_A();
TCUHeartBeat_B();
TCUCommuStatus.HeartBeatErrCnt++;
if(TCUCommuStatus.HeartBeatErrCnt > 5)
......@@ -338,22 +370,42 @@ void TCUPillarHeartBeat(void)
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCanInit();
}
TCUHeartBeat_B();
TCUCommuStatus_B.HeartBeatErrCnt++;
if(TCUCommuStatus_B.HeartBeatErrCnt > 5)
{
memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus_B.ConnectFlag = CONNECT_TIMEOUT;
//TCUCanInit();
}
}
void CommutionRunStage(void)
{
static EnumTCUCommStage oldStage;
static u32 sendTick = 0;
static u8 sendTimes = 0;
static EnumTCUCommStage oldStage_B;
static u32 sendTick_B = 0;
static u8 sendTimes_B = 0;
if(oldStage != TCUCommuStatus.CommStage)
{
sendTick = 0;
sendTimes = 0;
}
if(oldStage_B != TCUCommuStatus_B.CommStage)
{
sendTick_B = 0;
sendTimes_B = 0;
}
if ((TCUCommuStatus.CommStage == ChageParamStage))
{
......@@ -367,7 +419,24 @@ void CommutionRunStage(void)
}
else
{
TCUParamAck();
TCUParamAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ChageParamStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTick_B = GetSystemTick();
sendTimes_B++;
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
TCUParamAck(2);
}
}
}
......@@ -384,11 +453,26 @@ void CommutionRunStage(void)
}
else
{
TCUtimeSetAck();
TCUtimeSetAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == TimeStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
TCUtimeSetAck(2);
}
}
}
if ((TCUCommuStatus.CommStage == ServiceContralStage))
......@@ -403,7 +487,25 @@ void CommutionRunStage(void)
}
else
{
SerConAck();
SerConAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ServiceContralStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
SerConAck(2);
}
}
......@@ -421,7 +523,24 @@ void CommutionRunStage(void)
}
else
{
ElectControlAck();
ElectControlAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ElectLockStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
ElectControlAck(2);
}
}
}
......@@ -438,12 +557,30 @@ void CommutionRunStage(void)
}
else
{
PowerControlAck();
PowerControlAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == PowerControlStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
PowerControlAck(2);
}
}
}
if ((TCUCommuStatus.CommStage == ChgInfornQueryStage))
{
if(GetSystemTick() - sendTick >= 500)
......@@ -456,13 +593,32 @@ void CommutionRunStage(void)
}
else
{
ChgInfornQueryAck();
ChgInfornQueryAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ChgInfornQueryStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
ChgInfornQueryAck(2);
}
}
}
oldStage = TCUCommuStatus.CommStage;
oldStage_B = TCUCommuStatus_B.CommStage;
}
......@@ -514,12 +670,12 @@ void TCUCurChgRecordInterface_A(void)
if (ChgRecordSendErr < 20) //超时5S
{ //超时小于20次
startCompSend_B();
startCompSend_A();
ChgRecordSendTick = GetSystemTick();
}
else
{ //超时大于,保存
TCUCommuStatus.ConEMSendFlag_B = 1; //错误帧发送
TCUCommuStatus.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus.ErrData.Value.startCompAck = 1;
TCUCurChgRecd.TCUChgStarCompNotetrl = 3;
......@@ -528,11 +684,11 @@ void TCUCurChgRecordInterface_A(void)
}
}
}
else if (TCUCurChgRecd_B.TCUChgStarCompNotetrl == 3)
else if (TCUCurChgRecd.TCUChgStarCompNotetrl == 3)
{
TCUCurChgRecd_B.TCUStartCompresult = 0; //
TCUCurChgRecd_B.TCUChargeEnable = 0; //归零
TCUCurChgRecd_B.StarChgType = 0;
TCUCurChgRecd.TCUStartCompresult = 0; //
TCUCurChgRecd.TCUChargeEnable = 0; //归零
TCUCurChgRecd.StarChgType = 0;
ChgStartCompSendEcount = 0;
}
else if (TCUCurChgRecd.TCUChgStopNotetrl == 1) //停止帧逻辑
......@@ -649,8 +805,8 @@ void TCUCurChgRecordInterface_B(void)
}
else
{ //超时大于,保存
TCUCommuStatus.ConEMSendFlag_B = 1; //错误帧发送
TCUCommuStatus.ErrData_B.Value.startCompAck = 1;
TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus_B.ErrData.Value.startCompAck = 1;
TCUCurChgRecd_B.TCUChargeEnable = 0; //超时停机
TCUCurChgRecd_B.TCUChgStarCompNotetrl = 3;
ChgStartCompSendEcount = 0;
......@@ -706,8 +862,8 @@ void TCUCurChgRecordInterface_B(void)
}
else
{ //超时大于,保存
TCUCommuStatus.ConEMSendFlag_B = 1; //错误帧发送
TCUCommuStatus.ErrData_B.Value.stopCompAck = 1;
TCUCommuStatus_B.ConEMSendFlag = 1; //错误帧发送
TCUCommuStatus_B.ErrData.Value.stopCompAck = 1;
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 3;
ChgRecordSendErr = 0;
}
......@@ -879,17 +1035,23 @@ void SendStatus(void)
{
static u32 ChgStutusSendTick = 0;
u8 data[8] = {0};
if (TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT)
return;
if ((GetSystemTick() -ChgStutusSendTick) > (500))
{
ChgStutusSendTick = GetSystemTick();
data[0] = 0;
data[1] = TcuGetChgStatus();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr);
data[1] = TcuGetChgStatus_B();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr_B);
if (TCUCommuStatus.ConnectFlag == CONNECT_NORMAL)
{
data[1] = TcuGetChgStatus();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr);
}
if (TCUCommuStatus_B.ConnectFlag == CONNECT_NORMAL)
{
data[1] = TcuGetChgStatus_B();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr_B);
}
}
}
......@@ -902,8 +1064,8 @@ void TCUChgStarStopProcess(void) //充电流启停程逻辑
void TCUWorkProcess(void)
{
if (TCUCommuStatus.VerChkVaild == 0) //版本检验未完成不发送
return;
//if (TCUCommuStatus.VerChkVaild == 0) //版本检验未完成不发送
// return;
InformationReporting(); //遥信
DCMeasuring_A(); //遥测
......
......@@ -43,7 +43,7 @@ typedef union
typedef struct
{
EnumTCUCommStage CommStage;
u8 ChgNum;
u8 VerChkVaild;
u8 ParamVaild;
......@@ -61,18 +61,14 @@ typedef struct
u8 ConnectFlag;//0 未连接 其他已连接
u8 HeartBeatVaild;//接收心跳有效标志位
u8 HeartBeatErrCnt;
u8 HeartBeatErrCnt_B;
u16 HeartBeatNumCnt;
u16 HeartBeatLoseCnt;
u32 DCMeasuErrCnt;
u32 DCMeasuErrCnt_B;
UnionConEM ErrData;
UnionConEM ErrData_B;
u8 ConEMSendFlag;
u8 ConEMSendFlag_B;
}StructTCUCommuStatus;
......@@ -89,6 +85,7 @@ typedef struct
extern StructTCUCommuStatus TCUCommuStatus;
extern StructTCUCommuStatus TCUCommuStatus_B;
extern void TCUComm(void const *argument);
#endif
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论