BCU.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /*
  2. * File: BCU.c
  3. *
  4. * Code generated for Simulink model 'BCU'.
  5. *
  6. * Model version : 1.33
  7. * Simulink Coder version : 9.4 (R2020b) 29-Jul-2020
  8. * C/C++ source code generated on : Thu Sep 9 18:19:09 2021
  9. *
  10. * Target selection: ert.tlc
  11. * Embedded hardware selection: Intel->x86-64 (Windows64)
  12. * Code generation objectives: Unspecified
  13. * Validation result: Not run
  14. */
  15. #include "BCU.h"
  16. #include "BCU_private.h"
  17. static StaticTask_t gProcess_Bcu_Task_t;
  18. static UINT8 gProcess_Bcu_TaskStack[PROC_BCU_TASK_STACK_SIZE];
  19. static osThreadId_t BcuTaskId = NULL;
  20. static process_Bcu gProcess_Bcu_Task;
  21. #define PROC_BCU_STATE_SWITCH(a) (gProcess_Bcu_Task = a)
  22. /* Real-time model */
  23. static RT_MODEL_BCU_T BCU_M_;
  24. RT_MODEL_BCU_T *const BCU_M = &BCU_M_;
  25. /* Model step function */
  26. void BCU_step(void)
  27. {
  28. uint8_T i;
  29. osDelay(1000);
  30. PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
  31. while (TRUE)
  32. {
  33. switch(gProcess_Bcu_Task)
  34. {
  35. case PROCESS_STATE_INIT:
  36. { BCU_initialize();
  37. cand_Nr_cellNr=0;
  38. memcpy(blcv_Q_totalCpEi,AppDataInfo.blcv_Q_totalCpE, 28*sizeof(uint32_T));
  39. memcpy(blcv_Q_reqCpEi,AppDataInfo.blcv_Q_reqCpE, 28*sizeof(uint16_T));
  40. socd_pct_bcuSocEi = AppDataInfo.socd_pct_bcuSocE;
  41. socd_pct_battSocEi = AppDataInfo.socd_pct_battSocE;
  42. sohd_tm_chrgStartStatEi = AppDataInfo.sohd_tm_chrgStartStatE;
  43. sohd_flg_chrgEndEi = AppDataInfo.sohd_flg_chrgEndE;
  44. memcpy(sohv_V_chrgStartStatEi,AppDataInfo.sohv_V_chrgStartStatE, 28*sizeof(uint16_T));
  45. sohd_Q_chrgEi = AppDataInfo.sohd_Q_chrgE;
  46. memcpy(sohv_Q_packCapArrEi,AppDataInfo.sohv_Q_packCapArrE, 10*sizeof(uint16_T));
  47. memcpy(sohv_Q_cellCapArrEi,AppDataInfo.sohv_Q_cellCapArrE, 28*sizeof(uint16_T));
  48. PROC_BCU_STATE_SWITCH(PROCESS_STATE_IDLE);
  49. break;
  50. }
  51. case PROCESS_STATE_IDLE:
  52. {
  53. while (TRUE)
  54. {
  55. osDelay(100);
  56. if(gProcess_app!=LISTEN)
  57. {
  58. PROC_BCU_STATE_SWITCH(PROCESS_STATE_WORK);
  59. break;
  60. }
  61. else
  62. {
  63. PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
  64. break;
  65. }
  66. }
  67. break;
  68. }
  69. case PROCESS_STATE_WORK:
  70. {
  71. while (TRUE)
  72. {
  73. osDelay(100);
  74. if(gProcess_app==LISTEN)
  75. {
  76. PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
  77. break;
  78. }
  79. //***************
  80. ihd_I_curr = (int16_T)(-(battI - 10000));
  81. ihd_V_cellUMax = maxCellVol;
  82. ihd_V_cellUMin = minCellVol;
  83. ihd_V_cellUAvrg = avrgCellVol;
  84. memcpy(ihv_V_cellU,battCellU,AppNVMData.BattCellCount*sizeof(uint16_T));
  85. for(i=0;i<4;i++)
  86. {
  87. ihv_T_modT[i]= battCellTemp[i]-40;
  88. }
  89. //memcpy(ihv_T_modT,battCellTemp,AppNVMData.BattTempCount*sizeof(uint16_T));
  90. ihd_T_modTMax = maxCellTemp-40;
  91. ihd_T_modTMin = minCellTemp-40;
  92. ihd_st_workStat = BattWorkStateDelay;
  93. ihd_L_urtRecv=UartRecvFlag;
  94. ihd_flg_currFlt= ((battWarningState >> 1) & 0x01) == 1; //battu low
  95. ihd_flg_chrgMosClosFlt= ((battWarningState >> 19) & 0x01) == 1;
  96. ihd_flg_dischrgMosClosFlt=((battWarningState >> 18) & 0x01) == 1;
  97. // socd_pct_battSocEi=300;
  98. SFM();
  99. SPM();
  100. //
  101. cand_Nr_cellNr=cand_Nr_cellNr+1;
  102. if(cand_Nr_cellNr> cmnc_num_cellUNum)
  103. {
  104. cand_Nr_cellNr=1;
  105. }
  106. cand_Q_cellCap=sohv_Q_cellCap[cand_Nr_cellNr-1];
  107. cand_V_chrgStartStat=sohv_V_chrgStartStatEo[cand_Nr_cellNr-1];
  108. //
  109. if(socd_flg_EEsave==1)
  110. {
  111. memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T));
  112. memcpy(AppDataInfo.blcv_Q_reqCpE,blcv_Q_reqCpEo, 28*sizeof(uint16_T));
  113. AppDataInfo.socd_pct_bcuSocE = socd_pct_bcuSocEo;
  114. AppDataInfo.socd_pct_battSocE = socd_pct_battSocEo;
  115. AppDataInfo.sohd_tm_chrgStartStatE = sohd_tm_chrgStartStatEo;
  116. AppDataInfo.sohd_flg_chrgEndE = sohd_flg_chrgEndEo;
  117. memcpy(AppDataInfo.sohv_V_chrgStartStatE,sohv_V_chrgStartStatEo, 28*sizeof(uint16_T));
  118. AppDataInfo. sohd_Q_chrgE = sohd_Q_chrgEo;
  119. memcpy(AppDataInfo.sohv_Q_packCapArrE,sohv_Q_packCapArrEo, 10*sizeof(uint16_T));
  120. memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T));
  121. AppDataInfo.appDataModify = TRUE;
  122. }
  123. }
  124. break;
  125. }
  126. case PROCESS_STATE_SLEEP:
  127. {
  128. memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T));
  129. memcpy(AppDataInfo.blcv_Q_reqCpE,blcv_Q_reqCpEo, 28*sizeof(uint16_T));
  130. AppDataInfo.socd_pct_bcuSocE = socd_pct_bcuSocEo;
  131. AppDataInfo.socd_pct_battSocE = socd_pct_battSocEo;
  132. AppDataInfo.sohd_tm_chrgStartStatE = sohd_tm_chrgStartStatEo;
  133. AppDataInfo.sohd_flg_chrgEndE = sohd_flg_chrgEndEo;
  134. memcpy(AppDataInfo.sohv_V_chrgStartStatE,sohv_V_chrgStartStatEo, 28*sizeof(uint16_T));
  135. AppDataInfo. sohd_Q_chrgE = sohd_Q_chrgEo;
  136. memcpy(AppDataInfo.sohv_Q_packCapArrE,sohv_Q_packCapArrEo, 10*sizeof(uint16_T));
  137. memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T));
  138. AppDataInfo.appDataModify = TRUE;
  139. //
  140. cand_Nr_cellNr=0;
  141. ihd_tm_parkTime=0;
  142. while (TRUE)
  143. {
  144. osDelay(1000);
  145. ihd_tm_parkTime++;
  146. if(gProcess_app!=LISTEN)
  147. {
  148. PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
  149. break;
  150. }
  151. }
  152. break;
  153. }
  154. default:
  155. {
  156. PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
  157. break;
  158. }
  159. }
  160. }
  161. }
  162. /* Model initialize function */
  163. void BCU_initialize(void)
  164. {
  165. /* Registration code */
  166. /* block I/O */
  167. /* custom signals */
  168. {
  169. int32_T i;
  170. for (i = 0; i < 28; i++) {
  171. sohv_Q_cellCap[i] = 300U;
  172. }
  173. }
  174. sohd_pct_bcuSoh = 1000U;
  175. /* Model Initialize function for ModelReference Block: '<Root>/SFM' */
  176. SFM_initialize(rtmGetErrorStatusPointer(BCU_M));
  177. /* Model Initialize function for ModelReference Block: '<Root>/SPM' */
  178. SPM_initialize(rtmGetErrorStatusPointer(BCU_M));
  179. /* SystemInitialize for ModelReference: '<Root>/SFM' incorporates:
  180. * Inport: '<Root>/In1'
  181. * Inport: '<Root>/battI '
  182. * Inport: '<Root>/ihd_L_urtRecv'
  183. * Inport: '<Root>/ihd_P_gas'
  184. * Inport: '<Root>/ihd_flg_chrgMosClosFlt'
  185. * Inport: '<Root>/ihd_flg_disChrgMosClosFlt'
  186. * Inport: '<Root>/ihv_T_modT'
  187. * Inport: '<Root>/ihv_V_cellU'
  188. */
  189. SFM_Init();
  190. /* SystemInitialize for ModelReference: '<Root>/SPM' incorporates:
  191. * Inport: '<Root>/blcv_Q_reqCpEi'
  192. * Inport: '<Root>/blcv_Q_totalCpEi'
  193. * Inport: '<Root>/ihd_T_bdtemp'
  194. * Inport: '<Root>/ihd_st_workStat'
  195. * Inport: '<Root>/ihd_tm_packTime'
  196. * Inport: '<Root>/socd_pct_battSocEi'
  197. * Inport: '<Root>/socd_pct_bcuSocEi'
  198. * Inport: '<Root>/sohd_Q_chrgEi '
  199. * Inport: '<Root>/sohd_flg_chrgEndEi '
  200. * Inport: '<Root>/sohd_tm_chrgStartStatEi '
  201. * Inport: '<Root>/sohv_Q_cellCapArrEi 1'
  202. * Inport: '<Root>/sohv_Q_packCapArrEi '
  203. * Inport: '<Root>/sohv_V_chrgStartStatEi '
  204. */
  205. SPM_Init();
  206. }
  207. /* Model terminate function */
  208. void BCU_terminate(void)
  209. {
  210. /* (no terminate code required) */
  211. }
  212. /*
  213. * File trailer for generated code.
  214. *
  215. * [EOF]
  216. */
  217. void AppTaskBcuInit(void *arg)
  218. {
  219. osThreadAttr_t task_attr;
  220. memset(&task_attr,0,sizeof(task_attr));
  221. memset(gProcess_Bcu_TaskStack, 0xA5, PROC_BCU_TASK_STACK_SIZE);
  222. task_attr.name = "Bcu_Task";
  223. task_attr.stack_mem = gProcess_Bcu_TaskStack;
  224. task_attr.stack_size = PROC_BCU_TASK_STACK_SIZE;
  225. task_attr.priority = osPriorityBelowNormal7;
  226. task_attr.cb_mem = &gProcess_Bcu_Task_t;
  227. task_attr.cb_size = sizeof(StaticTask_t);
  228. BcuTaskId = osThreadNew(BCU_step, NULL, &task_attr);
  229. }