提交 0137a391 作者: wysheng

修复充电桩状态信息优先级;

完善协议:启动程序在线更新(拒绝升级,不支持)
上级 aa721fa9
......@@ -2730,5 +2730,68 @@ void TCUMeasuRecv(StructTCUSend * pPgnRecv)
}
}
typedef struct
{
u8 type;//设备类型
u8 addr;//设备通信地址
u8 sno;//程序内部编号
u16 ver;//升级目标版本
}StructStartDownload;
StructStartDownload StartDownload = {0};
StructStartDownload StartDownload_B = {0};
void TCUStartDownloadHandle(StructTCUSend * pPgnRecv)
{
u16 tmp = 0;
if(pPgnRecv->DA == ChargerCont1939Addr)
{
TCUCommuStatus.CommStage = StartDownloadStage;
StartDownload.type = pPgnRecv->Data[1];
StartDownload.addr = pPgnRecv->Data[2];
StartDownload.sno = pPgnRecv->Data[3];
tmp = pPgnRecv->Data[4];
tmp = tmp<<8;
tmp |= pPgnRecv->Data[5];
StartDownload.ver = tmp;
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
TCUCommuStatus_B.CommStage = StartDownloadStage;
StartDownload_B.type = pPgnRecv->Data[1];
StartDownload_B.addr = pPgnRecv->Data[2];
StartDownload_B.sno = pPgnRecv->Data[3];
tmp = pPgnRecv->Data[4];
tmp = tmp<<8;
tmp |= pPgnRecv->Data[5];
StartDownload_B.ver = tmp;
}
}
void StartDownloadAck(u8 ChgNum)
{
u8 Data[8] = {0};
if(ChgNum == 1)
{
Data[1] = StartDownload.type;
Data[2] = StartDownload.addr;
Data[3] = 0x01;//01H:禁止下载
Data[4] = 0x01;//0x01:英特尔HEX格式
Data[5] = 0x01;//0x01:校验码方案A
Data[6] = 0x01;//01H:本身不支持此功能
TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4,ChargerCont1939Addr);
}
else if(ChgNum == 2)
{
Data[1] = StartDownload_B.type;
Data[2] = StartDownload_B.addr;
Data[3] = 0x01;//01H:禁止下载
Data[4] = 0x01;//0x01:英特尔HEX格式
Data[5] = 0x01;//0x01:校验码方案A
Data[6] = 0x01;//01H:本身不支持此功能
TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4,ChargerCont1939Addr_B);
}
}
......@@ -186,26 +186,26 @@ typedef union
u32 Mult;
struct
{
u32 Idle : 1;//
u32 paramAck : 1;//
u32 startAck : 1;//
u32 startComp : 1;//
u32 stopAck : 1;//
u32 stopComp : 1;//
u32 timeAck : 1;//
u32 SerConAck : 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秒内未收到充电控制器车辆验证报文则判定为超时。
u32 Idle : 1;//预留
u32 paramAck : 1;//下发充电参数应答超时
u32 startAck : 1;//充电启动命令应答超时
u32 startComp : 1;//等待充电启动完成状态超时
u32 stopAck : 1;//充电停止命令应答超时
u32 stopComp : 1;//等待充电停止完成状态超时
u32 timeAck : 1;//对时操作应答超时
u32 SerConAck : 1;//充电服务启停应答超时
u32 GunAck : 1;//电子锁控制应答超时
u32 powerAck : 1;//充电功率调节应答超时
u32 QueryAck : 1;//充电桩配置信息查询应答超时
u32 DCConInfor : 1;//遥信报文接收超时
u32 DCConMeasu : 1;//遥测报文接收超时
u32 StartDownload : 1;//启动下载命令应答超时
u32 DataRequestSend : 1;//请求发送数据帧应答超时
u32 DataSend : 1;//数据发送帧应答超时
u32 ProgramVerification : 1;//程序校验命令帧应答超时
u32 CarVerification : 1;//车辆验证报文接收超时
}Value;
......@@ -257,8 +257,32 @@ typedef enum
eCmd_Query = 0x006000,// 充电桩配置信息查询帧
eCmd_QueryAck = 0x006100,// 充电桩配置信息查询应答帧
eCmd_verification =0x002D00,// 车辆验证数据帧
eCmd_verificationAck =0x002E00,//车辆验证应答帧
/*****************在线升级命令 start*******************/
eCmd_upDateHeart = 0x007000,//升级心跳帧 007000H
eCmd_upDateHeartAck = 0x007100,//升级心跳应答帧 007100H
eCmd_startDownload = 0x007200,//启动下载命令帧 007200H
eCmd_startDownloadAck = 0x007300,//启动下载应答帧 007300H
//索要区间命令帧 007400H
//索要区间应答帧1 007500H
//索要区间应答帧2 007600H
//启动组包命令帧 007700H
//启动组包应答帧 007800H
//数据发送帧 007900H
//完成组包命令帧 007A00H
//完成组包应答帧 007B00H
//程序校验数据帧 007C00H
//程序校验应答帧 007D00H
//eCmd_reset = 0x007E00,//立即复位命令帧 007E00H
//eCmd_resetAck = 0x007F00,//立即复位应答帧 007F00H
/*****************在线升级命令 end*******************/
eCmd_valueSet = 0x008000,//定值设置命令帧 008000H
eCmd_valueSetAck = 0x008100,//定值设置命令应答帧 008100H
eCmd_valueQuery = 0x008200,//定值查询命令帧 008200H
eCmd_valueQueryAck = 0x008300,//定值查询命令应答帧 008300H
eCmd_verification = 0x002D00,//车辆验证数据帧
eCmd_verificationAck = 0x002E00,//车辆验证应答帧
////////////状态帧/////////////////
eCmd_startComp =0x001100,// 充电启动完成帧
......@@ -267,8 +291,7 @@ typedef enum
eCmd_stopComp =0x001300,// 充电停止完成帧
eCmd_stopCompAck =0x001400,// 充电停止完成应答帧
eCmd_status =0x001500,//充电桩状态信息帧
eCmd_status =0x001500,//充电桩状态帧
///////////数据帧/直流////////////
eCmd_DCConMeasu =0x002000,// 充电控制器遥测帧
......@@ -280,7 +303,7 @@ typedef enum
eCmd_ACTCUMeasu =0x003100,// 计费单元遥测 帧
eCmd_ACConInfor =0x003200,// 充电控制器遥信帧
eCmd_ACTCUInfor =0x003300,// 计费单元遥信帧
///////////心跳帧///////////
///////////心跳帧///////////
eCmd_TcuHeart =0x004000, // 计费单元心跳
eCmd_ContHeart =0x004100, // 充电控制器心跳帧
......@@ -353,6 +376,8 @@ extern StructVerificationInformain VerificaInfo_B ;
extern StructTCUEM TCUChgContralTCUEM_A;
extern StructTCUEM TCUChgContralTCUEM_B;
void TCUStartDownloadHandle(StructTCUSend * pPgnRecv);
void StartDownloadAck(u8 ChgNum);
#endif
......
......@@ -121,7 +121,9 @@ void TCURecvProcess(void)
case eCmd_TCUErroComm: // 计费单元错误帧
TCUErroCommAnalysis(&pPgnRecv);
break;
case eCmd_startDownload:
TCUStartDownloadHandle(&pPgnRecv);
break;
default:
break;
}
......@@ -622,6 +624,42 @@ void CommutionRunStage(void)
}
if ((TCUCommuStatus.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
StartDownloadAck(1);
}
}
}
if ((TCUCommuStatus_B.CommStage == StartDownloadStage))
{
if(GetSystemTick() - sendTick_B >= 500)
{
sendTimes_B++;
sendTick_B = GetSystemTick();
if(sendTimes_B > 2000/500)
{
TCUCommuStatus_B.CommStage = HeartStage;
}
else
{
StartDownloadAck(2);
}
}
}
oldStage = TCUCommuStatus.CommStage;
oldStage_B = TCUCommuStatus_B.CommStage;
}
......@@ -1053,13 +1091,13 @@ void SendStatus(void)
if (TCUCommuStatus.ConnectFlag == CONNECT_NORMAL)
{
data[1] = TcuGetChgStatus();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr);
TCUSinglePackSendMsg(data, 8, eCmd_status, 6,ChargerCont1939Addr);
}
if (TCUCommuStatus_B.ConnectFlag == CONNECT_NORMAL)
{
data[1] = TcuGetChgStatus_B();
TCUSinglePackSendMsg(data, 8, eCmd_status, 4,ChargerCont1939Addr_B);
TCUSinglePackSendMsg(data, 8, eCmd_status, 6,ChargerCont1939Addr_B);
}
}
......
......@@ -18,6 +18,7 @@ typedef enum
ElectLockStage = 5,
PowerControlStage = 6,
ChgInfornQueryStage = 7,
StartDownloadStage = 8,
}EnumTCUCommStage;
typedef union
......@@ -25,13 +26,14 @@ typedef union
u16 Mult;
struct
{
u32 startCompAck :1;//充电启动完成 状态确认超时
u32 stopCompAck: 1;//充电停止完成 状态确认超时
u32 startCompAck :1;//充电启动完成状态确认超时
u32 stopCompAck: 1;//充电停止完成状态确认超时
u32 DCTCUInfor : 1;//遥信报文接收超时
u32 DCTCUMeasu : 1;//遥测报文接收超时
u32 Param : 1;//下发充电参数报文接收超时
//接收请求发送数据帧超时
//接收数据发送帧超时
//接收程序校验命令帧超时
//接收立即复位命令帧超时
//车辆验证确认帧接收超时
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论