/* * File: BCU.c * * Code generated for Simulink model 'BCU'. * * Model version : 1.19 * Simulink Coder version : 9.4 (R2020b) 29-Jul-2020 * C/C++ source code generated on : Fri Aug 20 13:49:53 2021 * * Target selection: ert.tlc * Embedded hardware selection: Intel->x86-64 (Windows64) * Code generation objectives: Unspecified * Validation result: Not run */ #include "BCU.h" #include "BCU_private.h" static StaticTask_t gProcess_Bcu_Task_t; static UINT8 gProcess_Bcu_TaskStack[PROC_BCU_TASK_STACK_SIZE]; static osThreadId_t BcuTaskId = NULL; static process_Bcu gProcess_Bcu_Task; #define PROC_BCU_STATE_SWITCH(a) (gProcess_Bcu_Task = a) /* Real-time model */ static RT_MODEL_BCU_T BCU_M_; RT_MODEL_BCU_T *const BCU_M = &BCU_M_; /* Model step function */ void BCU_step(void) { uint8_T i; osDelay(1000); PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT); while (TRUE) { switch(gProcess_Bcu_Task) { case PROCESS_STATE_INIT: { BCU_initialize(); memcpy(blcv_Q_totalCpEi,AppDataInfo.blcv_Q_totalCpE, 28*sizeof(uint32_T)); memcpy(blcv_Q_reqCpEi,AppDataInfo.blcv_Q_reqCpE, 28*sizeof(uint16_T)); socd_pct_bcuSocEi = AppDataInfo.socd_pct_bcuSocE; socd_pct_battSocEi = AppDataInfo.socd_pct_battSocE; sohd_tm_chrgStartStatEi = AppDataInfo.sohd_tm_chrgStartStatE; sohd_flg_chrgEndEi = AppDataInfo.sohd_flg_chrgEndE; memcpy(sohv_V_chrgStartStatEi,AppDataInfo.sohv_V_chrgStartStatE, 28*sizeof(uint16_T)); sohd_Q_chrgEi = AppDataInfo.sohd_Q_chrgE; memcpy(sohv_Q_packCapArrEi,AppDataInfo.sohv_Q_packCapArrE, 10*sizeof(uint16_T)); memcpy(sohv_Q_cellCapArrEi,AppDataInfo.sohv_Q_cellCapArrE, 28*sizeof(uint16_T)); PROC_BCU_STATE_SWITCH(PROCESS_STATE_IDLE); break; } case PROCESS_STATE_IDLE: { while (TRUE) { osDelay(100); if(gProcess_app!=LISTEN) { PROC_BCU_STATE_SWITCH(PROCESS_STATE_WORK); break; } else { PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP); break; } } break; } case PROCESS_STATE_WORK: { while (TRUE) { osDelay(1000); if(gProcess_app==LISTEN) { PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP); break; } //*************** ihd_I_curr = (int16_T)(-(battI - 10000)*10); ihd_V_cellUMax = maxCellVol; ihd_V_cellUMin = minCellVol; ihd_V_cellUAvrg = avrgCellVol; memcpy(ihv_V_cellU,battCellU,AppNVMData.BattCellCount*sizeof(uint16_T)); memcpy(ihv_T_modT,battCellTemp,AppNVMData.BattTempCount*sizeof(uint16_T)); ihd_T_modTMax = maxCellTemp; ihd_T_modTMin = minCellTemp; ihd_st_workStat = battWorkState;//BattWorkStateDelay; ihd_st_fault = 0; // socd_pct_battSocEi=300; ihd_T_bdtemp = 400; /* Constant: '/Constant' */ //**************************** /* ModelReference: '/SOH' incorporates: * Inport: '/ihd_I_curr' * Inport: '/ihd_st_workStat' * Inport: '/ihd_tm_packTime' * Inport: '/ihv_V_cellU' * Inport: '/sohd_Q_chrgEi ' * Inport: '/sohd_flg_chrgEndEi ' * Inport: '/sohd_tm_chrgStartStatEi ' * Inport: '/sohv_Q_packCapArrEi ' * Inport: '/sohv_V_chrgStartStatEi ' */ SOH(); /* ModelReference: '/SOC' incorporates: * Inport: '/ihd_I_curr' * Inport: '/ihd_V_cellUAvrg' * Inport: '/ihd_V_cellUMax' * Inport: '/ihd_V_cellUMin' * Inport: '/ihd_st_workStat' * Inport: '/ihd_tm_packTime' * Inport: '/socd_pct_battSocEi' * Inport: '/socd_pct_bcuSocEi' */ SOC(); // 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); /* Constant: '/Constant' */ /* ModelReference: '/BLC' incorporates: * Inport: '/blcv_Q_reqCpEi' * Inport: '/blcv_Q_totalCpEi' * Inport: '/ihd_V_cellUMin' * Inport: '/ihd_st_fault' * Inport: '/ihd_tm_packTime' * Inport: '/ihv_V_cellU' */ BLC(); // // if(socd_flg_EEsave==1) { memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T)); memcpy(AppDataInfo.blcv_Q_reqCpE,blcv_Q_reqCpEo, 28*sizeof(uint16_T)); AppDataInfo.socd_pct_bcuSocE = socd_pct_bcuSocEo; AppDataInfo.socd_pct_battSocE = socd_pct_battSocEo; AppDataInfo.sohd_tm_chrgStartStatE = sohd_tm_chrgStartStatEo; AppDataInfo.sohd_flg_chrgEndE = sohd_flg_chrgEndEo; memcpy(AppDataInfo.sohv_V_chrgStartStatE,sohv_V_chrgStartStatEo, 28*sizeof(uint16_T)); AppDataInfo. sohd_Q_chrgE = sohd_Q_chrgEo; memcpy(AppDataInfo.sohv_Q_packCapArrE,sohv_Q_packCapArrEo, 10*sizeof(uint16_T)); memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T)); AppDataInfo.appDataModify = TRUE; } } break; } case PROCESS_STATE_SLEEP: { memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T)); memcpy(AppDataInfo.blcv_Q_reqCpE,blcv_Q_reqCpEo, 28*sizeof(uint16_T)); AppDataInfo.socd_pct_bcuSocE = socd_pct_bcuSocEo; AppDataInfo.socd_pct_battSocE = socd_pct_battSocEo; AppDataInfo.sohd_tm_chrgStartStatE = sohd_tm_chrgStartStatEo; AppDataInfo.sohd_flg_chrgEndE = sohd_flg_chrgEndEo; memcpy(AppDataInfo.sohv_V_chrgStartStatE,sohv_V_chrgStartStatEo, 28*sizeof(uint16_T)); AppDataInfo. sohd_Q_chrgE = sohd_Q_chrgEo; memcpy(AppDataInfo.sohv_Q_packCapArrE,sohv_Q_packCapArrEo, 10*sizeof(uint16_T)); memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T)); AppDataInfo.appDataModify = TRUE; // Time=0; ihd_tm_parkTime=0; while (TRUE) { osDelay(1000); ihd_tm_parkTime++; if(gProcess_app!=LISTEN) { PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT); break; } } break; } default: { PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT); break; } } } } /* Model initialize function */ void BCU_initialize(void) { /* Registration code */ /* block I/O */ /* custom signals */ { int32_T i; for (i = 0; i < 28; i++) { sohv_Q_cellCap[i] = 300U; } } sohd_pct_bcuSoh = 1000U; /* Model Initialize function for ModelReference Block: '/BLC' */ BLC_initialize(rtmGetErrorStatusPointer(BCU_M)); /* Model Initialize function for ModelReference Block: '/SOC' */ SOC_initialize(rtmGetErrorStatusPointer(BCU_M)); /* Model Initialize function for ModelReference Block: '/SOH' */ SOH_initialize(rtmGetErrorStatusPointer(BCU_M)); //SFM_initialize(rtmGetErrorStatusPointer(BCU_M)); /* SystemInitialize for ModelReference: '/SOH' incorporates: * Inport: '/battI ' * Inport: '/ihd_st_workStat' * Inport: '/ihd_tm_packTime' * Inport: '/ihv_V_cellU' * Inport: '/sohd_Q_chrgEi ' * Inport: '/sohd_flg_chrgEndEi ' * Inport: '/sohd_tm_chrgStartStatEi ' * Inport: '/sohv_Q_packCapArrEi ' * Inport: '/sohv_V_chrgStartStatEi ' */ SOH_Init(); /* SystemInitialize for ModelReference: '/SOC' incorporates: * Inport: '/battI ' * Inport: '/ihd_V_cellUAvrg' * Inport: '/ihd_V_cellUMax' * Inport: '/ihd_V_cellUMin' * Inport: '/ihd_st_workStat' * Inport: '/ihd_tm_packTime' * Inport: '/socd_pct_battSocEi' * Inport: '/socd_pct_bcuSocEi' */ SOC_Init(); /* SystemInitialize for ModelReference: '/BLC' incorporates: * Inport: '/blcv_Q_reqCpEi' * Inport: '/blcv_Q_totalCpEi' * Inport: '/ihd_V_cellUMin' * Inport: '/ihd_st_fault' * Inport: '/ihd_tm_packTime' * Inport: '/ihv_V_cellU' */ BLC_Init(); //SFM_Init(); } /* Model terminate function */ void BCU_terminate(void) { /* (no terminate code required) */ } /* * File trailer for generated code. * * [EOF] */ void AppTaskBcuInit(void *arg) { osThreadAttr_t task_attr; memset(&task_attr,0,sizeof(task_attr)); memset(gProcess_Bcu_TaskStack, 0xA5, PROC_BCU_TASK_STACK_SIZE); task_attr.name = "Bcu_Task"; task_attr.stack_mem = gProcess_Bcu_TaskStack; task_attr.stack_size = PROC_BCU_TASK_STACK_SIZE; task_attr.priority = osPriorityBelowNormal7; task_attr.cb_mem = &gProcess_Bcu_Task_t; task_attr.cb_size = sizeof(StaticTask_t); BcuTaskId = osThreadNew(BCU_step, NULL, &task_attr); }