BCU1.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. /*
  2. * File: BCU.c
  3. *
  4. * Code generated for Simulink model 'BCU'.
  5. *
  6. * Model version : 1.19
  7. * Simulink Coder version : 9.4 (R2020b) 29-Jul-2020
  8. * C/C++ source code generated on : Fri Aug 20 13:49:53 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. { uint8_T i;
  28. osDelay(1000);
  29. PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
  30. while (TRUE)
  31. {
  32. switch(gProcess_Bcu_Task)
  33. {
  34. case PROCESS_STATE_INIT:
  35. { BCU_initialize();
  36. memcpy(blcv_Q_totalCpEi,AppDataInfo.blcv_Q_totalCpE, 28*sizeof(uint32_T));
  37. memcpy(blcv_Q_reqCpEi,AppDataInfo.blcv_Q_reqCpE, 28*sizeof(uint16_T));
  38. socd_pct_bcuSocEi = AppDataInfo.socd_pct_bcuSocE;
  39. socd_pct_battSocEi = AppDataInfo.socd_pct_battSocE;
  40. sohd_tm_chrgStartStatEi = AppDataInfo.sohd_tm_chrgStartStatE;
  41. sohd_flg_chrgEndEi = AppDataInfo.sohd_flg_chrgEndE;
  42. memcpy(sohv_V_chrgStartStatEi,AppDataInfo.sohv_V_chrgStartStatE, 28*sizeof(uint16_T));
  43. sohd_Q_chrgEi = AppDataInfo.sohd_Q_chrgE;
  44. memcpy(sohv_Q_packCapArrEi,AppDataInfo.sohv_Q_packCapArrE, 10*sizeof(uint16_T));
  45. memcpy(sohv_Q_cellCapArrEi,AppDataInfo.sohv_Q_cellCapArrE, 28*sizeof(uint16_T));
  46. PROC_BCU_STATE_SWITCH(PROCESS_STATE_IDLE);
  47. break;
  48. }
  49. case PROCESS_STATE_IDLE:
  50. {
  51. while (TRUE)
  52. {
  53. osDelay(100);
  54. if(gProcess_app!=LISTEN)
  55. {
  56. PROC_BCU_STATE_SWITCH(PROCESS_STATE_WORK);
  57. break;
  58. }
  59. else
  60. {
  61. PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
  62. break;
  63. }
  64. }
  65. break;
  66. }
  67. case PROCESS_STATE_WORK:
  68. {
  69. while (TRUE)
  70. {
  71. osDelay(1000);
  72. if(gProcess_app==LISTEN)
  73. {
  74. PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
  75. break;
  76. }
  77. //***************
  78. ihd_I_curr = (int16_T)(-(battI - 10000)*10);
  79. ihd_V_cellUMax = maxCellVol;
  80. ihd_V_cellUMin = minCellVol;
  81. ihd_V_cellUAvrg = avrgCellVol;
  82. memcpy(ihv_V_cellU,battCellU,AppNVMData.BattCellCount*sizeof(uint16_T));
  83. memcpy(ihv_T_modT,battCellTemp,AppNVMData.BattTempCount*sizeof(uint16_T));
  84. ihd_T_modTMax = maxCellTemp;
  85. ihd_T_modTMin = minCellTemp;
  86. ihd_st_workStat = battWorkState;//BattWorkStateDelay;
  87. ihd_st_fault = 0;
  88. // socd_pct_battSocEi=300;
  89. ihd_T_bdtemp = 400;
  90. /* Constant: '<Root>/Constant' */
  91. //****************************
  92. /* ModelReference: '<Root>/SOH' incorporates:
  93. * Inport: '<Root>/ihd_I_curr'
  94. * Inport: '<Root>/ihd_st_workStat'
  95. * Inport: '<Root>/ihd_tm_packTime'
  96. * Inport: '<Root>/ihv_V_cellU'
  97. * Inport: '<Root>/sohd_Q_chrgEi '
  98. * Inport: '<Root>/sohd_flg_chrgEndEi '
  99. * Inport: '<Root>/sohd_tm_chrgStartStatEi '
  100. * Inport: '<Root>/sohv_Q_packCapArrEi '
  101. * Inport: '<Root>/sohv_V_chrgStartStatEi '
  102. */
  103. SOH();
  104. /* ModelReference: '<Root>/SOC' incorporates:
  105. * Inport: '<Root>/ihd_I_curr'
  106. * Inport: '<Root>/ihd_V_cellUAvrg'
  107. * Inport: '<Root>/ihd_V_cellUMax'
  108. * Inport: '<Root>/ihd_V_cellUMin'
  109. * Inport: '<Root>/ihd_st_workStat'
  110. * Inport: '<Root>/ihd_tm_packTime'
  111. * Inport: '<Root>/socd_pct_battSocEi'
  112. * Inport: '<Root>/socd_pct_bcuSocEi'
  113. */
  114. SOC();
  115. // printf("[%d]-:socd_pct_battSocEi:%d,socd_pct_battSoc:%d,socd_pct_ekfSoc:%d,socd_pct_bcuSoc:%d,Umax:%d,Umin:%d,ocv:%f,UL:%f,Up:%f,k1:%f,k2:%f\n",__LINE__,socd_pct_battSocEi,socd_pct_battSoc,socd_pct_ekfSoc,socd_pct_bcuSoc,ihd_V_cellUMax,ihd_V_cellUMin,OCV,UL,Up,k1,k2);
  116. /* Constant: '<Root>/Constant' */
  117. /* ModelReference: '<Root>/BLC' incorporates:
  118. * Inport: '<Root>/blcv_Q_reqCpEi'
  119. * Inport: '<Root>/blcv_Q_totalCpEi'
  120. * Inport: '<Root>/ihd_V_cellUMin'
  121. * Inport: '<Root>/ihd_st_fault'
  122. * Inport: '<Root>/ihd_tm_packTime'
  123. * Inport: '<Root>/ihv_V_cellU'
  124. */
  125. BLC();
  126. //
  127. //
  128. if(socd_flg_EEsave==1)
  129. {
  130. memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T));
  131. memcpy(AppDataInfo.blcv_Q_reqCpE,blcv_Q_reqCpEo, 28*sizeof(uint16_T));
  132. AppDataInfo.socd_pct_bcuSocE = socd_pct_bcuSocEo;
  133. AppDataInfo.socd_pct_battSocE = socd_pct_battSocEo;
  134. AppDataInfo.sohd_tm_chrgStartStatE = sohd_tm_chrgStartStatEo;
  135. AppDataInfo.sohd_flg_chrgEndE = sohd_flg_chrgEndEo;
  136. memcpy(AppDataInfo.sohv_V_chrgStartStatE,sohv_V_chrgStartStatEo, 28*sizeof(uint16_T));
  137. AppDataInfo. sohd_Q_chrgE = sohd_Q_chrgEo;
  138. memcpy(AppDataInfo.sohv_Q_packCapArrE,sohv_Q_packCapArrEo, 10*sizeof(uint16_T));
  139. memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T));
  140. AppDataInfo.appDataModify = TRUE;
  141. }
  142. }
  143. break;
  144. }
  145. case PROCESS_STATE_SLEEP:
  146. {
  147. memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T));
  148. memcpy(AppDataInfo.blcv_Q_reqCpE,blcv_Q_reqCpEo, 28*sizeof(uint16_T));
  149. AppDataInfo.socd_pct_bcuSocE = socd_pct_bcuSocEo;
  150. AppDataInfo.socd_pct_battSocE = socd_pct_battSocEo;
  151. AppDataInfo.sohd_tm_chrgStartStatE = sohd_tm_chrgStartStatEo;
  152. AppDataInfo.sohd_flg_chrgEndE = sohd_flg_chrgEndEo;
  153. memcpy(AppDataInfo.sohv_V_chrgStartStatE,sohv_V_chrgStartStatEo, 28*sizeof(uint16_T));
  154. AppDataInfo. sohd_Q_chrgE = sohd_Q_chrgEo;
  155. memcpy(AppDataInfo.sohv_Q_packCapArrE,sohv_Q_packCapArrEo, 10*sizeof(uint16_T));
  156. memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T));
  157. AppDataInfo.appDataModify = TRUE;
  158. //
  159. Time=0;
  160. ihd_tm_parkTime=0;
  161. while (TRUE)
  162. {
  163. osDelay(1000);
  164. ihd_tm_parkTime++;
  165. if(gProcess_app!=LISTEN)
  166. {
  167. PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
  168. break;
  169. }
  170. }
  171. break;
  172. }
  173. default:
  174. {
  175. PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
  176. break;
  177. }
  178. }
  179. }
  180. }
  181. /* Model initialize function */
  182. void BCU_initialize(void)
  183. {
  184. /* Registration code */
  185. /* block I/O */
  186. /* custom signals */
  187. {
  188. int32_T i;
  189. for (i = 0; i < 28; i++) {
  190. sohv_Q_cellCap[i] = 300U;
  191. }
  192. }
  193. sohd_pct_bcuSoh = 1000U;
  194. /* Model Initialize function for ModelReference Block: '<Root>/BLC' */
  195. BLC_initialize(rtmGetErrorStatusPointer(BCU_M));
  196. /* Model Initialize function for ModelReference Block: '<Root>/SOC' */
  197. SOC_initialize(rtmGetErrorStatusPointer(BCU_M));
  198. /* Model Initialize function for ModelReference Block: '<Root>/SOH' */
  199. SOH_initialize(rtmGetErrorStatusPointer(BCU_M));
  200. //SFM_initialize(rtmGetErrorStatusPointer(BCU_M));
  201. /* SystemInitialize for ModelReference: '<Root>/SOH' incorporates:
  202. * Inport: '<Root>/battI '
  203. * Inport: '<Root>/ihd_st_workStat'
  204. * Inport: '<Root>/ihd_tm_packTime'
  205. * Inport: '<Root>/ihv_V_cellU'
  206. * Inport: '<Root>/sohd_Q_chrgEi '
  207. * Inport: '<Root>/sohd_flg_chrgEndEi '
  208. * Inport: '<Root>/sohd_tm_chrgStartStatEi '
  209. * Inport: '<Root>/sohv_Q_packCapArrEi '
  210. * Inport: '<Root>/sohv_V_chrgStartStatEi '
  211. */
  212. SOH_Init();
  213. /* SystemInitialize for ModelReference: '<Root>/SOC' incorporates:
  214. * Inport: '<Root>/battI '
  215. * Inport: '<Root>/ihd_V_cellUAvrg'
  216. * Inport: '<Root>/ihd_V_cellUMax'
  217. * Inport: '<Root>/ihd_V_cellUMin'
  218. * Inport: '<Root>/ihd_st_workStat'
  219. * Inport: '<Root>/ihd_tm_packTime'
  220. * Inport: '<Root>/socd_pct_battSocEi'
  221. * Inport: '<Root>/socd_pct_bcuSocEi'
  222. */
  223. SOC_Init();
  224. /* SystemInitialize for ModelReference: '<Root>/BLC' incorporates:
  225. * Inport: '<Root>/blcv_Q_reqCpEi'
  226. * Inport: '<Root>/blcv_Q_totalCpEi'
  227. * Inport: '<Root>/ihd_V_cellUMin'
  228. * Inport: '<Root>/ihd_st_fault'
  229. * Inport: '<Root>/ihd_tm_packTime'
  230. * Inport: '<Root>/ihv_V_cellU'
  231. */
  232. BLC_Init();
  233. //SFM_Init();
  234. }
  235. /* Model terminate function */
  236. void BCU_terminate(void)
  237. {
  238. /* (no terminate code required) */
  239. }
  240. /*
  241. * File trailer for generated code.
  242. *
  243. * [EOF]
  244. */
  245. void AppTaskBcuInit(void *arg)
  246. {
  247. osThreadAttr_t task_attr;
  248. memset(&task_attr,0,sizeof(task_attr));
  249. memset(gProcess_Bcu_TaskStack, 0xA5, PROC_BCU_TASK_STACK_SIZE);
  250. task_attr.name = "Bcu_Task";
  251. task_attr.stack_mem = gProcess_Bcu_TaskStack;
  252. task_attr.stack_size = PROC_BCU_TASK_STACK_SIZE;
  253. task_attr.priority = osPriorityBelowNormal7;
  254. task_attr.cb_mem = &gProcess_Bcu_Task_t;
  255. task_attr.cb_size = sizeof(StaticTask_t);
  256. BcuTaskId = osThreadNew(BCU_step, NULL, &task_attr);
  257. }