提交 da0c4803 作者: wysheng

修复tcu通信的一些问题;绝缘检测待解决

上级 bf30d83f
......@@ -1804,14 +1804,14 @@ void AckTCUHeartBeat(StructTCUSend * pPgnRecv)
{
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus.HeartBeatVaild = 1; //控制器检测tcu心跳状态
//TCUCommuStatus.HeartBeatVaild = 1; //控制器检测tcu心跳状态
}
if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.HeartBeatErrCnt = 0;
TCUCommuStatus_B.ConnectFlag = CONNECT_NORMAL; //tcu检测控制器心跳状态
TCUCommuStatus_B.HeartBeatVaild = 1; //控制器检测tcu心跳状态
//TCUCommuStatus_B.HeartBeatVaild = 1; //控制器检测tcu心跳状态
}
}
......@@ -1945,11 +1945,13 @@ void TCUParam(StructTCUSend * pPgnRecv)
if (pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.CommStage = ChageParamStage;
TCUCommuStatus.ParamVaild = 1;
memcpy(TCUControlInfo.ChargeNum, &pPgnRecv->Data[0], 8);
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.CommStage = ChageParamStage;
TCUCommuStatus_B.ParamVaild = 1;
memcpy(TCUControlInfo.ChargeNum, &pPgnRecv->Data[0], 8);
}
}
......@@ -2016,7 +2018,7 @@ void SerConAckAnalysis(StructTCUSend * pPgnRecv)
if ((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02))
TCUCommuStatus.ServiceContralVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus.HeartBeatVaild))
else if ((TCUCommuStatus.ConnectFlag == CONNECT_TIMEOUT)/* || (TCUCommuStatus.HeartBeatVaild)*/)
TCUCommuStatus.ServiceContralVaildValue = 2; //通讯超时
else if (TCUCommuStatus.VerChkVaild == 0)
TCUCommuStatus.ServiceContralVaildValue = 3; //版本校验未完成
......@@ -2038,7 +2040,7 @@ void SerConAckAnalysis(StructTCUSend * pPgnRecv)
if ((pPgnRecv->Data[1] != 0x01) && (pPgnRecv->Data[1] != 0x02))
TCUCommuStatus_B.ServiceContralVaildValue = 1; //数据合法性校验失败
else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT) || (TCUCommuStatus_B.HeartBeatVaild))
else if ((TCUCommuStatus_B.ConnectFlag == CONNECT_TIMEOUT)/* || (TCUCommuStatus_B.HeartBeatVaild)*/)
TCUCommuStatus_B.ServiceContralVaildValue = 2; //通讯超时
else if (TCUCommuStatus_B.VerChkVaild == 0)
TCUCommuStatus_B.ServiceContralVaildValue = 3; //版本校验未完成
......
......@@ -9,7 +9,7 @@
#include "Drv_ImdJyc.h"
#define ImdCheckFreq (200)//ms
#define DcModOutTimeOut (22000)//ms
#define DcModOutTimeOut (11000)//ms
#define VoltWaitTimeOut (1000)//ms
#define ChkWaitTimeOut (12000)//(8500)//ms
#define ChkTimeOut (1500)//ms
......
......@@ -1010,67 +1010,57 @@ void Thd_Mult(void const *parameter)
}
#endif
/*绝缘检测通讯故障判断*/
if((GetSystemTick() - ImdCheckTcik) >= 600)
if((GetSystemTick() - ImdCheckTcik) >= 500)
{
//if(eChgVer_2011 != UserParam.ChgVer
// || eLcdPro_FactoryTest == LcdCtrl.CurScreen
// || eLcdPro_B_FactoryTest == LcdCtrl.CurScreen
// )
{
if(0 == ImdRead(&ImdValue))
{
if(ImdErrorCnt > 2)
ImdErrorCnt -= 2;
else if(ImdErrorCnt > 0)
ImdErrorCnt--;
ImdValue.Vaild = 1;
}
else
{
if(ImdErrorCnt < 5)
ImdErrorCnt++;
else
{
ImdErrorCnt = 5;
ImdValue.Vaild = 0;
}
}
ImdCheckTcik = GetSystemTick();
static u8 flag = 0;
if(flag == 0)
{
flag = 1;
if(0 == ImdRead(&ImdValue))
{
if(ImdErrorCnt > 2)
ImdErrorCnt -= 2;
else if(ImdErrorCnt > 0)
ImdErrorCnt--;
}
//else
//{
// ImdErrorCnt = 0;
// ImdErrorCnt_B = 0;
// ImdValue.Vaild = 0;
// ImdValue_B.Vaild = 0;
//}
ImdCheckTcik = GetSystemTick();
}
if((GetSystemTick() - ImdCheckTcik_B) >= 550)
{
if(0 == ImdRead_B(&ImdValue_B))
{
if(ImdErrorCnt_B > 2)
ImdErrorCnt_B -= 2;
else if(ImdErrorCnt_B > 0)
ImdErrorCnt_B--;
ImdValue_B.Vaild = 1;
ImdValue.Vaild = 1;
}
else
{
if(ImdErrorCnt < 5)
ImdErrorCnt++;
else
{
ImdErrorCnt = 5;
ImdValue.Vaild = 0;
}
}
}
else
{
if(ImdErrorCnt_B < 5)
ImdErrorCnt_B++;
flag = 0;
if(0 == ImdRead_B(&ImdValue_B))
{
if(ImdErrorCnt_B > 2)
ImdErrorCnt_B -= 2;
else if(ImdErrorCnt_B > 0)
ImdErrorCnt_B--;
ImdValue_B.Vaild = 1;
}
else
{
ImdErrorCnt_B = 5;
ImdValue_B.Vaild = 0;
if(ImdErrorCnt_B < 5)
ImdErrorCnt_B++;
else
{
ImdErrorCnt_B = 5;
ImdValue_B.Vaild = 0;
}
}
}
ImdCheckTcik_B= GetSystemTick();
}
}
if(0 == ImdErrorCnt)
PillarError.Value.ImdDev = 0;
else if((5 == ImdErrorCnt)&&((TCUCurChgRecd_B.TCUChargeEnable == 0)&&(TCUCurChgRecd.TCUChargeEnable==0)&&(eChgVer_2011 != UserParam.ChgVer)))
......@@ -1085,7 +1075,7 @@ void Thd_Mult(void const *parameter)
{
OnesCheckTcik = GetSystemTick();
extern void OnesCheckTcikHandle(void);
OnesCheckTcikHandle();
//OnesCheckTcikHandle();
}
osDelay(25);
}
......
......@@ -17,7 +17,7 @@ extern void TCUCanInit(void);
StructTCUCommuStatus TCUCommuStatus =
{
.CommStage = HeartStage,
.CommStage = TCUConfig,
.ParamVaild = 0,
0,
0
......@@ -25,7 +25,7 @@ StructTCUCommuStatus TCUCommuStatus =
StructTCUCommuStatus TCUCommuStatus_B =
{
.CommStage = HeartStage,
.CommStage = TCUConfig,
.ParamVaild = 0,
0,
0
......@@ -85,10 +85,12 @@ void TCURecvProcess(void)
case eCmd_Query: // 充电桩配置信息查询帧
if(pPgnRecv.DA == ChargerCont1939Addr)
{
if(TCUCommuStatus.CommStage == HeartStage)
TCUCommuStatus.CommStage = ChgInfornQueryStage;
}
else if(pPgnRecv.DA == ChargerCont1939Addr_B)
{
if(TCUCommuStatus_B.CommStage == HeartStage)
TCUCommuStatus_B.CommStage = ChgInfornQueryStage;
}
......@@ -153,6 +155,16 @@ void InformationReporting(void)
InformationReporting_22_A();
InformationReporting_23_A();
}
}
}
void InformationReporting_B(void)
{
//遥信
static u32 DCConInforSendTime = 0;
if (GetSystemTick() - DCConInforSendTime >= 500UL)
{
DCConInforSendTime = GetSystemTick();
if (TCUCommuStatus_B.VerChkVaild) //版本检验未完成不发送
{
......@@ -163,8 +175,7 @@ void InformationReporting(void)
}
}
void DCMeasuring_A(void)
void DCMeasuring(void)
{
static u32 DCMeasuRecvTime = 0;
......@@ -177,11 +188,8 @@ void DCMeasuring_A(void)
TCUCommuStatus.DCMeasuErrCnt++;
if (TCUCommuStatus.DCMeasuErrCnt > 5)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCommuStatus.HeartBeatErrCnt = 0;
TCUCommuStatus.HeartBeatVaild = 0; //心跳失效
TCUCanInit(); //can通讯接口初始化
TCUCommuStatus.ErrData.Value.DCTCUMeasu = 1;
TCUCommuStatus.ConEMSendFlag = 1;
}
else
{
......@@ -189,16 +197,25 @@ void DCMeasuring_A(void)
}
}
}
}
void DCMeasuring_B(void)
{
static u32 DCMeasuRecvTime = 0;
if ((GetSystemTick() - DCMeasuRecvTime) > 1000)
{
DCMeasuRecvTime = GetSystemTick();
if (TCUCommuStatus_B.VerChkVaild) //版本检验未完成不发送
{
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();
TCUCommuStatus_B.ErrData.Value.DCTCUMeasu = 1;
TCUCommuStatus_B.ConEMSendFlag = 1;
}
else
{
......@@ -212,7 +229,6 @@ void DCMeasuring_A(void)
void ConEMSend(void)
{
static u32 ConEMSendTick = 0;
......@@ -222,73 +238,49 @@ void ConEMSend(void)
if (TCUCommuStatus.ConEMSendFlag == 1)
{
TcuEMMsg(TCUCommuStatus.ErrData.Mult); //帧超时
ConEMSendTick = GetSystemTick();
TCUCommuStatus.ConEMSendFlag = 2;
}
else if (TCUCommuStatus.ConEMSendFlag == 2)
{
if (GetSystemTick() -ConEMSendTick >= 250)
{
ConEMSendTick = GetSystemTick();
ConEMSendEcount++;
if (ConEMSendEcount < 20)
{
ConEMSendEcount++;
TcuEMMsg(TCUCommuStatus.ErrData.Mult);
}
else
{
ConEMSendTick = 0;
TCUCommuStatus.ConEMSendFlag = 0;
if (TCUCurChgRecd.TCUChargeEnable == 0)
TCUCommuStatus.ErrData.Mult = 0;
ConEMSendEcount = 0;
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
}
}
else
{
ConEMSendTick = 0;
TCUCommuStatus.ConEMSendFlag = 0;
TCUCommuStatus.ErrData.Mult = 0;
ConEMSendEcount = 0;
}
}
if (TCUCommuStatus_B.ConEMSendFlag == 1)
else
{
TcuEMMsg_B(TCUCommuStatus_B.ErrData.Mult); //帧超时
ConEMSendTick_B = GetSystemTick();
TCUCommuStatus_B.ConEMSendFlag = 2;
ConEMSendTick = 0;
ConEMSendEcount = 0;
}
else if (TCUCommuStatus_B.ConEMSendFlag == 2)
if (TCUCommuStatus_B.ConEMSendFlag == 1)
{
if (GetSystemTick() -ConEMSendTick_B >= 250)
{
ConEMSendTick_B = GetSystemTick();
ConEMSendEcount_B++;
if (ConEMSendEcount_B < 20)
{
ConEMSendEcount_B++;
TcuEMMsg_B(TCUCommuStatus_B.ErrData.Mult);
}
else
{
ConEMSendTick_B = 0;
TCUCommuStatus_B.ConEMSendFlag = 0;
TCUCommuStatus_B.ErrData.Mult = 0;
ConEMSendEcount_B = 0;
memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
}
}
}
else
{
ConEMSendTick_B = 0;
TCUCommuStatus_B.ConEMSendFlag = 0;
if (TCUCurChgRecd_B.TCUChargeEnable == 0)
TCUCommuStatus_B.ErrData.Mult = 0; //主动停机结束帧发送完成或主动TCU停机时置0
ConEMSendEcount_B = 0;
}
}
......@@ -297,30 +289,29 @@ void ConEMSend(void)
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)
static u32 sendTick = 0;
static u32 ParamTimeOutTick = 0;
static u8 sendTimes = 0;
if(oldStage != TCUCommuStatus.CommStage)
{
if(oldStage != VersionStage)
{
VersionRecvTime = 0;
VersionSendTimes = 0;
}
sendTick = 0;
sendTimes = 0;
}
if (GetSystemTick() - VersionRecvTime >= 500)
if (TCUCommuStatus.CommStage == VersionStage)
{
if(ParamTimeOutTick == 0)
ParamTimeOutTick = GetSystemTick();
if (GetSystemTick() - sendTick >= 500)
{
VersionRecvTime = GetSystemTick();
VersionSendTimes++;
if(VersionSendTimes > 5000/500)
sendTick = GetSystemTick();
sendTimes++;
if(sendTimes > 2000/500)
{
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
TCUCommuStatus.CommStage = HeartStage;
///TCUCommuStatus.CommStage = TCUConfig;
//TCUCommuStatus.VerChkVaild = 1;
}
else
......@@ -332,24 +323,66 @@ void CommutionConfigurationStage(void)
}
if (TCUCommuStatus_B.CommStage == VersionStage)
if((GetSystemTick() - ParamTimeOutTick >= 5100)
&& (TCUCommuStatus.CommStage == VersionStage)
&& ParamTimeOutTick != 0)
{
ParamTimeOutTick = 0;
TCUCommuStatus.CommStage = TCUConfig;
TCUCommuStatus.ErrData.Value.Param = 1;
TCUCommuStatus.ConEMSendFlag = 1;
}
if ((TCUCommuStatus.CommStage == ChageParamStage)
|| TCUCommuStatus_B.ParamVaild == 1)
{
if(oldStage_B != VersionStage)
ParamTimeOutTick = 0;
if(GetSystemTick() - sendTick >= 500)
{
VersionRecvTime_B = 0;
VersionSendTimes_B = 0;
sendTick = GetSystemTick();
sendTimes++;
if(sendTimes > 2000/500)
{
//TCUCommuStatus.ParamVaild = 1;
TCUCommuStatus.CommStage = HeartStage;
}
else
{
TCUParamAck(1);
}
}
}
oldStage = TCUCommuStatus.CommStage;
}
void CommutionConfigurationStage_B(void)
{
static EnumTCUCommStage oldStage_B;
static u32 sendTick_B = 0;
static u32 ParamTimeOutTick = 0;
static u8 sendTimes_B = 0;
if(oldStage_B != TCUCommuStatus_B.CommStage)
{
sendTick_B = 0;
sendTimes_B = 0;
}
if (GetSystemTick() - VersionRecvTime_B >= 500)
if (TCUCommuStatus_B.CommStage == VersionStage)
{
if(ParamTimeOutTick == 0)
ParamTimeOutTick = GetSystemTick();
if (GetSystemTick() - sendTick_B >= 500)
{
VersionRecvTime_B = GetSystemTick();
VersionSendTimes_B++;
if(VersionSendTimes_B > 5000/500)
sendTick_B = GetSystemTick();
sendTimes_B++;
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.ErrData.Value.Param = 1;
TCUCommuStatus_B.ConEMSendFlag = 1;
TCUCommuStatus_B.CommStage = HeartStage;
//TCUCommuStatus_B.CommStage = TCUConfig;
//TCUCommuStatus_B.VerChkVaild = 1;
}
else
......@@ -361,7 +394,36 @@ void CommutionConfigurationStage(void)
}
oldStage = TCUCommuStatus.CommStage;
if((GetSystemTick() - ParamTimeOutTick >= 5100)
&& (TCUCommuStatus_B.CommStage == VersionStage)
&& ParamTimeOutTick != 0)
{
ParamTimeOutTick = 0;
TCUCommuStatus_B.CommStage = TCUConfig;
TCUCommuStatus_B.ErrData.Value.Param = 1;
TCUCommuStatus_B.ConEMSendFlag = 1;
}
if ((TCUCommuStatus_B.CommStage == ChageParamStage)
|| TCUCommuStatus_B.ParamVaild == 1)
{
ParamTimeOutTick = 0;
if(GetSystemTick() - sendTick_B >= 500)
{
sendTick_B = GetSystemTick();
sendTimes_B++;
if(sendTimes_B > 2000/500)
{
//TCUCommuStatus_B.ParamVaild = 1;
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
TCUParamAck(2);
}
}
}
oldStage_B = TCUCommuStatus_B.CommStage;
}
......@@ -384,7 +446,9 @@ void TCUPillarHeartBeat(void)
{
memset(&TCUCommuStatus, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus.ConnectFlag = CONNECT_TIMEOUT;
TCUCanInit();
//TCUCanInit();
TCUCurChgRecd.TCUChargeEnable = 0;
}
......@@ -396,8 +460,9 @@ void TCUPillarHeartBeat(void)
{
memset(&TCUCommuStatus_B, 0x00, sizeof(TCUCommuStatus)); //通讯初始化
TCUCommuStatus_B.ConnectFlag = CONNECT_TIMEOUT;
//TCUCanInit();
TCUCurChgRecd_B.TCUChargeEnable = 0;
}
}
......@@ -407,57 +472,30 @@ void CommutionRunStage(void)
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))
if ((TCUCommuStatus.CommStage == TimeStage))
{
if(GetSystemTick() - sendTick >= 500)
{
sendTick = GetSystemTick();
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
}
else
{
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);
TCUtimeSetAck(1);
}
}
}
if ((TCUCommuStatus.CommStage == TimeStage))
if ((TCUCommuStatus.CommStage == ServiceContralStage))
{
if(GetSystemTick() - sendTick >= 500)
{
......@@ -469,29 +507,33 @@ void CommutionRunStage(void)
}
else
{
TCUtimeSetAck(1);
SerConAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == TimeStage))
if ((TCUCommuStatus.CommStage == ElectLockStage))
{
if(GetSystemTick() - sendTick_B >= 500)
if(GetSystemTick() - sendTick >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
TCUCommuStatus.CommStage = HeartStage;
if (TCUCommuStatus.ElectLockSetValue == 2)
LockSet(eSwSta_Off);
}
else
{
TCUtimeSetAck(2);
ElectControlAck(1);
}
}
}
if ((TCUCommuStatus.CommStage == ServiceContralStage))
if ((TCUCommuStatus.CommStage == PowerControlStage))
{
if(GetSystemTick() - sendTick >= 500)
{
......@@ -503,31 +545,31 @@ void CommutionRunStage(void)
}
else
{
SerConAck(1);
PowerControlAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == ServiceContralStage))
if ((TCUCommuStatus.CommStage == ChgInfornQueryStage))
{
if(GetSystemTick() - sendTick_B >= 500)
if(GetSystemTick() - sendTick >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
TCUCommuStatus.CommStage = HeartStage;
}
else
{
SerConAck(2);
ChgInfornQueryAck(1);
}
}
}
if ((TCUCommuStatus.CommStage == ElectLockStage))
if ((TCUCommuStatus.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick >= 500)
{
......@@ -536,17 +578,31 @@ void CommutionRunStage(void)
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
if (TCUCommuStatus.ElectLockSetValue == 2)
LockSet(eSwSta_Off);
}
else
{
ElectControlAck(1);
StartDownloadAck(1);
}
}
}
oldStage = TCUCommuStatus.CommStage;
}
if ((TCUCommuStatus_B.CommStage == ElectLockStage))
void CommutionRunStage_B(void)
{
static EnumTCUCommStage oldStage_B;
static u32 sendTick_B = 0;
static u8 sendTimes_B = 0;
if(oldStage_B != TCUCommuStatus_B.CommStage)
{
sendTick_B = 0;
sendTimes_B = 0;
}
if ((TCUCommuStatus_B.CommStage == TimeStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
......@@ -555,35 +611,33 @@ void CommutionRunStage(void)
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
if (TCUCommuStatus_B.ElectLockSetValue == 2)
LockSet_B(eSwSta_Off);
}
else
{
ElectControlAck(2);
TCUtimeSetAck(2);
}
}
}
if ((TCUCommuStatus.CommStage == PowerControlStage))
if ((TCUCommuStatus_B.CommStage == ServiceContralStage))
{
if(GetSystemTick() - sendTick >= 500)
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
PowerControlAck(1);
SerConAck(2);
}
}
}
if ((TCUCommuStatus_B.CommStage == PowerControlStage))
if ((TCUCommuStatus_B.CommStage == ElectLockStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
......@@ -592,28 +646,29 @@ void CommutionRunStage(void)
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
if (TCUCommuStatus_B.ElectLockSetValue == 2)
LockSet_B(eSwSta_Off);
}
else
{
PowerControlAck(2);
ElectControlAck(2);
}
}
}
if ((TCUCommuStatus.CommStage == ChgInfornQueryStage))
if ((TCUCommuStatus_B.CommStage == PowerControlStage))
{
if(GetSystemTick() - sendTick >= 500)
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
ChgInfornQueryAck(1);
PowerControlAck(2);
}
}
......@@ -637,24 +692,6 @@ void CommutionRunStage(void)
}
if ((TCUCommuStatus.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes++;
sendTick = GetSystemTick();
if(sendTimes > 2000/500)
{
TCUCommuStatus.CommStage = HeartStage;
}
else
{
StartDownloadAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick_B >= 500)
......@@ -673,15 +710,14 @@ void CommutionRunStage(void)
}
oldStage = TCUCommuStatus.CommStage;
oldStage_B = TCUCommuStatus_B.CommStage;
}
void TCUCurChgRecordInterface_A(void)
{
static u32 ChgRecordSendTick = 0;
static u32 ChgRecordSendErr = 0; //停止完成帧
static u32 ChgStopCompSendTick = 0;
static u32 ChgStopCompSendErr = 0; //停止完成帧
static u32 ChgStopSendTick = 0;
static u32 ChgStopSendEcount = 0; //停止帧
static u32 ChgStartSendTick = 0;
......@@ -716,9 +752,9 @@ void TCUCurChgRecordInterface_A(void)
{
if ((GetSystemTick() -ChgStartCompSendTick) > (250UL))
{
ChgRecordSendTick = GetSystemTick();
ChgStartCompSendTick = GetSystemTick();
ChgStartCompSendEcount++;
if (ChgRecordSendErr < 20) //超时5S
if (ChgStartCompSendEcount < 20) //超时5S
{ //超时小于20次
startCompSend_A();
}
......@@ -737,7 +773,7 @@ void TCUCurChgRecordInterface_A(void)
TCUCurChgRecd.TCUStartCompresult = 0; //
//TCUCurChgRecd.StarChgType = 0;
ChgStartCompSendEcount = 0;
ChgRecordSendTick = 0;
ChgStartCompSendTick = 0;
}
if (TCUCurChgRecd.TCUChgStopNotetrl == 1)
......@@ -772,11 +808,11 @@ void TCUCurChgRecordInterface_A(void)
if ((TCUCurChgRecd.TCUChgStopCompNotetrl == 1) //停止完成帧逻辑
/*&& (0 != TCUCurChgRecd.TCUChargeEnable)*/)
{
if ((GetSystemTick() -ChgRecordSendTick) > (250UL))
if ((GetSystemTick() -ChgStopCompSendTick) > (250UL))
{
ChgRecordSendErr++;
ChgRecordSendTick = GetSystemTick();
if (ChgRecordSendErr < 20) //超时5S
ChgStopCompSendErr++;
ChgStopCompSendTick = GetSystemTick();
if (ChgStopCompSendErr < 20) //超时5S
{ //超时小于20次
stopCompSend_A();
}
......@@ -796,16 +832,16 @@ void TCUCurChgRecordInterface_A(void)
}
else
{
ChgRecordSendTick = 0;
ChgRecordSendErr = 0;
ChgStopCompSendTick = 0;
ChgStopCompSendErr = 0;
}
}
void TCUCurChgRecordInterface_B(void)
{
static u32 ChgRecordSendTick = 0;
static u32 ChgRecordSendErr = 0;
static u32 ChgStopCompSendTick = 0;
static u32 ChgStopCompSendErr = 0;
static u32 ChgStopSendTick = 0;
static u32 ChgStopSendEcount = 0;
static u32 ChgStartSendTick = 0;
......@@ -841,8 +877,8 @@ void TCUCurChgRecordInterface_B(void)
if ((GetSystemTick() -ChgStartCompSendTick) > (250UL))
{
ChgStartCompSendEcount++;
ChgRecordSendTick = GetSystemTick();
if (ChgRecordSendErr < 20) //超时5S
ChgStartCompSendTick = GetSystemTick();
if (ChgStartCompSendEcount < 20) //超时5S
{ //超时小于20次
startCompSend_B();
}
......@@ -860,7 +896,7 @@ void TCUCurChgRecordInterface_B(void)
TCUCurChgRecd_B.TCUStartCompresult = 0;
//TCUCurChgRecd_B.StarChgType = 0;
ChgStartCompSendEcount = 0;
ChgRecordSendTick = 0;
ChgStartCompSendTick = 0;
}
if (TCUCurChgRecd_B.TCUChgStopNotetrl == 1)
......@@ -894,11 +930,11 @@ void TCUCurChgRecordInterface_B(void)
if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 1)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/)
{
if ((GetSystemTick() -ChgRecordSendTick) > (250UL))
if ((GetSystemTick() -ChgStopCompSendTick) > (250UL))
{
ChgRecordSendErr++;
ChgRecordSendTick = GetSystemTick();
if (ChgRecordSendErr < 20) //超时5S
ChgStopCompSendErr++;
ChgStopCompSendTick = GetSystemTick();
if (ChgStopCompSendErr < 20) //超时5S
{ //超时小于20次
stopCompSend_B();
}
......@@ -912,14 +948,14 @@ void TCUCurChgRecordInterface_B(void)
}
else if ((TCUCurChgRecd_B.TCUChgStopCompNotetrl == 3)/* && (0 != TCUCurChgRecd_B.TCUChargeEnable)*/)
{
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 0; //超时触发
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 0;
TCUCurChgRecd_B.TCUChgStopType = 0;
}
else
{
ChgRecordSendErr = 0;
ChgRecordSendTick = 0;
ChgStopCompSendErr = 0;
ChgStopCompSendTick = 0;
}
}
......@@ -1090,7 +1126,19 @@ void SendStatus(void)
data[1] = TcuGetChgStatus();
TCUSinglePackSendMsg(data, 8, eCmd_status, 6,ChargerCont1939Addr);
}
}
}
void SendStatus_B(void)
{
static u32 ChgStutusSendTick = 0;
u8 data[8] = {0};
if ((GetSystemTick() -ChgStutusSendTick) > (500UL))
{
ChgStutusSendTick = GetSystemTick();
data[0] = 0;
if (TCUCommuStatus_B.ConnectFlag == CONNECT_NORMAL)
{
data[1] = TcuGetChgStatus_B();
......@@ -1100,33 +1148,7 @@ void SendStatus(void)
}
}
void TCUChgStarStopProcess(void) //充电流启停程逻辑
{
TCUCurChgRecordInterface_A();
TCUCurChgRecordInterface_B();
}
void TCUWorkProcess(void)
{
//if (TCUCommuStatus.VerChkVaild == 0) //版本检验未完成不发送
// return;
InformationReporting(); //遥信
DCMeasuring_A(); //遥测
}
void TCULinkProcess(void) //心跳帧处理
{
TCUPillarHeartBeat(); //心跳处理
CommutionConfigurationStage(); //配置阶段
CommutionRunStage(); //运行阶段
ConEMSend(); //ab超时发送逻辑
SendStatus();
}
osMessageQId TcuSendMsgId = 0;
void TCUComm(void const * argument)
......@@ -1154,10 +1176,46 @@ void TCUComm(void const * argument)
TCURecvProcess(); //帧接收
TCUWorkProcess(); //遥测遥信息处理
TCULinkProcess(); //心跳包处理配置信息
TCUChgStarStopProcess(); //启停逻辑处理
TCUPillarHeartBeat(); //心跳处理
if(TCUCommuStatus.CommStage < HeartStage)
{
if(TCUCommuStatus.ConnectFlag != CONNECT_TIMEOUT)
{
CommutionConfigurationStage(); //配置阶段
}
}
else
{
CommutionRunStage();//运行阶段
SendStatus();
InformationReporting(); //遥信
DCMeasuring();//遥测
TCUCurChgRecordInterface_A();//启停逻辑处理
}
if(TCUCommuStatus_B.CommStage < HeartStage)
{
if(TCUCommuStatus_B.ConnectFlag != CONNECT_TIMEOUT)
{
CommutionConfigurationStage_B(); //配置阶段
}
}
else
{
CommutionRunStage_B(); //运行阶段
SendStatus_B();
InformationReporting_B(); //遥信
DCMeasuring_B(); //遥测
TCUCurChgRecordInterface_B();//启停逻辑处理
}
ConEMSend();//ab超时发送逻辑
// TCUCodeDone();//告警故障处理
// TCUSaveEventDone();
osDelay(5);
......
......@@ -10,15 +10,16 @@
#define CONNECT_TIMEOUT 1
typedef enum {
HeartStage = 0, //心跳阶段默认
TCUConfig = 0, //心跳阶段默认
VersionStage = 1,
ChageParamStage = 2,
TimeStage = 3,
ServiceContralStage = 4,
ElectLockStage = 5,
PowerControlStage = 6,
ChgInfornQueryStage = 7,
StartDownloadStage = 8,
HeartStage = 3,
TimeStage = 4,
ServiceContralStage = 5,
ElectLockStage = 6,
PowerControlStage = 7,
ChgInfornQueryStage = 8,
StartDownloadStage = 9,
} EnumTCUCommStage;
......@@ -64,10 +65,10 @@ typedef struct {
u8 PowerControlVaildValue; //功率调节失败原因
u8 ConnectFlag; //0 未连接 其他已连接
u8 HeartBeatVaild; //接收心跳有效标志位
//u8 HeartBeatVaild; //接收心跳有效标志位
u8 HeartBeatErrCnt;
u16 HeartBeatNumCnt;
u16 HeartBeatLoseCnt;
//u16 HeartBeatNumCnt;
//u16 HeartBeatLoseCnt;
u32 DCMeasuErrCnt;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论