#include "bms_magene.h" #include "remain_distance.h" //全局变量 BMS_Magene_TPDOInfo_Struct BMS_Magene_TPDOInfo_Main, BMS_Magene_TPDOInfo_Back; //电池主动上报数据 BMS_Magene_RPDOInfo_Struct BMS_Magene_RPDOInfo_Main, BMS_Magene_RPDOInfo_Back; //电池控制参数 BMS_Magene_OnLineCheck_Struct BMS_Magene_OnLineCheck_Main, BMS_Magene_OnLineCheck_Back; //电池在线检测 BMS_Magene_CanData_Struct_t BMS_Magene_CanData; //电池报文数据 //局部函数 /*BMS数据更新*/ void BMS_InfoUpdate(void) { static uint32_t PeriodCnt = 0; if((HAL_GetTick() - PeriodCnt <= 1000)) return; else PeriodCnt = HAL_GetTick(); //仅主电池打开 if(((BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 3)) && ((BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState != 2) && (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState != 3))) { //运行信息 BMS_RunInfo.Voltage = BMS_Magene_TPDOInfo_Main.BaseInfo.Voltage; BMS_RunInfo.Current = BMS_Magene_TPDOInfo_Main.BaseInfo.Current; BMS_RunInfo.RC = BMS_Magene_TPDOInfo_Main.CapInfo.RemainCapcity; BMS_RunInfo.FCC = BMS_Magene_TPDOInfo_Main.CapInfo.FullCapcity; BMS_RunInfo.Cell_NTC = BMS_Magene_TPDOInfo_Main.BaseInfo.Temperature; BMS_RunInfo.SOC = BMS_Magene_TPDOInfo_Main.CapInfo.SOC; BMS_RunInfo.Status.Status = (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 3) ? 0x01 : 0x00; BMS_RunInfo.SOH = BMS_Magene_TPDOInfo_Main.CapInfo.SOH; BMS_RunInfo.CycleCount = BMS_Magene_TPDOInfo_Main.CycInfo.CycleCount; if(BMS_Magene_TPDOInfo_Main.BaseInfo.Current >= 100) BMS_RunInfo.RemainChgTime = (BMS_Magene_TPDOInfo_Main.CapInfo.FullCapcity - BMS_Magene_TPDOInfo_Main.CapInfo.RemainCapcity) * 60 / BMS_Magene_TPDOInfo_Main.BaseInfo.Current; else BMS_RunInfo.RemainChgTime = 0; //电芯电压 BMS_CellVol.Cell1 = BMS_Magene_TPDOInfo_Main.CellInfo1.CellVol[0]; BMS_CellVol.Cell2 = BMS_Magene_TPDOInfo_Main.CellInfo1.CellVol[1]; BMS_CellVol.Cell3 = BMS_Magene_TPDOInfo_Main.CellInfo1.CellVol[2]; BMS_CellVol.Cell4 = BMS_Magene_TPDOInfo_Main.CellInfo2.CellVol[0]; BMS_CellVol.Cell5 = BMS_Magene_TPDOInfo_Main.CellInfo2.CellVol[1]; BMS_CellVol.Cell6 = BMS_Magene_TPDOInfo_Main.CellInfo2.CellVol[2]; BMS_CellVol.Cell7 = BMS_Magene_TPDOInfo_Main.CellInfo3.CellVol[0]; BMS_CellVol.Cell8 = BMS_Magene_TPDOInfo_Main.CellInfo3.CellVol[1]; BMS_CellVol.Cell9 = BMS_Magene_TPDOInfo_Main.CellInfo3.CellVol[2]; BMS_CellVol.Cell10 = BMS_Magene_TPDOInfo_Main.CellInfo4.CellVol[0]; BMS_CellVol.Cell11 = BMS_Magene_TPDOInfo_Main.CellInfo4.CellVol[1]; BMS_CellVol.Cell12 = BMS_Magene_TPDOInfo_Main.CellInfo4.CellVol[2]; BMS_CellVol.Cell13 = BMS_Magene_TPDOInfo_Main.CellInfo5.CellVol[0]; BMS_CellVol.Cell14 = BMS_Magene_TPDOInfo_Main.CellInfo5.CellVol[1]; BMS_CellVol.Cell15 = BMS_Magene_TPDOInfo_Main.CellInfo5.CellVol[2]; BMS_CellVol.Cell16 = 0; //故障码 BMS_ErrorCode.Code = 0; //BMS故障时无法放电,不处理 //设计信息 BMS_DesignInfo.Capacity = BMS_Magene_TPDOInfo_Main.CycInfo.DesignCapcity; BMS_DesignInfo.Voltage = BMS_Magene_TPDOInfo_Main.RtcInfo.DesignVol; strcpy(BMS_DesignInfo.CellMode, "NONE "); BMS_DesignInfo.CellNum = 0; //版本信息 strcpy(BMS_VerInfo.Mode, "MAGENE "); strcpy(BMS_VerInfo.SN_Num, "00000001"); strcpy(BMS_VerInfo.HW_Version, "V100"); strcpy(BMS_VerInfo.FW_Version, "V100"); //生产信息 strcpy(BMS_MacInfo.Manufacturer, "MAGENE "); strcpy(BMS_MacInfo.MacAddr, ""); strcpy(BMS_MacInfo.MacDate, ""); strcpy(BMS_MacInfo.ProductTag, ""); //使用记录 BMS_UsrLog.Max_Tmp = BMS_Magene_TPDOInfo_Main.TmpInfo.CellT_Max; BMS_UsrLog.Min_Tmp = BMS_Magene_TPDOInfo_Main.TmpInfo.CellT_Min; BMS_UsrLog.LastChgTime = BMS_Magene_TPDOInfo_Main.StaInfo.LastChargeTime; BMS_UsrLog.MaxChgTime = BMS_Magene_TPDOInfo_Main.StaInfo.MaxChargeTime; } //仅副电池打开 else if(((BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 3)) && ((BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState != 2) && (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState != 3))) { //运行信息 BMS_RunInfo.Voltage = BMS_Magene_TPDOInfo_Back.BaseInfo.Voltage; BMS_RunInfo.Current = BMS_Magene_TPDOInfo_Back.BaseInfo.Current; BMS_RunInfo.RC = BMS_Magene_TPDOInfo_Back.CapInfo.RemainCapcity; BMS_RunInfo.FCC = BMS_Magene_TPDOInfo_Back.CapInfo.FullCapcity; BMS_RunInfo.Cell_NTC = BMS_Magene_TPDOInfo_Back.BaseInfo.Temperature; BMS_RunInfo.SOC = BMS_Magene_TPDOInfo_Back.CapInfo.SOC; BMS_RunInfo.Status.Status = (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 3) ? 0x01 : 0x00; BMS_RunInfo.SOH = BMS_Magene_TPDOInfo_Back.CapInfo.SOH; BMS_RunInfo.CycleCount = BMS_Magene_TPDOInfo_Back.CycInfo.CycleCount; if(BMS_Magene_TPDOInfo_Back.BaseInfo.Current >= 100) BMS_RunInfo.RemainChgTime = (BMS_Magene_TPDOInfo_Back.CapInfo.FullCapcity - BMS_Magene_TPDOInfo_Back.CapInfo.RemainCapcity) * 60 / BMS_Magene_TPDOInfo_Back.BaseInfo.Current; else BMS_RunInfo.RemainChgTime = 0; //电芯电压 BMS_CellVol.Cell1 = BMS_Magene_TPDOInfo_Back.CellInfo1.CellVol[0]; BMS_CellVol.Cell2 = BMS_Magene_TPDOInfo_Back.CellInfo1.CellVol[1]; BMS_CellVol.Cell3 = BMS_Magene_TPDOInfo_Back.CellInfo1.CellVol[2]; BMS_CellVol.Cell4 = BMS_Magene_TPDOInfo_Back.CellInfo2.CellVol[0]; BMS_CellVol.Cell5 = BMS_Magene_TPDOInfo_Back.CellInfo2.CellVol[1]; BMS_CellVol.Cell6 = BMS_Magene_TPDOInfo_Back.CellInfo2.CellVol[2]; BMS_CellVol.Cell7 = BMS_Magene_TPDOInfo_Back.CellInfo3.CellVol[0]; BMS_CellVol.Cell8 = BMS_Magene_TPDOInfo_Back.CellInfo3.CellVol[1]; BMS_CellVol.Cell9 = BMS_Magene_TPDOInfo_Back.CellInfo3.CellVol[2]; BMS_CellVol.Cell10 = BMS_Magene_TPDOInfo_Back.CellInfo4.CellVol[0]; BMS_CellVol.Cell11 = BMS_Magene_TPDOInfo_Back.CellInfo4.CellVol[1]; BMS_CellVol.Cell12 = BMS_Magene_TPDOInfo_Back.CellInfo4.CellVol[2]; BMS_CellVol.Cell13 = BMS_Magene_TPDOInfo_Back.CellInfo5.CellVol[0]; BMS_CellVol.Cell14 = BMS_Magene_TPDOInfo_Back.CellInfo5.CellVol[1]; BMS_CellVol.Cell15 = BMS_Magene_TPDOInfo_Back.CellInfo5.CellVol[2]; BMS_CellVol.Cell16 = 0; //故障码 BMS_ErrorCode.Code = 0; //BMS故障时无法放电,不处理 //设计信息 BMS_DesignInfo.Capacity = BMS_Magene_TPDOInfo_Back.CycInfo.DesignCapcity; BMS_DesignInfo.Voltage = BMS_Magene_TPDOInfo_Back.RtcInfo.DesignVol; strcpy(BMS_DesignInfo.CellMode, "NONE "); BMS_DesignInfo.CellNum = 0; //版本信息 strcpy(BMS_VerInfo.Mode, "MAGENE "); strcpy(BMS_VerInfo.SN_Num, ""); strcpy(BMS_VerInfo.HW_Version, ""); strcpy(BMS_VerInfo.FW_Version, ""); //生产信息 strcpy(BMS_MacInfo.Manufacturer, "MAGENE "); strcpy(BMS_MacInfo.MacAddr, ""); strcpy(BMS_MacInfo.MacDate, ""); strcpy(BMS_MacInfo.ProductTag, ""); //使用记录 BMS_UsrLog.Max_Tmp = BMS_Magene_TPDOInfo_Back.TmpInfo.CellT_Max; BMS_UsrLog.Min_Tmp = BMS_Magene_TPDOInfo_Back.TmpInfo.CellT_Min; BMS_UsrLog.LastChgTime = BMS_Magene_TPDOInfo_Back.StaInfo.LastChargeTime; BMS_UsrLog.MaxChgTime = BMS_Magene_TPDOInfo_Back.StaInfo.MaxChargeTime; } //主副电池同时打开 else if(((BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 3)) && ((BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 3))) { //暂不考虑 } } /*BMS开关控制*/ void BMS_SwitchCtl(void) { //发送通用指令,主副电池同时发开,定时1s发送 static uint32_t PeriodCnt = 0; uint8_t SendData[8] = {0xE4, 0x06, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00}; if((HAL_GetTick() - PeriodCnt) >= 1000) { PeriodCnt = HAL_GetTick(); CAN_SendData(BMS_MAGENE_BASE_RPDO + BMS_MAGENE_ADDRESS_COM, SendData, sizeof(SendData)); } } /*BMS在线检测*/ void BMS_OnLineCheck(void) { //主电池检测 if((HAL_GetTick() - BMS_Magene_OnLineCheck_Main.TimeCnt) > 3000) { BMS_Magene_OnLineCheck_Main.OnLineFlag = 0; } //备电池检测 if((HAL_GetTick() - BMS_Magene_OnLineCheck_Back.TimeCnt) > 3000) { BMS_Magene_OnLineCheck_Back.OnLineFlag = 0; } } /*BMS数据解析*/ void BMS_CanProcess(BMS_Magene_CanData_Struct_t* CanData) { if(CanData->RefreshFlag == 1) { if(CanData->ID == (BMS_MAGENE_BASE_TPDO + BMS_MAGENE_ADDRESS_MAIN)) //主电池 { if(CanData->Data[0] == BMS_MAGENE_STATUS_PAGE_ID) //识别PageID { switch(CanData->Data[1]) //根据指令码放置不同位置 { case BMS_MAGENE_FUC_CODE_BASE_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.BaseInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CAP_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CapInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CYC_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CycInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_STA_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.StaInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_RTC_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.RtcInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL1_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo1.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL2_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo2.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL3_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo3.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL4_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo4.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL5_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo5.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_TMP_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.TmpInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_SW_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.BatStInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } default:break; } } BMS_Magene_OnLineCheck_Main.OnLineFlag = 1; BMS_Magene_OnLineCheck_Main.TimeCnt = HAL_GetTick(); } else if(CanData->ID == (BMS_MAGENE_BASE_TPDO + BMS_MAGENE_ADDRESS_BACK)) //备电池 { if(CanData->Data[0] == BMS_MAGENE_STATUS_PAGE_ID) //识别PageID { switch(CanData->Data[1]) //根据指令码放置不同位置 { case BMS_MAGENE_FUC_CODE_BASE_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.BaseInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CAP_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CapInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CYC_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CycInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_STA_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.StaInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_RTC_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.RtcInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL1_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo1.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL2_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo2.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL3_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo3.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL4_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo4.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_CELL5_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo5.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_TMP_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.TmpInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } case BMS_MAGENE_FUC_CODE_SW_INFO: { memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.BatStInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6); break; } default:break; } } BMS_Magene_OnLineCheck_Back.OnLineFlag = 1; BMS_Magene_OnLineCheck_Back.TimeCnt = HAL_GetTick(); } //电池通信正常标志置位,用于续航计算 RemainDis.IsBMS_ComOK_Flag = TRUE; RemainDis.BMS_Com_DelayTimeCnt = HAL_GetTick(); //BMS通信正常标志置位 IsComOK_BMS.IsOK_Flag = TRUE; IsComOK_BMS.OK_TrigTime = HAL_GetTick(); CanData->RefreshFlag = 0; } } //全局函数 /*参数初始化*/ void BMS_Magene_VarInit(void) { BMS_Magene_TPDOInfo_Main.BaseInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.BaseInfo.Code = BMS_MAGENE_FUC_CODE_BASE_INFO; BMS_Magene_TPDOInfo_Main.CapInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CapInfo.Code = BMS_MAGENE_FUC_CODE_CAP_INFO; BMS_Magene_TPDOInfo_Main.CycInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CycInfo.Code = BMS_MAGENE_FUC_CODE_CYC_INFO; BMS_Magene_TPDOInfo_Main.StaInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.StaInfo.Code = BMS_MAGENE_FUC_CODE_STA_INFO; BMS_Magene_TPDOInfo_Main.RtcInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.RtcInfo.Code = BMS_MAGENE_FUC_CODE_RTC_INFO; BMS_Magene_TPDOInfo_Main.CellInfo1.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CellInfo1.Code = BMS_MAGENE_FUC_CODE_CELL1_INFO; BMS_Magene_TPDOInfo_Main.CellInfo2.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CellInfo2.Code = BMS_MAGENE_FUC_CODE_CELL2_INFO; BMS_Magene_TPDOInfo_Main.CellInfo3.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CellInfo3.Code = BMS_MAGENE_FUC_CODE_CELL3_INFO; BMS_Magene_TPDOInfo_Main.CellInfo4.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CellInfo4.Code = BMS_MAGENE_FUC_CODE_CELL4_INFO; BMS_Magene_TPDOInfo_Main.CellInfo5.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.CellInfo5.Code = BMS_MAGENE_FUC_CODE_CELL5_INFO; BMS_Magene_TPDOInfo_Main.TmpInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.TmpInfo.Code = BMS_MAGENE_FUC_CODE_TMP_INFO; BMS_Magene_TPDOInfo_Main.BatStInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Main.BatStInfo.Code = BMS_MAGENE_FUC_CODE_SW_INFO; BMS_Magene_TPDOInfo_Back.BaseInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.BaseInfo.Code = BMS_MAGENE_FUC_CODE_BASE_INFO; BMS_Magene_TPDOInfo_Back.CapInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CapInfo.Code = BMS_MAGENE_FUC_CODE_CAP_INFO; BMS_Magene_TPDOInfo_Back.CycInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CycInfo.Code = BMS_MAGENE_FUC_CODE_CYC_INFO; BMS_Magene_TPDOInfo_Back.StaInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.StaInfo.Code = BMS_MAGENE_FUC_CODE_STA_INFO; BMS_Magene_TPDOInfo_Back.RtcInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.RtcInfo.Code = BMS_MAGENE_FUC_CODE_RTC_INFO; BMS_Magene_TPDOInfo_Back.CellInfo1.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CellInfo1.Code = BMS_MAGENE_FUC_CODE_CELL1_INFO; BMS_Magene_TPDOInfo_Back.CellInfo2.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CellInfo2.Code = BMS_MAGENE_FUC_CODE_CELL2_INFO; BMS_Magene_TPDOInfo_Back.CellInfo3.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CellInfo3.Code = BMS_MAGENE_FUC_CODE_CELL3_INFO; BMS_Magene_TPDOInfo_Back.CellInfo4.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CellInfo4.Code = BMS_MAGENE_FUC_CODE_CELL4_INFO; BMS_Magene_TPDOInfo_Back.CellInfo5.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.CellInfo5.Code = BMS_MAGENE_FUC_CODE_CELL5_INFO; BMS_Magene_TPDOInfo_Back.TmpInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.TmpInfo.Code = BMS_MAGENE_FUC_CODE_TMP_INFO; BMS_Magene_TPDOInfo_Back.BatStInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID; BMS_Magene_TPDOInfo_Back.BatStInfo.Code = BMS_MAGENE_FUC_CODE_SW_INFO; BMS_Magene_CanData.RefreshFlag = 0; } /*BMS处理主循环*/ void BMS_Magene_Loop(void) { BMS_CanProcess(&BMS_Magene_CanData); BMS_OnLineCheck(); BMS_SwitchCtl(); BMS_InfoUpdate(); }