提交 8a98d085 作者: wysheng

准备完善TCU升级

上级 295c413d
......@@ -3148,6 +3148,29 @@ void TCUMeasuRecv(StructTCUSend * pPgnRecv)
}
}
void TCUUpDateHeartHandle(StructTCUSend * pPgnRecv)
{
static u16 count = 0xffff;
u16 count_tmp = 0;
u8 Data[8] = {0};
if (pPgnRecv->DA == ChargerCont1939Addr)
{
count_tmp = pPgnRecv->Data[3];
count_tmp = (count_tmp<<8) + pPgnRecv->Data[2];
if(pPgnRecv->Data[1] == 0x01
&& (u16)(count_tmp - count)==0x0001)//0x01 --- 直流充电控制器
{
count = count_tmp;
Data[1] = 0x01;
Data[2] = (u8)(count_tmp);
Data[3] = (u8)(count_tmp>>8);
TCUSinglePackSendMsg(Data, 8, eCmd_upDateHeartAck, 4, ChargerCont1939Addr);
}
}
else if(pPgnRecv->DA == ChargerCont1939Addr_B)
{
}
}
typedef struct
{
......@@ -3214,20 +3237,36 @@ void StartDownloadAck(u8 ChgNum)
{
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:本身不支持此功能
if(StartDownload.type == 0x01) //0x01 --- 直流充电控制器
{
/*if(StartDownload.ver != 0x0500) //V5版本
{
Data[3] = 0x01;//01H:禁止下载
Data[6] = 0x02;//02H:数据合法性校验失败
}
else*/
{
Data[3] = 0x00;//00H:允许下载
Data[6] = 0x00;//
}
}
else
{
Data[3] = 0x01;//01H:禁止下载
Data[6] = 0x01;//01H:本身不支持此功能
}
Data[4] = 0x03;//0x03:BIN格式
Data[5] = 0x01;//0x01:校验码方案A
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:本身不支持此功能
Data[3] = 0x01;//01H:禁止下载
Data[4] = 0x03;//0x03:BIN格式
Data[5] = 0x01;//0x01:校验码方案A
Data[6] = 0x01;//01H:本身不支持此功能
TCUSinglePackSendMsg(Data, 8, eCmd_startDownloadAck, 4, ChargerCont1939Addr_B);
}
}
......
......@@ -353,21 +353,20 @@ typedef enum {
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_RequestInterval = 0x007400,//索要区间命令帧 007400H
eCmd_RequestIntervalAck1 = 0x007500,//索要区间应答帧1 007500H
eCmd_RequestIntervalAck2 = 0x007600,//索要区间应答帧2 007600H
eCmd_StartPackage = 0x007700,//启动组包命令帧 007700H
eCmd_StartPackageAck = 0x007800,//启动组包应答帧 007800H
eCmd_SendDate = 0x007900,//数据发送帧 007900H
eCmd_CompletePackage = 0x007A00,//完成组包命令帧 007A00H
eCmd_CompletePackageAck = 0x007B00,//完成组包应答帧 007B00H
eCmd_ProgramVerification = 0x007C00,//程序校验数据帧 007C00H
eCmd_ProgramVerificationAck = 0x007D00,//程序校验应答帧 007D00H
eCmd_reset = 0x007E00, //立即复位命令帧 007E00H
eCmd_resetAck = 0x007F00, //立即复位应答帧 007F00H
/*****************在线升级命令 end*******************/
eCmd_valueSet = 0x008000, //定值设置命令帧 008000H
eCmd_valueSetAck = 0x008100, //定值设置命令应答帧 008100H
eCmd_valueQuery = 0x008200, //定值查询命令帧 008200H
......
......@@ -123,6 +123,9 @@ void TCURecvProcess(void)
case eCmd_TCUErroComm: // 计费单元错误帧
TCUErroCommAnalysis(&pPgnRecv);
break;
case eCmd_upDateHeart:
TCUUpDateHeartHandle(&pPgnRecv);
break;
case eCmd_startDownload:
TCUStartDownloadHandle(&pPgnRecv);
break;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论