提交 a19862e2 作者: wysheng

完善新协议

上级 1beec2a0
......@@ -192,6 +192,7 @@ void TCURxIrqHandle(void)
///////////心跳帧///////////
case eCmd_TcuHeart: // 计费单元心跳
case eCmd_TCUErroComm: // 计费单元错误帧
Frame.Prio = Id1939.Disp.Prio;
Frame.DP = Id1939.Disp.DP;
Frame.PF = Id1939.Disp.PF;
......@@ -561,9 +562,11 @@ void StartMeg(StructTCUSend * pPgnRecv)
((eLcdPro_TCUMainMenu == TCUCtrl.CurScreen) || (eLcdPro_TCUChargeSummary_B == TCUCtrl.CurScreen)))
{
StartMeg_A.GunNum = 1;//pPgnRecv->Data[0];
StartMeg_A.GunNum = 0;//pPgnRecv->Data[0];
StartMeg_A.LoadSswitch = pPgnRecv->Data[1];
StartMeg_A.PlugToChgFlag = pPgnRecv->Data[2];
StartMeg_A.AuxiliaryPower = pPgnRecv->Data[3];
StartMeg_A.ParallelCharging = pPgnRecv->Data[4];
if ((StartMeg_A.LoadSswitch == 1) || (StartMeg_A.LoadSswitch == 2) && (StartMeg_A.PlugToChgFlag == 0) ||
(StartMeg_A.PlugToChgFlag == 1))
......@@ -598,10 +601,12 @@ void StartMeg(StructTCUSend * pPgnRecv)
if ((TCUCurChgRecd_B.TCUChgStartNotetrl == 0) && (TCUCurChgRecd_B.TCUChargeEnable == 0) &&
((eLcdPro_TCUMainMenu == TCUCtrl.CurScreen) || (eLcdPro_TCUChargeSummary == TCUCtrl.CurScreen)))
{
StartMeg_B.GunNum = 2;//pPgnRecv->Data[0];
StartMeg_B.GunNum = 0;//pPgnRecv->Data[0];
StartMeg_B.LoadSswitch = pPgnRecv->Data[1];
StartMeg_B.PlugToChgFlag = pPgnRecv->Data[2];
StartMeg_B.AuxiliaryPower = pPgnRecv->Data[3];
StartMeg_B.ParallelCharging = pPgnRecv->Data[4];
if ((StartMeg_B.LoadSswitch == 1) || (StartMeg_B.LoadSswitch == 2) && (StartMeg_B.PlugToChgFlag == 0) ||
(StartMeg_B.PlugToChgFlag == 1))
{
......@@ -765,9 +770,9 @@ void StartMegAck_A(void)
Data[3] = Reason;
Data[4] = StartMeg_A.LoadSswitch;
Data[5] = 0x00;
Data[6] = 0x00;
Data[7] = 0x00;
Data[5] = StartMeg_A.PlugToChgFlag;
Data[6] = StartMeg_A.AuxiliaryPower;
Data[7] = StartMeg_A.ParallelCharging;
TCUSinglePackSendMsg(Data, 8, eCmd_startAck, 6,ChargerCont1939Addr);
}
......@@ -790,6 +795,9 @@ void StartMegAck_B(void)
Data[3] = Reason;
Data[4] = StartMeg_B.LoadSswitch;
Data[5] = StartMeg_B.PlugToChgFlag;
Data[6] = StartMeg_B.AuxiliaryPower;
Data[7] = StartMeg_B.ParallelCharging;
TCUSinglePackSendMsg(Data, 8, eCmd_startAck, 6,ChargerCont1939Addr_B);
}
......@@ -1084,7 +1092,7 @@ void ACkStartCompMeg(StructTCUSend * pPgnRecv)
{
if (pPgnRecv->DA == ChargerCont1939Addr)
{
AckStartCompMeg_A.GunNum = 1;//pPgnRecv->Data[0];
AckStartCompMeg_A.GunNum = 0;//pPgnRecv->Data[0];
AckStartCompMeg_A.LoadSswitch = pPgnRecv->Data[1];
AckStartCompMeg_A.AckFlag = pPgnRecv->Data[2];
......@@ -1097,7 +1105,7 @@ void ACkStartCompMeg(StructTCUSend * pPgnRecv)
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
AckStartCompMeg_B.GunNum = 2;//pPgnRecv->Data[0];
AckStartCompMeg_B.GunNum = 0;//pPgnRecv->Data[0];
AckStartCompMeg_B.LoadSswitch = pPgnRecv->Data[1];
AckStartCompMeg_B.AckFlag = pPgnRecv->Data[2];
......@@ -1408,14 +1416,14 @@ void stopCompAck(StructTCUSend * pPgnRecv)
if (pPgnRecv->DA == ChargerCont1939Addr)
{
AckStopCompMeg_A.GunNum = 1;//pPgnRecv->Data[0];
AckStopCompMeg_A.GunNum = 0;//pPgnRecv->Data[0];
AckStopCompMeg_A.StopReason = pPgnRecv->Data[1];
AckStopCompMeg_A.AckFlag = pPgnRecv->Data[2];
TCUCurChgRecd.TCUChgStopCompNotetrl = 3; //停止完成帧命令发送
}
else if (pPgnRecv->DA == ChargerCont1939Addr_B)
{
AckStopCompMeg_B.GunNum = 2;//pPgnRecv->Data[0];
AckStopCompMeg_B.GunNum = 0;//pPgnRecv->Data[0];
AckStopCompMeg_B.StopReason = pPgnRecv->Data[1];
AckStopCompMeg_B.AckFlag = pPgnRecv->Data[2];
TCUCurChgRecd_B.TCUChgStopCompNotetrl = 3; //停止完成帧命令发送
......@@ -1445,7 +1453,7 @@ void TCUHeartBeat_B(void)
{
0
};
static u8 CountNum; //最大255
static u8 CountNum = 0; //最大255
Data[0] = 0x00;
Data[1] = CountNum++;
......@@ -2261,7 +2269,7 @@ void measuringReporting20_B(void)
void ChgInfornQueryAck(void)
{
u8 data[128];
u8 data[64]={0};
u8 len = 0;
data[len++] = 0;//TCUCommuStatus.ChgNum;
......@@ -2353,22 +2361,23 @@ void verificationAck(StructTCUSend * pPgnRecv)
}
void TcuEMMsg(u8 data)
void TcuEMMsg(u16 data)
{
u8 Data[8];
u8 Data[8] = {0};
Data[0] = 0x00;
Data[1] = data;
Data[1] = data>>8;
TCUSinglePackSendMsg(Data, 8, eCmd_ConErroComm, 4,ChargerCont1939Addr);
}
void TcuEMMsg_B(u8 data)
void TcuEMMsg_B(u16 data)
{
u8 Data[8];
u8 Data[8] = {0};
Data[0] = 0x00;
Data[1] = data;
Data[1] = data>>8;
TCUSinglePackSendMsg(Data, 8, eCmd_ConErroComm, 4,ChargerCont1939Addr_B);
}
......@@ -2394,3 +2403,5 @@ void TCUMeasuRecv(StructTCUSend * pPgnRecv)
}
}
......@@ -58,6 +58,8 @@ typedef struct
u8 GunNum; //抢号 单枪 0 一机多冲 1-255
u8 LoadSswitch;//负荷控制开关 是否根据用户型号提供不同输出功率 01启用02关闭其他无效
u8 PlugToChgFlag;//即插即充标识 00非 01 即插即充other:invalid
u8 AuxiliaryPower;//辅助电源选择:00H:使用12V(默认)01H: 24V(优先使用12V探测,失败后切24V电源探测)其他:无效
u8 ParallelCharging;//并充(两把枪充一辆车)选择:00H:关闭(默认) 01H:启用 其他:无效
}StructStartMeg;
typedef struct
{
......@@ -193,12 +195,17 @@ typedef union
u32 timeAck : 1;//
u32 SerConAck : 1;//
u32 GunAck : 1;//
u32 powerAck : 1;//
u32 QueryAck : 1;//
u32 DCConInfor : 1;//
u32 DCConMeasu : 1;//
u32 verification : 1;//
u32 GunAck : 1;//计费控制单元自下发电子锁控制报文5秒内未收到应答报文则判定为超时。
u32 powerAck : 1;//计费控制单元自下发充电功率调节报文5秒内未收到应答报文则判定为超时。
u32 QueryAck : 1;//计费控制单元自下发充电桩配置信息查询报文5秒内未收到应答报文则判定为超时。
u32 DCConInfor : 1;//计费控制单元与充电控制器完成版本校验和充电参数下发后,心跳帧接收正常情况下,5秒内未收到充电控制器遥信报文则判定为超时。
u32 DCConMeasu : 1;//计费控制单元与充电控制器完成版本校验和充电参数下发后,心跳帧接收正常情况下,5秒内未收到充电控制器遥测报文则判定为超时。
u32 StartDownload : 1;//计费控制单元自发送下发启动下载命令2秒内未收到应答报文则判定为超时。
u32 DataRequestSend : 1;//计费控制单元自发送下发请求发送数据命令2秒内未收到应答报文则判定为超时。
u32 DataSend : 1;//计费控制单元自发送下发数据发送帧1秒内未收到应答报文则判定为超时。
u32 ProgramVerification : 1;//计费控制单元自发送下发程序校验命令2秒内未收到应答报文则判定为超时。
u32 CarVerification : 1;//计费控制单元与充电控制器完成版本校验和充电参数下发后,心跳帧接收正常情况下,充电启动帧中,充电启动标识为即插即充,且接收到充电启动应答帧后60秒内未收到充电控制器车辆验证报文则判定为超时。
}Value;
......@@ -259,6 +266,10 @@ typedef enum
eCmd_stopComp =0x001300,// 充电停止完成帧
eCmd_stopCompAck =0x001400,// 充电停止完成应答帧
eCmd_status =0x001500,//充电桩状态信息帧
///////////数据帧/直流////////////
eCmd_DCConMeasu =0x002000,// 充电控制器遥测帧
eCmd_DCTCUMeasu =0x002100,// 计费单元遥测 帧
......@@ -315,8 +326,8 @@ extern void measuringReporting20_B(void);
extern void ChgInfornQueryAck(void);
extern void verification(void);
extern void verificationAck(StructTCUSend* pPgnRecv);
extern void TcuEMMsg( u8 data);
extern void TcuEMMsg_B(u8 data);
extern void TcuEMMsg( u16 data);
extern void TcuEMMsg_B(u16 data);
extern void TCUParam(StructTCUSend* pPgnRecv);
extern void TCUMeasuRecv(StructTCUSend * pPgnRecv);
......
......@@ -15,20 +15,6 @@
#define AppCodeSize ((u32)250*1024)
#define McnRomSectionSize ((u32)2*1024)
#define UpdateFlagAddr ((u32)0x08002800)
typedef union
{
u8 Mult;
struct
{
u32 Idle : 1;//
u32 startCompAck :1;//
u32 stopCompAck: 1;//
u32 DCTCUInfor : 1;//
u32 DCTCUMeasu : 1;//
u32 Param : 1;//服务启停
u32 verificationAck : 1;//
}Value;
}UnionConEM;
#ifndef NULL
#define NULL ((void *)0)
......
......@@ -118,7 +118,7 @@ void TCURecvProcess(void)
case eCmd_TCUErroComm: // 计费单元错误帧
TCUErroCommAnalysis(&pPgnRecv);
break;
default:
break;
}
......@@ -816,6 +816,22 @@ void TCUCurChgRecordInterface_B(void)
}
}
void SendStatus(void)
{
static u32 ChgStutusSendTick = 0;
u8 data[8] = {0};
if (TCUCommuStatus.VerChkVaild == 0) //版本检验未完成不发送
return;
if ((GetSystemTick() -ChgStutusSendTick) > (500))
{
ChgStutusSendTick = GetSystemTick();
data[0] = 0;
data[1] = ChargeCtrl.CurProcess; //待完善 04/29
TCUSinglePackSendMsg(data, 6, eCmd_startComp, 4,ChargerCont1939Addr);
TCUSinglePackSendMsg(data, 6, eCmd_startComp, 4,ChargerCont1939Addr_B);
}
}
void TCUChgStarStopProcess(void) //充电流启停程逻辑
{
......@@ -842,8 +858,8 @@ void TCULinkProcess(void) //心跳帧处理
CommutionConfigurationStage(); //配置阶段
CommutionRunStage(); //运行阶段
ConEMSend(); //ab超时发送逻辑
SendStatus();
}
osMessageQId TcuSendMsgId = 0;
......
......@@ -20,6 +20,26 @@ typedef enum
ChgInfornQueryStage = 7,
}EnumTCUCommStage;
typedef union
{
u16 Mult;
struct
{
u32 startCompAck :1;//充电启动完成 状态确认超时
u32 stopCompAck: 1;//充电停止完成 状态确认超时
u32 DCTCUInfor : 1;//遥信报文接收超时
u32 DCTCUMeasu : 1;//遥测报文接收超时
u32 Param : 1;//下发充电参数报文接收超时
//接收请求发送数据帧超时
//接收数据发送帧超时
//接收程序校验命令帧超时
//接收立即复位命令帧超时
//车辆验证确认帧接收超时
u32 verificationAck : 1;//
}Value;
}UnionConEM;
typedef struct
{
EnumTCUCommStage CommStage;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论