bms_magene.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. #include "bms_magene.h"
  2. #include "remain_distance.h"
  3. //全局变量
  4. BMS_Magene_TPDOInfo_Struct BMS_Magene_TPDOInfo_Main, BMS_Magene_TPDOInfo_Back; //电池主动上报数据
  5. BMS_Magene_RPDOInfo_Struct BMS_Magene_RPDOInfo_Main, BMS_Magene_RPDOInfo_Back; //电池控制参数
  6. BMS_Magene_OnLineCheck_Struct BMS_Magene_OnLineCheck_Main, BMS_Magene_OnLineCheck_Back; //电池在线检测
  7. BMS_Magene_CanData_Struct_t BMS_Magene_CanData; //电池报文数据
  8. //局部函数
  9. /*BMS数据更新*/
  10. void BMS_InfoUpdate(void)
  11. {
  12. static uint32_t PeriodCnt = 0;
  13. if((HAL_GetTick() - PeriodCnt <= 1000))
  14. return;
  15. else
  16. PeriodCnt = HAL_GetTick();
  17. //仅主电池打开
  18. if(((BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 3)) &&
  19. ((BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState != 2) && (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState != 3)))
  20. {
  21. //运行信息
  22. BMS_RunInfo.Voltage = BMS_Magene_TPDOInfo_Main.BaseInfo.Voltage;
  23. BMS_RunInfo.Current = BMS_Magene_TPDOInfo_Main.BaseInfo.Current;
  24. BMS_RunInfo.RC = BMS_Magene_TPDOInfo_Main.CapInfo.RemainCapcity;
  25. BMS_RunInfo.FCC = BMS_Magene_TPDOInfo_Main.CapInfo.FullCapcity;
  26. BMS_RunInfo.Cell_NTC = BMS_Magene_TPDOInfo_Main.BaseInfo.Temperature;
  27. BMS_RunInfo.SOC = BMS_Magene_TPDOInfo_Main.CapInfo.SOC;
  28. BMS_RunInfo.Status.Status = (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 3) ? 0x01 : 0x00;
  29. BMS_RunInfo.SOH = BMS_Magene_TPDOInfo_Main.CapInfo.SOH;
  30. BMS_RunInfo.CycleCount = BMS_Magene_TPDOInfo_Main.CycInfo.CycleCount;
  31. if(BMS_Magene_TPDOInfo_Main.BaseInfo.Current >= 100)
  32. BMS_RunInfo.RemainChgTime = (BMS_Magene_TPDOInfo_Main.CapInfo.FullCapcity - BMS_Magene_TPDOInfo_Main.CapInfo.RemainCapcity) * 60 / BMS_Magene_TPDOInfo_Main.BaseInfo.Current;
  33. else
  34. BMS_RunInfo.RemainChgTime = 0;
  35. //电芯电压
  36. BMS_CellVol.Cell1 = BMS_Magene_TPDOInfo_Main.CellInfo1.CellVol[0];
  37. BMS_CellVol.Cell2 = BMS_Magene_TPDOInfo_Main.CellInfo1.CellVol[1];
  38. BMS_CellVol.Cell3 = BMS_Magene_TPDOInfo_Main.CellInfo1.CellVol[2];
  39. BMS_CellVol.Cell4 = BMS_Magene_TPDOInfo_Main.CellInfo2.CellVol[0];
  40. BMS_CellVol.Cell5 = BMS_Magene_TPDOInfo_Main.CellInfo2.CellVol[1];
  41. BMS_CellVol.Cell6 = BMS_Magene_TPDOInfo_Main.CellInfo2.CellVol[2];
  42. BMS_CellVol.Cell7 = BMS_Magene_TPDOInfo_Main.CellInfo3.CellVol[0];
  43. BMS_CellVol.Cell8 = BMS_Magene_TPDOInfo_Main.CellInfo3.CellVol[1];
  44. BMS_CellVol.Cell9 = BMS_Magene_TPDOInfo_Main.CellInfo3.CellVol[2];
  45. BMS_CellVol.Cell10 = BMS_Magene_TPDOInfo_Main.CellInfo4.CellVol[0];
  46. BMS_CellVol.Cell11 = BMS_Magene_TPDOInfo_Main.CellInfo4.CellVol[1];
  47. BMS_CellVol.Cell12 = BMS_Magene_TPDOInfo_Main.CellInfo4.CellVol[2];
  48. BMS_CellVol.Cell13 = BMS_Magene_TPDOInfo_Main.CellInfo5.CellVol[0];
  49. BMS_CellVol.Cell14 = BMS_Magene_TPDOInfo_Main.CellInfo5.CellVol[1];
  50. BMS_CellVol.Cell15 = BMS_Magene_TPDOInfo_Main.CellInfo5.CellVol[2];
  51. BMS_CellVol.Cell16 = 0;
  52. //故障码
  53. BMS_ErrorCode.Code = 0; //BMS故障时无法放电,不处理
  54. //设计信息
  55. BMS_DesignInfo.Capacity = BMS_Magene_TPDOInfo_Main.CycInfo.DesignCapcity;
  56. BMS_DesignInfo.Voltage = BMS_Magene_TPDOInfo_Main.RtcInfo.DesignVol;
  57. strcpy(BMS_DesignInfo.CellMode, "NONE ");
  58. BMS_DesignInfo.CellNum = 0;
  59. //版本信息
  60. strcpy(BMS_VerInfo.Mode, "MAGENE ");
  61. strcpy(BMS_VerInfo.SN_Num, "00000001");
  62. strcpy(BMS_VerInfo.HW_Version, "V100");
  63. strcpy(BMS_VerInfo.FW_Version, "V100");
  64. //生产信息
  65. strcpy(BMS_MacInfo.Manufacturer, "MAGENE ");
  66. strcpy(BMS_MacInfo.MacAddr, "");
  67. strcpy(BMS_MacInfo.MacDate, "");
  68. strcpy(BMS_MacInfo.ProductTag, "");
  69. //使用记录
  70. BMS_UsrLog.Max_Tmp = BMS_Magene_TPDOInfo_Main.TmpInfo.CellT_Max;
  71. BMS_UsrLog.Min_Tmp = BMS_Magene_TPDOInfo_Main.TmpInfo.CellT_Min;
  72. BMS_UsrLog.LastChgTime = BMS_Magene_TPDOInfo_Main.StaInfo.LastChargeTime;
  73. BMS_UsrLog.MaxChgTime = BMS_Magene_TPDOInfo_Main.StaInfo.MaxChargeTime;
  74. }
  75. //仅副电池打开
  76. else if(((BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 3)) &&
  77. ((BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState != 2) && (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState != 3)))
  78. {
  79. //运行信息
  80. BMS_RunInfo.Voltage = BMS_Magene_TPDOInfo_Back.BaseInfo.Voltage;
  81. BMS_RunInfo.Current = BMS_Magene_TPDOInfo_Back.BaseInfo.Current;
  82. BMS_RunInfo.RC = BMS_Magene_TPDOInfo_Back.CapInfo.RemainCapcity;
  83. BMS_RunInfo.FCC = BMS_Magene_TPDOInfo_Back.CapInfo.FullCapcity;
  84. BMS_RunInfo.Cell_NTC = BMS_Magene_TPDOInfo_Back.BaseInfo.Temperature;
  85. BMS_RunInfo.SOC = BMS_Magene_TPDOInfo_Back.CapInfo.SOC;
  86. BMS_RunInfo.Status.Status = (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 3) ? 0x01 : 0x00;
  87. BMS_RunInfo.SOH = BMS_Magene_TPDOInfo_Back.CapInfo.SOH;
  88. BMS_RunInfo.CycleCount = BMS_Magene_TPDOInfo_Back.CycInfo.CycleCount;
  89. if(BMS_Magene_TPDOInfo_Back.BaseInfo.Current >= 100)
  90. BMS_RunInfo.RemainChgTime = (BMS_Magene_TPDOInfo_Back.CapInfo.FullCapcity - BMS_Magene_TPDOInfo_Back.CapInfo.RemainCapcity) * 60 / BMS_Magene_TPDOInfo_Back.BaseInfo.Current;
  91. else
  92. BMS_RunInfo.RemainChgTime = 0;
  93. //电芯电压
  94. BMS_CellVol.Cell1 = BMS_Magene_TPDOInfo_Back.CellInfo1.CellVol[0];
  95. BMS_CellVol.Cell2 = BMS_Magene_TPDOInfo_Back.CellInfo1.CellVol[1];
  96. BMS_CellVol.Cell3 = BMS_Magene_TPDOInfo_Back.CellInfo1.CellVol[2];
  97. BMS_CellVol.Cell4 = BMS_Magene_TPDOInfo_Back.CellInfo2.CellVol[0];
  98. BMS_CellVol.Cell5 = BMS_Magene_TPDOInfo_Back.CellInfo2.CellVol[1];
  99. BMS_CellVol.Cell6 = BMS_Magene_TPDOInfo_Back.CellInfo2.CellVol[2];
  100. BMS_CellVol.Cell7 = BMS_Magene_TPDOInfo_Back.CellInfo3.CellVol[0];
  101. BMS_CellVol.Cell8 = BMS_Magene_TPDOInfo_Back.CellInfo3.CellVol[1];
  102. BMS_CellVol.Cell9 = BMS_Magene_TPDOInfo_Back.CellInfo3.CellVol[2];
  103. BMS_CellVol.Cell10 = BMS_Magene_TPDOInfo_Back.CellInfo4.CellVol[0];
  104. BMS_CellVol.Cell11 = BMS_Magene_TPDOInfo_Back.CellInfo4.CellVol[1];
  105. BMS_CellVol.Cell12 = BMS_Magene_TPDOInfo_Back.CellInfo4.CellVol[2];
  106. BMS_CellVol.Cell13 = BMS_Magene_TPDOInfo_Back.CellInfo5.CellVol[0];
  107. BMS_CellVol.Cell14 = BMS_Magene_TPDOInfo_Back.CellInfo5.CellVol[1];
  108. BMS_CellVol.Cell15 = BMS_Magene_TPDOInfo_Back.CellInfo5.CellVol[2];
  109. BMS_CellVol.Cell16 = 0;
  110. //故障码
  111. BMS_ErrorCode.Code = 0; //BMS故障时无法放电,不处理
  112. //设计信息
  113. BMS_DesignInfo.Capacity = BMS_Magene_TPDOInfo_Back.CycInfo.DesignCapcity;
  114. BMS_DesignInfo.Voltage = BMS_Magene_TPDOInfo_Back.RtcInfo.DesignVol;
  115. strcpy(BMS_DesignInfo.CellMode, "NONE ");
  116. BMS_DesignInfo.CellNum = 0;
  117. //版本信息
  118. strcpy(BMS_VerInfo.Mode, "MAGENE ");
  119. strcpy(BMS_VerInfo.SN_Num, "");
  120. strcpy(BMS_VerInfo.HW_Version, "");
  121. strcpy(BMS_VerInfo.FW_Version, "");
  122. //生产信息
  123. strcpy(BMS_MacInfo.Manufacturer, "MAGENE ");
  124. strcpy(BMS_MacInfo.MacAddr, "");
  125. strcpy(BMS_MacInfo.MacDate, "");
  126. strcpy(BMS_MacInfo.ProductTag, "");
  127. //使用记录
  128. BMS_UsrLog.Max_Tmp = BMS_Magene_TPDOInfo_Back.TmpInfo.CellT_Max;
  129. BMS_UsrLog.Min_Tmp = BMS_Magene_TPDOInfo_Back.TmpInfo.CellT_Min;
  130. BMS_UsrLog.LastChgTime = BMS_Magene_TPDOInfo_Back.StaInfo.LastChargeTime;
  131. BMS_UsrLog.MaxChgTime = BMS_Magene_TPDOInfo_Back.StaInfo.MaxChargeTime;
  132. }
  133. //主副电池同时打开
  134. else if(((BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Main.BaseInfo.WorkState == 3)) &&
  135. ((BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 2) || (BMS_Magene_TPDOInfo_Back.BaseInfo.WorkState == 3)))
  136. {
  137. //暂不考虑
  138. }
  139. }
  140. /*BMS开关控制*/
  141. void BMS_SwitchCtl(void)
  142. {
  143. //发送通用指令,主副电池同时发开,定时1s发送
  144. static uint32_t PeriodCnt = 0;
  145. uint8_t SendData[8] = {0xE4, 0x06, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00};
  146. if((HAL_GetTick() - PeriodCnt) >= 1000)
  147. {
  148. PeriodCnt = HAL_GetTick();
  149. CAN_SendData(BMS_MAGENE_BASE_RPDO + BMS_MAGENE_ADDRESS_COM, SendData, sizeof(SendData));
  150. }
  151. }
  152. /*BMS在线检测*/
  153. void BMS_OnLineCheck(void)
  154. {
  155. //主电池检测
  156. if((HAL_GetTick() - BMS_Magene_OnLineCheck_Main.TimeCnt) > 3000)
  157. {
  158. BMS_Magene_OnLineCheck_Main.OnLineFlag = 0;
  159. }
  160. //备电池检测
  161. if((HAL_GetTick() - BMS_Magene_OnLineCheck_Back.TimeCnt) > 3000)
  162. {
  163. BMS_Magene_OnLineCheck_Back.OnLineFlag = 0;
  164. }
  165. }
  166. /*BMS数据解析*/
  167. void BMS_CanProcess(BMS_Magene_CanData_Struct_t* CanData)
  168. {
  169. if(CanData->RefreshFlag == 1)
  170. {
  171. if(CanData->ID == (BMS_MAGENE_BASE_TPDO + BMS_MAGENE_ADDRESS_MAIN)) //主电池
  172. {
  173. if(CanData->Data[0] == BMS_MAGENE_STATUS_PAGE_ID) //识别PageID
  174. {
  175. switch(CanData->Data[1]) //根据指令码放置不同位置
  176. {
  177. case BMS_MAGENE_FUC_CODE_BASE_INFO:
  178. {
  179. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.BaseInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  180. break;
  181. }
  182. case BMS_MAGENE_FUC_CODE_CAP_INFO:
  183. {
  184. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CapInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  185. break;
  186. }
  187. case BMS_MAGENE_FUC_CODE_CYC_INFO:
  188. {
  189. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CycInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  190. break;
  191. }
  192. case BMS_MAGENE_FUC_CODE_STA_INFO:
  193. {
  194. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.StaInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  195. break;
  196. }
  197. case BMS_MAGENE_FUC_CODE_RTC_INFO:
  198. {
  199. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.RtcInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  200. break;
  201. }
  202. case BMS_MAGENE_FUC_CODE_CELL1_INFO:
  203. {
  204. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo1.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  205. break;
  206. }
  207. case BMS_MAGENE_FUC_CODE_CELL2_INFO:
  208. {
  209. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo2.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  210. break;
  211. }
  212. case BMS_MAGENE_FUC_CODE_CELL3_INFO:
  213. {
  214. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo3.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  215. break;
  216. }
  217. case BMS_MAGENE_FUC_CODE_CELL4_INFO:
  218. {
  219. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo4.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  220. break;
  221. }
  222. case BMS_MAGENE_FUC_CODE_CELL5_INFO:
  223. {
  224. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.CellInfo5.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  225. break;
  226. }
  227. case BMS_MAGENE_FUC_CODE_TMP_INFO:
  228. {
  229. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.TmpInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  230. break;
  231. }
  232. case BMS_MAGENE_FUC_CODE_SW_INFO:
  233. {
  234. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Main.BatStInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  235. break;
  236. }
  237. default:break;
  238. }
  239. }
  240. BMS_Magene_OnLineCheck_Main.OnLineFlag = 1;
  241. BMS_Magene_OnLineCheck_Main.TimeCnt = HAL_GetTick();
  242. }
  243. else if(CanData->ID == (BMS_MAGENE_BASE_TPDO + BMS_MAGENE_ADDRESS_BACK)) //备电池
  244. {
  245. if(CanData->Data[0] == BMS_MAGENE_STATUS_PAGE_ID) //识别PageID
  246. {
  247. switch(CanData->Data[1]) //根据指令码放置不同位置
  248. {
  249. case BMS_MAGENE_FUC_CODE_BASE_INFO:
  250. {
  251. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.BaseInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  252. break;
  253. }
  254. case BMS_MAGENE_FUC_CODE_CAP_INFO:
  255. {
  256. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CapInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  257. break;
  258. }
  259. case BMS_MAGENE_FUC_CODE_CYC_INFO:
  260. {
  261. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CycInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  262. break;
  263. }
  264. case BMS_MAGENE_FUC_CODE_STA_INFO:
  265. {
  266. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.StaInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  267. break;
  268. }
  269. case BMS_MAGENE_FUC_CODE_RTC_INFO:
  270. {
  271. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.RtcInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  272. break;
  273. }
  274. case BMS_MAGENE_FUC_CODE_CELL1_INFO:
  275. {
  276. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo1.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  277. break;
  278. }
  279. case BMS_MAGENE_FUC_CODE_CELL2_INFO:
  280. {
  281. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo2.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  282. break;
  283. }
  284. case BMS_MAGENE_FUC_CODE_CELL3_INFO:
  285. {
  286. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo3.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  287. break;
  288. }
  289. case BMS_MAGENE_FUC_CODE_CELL4_INFO:
  290. {
  291. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo4.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  292. break;
  293. }
  294. case BMS_MAGENE_FUC_CODE_CELL5_INFO:
  295. {
  296. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.CellInfo5.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  297. break;
  298. }
  299. case BMS_MAGENE_FUC_CODE_TMP_INFO:
  300. {
  301. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.TmpInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  302. break;
  303. }
  304. case BMS_MAGENE_FUC_CODE_SW_INFO:
  305. {
  306. memcpy((uint8_t*)&BMS_Magene_TPDOInfo_Back.BatStInfo.PageID + 2, (uint8_t*)CanData->Data + 2, 6);
  307. break;
  308. }
  309. default:break;
  310. }
  311. }
  312. BMS_Magene_OnLineCheck_Back.OnLineFlag = 1;
  313. BMS_Magene_OnLineCheck_Back.TimeCnt = HAL_GetTick();
  314. }
  315. //电池通信正常标志置位,用于续航计算
  316. RemainDis.IsBMS_ComOK_Flag = TRUE;
  317. RemainDis.BMS_Com_DelayTimeCnt = HAL_GetTick();
  318. //BMS通信正常标志置位
  319. IsComOK_BMS.IsOK_Flag = TRUE;
  320. IsComOK_BMS.OK_TrigTime = HAL_GetTick();
  321. CanData->RefreshFlag = 0;
  322. }
  323. }
  324. //全局函数
  325. /*参数初始化*/
  326. void BMS_Magene_VarInit(void)
  327. {
  328. BMS_Magene_TPDOInfo_Main.BaseInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  329. BMS_Magene_TPDOInfo_Main.BaseInfo.Code = BMS_MAGENE_FUC_CODE_BASE_INFO;
  330. BMS_Magene_TPDOInfo_Main.CapInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  331. BMS_Magene_TPDOInfo_Main.CapInfo.Code = BMS_MAGENE_FUC_CODE_CAP_INFO;
  332. BMS_Magene_TPDOInfo_Main.CycInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  333. BMS_Magene_TPDOInfo_Main.CycInfo.Code = BMS_MAGENE_FUC_CODE_CYC_INFO;
  334. BMS_Magene_TPDOInfo_Main.StaInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  335. BMS_Magene_TPDOInfo_Main.StaInfo.Code = BMS_MAGENE_FUC_CODE_STA_INFO;
  336. BMS_Magene_TPDOInfo_Main.RtcInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  337. BMS_Magene_TPDOInfo_Main.RtcInfo.Code = BMS_MAGENE_FUC_CODE_RTC_INFO;
  338. BMS_Magene_TPDOInfo_Main.CellInfo1.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  339. BMS_Magene_TPDOInfo_Main.CellInfo1.Code = BMS_MAGENE_FUC_CODE_CELL1_INFO;
  340. BMS_Magene_TPDOInfo_Main.CellInfo2.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  341. BMS_Magene_TPDOInfo_Main.CellInfo2.Code = BMS_MAGENE_FUC_CODE_CELL2_INFO;
  342. BMS_Magene_TPDOInfo_Main.CellInfo3.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  343. BMS_Magene_TPDOInfo_Main.CellInfo3.Code = BMS_MAGENE_FUC_CODE_CELL3_INFO;
  344. BMS_Magene_TPDOInfo_Main.CellInfo4.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  345. BMS_Magene_TPDOInfo_Main.CellInfo4.Code = BMS_MAGENE_FUC_CODE_CELL4_INFO;
  346. BMS_Magene_TPDOInfo_Main.CellInfo5.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  347. BMS_Magene_TPDOInfo_Main.CellInfo5.Code = BMS_MAGENE_FUC_CODE_CELL5_INFO;
  348. BMS_Magene_TPDOInfo_Main.TmpInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  349. BMS_Magene_TPDOInfo_Main.TmpInfo.Code = BMS_MAGENE_FUC_CODE_TMP_INFO;
  350. BMS_Magene_TPDOInfo_Main.BatStInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  351. BMS_Magene_TPDOInfo_Main.BatStInfo.Code = BMS_MAGENE_FUC_CODE_SW_INFO;
  352. BMS_Magene_TPDOInfo_Back.BaseInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  353. BMS_Magene_TPDOInfo_Back.BaseInfo.Code = BMS_MAGENE_FUC_CODE_BASE_INFO;
  354. BMS_Magene_TPDOInfo_Back.CapInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  355. BMS_Magene_TPDOInfo_Back.CapInfo.Code = BMS_MAGENE_FUC_CODE_CAP_INFO;
  356. BMS_Magene_TPDOInfo_Back.CycInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  357. BMS_Magene_TPDOInfo_Back.CycInfo.Code = BMS_MAGENE_FUC_CODE_CYC_INFO;
  358. BMS_Magene_TPDOInfo_Back.StaInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  359. BMS_Magene_TPDOInfo_Back.StaInfo.Code = BMS_MAGENE_FUC_CODE_STA_INFO;
  360. BMS_Magene_TPDOInfo_Back.RtcInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  361. BMS_Magene_TPDOInfo_Back.RtcInfo.Code = BMS_MAGENE_FUC_CODE_RTC_INFO;
  362. BMS_Magene_TPDOInfo_Back.CellInfo1.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  363. BMS_Magene_TPDOInfo_Back.CellInfo1.Code = BMS_MAGENE_FUC_CODE_CELL1_INFO;
  364. BMS_Magene_TPDOInfo_Back.CellInfo2.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  365. BMS_Magene_TPDOInfo_Back.CellInfo2.Code = BMS_MAGENE_FUC_CODE_CELL2_INFO;
  366. BMS_Magene_TPDOInfo_Back.CellInfo3.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  367. BMS_Magene_TPDOInfo_Back.CellInfo3.Code = BMS_MAGENE_FUC_CODE_CELL3_INFO;
  368. BMS_Magene_TPDOInfo_Back.CellInfo4.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  369. BMS_Magene_TPDOInfo_Back.CellInfo4.Code = BMS_MAGENE_FUC_CODE_CELL4_INFO;
  370. BMS_Magene_TPDOInfo_Back.CellInfo5.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  371. BMS_Magene_TPDOInfo_Back.CellInfo5.Code = BMS_MAGENE_FUC_CODE_CELL5_INFO;
  372. BMS_Magene_TPDOInfo_Back.TmpInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  373. BMS_Magene_TPDOInfo_Back.TmpInfo.Code = BMS_MAGENE_FUC_CODE_TMP_INFO;
  374. BMS_Magene_TPDOInfo_Back.BatStInfo.PageID = BMS_MAGENE_STATUS_PAGE_ID;
  375. BMS_Magene_TPDOInfo_Back.BatStInfo.Code = BMS_MAGENE_FUC_CODE_SW_INFO;
  376. BMS_Magene_CanData.RefreshFlag = 0;
  377. }
  378. /*BMS处理主循环*/
  379. void BMS_Magene_Loop(void)
  380. {
  381. BMS_CanProcess(&BMS_Magene_CanData);
  382. BMS_OnLineCheck();
  383. BMS_SwitchCtl();
  384. BMS_InfoUpdate();
  385. }