提交 da0c4803 作者: wysheng

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

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