浏览代码

V3.0.0.7 新增soh算法

CHENJIE-PC\QiXiang_CHENJIE 3 年之前
父节点
当前提交
3a58d9cc5d
共有 81 个文件被更改,包括 6378 次插入1631 次删除
  1. 3 2
      ARMCC/Makefile
  2. 1 1
      inc/AppConfig.h
  3. 13 23
      inc/BCU.h
  4. 18 128
      inc/BCU1.h
  5. 30 4
      inc/BCUCal.h
  6. 42 24
      inc/BCUDisp.h
  7. 2 2
      inc/BCU_private.h
  8. 2 2
      inc/BCU_types.h
  9. 23 26
      inc/BLC.h
  10. 2 2
      inc/BLC_private.h
  11. 2 2
      inc/BLC_types.h
  12. 287 0
      inc/SFM.h
  13. 89 0
      inc/SFM_private.h
  14. 30 0
      inc/SFM_types.h
  15. 38 34
      inc/SOC.h
  16. 2 2
      inc/SOC_private.h
  17. 2 2
      inc/SOC_types.h
  18. 38 28
      inc/SOH.h
  19. 2 2
      inc/SOH_private.h
  20. 2 2
      inc/SOH_types.h
  21. 97 0
      inc/SPM.h
  22. 90 0
      inc/SPM_private.h
  23. 30 0
      inc/SPM_types.h
  24. 0 1
      inc/bsp_custom.h
  25. 2 2
      inc/div_nde_s32_floor.h
  26. 2 2
      inc/div_nzp_repeat_u32.h
  27. 2 2
      inc/div_nzp_repeat_u32_ceiling.h
  28. 2 2
      inc/div_repeat_s16s32_floor.h
  29. 2 2
      inc/div_repeat_u32.h
  30. 2 2
      inc/div_su32.h
  31. 2 2
      inc/div_uus32_sat.h
  32. 2 2
      inc/look1_is16lu16n16tu16_binlcase.h
  33. 2 2
      inc/look1_iu16lu16n16tu16_binlcase.h
  34. 2 2
      inc/mul_s32_hiSR.h
  35. 2 2
      inc/mul_s32_loSR_sat.h
  36. 2 2
      inc/mul_s32_sat.h
  37. 2 2
      inc/mul_ssu32_sat.h
  38. 2 2
      inc/mul_u32_hiSR.h
  39. 2 2
      inc/mul_u32_hiSR_near.h
  40. 2 2
      inc/mul_us32_sat.h
  41. 3 3
      inc/mul_wide_s32.h
  42. 2 2
      inc/mul_wide_su32.h
  43. 2 2
      inc/mul_wide_u32.h
  44. 10 0
      inc/rtwtypes.h
  45. 2 2
      inc/zero_crossing_types.h
  46. 4 4
      src/AppSignal.c
  47. 4 4
      src/AppTaskTcp.c
  48. 1 1
      src/AppTaskUart.c
  49. 77 147
      src/BCU.c
  50. 38 45
      src/BCU1.c
  51. 31 6
      src/BCUCal.c
  52. 45 31
      src/BCUDisp.c
  53. 63 29
      src/BLC.c
  54. 0 175
      src/SFM-1.c
  55. 2122 141
      src/SFM.c
  56. 2162 0
      src/SFM1.c
  57. 354 267
      src/SOC.c
  58. 375 270
      src/SOH.c
  59. 165 0
      src/SPM.c
  60. 2 2
      src/bsp_custom.c
  61. 0 37
      src/const_params.c
  62. 2 2
      src/div_nde_s32_floor.c
  63. 2 2
      src/div_nzp_repeat_u32.c
  64. 2 2
      src/div_nzp_repeat_u32_ceiling.c
  65. 2 2
      src/div_repeat_s16s32_floor.c
  66. 2 2
      src/div_repeat_u32.c
  67. 2 2
      src/div_su32.c
  68. 2 2
      src/div_uus32_sat.c
  69. 0 105
      src/ert_main.c
  70. 2 2
      src/look1_is16lu16n16tu16_binlcase.c
  71. 2 2
      src/look1_iu16lu16n16tu16_binlcase.c
  72. 2 2
      src/mul_s32_hiSR.c
  73. 2 2
      src/mul_s32_loSR_sat.c
  74. 2 2
      src/mul_s32_sat.c
  75. 2 2
      src/mul_ssu32_sat.c
  76. 2 2
      src/mul_u32_hiSR.c
  77. 2 2
      src/mul_u32_hiSR_near.c
  78. 2 2
      src/mul_us32_sat.c
  79. 3 3
      src/mul_wide_s32.c
  80. 2 2
      src/mul_wide_su32.c
  81. 2 2
      src/mul_wide_u32.c

+ 3 - 2
ARMCC/Makefile

@@ -27,10 +27,11 @@ PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskUart.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskCan.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/AppTaskGps.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/BCU.o \
+PLAT/project/$(TARGET)/apps/qx_app/src/SFM.o \
+PLAT/project/$(TARGET)/apps/qx_app/src/SPM.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/SOH.o \
 PLAT/project/$(TARGET)/apps/qx_app/src/SOC.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/BLC.o \
-	PLAT/project/$(TARGET)/apps/qx_app/src/SFM.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/div_nde_s32_floor.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/look1_is16lu16n16tu16_binlcase.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/look1_iu16lu16n16tu16_binlcase.o \
@@ -50,7 +51,7 @@ PLAT/project/$(TARGET)/apps/qx_app/src/SOC.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/div_nzp_repeat_u32.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/div_nzp_repeat_u32_ceiling.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/BCUCal.o \
-        PLAT/project/$(TARGET)/apps/qx_app/src/BCUDisp.o \
+                PLAT/project/$(TARGET)/apps/qx_app/src/BCUDisp.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/div_su32.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/mul_s32_hiSR.o \
 	PLAT/project/$(TARGET)/apps/qx_app/src/div_uus32_sat.o \

+ 1 - 1
inc/AppConfig.h

@@ -13,7 +13,7 @@
 #define DATA_MODULE_TYPE            (1)                 //1表示NB模块,2表示4G cat1
 #define EOLSTATE                    (0)                 //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN                  "RLTEST00000000002" //默认上传的SN编码
-#define	APPSWVERSION		        0x03000006          //数据模块软件版本号
+#define	APPSWVERSION		        0x03000007          //数据模块软件版本号
 
 #define TCP_ADD                     "iotp.fast-fun.cn"  //数据上传的地址
 #define TCP_PORT					8712                //数据上传的端口

+ 13 - 23
inc/BCU.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.19
+ * Model version                  : 1.33
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
+ * C/C++ source code generated on : Thu Sep  9 18:19:09 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -13,20 +13,27 @@
  * Validation result: Not run
  */
 
-
-
 #ifndef RTW_HEADER_BCU_h_
 #define RTW_HEADER_BCU_h_
 #ifndef BCU_COMMON_INCLUDES_
 #define BCU_COMMON_INCLUDES_
 #include "rtwtypes.h"
-#include "commontypedef.h"
-#include "AppSignal.h"
 #include "zero_crossing_types.h"
+#include "AppSignal.h"
 
 #endif                                 /* BCU_COMMON_INCLUDES_ */
 
 #include "BCU_types.h"
+
+/* Child system includes */
+#define SFM_MDLREF_HIDE_CHILD_
+#include "SFM.h"
+#define SPM_MDLREF_HIDE_CHILD_
+#include "SPM.h"
+
+/* Includes for objects with custom storage classes. */
+#include "BCUCal.h"
+#include "BCUDisp.h"
 #define PROC_BCU_TASK_STACK_SIZE           (2048)
 typedef enum
 {
@@ -35,23 +42,6 @@ typedef enum
     PROCESS_STATE_WORK,
     PROCESS_STATE_SLEEP
 }process_Bcu;
-/* Child system includes */
-
-//=======================================================================
-/* Child system includes */
-#define SOH_MDLREF_HIDE_CHILD_
-#include "SOH.h"
-#define SOC_MDLREF_HIDE_CHILD_
-#include "SOC.h"
-#define BLC_MDLREF_HIDE_CHILD_
-#include "BLC.h"
-#define SFM_MDLREF_HIDE_CHILD_
-
-extern uint16_T Time;
-
-/* Includes for objects with custom storage classes. */
-#include "BCUCal.h"
-#include "BCUDisp.h"
 
 /* Macros for accessing real-time model data structure */
 #ifndef rtmGetErrorStatus

+ 18 - 128
inc/BCU1.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.13
+ * Model version                  : 1.19
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Aug 12 17:54:42 2021
+ * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -13,6 +13,8 @@
  * Validation result: Not run
  */
 
+
+
 #ifndef RTW_HEADER_BCU_h_
 #define RTW_HEADER_BCU_h_
 #ifndef BCU_COMMON_INCLUDES_
@@ -21,6 +23,7 @@
 #include "commontypedef.h"
 #include "AppSignal.h"
 #include "zero_crossing_types.h"
+
 #endif                                 /* BCU_COMMON_INCLUDES_ */
 
 #include "BCU_types.h"
@@ -33,9 +36,22 @@ typedef enum
     PROCESS_STATE_SLEEP
 }process_Bcu;
 /* Child system includes */
+
+//=======================================================================
+/* Child system includes */
+#define SOH_MDLREF_HIDE_CHILD_
 #include "SOH.h"
+#define SOC_MDLREF_HIDE_CHILD_
 #include "SOC.h"
+#define BLC_MDLREF_HIDE_CHILD_
 #include "BLC.h"
+#define SFM_MDLREF_HIDE_CHILD_
+
+extern uint16_T Time;
+
+/* Includes for objects with custom storage classes. */
+#include "BCUCal.h"
+#include "BCUDisp.h"
 
 /* Macros for accessing real-time model data structure */
 #ifndef rtmGetErrorStatus
@@ -50,142 +66,16 @@ typedef enum
 #define rtmGetErrorStatusPointer(rtm)  ((const char_T **)(&((rtm)->errorStatus)))
 #endif
 
-/* Block states (default storage) for system '<Root>' */
-typedef struct {
-  MdlrefDW_SOH_T SOH_InstanceData;     /* '<Root>/SOH' */
-  MdlrefDW_SOC_T SOC_InstanceData;     /* '<Root>/SOC' */
-  MdlrefDW_BLC_T BLC_InstanceData;     /* '<Root>/BLC' */
-} DW_BCU_T;
-
 /* Real-time Model Data Structure */
 struct tag_RTM_BCU_T {
   const char_T *errorStatus;
 };
 
-/* Block states (default storage) */
-extern DW_BCU_T BCU_DW;
-
 /* Model entry point functions */
 extern void BCU_initialize(void);
 extern void BCU_step(void);
 extern void BCU_terminate(void);
 
-/* Exported data declaration */
-
-/* Declaration for custom storage class: ExportToFile */
-extern uint16_T blcv_Q_reqCpEi[28];    /* '<Root>/blcv_Q_reqCpEi' */
-
-/* ������������ ��ȡ�������飩�� */
-extern uint16_T blcv_Q_reqCpEo[28];    /* '<Root>/BLC' */
-
-/* ������������ д���������飩�� */
-extern uint32_T blcv_Q_totalCpEi[28];  /* '<Root>/blcv_Q_totalCpEi' */
-
-/* �ۼƾ������� ��ȡ�������飩�� */
-extern uint32_T blcv_Q_totalCpEo[28];  /* '<Root>/BLC' */
-
-/* �ۼƾ������� д���������飩�� */
-extern boolean_T blcv_flg_excute[28];  /* '<Root>/BLC' */
-
-/* ����ִ�������־λ �����飩 */
-extern int16_T ihd_I_curr;             /* '<Root>/ihd_I_curr' */
-
-/* ��ذ������� */
-extern int16_T ihd_T_bdtemp;           /* '<Root>/Constant' */
-extern int16_T ihd_T_modTMax;          /* '<Root>/ihd_T_modTMax' */
-
-/* ģ���¶���� */
-extern int16_T ihd_T_modTMin;          /* '<Root>/ihd_T_modTMin' */
-
-/* ģ���¶���С */
-extern uint16_T ihd_V_cellUAvrg;       /* '<Root>/ihd_V_cellUAvrg' */
-
-/* ��ص����ѹƽ���� */
-extern uint16_T ihd_V_cellUMax;        /* '<Root>/ihd_V_cellUMax' */
-
-/* ��ص����ѹ��� */
-extern uint16_T ihd_V_cellUMin;        /* '<Root>/ihd_V_cellUMin' */
-
-/* ��ص����ѹ��С�� */
-extern uint8_T ihd_st_fault;           /* '<Root>/ihd_st_fault' */
-
-/* ���ϵȼ� */
-extern uint8_T ihd_st_workStat;        /* '<Root>/ihd_st_workStat' */
-
-/* ��ع���״̬�� */
-extern uint32_T ihd_tm_parkTime;       /* '<Root>/ihd_tm_packTime' */
-
-/* פ��ʱ�䣻 */
-extern int16_T ihv_T_modT[6];          /* '<Root>/ihv_T_modT' */
-
-/* ģ���¶ȣ����飩 */
-extern uint16_T ihv_V_cellU[28];       /* '<Root>/ihv_V_cellU' */
-
-/* ��ص����ѹ�����飩�� */
-extern uint16_T socd_pct_ahSoc;        /* '<Root>/SOC' */
-
-/* ��ʱSOC�� */
-extern uint16_T socd_pct_battSoc;      /* '<Root>/SOC' */
-
-/* �����ʵSOC�� */
-extern uint16_T socd_pct_battSocEi;    /* '<Root>/socd_pct_battSocEi' */
-
-/* �����ʵSOC ��ȡ���� */
-extern uint16_T socd_pct_battSocEo;    /* '<Root>/SOC' */
-
-/* �����ʵSOC д������ */
-extern uint16_T socd_pct_bcuSoc;       /* '<Root>/SOC' */
-
-/* �����ʾSOC�� */
-extern uint16_T socd_pct_bcuSocEi;     /* '<Root>/socd_pct_bcuSocEi' */
-
-/* �����ʾSOC��ȡ���� */
-extern uint16_T socd_pct_bcuSocEo;     /* '<Root>/SOC' */
-
-extern uint16_T  socd_pct_ekfSoc;			  
-extern boolean_T socd_flg_EEsave;	   
-
-
-/* �����ʾSOCд������ */
-extern uint16_T sohd_Q_chrgEi;         /* '<Root>/sohd_Q_chrgEi ' */
-
-/* ����������ȡ���� */
-extern uint16_T sohd_Q_chrgEo;         /* '<Root>/SOH' */
-
-/* ������������� */
-extern boolean_T sohd_flg_chrgEndEi;   /* '<Root>/sohd_flg_chrgEndEi ' */
-
-/* ��������־λ��ȡ���� */
-extern boolean_T sohd_flg_chrgEndEo;   /* '<Root>/SOH' */
-
-/* ��������־λд������ */
-extern uint16_T sohd_pct_bcuSoh;       /* '<Root>/SOH' */
-
-/* ���SOH�� */
-extern uint16_T sohd_tm_chrgStartStatEi;/* '<Root>/sohd_tm_chrgStartStatEi ' */
-
-/* ���ǰ����ʱ���ȡ���� */
-extern uint16_T sohd_tm_chrgStartStatEo;/* '<Root>/SOH' */
-
-/* ���ǰ����ʱ��д������ */
-extern uint16_T sohv_Q_cellCap[28];    /* '<Root>/SOH' */
-
-/* ������������� */
-extern uint16_T sohv_Q_packCapArrEi[10];/* '<Root>/sohv_Q_packCapArrEi ' */
-
-/* 10���������������飩��ȡ���� */
-extern uint16_T sohv_Q_packCapArrEo[10];/* '<Root>/SOH' */
-
-/* 10���������������飩д������ */
-extern uint16_T sohv_V_chrgStartStatEi[28];/* '<Root>/sohv_V_chrgStartStatEi ' */
-
-/* ��翪ʼʱ�̵ĵ����ѹ�����飩��ȡ���� */
-extern uint16_T sohv_V_chrgStartStatEo[28];/* '<Root>/SOH' */
-extern uint16_T sleepTime;
-
-
-/* ��翪ʼʱ�̵ĵ����ѹ�����飩д������ */
-
 /* Real-time Model object */
 extern RT_MODEL_BCU_T *const BCU_M;
 

+ 30 - 4
inc/BCUCal.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.32
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 18 17:24:25 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_BCUCal_h_
@@ -15,16 +15,19 @@
 /* Const memory section */
 /* Exported data declaration */
 /* Declaration for custom storage class: Const */
-extern const uint16_T blc_V_low;
 extern const uint16_T blcc_R_esr;
 extern const int16_T blcc_T_close;
 extern const int16_T blcc_T_open;
+extern const uint16_T blcc_V_low;
 extern const uint16_T cmnc_Q_ratedCp;
 
 /* 额定容量; */
-extern const uint8_T cmnc_num_cellUnum;
+extern const uint8_T cmnc_num_cellUNum;
 
 /* 电压采样点个数; */
+extern const uint8_T cmnc_num_modTNum;
+
+/* 温度采样点个数; */
 extern const uint16_T cmnc_tm_parkTime;
 
 /* 静置时间阈值; */
@@ -43,6 +46,29 @@ extern const uint16_T cmnm_V_ocv[13];
 extern const uint16_T cmnm_pct_soc[13];
 
 /* 放电OCV-SOC的SOC数组; */
+extern const uint16_T sfmc_flg_cellUDiffThr2;
+extern const uint16_T sfmc_flg_cellUDiffThr1;
+
+extern const int16_T sfmc_I_chrgCurrOverThr;
+extern const int16_T sfmc_I_dischrgCurrOverThr;
+extern const int16_T sfmc_T_modTDiffThr1;
+extern const int16_T sfmc_T_modTDiffThr2;
+extern const int16_T sfmc_T_modTMaxThr1;
+extern const int16_T sfmc_T_modTMaxThr2;
+extern const int16_T sfmc_T_modTMinThr1;
+extern const int16_T sfmc_T_modTMinThr2;
+extern const uint16_T sfmc_V_battUMaxThr1;
+extern const uint16_T sfmc_V_battUMaxThr2;
+extern const uint16_T sfmc_V_battUMinThr1;
+extern const uint16_T sfmc_V_battUMinThr2;
+extern const uint16_T sfmc_V_cellUMaxThr1;
+extern const uint16_T sfmc_V_cellUMaxThr2;
+extern const uint16_T sfmc_V_cellUMinThr1;
+extern const uint16_T sfmc_V_cellUMinThr2;
+extern const uint8_T sfmc_num_fltNumMax;
+
+/* 温度采样点个数; */
+extern const uint16_T sfmd_flg_cellUDiffThr2;
 extern const uint16_T socc_V_chrgFulV;
 
 /* 充满电的截至电压; */

+ 42 - 24
inc/BCUDisp.h

@@ -1,11 +1,11 @@
 /*
  * File: BCUDisp.h
  *
- * Code generated for Simulink model 'BLC'.
+ * Code generated for Simulink model 'SPM'.
  *
- * Model version                  : 1.42
+ * Model version                  : 1.30
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:49:38 2021
+ * C/C++ source code generated on : Thu Sep  9 17:47:59 2021
  */
 
 #ifndef RTW_HEADER_BCUDisp_h_
@@ -14,20 +14,8 @@
 
 /* Exported data declaration */
 /* Declaration for custom storage class: ExportToFile */
-
-/* 电池工作状态; */
+extern uint16_T FltCodeArr[20];
 extern real_T OCV;
-extern uint16_T SOC1[28];
-extern uint16_T SOC2[28];
-extern real_T UL;
-extern real_T Up;
-extern uint16_T sohv_Q_cellCapArrEo[28];
-extern uint16_T sohv_Q_cellCapArrEi[28];
-extern real_T deltaU;
-
-
-/* 电池单体电压最大; */
-/* 电池单体电压(数组); */
 extern uint16_T blcn_Q_impleCp[28];
 extern uint16_T blcv_Q_reqCpEi[28];
 
@@ -42,13 +30,24 @@ extern uint32_T blcv_Q_totalCpEo[28];
 
 /* 累计均衡容量 写入量(数组); */
 extern boolean_T blcv_flg_excute[28];
+extern uint8_T cand_Nr_cellNr;
+extern uint16_T cand_Q_cellCap;
+extern uint16_T cand_V_chrgStartStat;
 
 /* 均衡执行请求标志位 (数组) */
-extern uint16_T deltaSoc[28];
+extern real_T deltaU;
 extern int16_T ihd_I_curr;
 
 /* 电池包电流; */
+extern uint16_T ihd_L_urtRecv;
+
+/* urt返回信号长度 */
+extern uint16_T ihd_P_gas;
+
+/* 气体浓度 */
 extern int16_T ihd_T_bdtemp;
+
+/* 板子温度 */
 extern int16_T ihd_T_modTMax;
 
 /* 模组温度最大 */
@@ -64,13 +63,13 @@ extern uint16_T ihd_V_cellUMax;
 extern uint16_T ihd_V_cellUMin;
 
 /* 电池单体电压最小; */
-extern uint8_T ihd_st_fault;
+extern boolean_T ihd_flg_currFlt;
 
-/* 故障等级 */
+/* 电流传感器故障 */
 extern uint8_T ihd_st_workStat;
 
 /* 电池工作状态; */
-extern uint32_T ihd_tm_parkTime;
+extern uint16_T ihd_tm_parkTime;
 
 /* 驻车时间; */
 extern int16_T ihv_T_modT[6];
@@ -81,10 +80,27 @@ extern uint16_T ihv_V_cellU[28];
 /* 电池单体电压(数组); */
 extern real_T k1;
 extern real_T k2;
-
-/* 电池单体电压最小; */
-extern uint16_T minChrg[28];
-extern uint16_T minDischrg[28];
+extern int16_T sfmd_I_curr;
+extern uint8_T sfmd_N_fltLevel;
+extern int16_T sfmd_T_modTMax;
+extern int16_T sfmd_T_modTMin;
+extern uint16_T sfmd_V_cellUAvrg;
+extern uint16_T sfmd_V_cellUMax;
+extern uint16_T sfmd_V_cellUMin;
+extern boolean_T ihd_flg_chrgMosClosFlt;
+
+/* 充电电Mos失效 */
+extern boolean_T sfmd_flg_currFlt;
+extern boolean_T ihd_flg_dischrgMosClosFlt;
+
+/* 放电Mos失效 */
+extern boolean_T sfmd_flg_volFlt;
+extern uint16_T sfmd_idx_fltCode;
+extern uint16_T sfmd_num_fltNum;
+extern uint8_T sfmd_st_fltAct;
+extern int16_T sfmv_T_modT[6];
+extern uint16_T sfmv_V_cellU[28];
+extern boolean_T sfmv_flg_TFlt;
 extern boolean_T socd_flg_EEsave;
 extern uint16_T socd_pct_ahSoc;
 
@@ -132,6 +148,8 @@ extern uint16_T sohd_tm_chrgStartStatEo;
 
 /* 充电前静置时间写入量; */
 extern uint16_T sohv_Q_cellCap[28];
+extern uint16_T sohv_Q_cellCapArrEi[28];
+extern uint16_T sohv_Q_cellCapArrEo[28];
 extern uint16_T sohv_Q_packCapArrEi[10];
 
 /* 10次整包容量(数组)读取量; */

+ 2 - 2
inc/BCU_private.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.19
+ * Model version                  : 1.33
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
+ * C/C++ source code generated on : Thu Sep  9 18:19:09 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 2 - 2
inc/BCU_types.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.19
+ * Model version                  : 1.33
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
+ * C/C++ source code generated on : Thu Sep  9 18:19:09 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 23 - 26
inc/BLC.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.42
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:55:26 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -36,6 +36,7 @@ typedef struct {
   uint16_T blcv_Q_reqCpEE_Merge[28];   /* '<S2>/blcv_Q_reqCpEE_Merge' */
   boolean_T blcn_flg_stop[28];         /* '<S7>/Chart' */
   boolean_T blcn_flg_pause[28];        /* '<S4>/Chart' */
+  boolean_T in;                        /* '<S12>/in' */
 } B_BLC_c_T;
 
 #endif                                 /*BLC_MDLREF_HIDE_CHILD_*/
@@ -45,9 +46,10 @@ typedef struct {
 
 typedef struct {
   uint32_T blcCap[28];                 /* '<S5>/Chart' */
-  uint16_T UnitDelay_DSTATE[28];       /* '<S1>/Unit Delay' */
+  uint16_T reqCp_reset_DSTATE[28];     /* '<S1>/reqCp_reset' */
   uint16_T QL;                         /* '<S6>/Chart1' */
-  boolean_T UnitDelay1_DSTATE;         /* '<S1>/Unit Delay1' */
+  boolean_T UnitDelay1_DSTATE;         /* '<S11>/Unit Delay1' */
+  boolean_T UnitDelay1_DSTATE_a;       /* '<S1>/Unit Delay1' */
   uint8_T i_close;                     /* '<S4>/Chart' */
   uint8_T i_open;                      /* '<S4>/Chart' */
   boolean_T FristFlg;                  /* '<S6>/Chart1' */
@@ -95,13 +97,6 @@ extern DW_BLC_f_T BLC_DW;
 
 #endif                                 /*BLC_MDLREF_HIDE_CHILD_*/
 
-/*-
- * These blocks were eliminated from the model due to optimizations:
- *
- * Block '<S5>/Display' : Unused code path elimination
- * Block '<S5>/Scope' : Unused code path elimination
- */
-
 /*-
  * The generated code includes comments that allow you to trace directly
  * back to the appropriate location in the model.  The basic format
@@ -117,21 +112,23 @@ extern DW_BLC_f_T BLC_DW;
  * Here is the system hierarchy for this model
  *
  * '<Root>' : 'BLC'
- * '<S1>'   : 'BLC/Subsystem'
- * '<S2>'   : 'BLC/Subsystem/EE'
- * '<S3>'   : 'BLC/Subsystem/Enalbe'
- * '<S4>'   : 'BLC/Subsystem/pause'
- * '<S5>'   : 'BLC/Subsystem/record'
- * '<S6>'   : 'BLC/Subsystem/reqCpNow_Count'
- * '<S7>'   : 'BLC/Subsystem/stop'
- * '<S8>'   : 'BLC/Subsystem/EE/If Action Subsystem'
- * '<S9>'   : 'BLC/Subsystem/EE/If Action Subsystem1'
- * '<S10>'  : 'BLC/Subsystem/EE/Subsystem'
- * '<S11>'  : 'BLC/Subsystem/pause/Chart'
- * '<S12>'  : 'BLC/Subsystem/record/Chart'
- * '<S13>'  : 'BLC/Subsystem/reqCpNow_Count/Chart'
- * '<S14>'  : 'BLC/Subsystem/reqCpNow_Count/Chart1'
- * '<S15>'  : 'BLC/Subsystem/stop/Chart'
+ * '<S1>'   : 'BLC/BLC'
+ * '<S2>'   : 'BLC/BLC/EE'
+ * '<S3>'   : 'BLC/BLC/Enalbe'
+ * '<S4>'   : 'BLC/BLC/pause'
+ * '<S5>'   : 'BLC/BLC/record'
+ * '<S6>'   : 'BLC/BLC/reqCpNow_Count'
+ * '<S7>'   : 'BLC/BLC/stop'
+ * '<S8>'   : 'BLC/BLC/EE/If Action Subsystem'
+ * '<S9>'   : 'BLC/BLC/EE/If Action Subsystem1'
+ * '<S10>'  : 'BLC/BLC/EE/Subsystem'
+ * '<S11>'  : 'BLC/BLC/Enalbe/Frist Keep'
+ * '<S12>'  : 'BLC/BLC/Enalbe/Frist Keep/Subsystem3'
+ * '<S13>'  : 'BLC/BLC/pause/Chart'
+ * '<S14>'  : 'BLC/BLC/record/Chart'
+ * '<S15>'  : 'BLC/BLC/reqCpNow_Count/Chart'
+ * '<S16>'  : 'BLC/BLC/reqCpNow_Count/Chart1'
+ * '<S17>'  : 'BLC/BLC/stop/Chart'
  */
 #endif                                 /* RTW_HEADER_BLC_h_ */
 

+ 2 - 2
inc/BLC_private.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.42
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:55:26 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 2 - 2
inc/BLC_types.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.42
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:55:26 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 287 - 0
inc/SFM.h

@@ -0,0 +1,287 @@
+/*
+ * File: SFM.h
+ *
+ * Code generated for Simulink model 'SFM'.
+ *
+ * Model version                  : 1.88
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Fri Sep 10 17:41:38 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#ifndef RTW_HEADER_SFM_h_
+#define RTW_HEADER_SFM_h_
+#ifndef SFM_COMMON_INCLUDES_
+#define SFM_COMMON_INCLUDES_
+#include "rtwtypes.h"
+#endif                                 /* SFM_COMMON_INCLUDES_ */
+
+#include "SFM_types.h"
+
+/* Includes for objects with custom storage classes. */
+#include "BCUCal.h"
+#include "BCUDisp.h"
+
+/* Block states (default storage) for system '<S27>/Subsytem' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint8_T delay_DSTATE;                /* '<S31>/delay' */
+} DW_Subsytem_SFM_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block states (default storage) for system '<S27>/Subsytem1' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint8_T delay_DSTATE;                /* '<S32>/delay' */
+} DW_Subsytem1_SFM_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block states (default storage) for system '<S28>/Subsytem' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint8_T delay_DSTATE;                /* '<S41>/delay' */
+} DW_Subsytem_SFM_d_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block states (default storage) for system '<S28>/Subsytem1' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint8_T delay_DSTATE;                /* '<S42>/delay' */
+} DW_Subsytem1_SFM_k_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block states (default storage) for system '<S28>/Subsytem6' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint8_T delay_DSTATE;                /* '<S47>/delay' */
+} DW_Subsytem6_SFM_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block states (default storage) for system '<S28>/Subsytem7' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint8_T delay_DSTATE;                /* '<S48>/delay' */
+} DW_Subsytem7_SFM_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block signals for model 'SFM' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint16_T CellU[28];                  /* '<S13>/Chart' */
+  uint16_T MinU;                       /* '<S13>/Chart' */
+  uint16_T MaxU;                       /* '<S13>/Chart' */
+  boolean_T ErrFlg[28];                /* '<S13>/Chart' */
+  boolean_T GNDFlg;                    /* '<S13>/Chart' */
+} B_SFM_c_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/* Block states (default storage) for model 'SFM' */
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  uint16_T Time_Delay_DSTATE;          /* '<S23>/Time_Delay' */
+  uint16_T Cntl;                       /* '<S3>/FltCodeArry' */
+  uint16_T CellUArry[84];              /* '<S13>/Chart' */
+  uint8_T delay_DSTATE;                /* '<S30>/delay' */
+  uint8_T delay_DSTATE_j;              /* '<S29>/delay' */
+  uint8_T ChgNr[28];                   /* '<S13>/Chart' */
+  uint8_T RecNr[28];                   /* '<S13>/Chart' */
+  uint8_T UdelNr[28];                  /* '<S13>/Chart' */
+  boolean_T FirstFlg;                  /* '<S13>/Chart' */
+  boolean_T ErrUFlg[28];               /* '<S13>/Chart' */
+  DW_Subsytem7_SFM_T Subsytem9;        /* '<S28>/Subsytem9' */
+  DW_Subsytem6_SFM_T Subsytem8;        /* '<S28>/Subsytem8' */
+  DW_Subsytem7_SFM_T Subsytem7;        /* '<S28>/Subsytem7' */
+  DW_Subsytem6_SFM_T Subsytem6;        /* '<S28>/Subsytem6' */
+  DW_Subsytem_SFM_d_T Subsytem5_l;     /* '<S28>/Subsytem5' */
+  DW_Subsytem_SFM_d_T Subsytem4_p;     /* '<S28>/Subsytem4' */
+  DW_Subsytem1_SFM_k_T Subsytem3_b;    /* '<S28>/Subsytem3' */
+  DW_Subsytem_SFM_d_T Subsytem2_p;     /* '<S28>/Subsytem2' */
+  DW_Subsytem1_SFM_k_T Subsytem1_n;    /* '<S28>/Subsytem1' */
+  DW_Subsytem_SFM_d_T Subsytem_j0;     /* '<S28>/Subsytem' */
+  DW_Subsytem_SFM_T Subsytem5;         /* '<S27>/Subsytem5' */
+  DW_Subsytem_SFM_T Subsytem4;         /* '<S27>/Subsytem4' */
+  DW_Subsytem1_SFM_T Subsytem3;        /* '<S27>/Subsytem3' */
+  DW_Subsytem_SFM_T Subsytem2;         /* '<S27>/Subsytem2' */
+  DW_Subsytem1_SFM_T Subsytem1_e;      /* '<S27>/Subsytem1' */
+  DW_Subsytem_SFM_T Subsytem_j;        /* '<S27>/Subsytem' */
+} DW_SFM_f_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+/* Real-time Model Data Structure */
+struct tag_RTM_SFM_T {
+  const char_T **errorStatus;
+};
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  RT_MODEL_SFM_T rtm;
+} MdlrefDW_SFM_T;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+extern void SFM_Init(void);
+extern void SFM(void);
+
+/* Model reference registration function */
+extern void SFM_initialize(const char_T **rt_errorStatus);
+
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+extern void SFM_Subsytem_Init(DW_Subsytem_SFM_T *localDW);
+extern boolean_T SFM_Subsytem(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  int16_T rtu_inputs, int16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem_SFM_T
+  *localDW);
+extern void SFM_Subsytem1_Init(DW_Subsytem1_SFM_T *localDW);
+extern boolean_T SFM_Subsytem1(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  int16_T rtu_InputS, int16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem1_SFM_T *localDW);
+extern boolean_T SFM_Subsystem5(boolean_T rtu_In1, boolean_T rtu_In2);
+extern void SFM_Subsytem_b_Init(DW_Subsytem_SFM_d_T *localDW);
+extern boolean_T SFM_Subsytem_j(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint16_T rtu_inputs, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem_SFM_d_T *localDW);
+extern void SFM_Subsytem1_f_Init(DW_Subsytem1_SFM_k_T *localDW);
+extern boolean_T SFM_Subsytem1_n(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint16_T rtu_InputS, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem1_SFM_k_T *localDW);
+extern void SFM_Subsytem6_Init(DW_Subsytem6_SFM_T *localDW);
+extern boolean_T SFM_Subsytem6(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint32_T rtu_inputs, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem6_SFM_T *localDW);
+extern void SFM_Subsytem7_Init(DW_Subsytem7_SFM_T *localDW);
+extern boolean_T SFM_Subsytem7(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint32_T rtu_InputS, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem7_SFM_T *localDW);
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+extern MdlrefDW_SFM_T SFM_MdlrefDW;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SFM_MDLREF_HIDE_CHILD_
+
+/* Block signals (default storage) */
+extern B_SFM_c_T SFM_B;
+
+/* Block states (default storage) */
+extern DW_SFM_f_T SFM_DW;
+
+#endif                                 /*SFM_MDLREF_HIDE_CHILD_*/
+
+/*-
+ * These blocks were eliminated from the model due to optimizations:
+ *
+ * Block '<S3>/Bitwise Operator' : Unused code path elimination
+ * Block '<S3>/Constant82' : Unused code path elimination
+ * Block '<S3>/Constant83' : Unused code path elimination
+ * Block '<S3>/Display' : Unused code path elimination
+ * Block '<S3>/Display1' : Unused code path elimination
+ * Block '<S3>/Display3' : Unused code path elimination
+ * Block '<S3>/Display7' : Unused code path elimination
+ * Block '<S17>/Signal Conversion' : Unused code path elimination
+ * Block '<S28>/Display' : Unused code path elimination
+ * Block '<S28>/Display1' : Unused code path elimination
+ * Block '<S28>/Display2' : Unused code path elimination
+ */
+
+/*-
+ * The generated code includes comments that allow you to trace directly
+ * back to the appropriate location in the model.  The basic format
+ * is <system>/block_name, where system is the system number (uniquely
+ * assigned by Simulink) and block_name is the name of the block.
+ *
+ * Use the MATLAB hilite_system command to trace the generated code back
+ * to the model.  For example,
+ *
+ * hilite_system('<S3>')    - opens system 3
+ * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
+ *
+ * Here is the system hierarchy for this model
+ *
+ * '<Root>' : 'SFM'
+ * '<S1>'   : 'SFM/SFM'
+ * '<S2>'   : 'SFM/SFM/Fault Data'
+ * '<S3>'   : 'SFM/SFM/Fault report'
+ * '<S4>'   : 'SFM/SFM/diagnosis'
+ * '<S5>'   : 'SFM/SFM/Fault report/FltCodeArry'
+ * '<S6>'   : 'SFM/SFM/diagnosis/ thermal runaway diagnosis'
+ * '<S7>'   : 'SFM/SFM/diagnosis/Acquisition signal diagnosis'
+ * '<S8>'   : 'SFM/SFM/diagnosis/Algt diagnosis'
+ * '<S9>'   : 'SFM/SFM/diagnosis/Communication diagnosis'
+ * '<S10>'  : 'SFM/SFM/diagnosis/Relay diagnosis'
+ * '<S11>'  : 'SFM/SFM/diagnosis/Threshold diagnosis'
+ * '<S12>'  : 'SFM/SFM/diagnosis/high voltage diagnosis'
+ * '<S13>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/BattU'
+ * '<S14>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/I'
+ * '<S15>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/Subsystem'
+ * '<S16>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/else'
+ * '<S17>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/gas'
+ * '<S18>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/BattU/Chart'
+ * '<S19>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/Subsystem/ModMax1'
+ * '<S20>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/Subsystem/ModMin1'
+ * '<S21>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/Subsystem/ModMax1/ArrMin'
+ * '<S22>'  : 'SFM/SFM/diagnosis/Acquisition signal diagnosis/Subsystem/ModMin1/ArrMin'
+ * '<S23>'  : 'SFM/SFM/diagnosis/Communication diagnosis/keep juged'
+ * '<S24>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ current Threshold diagnosis'
+ * '<S25>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ else Threshold diagnosis'
+ * '<S26>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ gas Threshold diagnosis'
+ * '<S27>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis'
+ * '<S28>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis'
+ * '<S29>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ current Threshold diagnosis/Subsytem'
+ * '<S30>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ current Threshold diagnosis/Subsytem1'
+ * '<S31>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis/Subsytem'
+ * '<S32>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis/Subsytem1'
+ * '<S33>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis/Subsytem2'
+ * '<S34>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis/Subsytem3'
+ * '<S35>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis/Subsytem4'
+ * '<S36>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/ temperature Threshold diagnosis/Subsytem5'
+ * '<S37>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsystem5'
+ * '<S38>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsystem6'
+ * '<S39>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsystem7'
+ * '<S40>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsystem8'
+ * '<S41>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem'
+ * '<S42>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem1'
+ * '<S43>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem2'
+ * '<S44>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem3'
+ * '<S45>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem4'
+ * '<S46>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem5'
+ * '<S47>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem6'
+ * '<S48>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem7'
+ * '<S49>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem8'
+ * '<S50>'  : 'SFM/SFM/diagnosis/Threshold diagnosis/voltage Threshold diagnosis/Subsytem9'
+ */
+#endif                                 /* RTW_HEADER_SFM_h_ */
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 89 - 0
inc/SFM_private.h

@@ -0,0 +1,89 @@
+/*
+ * File: SFM_private.h
+ *
+ * Code generated for Simulink model 'SFM'.
+ *
+ * Model version                  : 1.73
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 18:18:17 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#ifndef RTW_HEADER_SFM_private_h_
+#define RTW_HEADER_SFM_private_h_
+#include "rtwtypes.h"
+#ifndef UCHAR_MAX
+#include <limits.h>
+#endif
+
+#if ( UCHAR_MAX != (0xFFU) ) || ( SCHAR_MAX != (0x7F) )
+#error Code was generated for compiler with different sized uchar/char. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+#if ( USHRT_MAX != (0xFFFFU) ) || ( SHRT_MAX != (0x7FFF) )
+#error Code was generated for compiler with different sized ushort/short. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+#if ( UINT_MAX != (0xFFFFFFFFU) ) || ( INT_MAX != (0x7FFFFFFF) )
+#error Code was generated for compiler with different sized uint/int. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+#if ( ULONG_MAX != (0xFFFFFFFFU) ) || ( LONG_MAX != (0x7FFFFFFF) )
+#error Code was generated for compiler with different sized ulong/long. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+/* Macros for accessing real-time model data structure */
+#ifndef rtmGetErrorStatus
+#define rtmGetErrorStatus(rtm)         (*((rtm)->errorStatus))
+#endif
+
+#ifndef rtmSetErrorStatus
+#define rtmSetErrorStatus(rtm, val)    (*((rtm)->errorStatus) = (val))
+#endif
+
+#ifndef rtmGetErrorStatusPointer
+#define rtmGetErrorStatusPointer(rtm)  (rtm)->errorStatus
+#endif
+
+#ifndef rtmSetErrorStatusPointer
+#define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val))
+#endif
+#endif                                 /* RTW_HEADER_SFM_private_h_ */
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 30 - 0
inc/SFM_types.h

@@ -0,0 +1,30 @@
+/*
+ * File: SFM_types.h
+ *
+ * Code generated for Simulink model 'SFM'.
+ *
+ * Model version                  : 1.73
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 18:18:17 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#ifndef RTW_HEADER_SFM_types_h_
+#define RTW_HEADER_SFM_types_h_
+
+/* Model Code Variants */
+
+/* Forward declaration for rtModel */
+typedef struct tag_RTM_SFM_T RT_MODEL_SFM_T;
+
+#endif                                 /* RTW_HEADER_SFM_types_h_ */
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 38 - 34
inc/SOC.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.41
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Sep  2 15:51:15 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -32,11 +32,13 @@
 #ifndef SOC_MDLREF_HIDE_CHILD_
 
 typedef struct {
-  uint16_T in;                         /* '<S54>/in' */
-  uint16_T in_c;                       /* '<S50>/in' */
+  uint16_T in;                         /* '<S55>/in' */
   uint16_T Switch;                     /* '<S5>/Switch' */
   uint16_T Divide;                     /* '<S5>/Divide' */
   uint16_T socn_pct_bcuSocEE_Merge;    /* '<S2>/socn_pct_bcuSocEE_Merge' */
+  int16_T in_f;                        /* '<S54>/in' */
+  int16_T in_d;                        /* '<S60>/in' */
+  int16_T in_c;                        /* '<S56>/in' */
 } B_SOC_c_T;
 
 #endif                                 /*SOC_MDLREF_HIDE_CHILD_*/
@@ -53,31 +55,32 @@ typedef struct {
   real_T Up_Delay_DSTATE_h;            /* '<S12>/Up_Delay' */
   real_T Divide_DWORK4;                /* '<S17>/Divide' */
   real_T Divide_DWORK4_h;              /* '<S26>/Divide' */
-  int32_T curr_integral_Delay_DSTATE;  /* '<S4>/curr_integral_Delay  ' */
+  int32_T _DSTATE;                     /* '<S4>/  ' */
   uint16_T Time_Delay_DSTATE;          /* '<S35>/Time_Delay' */
-  uint16_T Time_Delay_DSTATE_f;        /* '<S55>/Time_Delay' */
-  uint16_T Time_Delay_DSTATE_n;        /* '<S52>/Time_Delay' */
-  uint16_T Time_Delay_DSTATE_h;        /* '<S53>/Time_Delay' */
+  uint16_T Time_Delay_DSTATE_e;        /* '<S61>/Time_Delay' */
+  uint16_T Time_Delay_DSTATE_g;        /* '<S59>/Time_Delay' */
+  uint16_T Time_Delay_DSTATE_f;        /* '<S58>/Time_Delay' */
   uint16_T UnitDelay7_DSTATE;          /* '<S6>/Unit Delay7' */
   uint16_T socd_pct_battSoc0_Delay_DSTATE;/* '<S6>/socd_pct_battSoc0_Delay' */
   uint16_T socd_pct_bcusocDelay_DSTATE;/* '<S6>/socd_pct_bcusocDelay' */
   uint16_T socd_pct_bcuSoc0_Delay_DSTATE;/* '<S6>/socd_pct_bcuSoc0_Delay' */
   uint16_T socd_flg_EEsave_Delay_DSTATE;/* '<S32>/socd_flg_EEsave_Delay' */
-  uint16_T socn_pct_estsoc_Delay_DSTATE;/* '<S51>/socn_pct_estsoc_Delay' */
+  uint16_T socn_pct_estsoc_Delay_DSTATE;/* '<S57>/socn_pct_estsoc_Delay' */
   uint16_T socfit_Delay_DSTATE;        /* '<S42>/socfit_Delay' */
   uint16_T socfit_Delay_DSTATE_n;      /* '<S37>/socfit_Delay' */
-  uint8_T Time_Delay_DSTATE_c;         /* '<S47>/Time_Delay' */
   uint8_T ihd_st_chrgSta_Delay_DSTATE; /* '<S6>/ihd_st_chrgSta_Delay' */
+  uint8_T Time_reset_DSTATE;           /* '<S49>/Time_reset' */
   boolean_T FirstDelay_DSTATE;         /* '<S1>/FirstDelay' */
   boolean_T Frist_DSTATE;              /* '<S14>/Frist' */
   boolean_T Frist_DSTATE_h;            /* '<S23>/Frist' */
   boolean_T First_Delay_DSTATE;        /* '<S6>/First_Delay' */
   boolean_T First_Delay1_DSTATE;       /* '<S6>/First_Delay1' */
-  boolean_T lowFLg_Delay_DSTATE;       /* '<S49>/lowFLg_Delay' */
-  boolean_T overFlg_Delay_DSTATE;      /* '<S48>/overFlg_Delay' */
-  boolean_T fulFLg_Delay_DSTATE;       /* '<S48>/fulFLg_Delay' */
+  boolean_T UnitDelay1_DSTATE;         /* '<S52>/Unit Delay1' */
+  boolean_T UnitDelay1_DSTATE_p;       /* '<S53>/Unit Delay1' */
+  boolean_T lowFLg_Delay_DSTATE;       /* '<S51>/lowFLg_Delay' */
+  boolean_T overFlg_reset_DSTATE;      /* '<S50>/overFlg_reset' */
+  boolean_T fulFLg_reset_DSTATE;       /* '<S50>/fulFLg_reset' */
   int8_T If_ActiveSubsystem;           /* '<S7>/If' */
-  int8_T If_ActiveSubsystem_p;         /* '<S6>/If' */
 } DW_SOC_f_T;
 
 #endif                                 /*SOC_MDLREF_HIDE_CHILD_*/
@@ -86,8 +89,8 @@ typedef struct {
 #ifndef SOC_MDLREF_HIDE_CHILD_
 
 typedef struct {
-  ZCSigState Subsystem2_Trig_ZCE;      /* '<S49>/Subsystem2' */
-  ZCSigState Subsystem2_Trig_ZCE_k;    /* '<S48>/Subsystem2' */
+  ZCSigState Subsystem2_Trig_ZCE;      /* '<S51>/Subsystem2' */
+  ZCSigState Subsystem2_Trig_ZCE_k;    /* '<S50>/Subsystem2' */
 } ZCE_SOC_T;
 
 #endif                                 /*SOC_MDLREF_HIDE_CHILD_*/
@@ -151,16 +154,11 @@ extern ZCE_SOC_T SOC_PrevZCX;
  * Block '<S12>/Scope' : Unused code path elimination
  * Block '<S12>/Signal Conversion' : Unused code path elimination
  * Block '<S29>/Display' : Unused code path elimination
- * Block '<S4>/Scope' : Unused code path elimination
- * Block '<S6>/Scope' : Unused code path elimination
  * Block '<S6>/Scope1' : Unused code path elimination
- * Block '<S6>/Scope2' : Unused code path elimination
- * Block '<S33>/Scope' : Unused code path elimination
- * Block '<S33>/Scope1' : Unused code path elimination
  * Block '<S33>/Scope2' : Unused code path elimination
- * Block '<S33>/Scope3' : Unused code path elimination
  * Block '<S12>/Signal Conversion1' : Eliminate redundant signal conversion block
  * Block '<S37>/Signal Conversion' : Eliminate redundant signal conversion block
+ * Block '<S49>/Saturation1' : Eliminated Saturate block
  */
 
 /*-
@@ -212,8 +210,8 @@ extern ZCE_SOC_T SOC_PrevZCX;
  * '<S32>'  : 'SOC/SOC/bcuSoc/Subsystem1'
  * '<S33>'  : 'SOC/SOC/bcuSoc/Subsystem2'
  * '<S34>'  : 'SOC/SOC/bcuSoc/Subsystem3'
- * '<S35>'  : 'SOC/SOC/bcuSoc/keep2'
- * '<S36>'  : 'SOC/SOC/bcuSoc/Subsystem2/LookUP'
+ * '<S35>'  : 'SOC/SOC/bcuSoc/keep juged1'
+ * '<S36>'  : 'SOC/SOC/bcuSoc/Subsystem2/LookUP1'
  * '<S37>'  : 'SOC/SOC/bcuSoc/Subsystem2/SOCfit'
  * '<S38>'  : 'SOC/SOC/bcuSoc/Subsystem2/SOCfit/If Action Subsystem'
  * '<S39>'  : 'SOC/SOC/bcuSoc/Subsystem2/SOCfit/If Action Subsystem1'
@@ -223,16 +221,22 @@ extern ZCE_SOC_T SOC_PrevZCX;
  * '<S43>'  : 'SOC/SOC/bcuSoc/Subsystem3/SOCfit1/If Action Subsystem'
  * '<S44>'  : 'SOC/SOC/bcuSoc/Subsystem3/SOCfit1/If Action Subsystem1'
  * '<S45>'  : 'SOC/SOC/bcuSoc/Subsystem3/SOCfit1/If Action Subsystem2'
- * '<S46>'  : 'SOC/SOC/estSOC/If Action Subsystem2'
- * '<S47>'  : 'SOC/SOC/estSOC/Time++'
- * '<S48>'  : 'SOC/SOC/estSOC/chrgCCV'
- * '<S49>'  : 'SOC/SOC/estSOC/disChrgCCV'
- * '<S50>'  : 'SOC/SOC/estSOC/chrgCCV/Subsystem2'
- * '<S51>'  : 'SOC/SOC/estSOC/chrgCCV/inc'
- * '<S52>'  : 'SOC/SOC/estSOC/chrgCCV/keep'
- * '<S53>'  : 'SOC/SOC/estSOC/chrgCCV/keep1'
- * '<S54>'  : 'SOC/SOC/estSOC/disChrgCCV/Subsystem2'
- * '<S55>'  : 'SOC/SOC/estSOC/disChrgCCV/keep'
+ * '<S46>'  : 'SOC/SOC/estSOC/If Action Subsystem'
+ * '<S47>'  : 'SOC/SOC/estSOC/If Action Subsystem1'
+ * '<S48>'  : 'SOC/SOC/estSOC/If Action Subsystem2'
+ * '<S49>'  : 'SOC/SOC/estSOC/Time++'
+ * '<S50>'  : 'SOC/SOC/estSOC/chrgCCV'
+ * '<S51>'  : 'SOC/SOC/estSOC/disChrgCCV'
+ * '<S52>'  : 'SOC/SOC/estSOC/If Action Subsystem/Frist Keep'
+ * '<S53>'  : 'SOC/SOC/estSOC/If Action Subsystem/Frist Keep1'
+ * '<S54>'  : 'SOC/SOC/estSOC/If Action Subsystem/Frist Keep/Subsystem3'
+ * '<S55>'  : 'SOC/SOC/estSOC/If Action Subsystem/Frist Keep1/Subsystem3'
+ * '<S56>'  : 'SOC/SOC/estSOC/chrgCCV/Subsystem2'
+ * '<S57>'  : 'SOC/SOC/estSOC/chrgCCV/inc'
+ * '<S58>'  : 'SOC/SOC/estSOC/chrgCCV/keep juged'
+ * '<S59>'  : 'SOC/SOC/estSOC/chrgCCV/keep juged1'
+ * '<S60>'  : 'SOC/SOC/estSOC/disChrgCCV/Subsystem2'
+ * '<S61>'  : 'SOC/SOC/estSOC/disChrgCCV/keep juged'
  */
 #endif                                 /* RTW_HEADER_SOC_h_ */
 

+ 2 - 2
inc/SOC_private.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.34
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 11:42:20 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 2 - 2
inc/SOC_types.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.34
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 11:42:20 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 38 - 28
inc/SOH.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOH'.
  *
- * Model version                  : 1.31
+ * Model version                  : 1.38
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Sep  2 11:40:39 2021
+ * C/C++ source code generated on : Thu Sep  9 18:12:51 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -31,11 +31,14 @@
 
 typedef struct {
   uint16_T Divide;                     /* '<S9>/Divide' */
-  uint16_T d[28];                      /* '<S13>/d' */
-  uint16_T Add2;                       /* '<S13>/Add2' */
+  uint16_T d[28];                      /* '<S14>/d' */
+  uint16_T Add2;                       /* '<S14>/Add2' */
+  uint16_T in[28];                     /* '<S18>/in' */
   uint16_T Qavrg;                      /* '<S3>/Chart' */
   uint16_T sohn_Q_packCapArrEo[10];    /* '<S3>/Chart' */
-  uint16_T Divide1;                    /* '<S11>/Divide1' */
+  uint16_T Saturation;                 /* '<S12>/Saturation' */
+  uint16_T ihv_V_CellU[28];            /* '<S10>/ihv_V_CellU' */
+  boolean_T in_g;                      /* '<S22>/in' */
 } B_SOH_c_T;
 
 #endif                                 /*SOH_MDLREF_HIDE_CHILD_*/
@@ -44,19 +47,20 @@ typedef struct {
 #ifndef SOH_MDLREF_HIDE_CHILD_
 
 typedef struct {
-  int32_T curr_icr_Delay_DSTATE;       /* '<S11>/curr_icr_Delay' */
-  uint16_T Time_Delay_DSTATE;          /* '<S10>/Time_Delay' */
+  int32_T Ahincr_reset_DSTATE;         /* '<S12>/Ahincr_reset' */
   uint16_T sohd_tm_chrgStartSta_Delay_DSTA;/* '<S6>/sohd_tm_chrgStartSta_Delay' */
-  uint16_T UnitDelay1_DSTATE;          /* '<S7>/Unit Delay1' */
-  uint16_T Time_Delay_DSTATE_k;        /* '<S9>/Time_Delay' */
+  uint16_T Time_Delay_DSTATE;          /* '<S9>/Time_Delay' */
   uint16_T sohv_V_chrgStartEo_Delay_DSTATE[28];/* '<S6>/sohv_V_chrgStartEo_Delay' */
   uint8_T UnitDelay_DSTATE;            /* '<S6>/Unit Delay' */
   uint8_T UnitDelay_DSTATE_g;          /* '<S7>/Unit Delay' */
-  boolean_T First_Delay_DSTATE;        /* '<S4>/First_Delay' */
-  boolean_T UnitDelay_DSTATE_e;        /* '<S3>/Unit Delay' */
-  boolean_T UnitDelay1_DSTATE_j;       /* '<S6>/Unit Delay1' */
+  boolean_T UnitDelay1_DSTATE;         /* '<S21>/Unit Delay1' */
+  boolean_T reset_DSTATE;              /* '<S6>/reset' */
+  boolean_T sohd_flg_chrgEndEo_reset_DSTATE;/* '<S7>/sohd_flg_chrgEndEo_reset' */
+  boolean_T UnitDelay1_DSTATE_g;       /* '<S15>/Unit Delay1' */
+  boolean_T reset_DSTATE_b;            /* '<S11>/reset' */
   boolean_T Fflg;                      /* '<S3>/Chart' */
   boolean_T ResettableSubsystem_MODE;  /* '<S8>/Resettable Subsystem' */
+  boolean_T EnabledSubsystem_MODE;     /* '<S7>/Enabled Subsystem' */
   boolean_T ResettableSubsystem_MODE_i;/* '<S6>/Resettable Subsystem' */
 } DW_SOH_f_T;
 
@@ -88,9 +92,8 @@ extern void SOH_initialize(const char_T **rt_errorStatus);
 
 #ifndef SOH_MDLREF_HIDE_CHILD_
 
-extern void SOH_ArrMin_Init(uint16_T *rty_minCap);
-extern void SOH_ArrMin(const uint16_T rtu_sohn_Q_cellCap[28], uint8_T rtu_N,
-  uint16_T *rty_minCap);
+extern void SOH_Min_Init(uint16_T *rty_Min);
+extern uint16_T SOH_Min(const uint16_T rtu_Arry[28]);
 
 #endif                                 /*SOH_MDLREF_HIDE_CHILD_*/
 
@@ -113,8 +116,6 @@ extern DW_SOH_f_T SOH_DW;
 /*-
  * These blocks were eliminated from the model due to optimizations:
  *
- * Block '<S7>/Scope' : Unused code path elimination
- * Block '<S7>/Scope1' : Unused code path elimination
  * Block '<S9>/Saturation' : Eliminated Saturate block
  */
 
@@ -142,17 +143,26 @@ extern DW_SOH_f_T SOH_DW;
  * '<S7>'   : 'SOH/SOH/Chrgmation/ChrgEnd'
  * '<S8>'   : 'SOH/SOH/Chrgmation/Chrging'
  * '<S9>'   : 'SOH/SOH/Chrgmation/ChrgBe/Resettable Subsystem'
- * '<S10>'  : 'SOH/SOH/Chrgmation/ChrgBe/keep2'
- * '<S11>'  : 'SOH/SOH/Chrgmation/Chrging/Resettable Subsystem'
- * '<S12>'  : 'SOH/SOH/Conut/Chart'
- * '<S13>'  : 'SOH/SOH/Conut/Subsystem'
- * '<S14>'  : 'SOH/SOH/Conut/Subsystem/Subsystem'
- * '<S15>'  : 'SOH/SOH/Conut/Subsystem/Subsystem1'
- * '<S16>'  : 'SOH/SOH/Conut/Subsystem/Subsystem/ArrMin'
- * '<S17>'  : 'SOH/SOH/Conut/Subsystem/Subsystem1/ArrMin'
- * '<S18>'  : 'SOH/SOH/EEDeal/EECkeck'
- * '<S19>'  : 'SOH/SOH/EEDeal/FalseAction'
- * '<S20>'  : 'SOH/SOH/EEDeal/TureAction'
+ * '<S10>'  : 'SOH/SOH/Chrgmation/ChrgBe/Resettable Subsystem1'
+ * '<S11>'  : 'SOH/SOH/Chrgmation/ChrgEnd/Enabled Subsystem'
+ * '<S12>'  : 'SOH/SOH/Chrgmation/Chrging/Resettable Subsystem'
+ * '<S13>'  : 'SOH/SOH/Conut/Chart'
+ * '<S14>'  : 'SOH/SOH/Conut/Subsystem'
+ * '<S15>'  : 'SOH/SOH/Conut/Subsystem/Frist Keep'
+ * '<S16>'  : 'SOH/SOH/Conut/Subsystem/Min'
+ * '<S17>'  : 'SOH/SOH/Conut/Subsystem/Min1'
+ * '<S18>'  : 'SOH/SOH/Conut/Subsystem/Frist Keep/Subsystem3'
+ * '<S19>'  : 'SOH/SOH/Conut/Subsystem/Min/ArrMin'
+ * '<S20>'  : 'SOH/SOH/Conut/Subsystem/Min1/ArrMin'
+ * '<S21>'  : 'SOH/SOH/CountEn/Frist Keep'
+ * '<S22>'  : 'SOH/SOH/CountEn/Frist Keep/Subsystem3'
+ * '<S23>'  : 'SOH/SOH/EEDeal/EECkeck'
+ * '<S24>'  : 'SOH/SOH/EEDeal/FalseAction'
+ * '<S25>'  : 'SOH/SOH/EEDeal/TureAction'
+ * '<S26>'  : 'SOH/SOH/EEDeal/EECkeck/Max'
+ * '<S27>'  : 'SOH/SOH/EEDeal/EECkeck/Min1'
+ * '<S28>'  : 'SOH/SOH/EEDeal/EECkeck/Max/ArrMin'
+ * '<S29>'  : 'SOH/SOH/EEDeal/EECkeck/Min1/ArrMin'
  */
 #endif                                 /* RTW_HEADER_SOH_h_ */
 

+ 2 - 2
inc/SOH_private.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOH'.
  *
- * Model version                  : 1.23
+ * Model version                  : 1.38
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 11:42:33 2021
+ * C/C++ source code generated on : Thu Sep  9 18:12:51 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 2 - 2
inc/SOH_types.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOH'.
  *
- * Model version                  : 1.23
+ * Model version                  : 1.38
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 11:42:33 2021
+ * C/C++ source code generated on : Thu Sep  9 18:12:51 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)

+ 97 - 0
inc/SPM.h

@@ -0,0 +1,97 @@
+/*
+ * File: SPM.h
+ *
+ * Code generated for Simulink model 'SPM'.
+ *
+ * Model version                  : 1.31
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 18:13:23 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#ifndef RTW_HEADER_SPM_h_
+#define RTW_HEADER_SPM_h_
+#ifndef SPM_COMMON_INCLUDES_
+#define SPM_COMMON_INCLUDES_
+#include "rtwtypes.h"
+#include "zero_crossing_types.h"
+#endif                                 /* SPM_COMMON_INCLUDES_ */
+
+#include "SPM_types.h"
+
+/* Child system includes */
+#ifndef SPM_MDLREF_HIDE_CHILD_
+#define SOH_MDLREF_HIDE_CHILD_
+#include "SOH.h"
+#endif                                 /*SPM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SPM_MDLREF_HIDE_CHILD_
+#define BLC_MDLREF_HIDE_CHILD_
+#include "BLC.h"
+#endif                                 /*SPM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SPM_MDLREF_HIDE_CHILD_
+#define SOC_MDLREF_HIDE_CHILD_
+#include "SOC.h"
+#endif                                 /*SPM_MDLREF_HIDE_CHILD_*/
+
+/* Includes for objects with custom storage classes. */
+#include "BCUCal.h"
+#include "BCUDisp.h"
+#ifndef SPM_MDLREF_HIDE_CHILD_
+
+/* Real-time Model Data Structure */
+struct tag_RTM_SPM_T {
+  const char_T **errorStatus;
+};
+
+#endif                                 /*SPM_MDLREF_HIDE_CHILD_*/
+
+#ifndef SPM_MDLREF_HIDE_CHILD_
+
+typedef struct {
+  RT_MODEL_SPM_T rtm;
+} MdlrefDW_SPM_T;
+
+#endif                                 /*SPM_MDLREF_HIDE_CHILD_*/
+
+extern void SPM_Init(void);
+extern void SPM_Disable(void);
+extern void SPM(void);
+
+/* Model reference registration function */
+extern void SPM_initialize(const char_T **rt_errorStatus);
+
+#ifndef SPM_MDLREF_HIDE_CHILD_
+
+extern MdlrefDW_SPM_T SPM_MdlrefDW;
+
+#endif                                 /*SPM_MDLREF_HIDE_CHILD_*/
+
+/*-
+ * The generated code includes comments that allow you to trace directly
+ * back to the appropriate location in the model.  The basic format
+ * is <system>/block_name, where system is the system number (uniquely
+ * assigned by Simulink) and block_name is the name of the block.
+ *
+ * Use the MATLAB hilite_system command to trace the generated code back
+ * to the model.  For example,
+ *
+ * hilite_system('<S3>')    - opens system 3
+ * hilite_system('<S3>/Kp') - opens and selects block Kp which resides in S3
+ *
+ * Here is the system hierarchy for this model
+ *
+ * '<Root>' : 'SPM'
+ */
+#endif                                 /* RTW_HEADER_SPM_h_ */
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 90 - 0
inc/SPM_private.h

@@ -0,0 +1,90 @@
+/*
+ * File: SPM_private.h
+ *
+ * Code generated for Simulink model 'SPM'.
+ *
+ * Model version                  : 1.31
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 18:13:23 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#ifndef RTW_HEADER_SPM_private_h_
+#define RTW_HEADER_SPM_private_h_
+#include "rtwtypes.h"
+#include "zero_crossing_types.h"
+#ifndef UCHAR_MAX
+#include <limits.h>
+#endif
+
+#if ( UCHAR_MAX != (0xFFU) ) || ( SCHAR_MAX != (0x7F) )
+#error Code was generated for compiler with different sized uchar/char. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+#if ( USHRT_MAX != (0xFFFFU) ) || ( SHRT_MAX != (0x7FFF) )
+#error Code was generated for compiler with different sized ushort/short. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+#if ( UINT_MAX != (0xFFFFFFFFU) ) || ( INT_MAX != (0x7FFFFFFF) )
+#error Code was generated for compiler with different sized uint/int. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+#if ( ULONG_MAX != (0xFFFFFFFFU) ) || ( LONG_MAX != (0x7FFFFFFF) )
+#error Code was generated for compiler with different sized ulong/long. \
+Consider adjusting Test hardware word size settings on the \
+Hardware Implementation pane to match your compiler word sizes as \
+defined in limits.h of the compiler. Alternatively, you can \
+select the Test hardware is the same as production hardware option and \
+select the Enable portable word sizes option on the Code Generation > \
+Verification pane for ERT based targets, which will disable the \
+preprocessor word size checks.
+#endif
+
+/* Macros for accessing real-time model data structure */
+#ifndef rtmGetErrorStatus
+#define rtmGetErrorStatus(rtm)         (*((rtm)->errorStatus))
+#endif
+
+#ifndef rtmSetErrorStatus
+#define rtmSetErrorStatus(rtm, val)    (*((rtm)->errorStatus) = (val))
+#endif
+
+#ifndef rtmGetErrorStatusPointer
+#define rtmGetErrorStatusPointer(rtm)  (rtm)->errorStatus
+#endif
+
+#ifndef rtmSetErrorStatusPointer
+#define rtmSetErrorStatusPointer(rtm, val) ((rtm)->errorStatus = (val))
+#endif
+#endif                                 /* RTW_HEADER_SPM_private_h_ */
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 30 - 0
inc/SPM_types.h

@@ -0,0 +1,30 @@
+/*
+ * File: SPM_types.h
+ *
+ * Code generated for Simulink model 'SPM'.
+ *
+ * Model version                  : 1.31
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 18:13:23 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#ifndef RTW_HEADER_SPM_types_h_
+#define RTW_HEADER_SPM_types_h_
+
+/* Model Code Variants */
+
+/* Forward declaration for rtModel */
+typedef struct tag_RTM_SPM_T RT_MODEL_SPM_T;
+
+#endif                                 /* RTW_HEADER_SPM_types_h_ */
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 0 - 1
inc/bsp_custom.h

@@ -6,7 +6,6 @@ extern "C" {
 #endif
 
 #include "bsp.h"
-#include "IQmathLib.h"
 #include "hal_module_adapter.h"
 #define getbit(x,y)     ((x) >> (y)&1)                        //获取x的第y位的数值
 #define setbit(x,y)     x|=(1<<y)                             //x的第y位置1

+ 2 - 2
inc/div_nde_s32_floor.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_div_nde_s32_floor_h_

+ 2 - 2
inc/div_nzp_repeat_u32.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_div_nzp_repeat_u32_h_

+ 2 - 2
inc/div_nzp_repeat_u32_ceiling.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_div_nzp_repeat_u32_ceiling_h_

+ 2 - 2
inc/div_repeat_s16s32_floor.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_div_repeat_s16s32_floor_h_

+ 2 - 2
inc/div_repeat_u32.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.41
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Sep  1 15:06:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_div_repeat_u32_h_

+ 2 - 2
inc/div_su32.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.33
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 18 14:01:45 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_div_su32_h_

+ 2 - 2
inc/div_uus32_sat.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SFM'.
  *
- * Model version                  : 1.37
+ * Model version                  : 1.71
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Tue Aug 24 16:20:45 2021
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
  */
 
 #ifndef RTW_HEADER_div_uus32_sat_h_

+ 2 - 2
inc/look1_is16lu16n16tu16_binlcase.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_look1_is16lu16n16tu16_binlcase_h_

+ 2 - 2
inc/look1_iu16lu16n16tu16_binlcase.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_look1_iu16lu16n16tu16_binlcase_h_

+ 2 - 2
inc/mul_s32_hiSR.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SFM'.
  *
- * Model version                  : 1.36
+ * Model version                  : 1.71
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Tue Aug 24 14:53:06 2021
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
  */
 
 #ifndef RTW_HEADER_mul_s32_hiSR_h_

+ 2 - 2
inc/mul_s32_loSR_sat.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_s32_loSR_sat_h_

+ 2 - 2
inc/mul_s32_sat.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_s32_sat_h_

+ 2 - 2
inc/mul_ssu32_sat.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_ssu32_sat_h_

+ 2 - 2
inc/mul_u32_hiSR.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_u32_hiSR_h_

+ 2 - 2
inc/mul_u32_hiSR_near.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.24
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Aug 12 17:54:23 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef RTW_HEADER_mul_u32_hiSR_near_h_

+ 2 - 2
inc/mul_us32_sat.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_us32_sat_h_

+ 3 - 3
inc/mul_wide_s32.h

@@ -1,11 +1,11 @@
 /*
  * File: mul_wide_s32.h
  *
- * Code generated for Simulink model 'BLC'.
+ * Code generated for Simulink model 'SFM'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.71
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
  */
 
 #ifndef RTW_HEADER_mul_wide_s32_h_

+ 2 - 2
inc/mul_wide_su32.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_wide_su32_h_

+ 2 - 2
inc/mul_wide_u32.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #ifndef RTW_HEADER_mul_wide_u32_h_

+ 10 - 0
inc/rtwtypes.h

@@ -1,3 +1,13 @@
+/*
+ * File: rtwtypes.h
+ *
+ * Code generated for Simulink model 'SFM'.
+ *
+ * Model version                  : 1.71
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
+ */
+
 #ifndef RTWTYPES_H
 #define RTWTYPES_H
 

+ 2 - 2
inc/zero_crossing_types.h

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.34
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 11:42:20 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #ifndef ZERO_CROSSING_TYPES_H

+ 4 - 4
src/AppSignal.c

@@ -77,10 +77,10 @@ UINT16  updateDifferDataPackageCounter = 0;  //差分包升级计数器
 
 
 /**declear the uint32 vars**/
-UINT32	battWarningState = 0xFFFFFFFF;  //电池告警状态
-UINT32	battProtectState = 0xFFFFFFFF;  //电池保护状态
-UINT32	nbSwVersion = 0xFFFFFFFF;       // 数据模块软件状态
-UINT32	battBalanceoInfo = 0xFFFFFFFF;  //电池均衡状态
+UINT32	battWarningState = 0;  //电池告警状态
+UINT32	battProtectState = 0;  //电池保护状态
+UINT32	nbSwVersion = 0;       // 数据模块软件状态
+UINT32	battBalanceoInfo = 0;  //电池均衡状态
 UINT32  Battdesigncap =0xFFFFFFFF;      //battery design cap 电池包设计容量
 volatile UINT32  TimeCounter = 0x00;             //主任务定时器计数
 

+ 4 - 4
src/AppTaskTcp.c

@@ -7,7 +7,7 @@
  * Version:      V3.0
  ****************************************************************************/
 #include "AppTaskTcp.h"
-
+#include "BCUDisp.h"
 //局部变量申请
 static StaticTask_t                 gProcess_Tcp_Task_t;
 static UINT8                        gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
@@ -542,12 +542,12 @@ static void TcpDataInfoAssembleSend()
             }
         }
     }
-    if(send_counter%60==0)
+    if(send_counter%1==0)
     {
         DebugMsgtoTcpType DebugMsgInfo;
         UINT16 BufferLen = 0;
-        UINT8 rbuf[100];
-		sprintf((char *)rbuf,"%02x,%02x",ErrFlg,BattWorkStateDelay);
+        UINT8 rbuf[1000];
+		sprintf((char *)rbuf,"%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",socd_pct_ekfSoc,socd_pct_ahSoc,socd_pct_battSoc,socd_pct_bcuSoc,ihd_tm_parkTime,sohd_Q_chrgEo,sohd_flg_chrgEndEo,cand_Nr_cellNr,cand_V_chrgStartStat,cand_Q_cellCap,sohd_pct_bcuSoh,sfmd_idx_fltCode,sfmd_num_fltNum);
 		BufferLen = strlen(rbuf);
         SendBuffer = malloc(BufferLen+sizeof(DebugMsgInfo));
         memcpy(SendBuffer+sizeof(DebugMsgInfo)-1, rbuf,BufferLen);

+ 1 - 1
src/AppTaskUart.c

@@ -153,7 +153,7 @@ static void UartTask(void* arg)
 					osDelay(100);
                     UartRecvFlagCounter++;
 				}
-				if(UartRecvFlagCounter>=3)
+				if(UartRecvFlagCounter>=5)
 				{
 					if(osOK==osMutexAcquire(Error_Mutex, 100))
 					{

+ 77 - 147
src/BCU.c

@@ -1,12 +1,11 @@
-
 /*
  * File: BCU.c
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.19
+ * Model version                  : 1.33
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
+ * C/C++ source code generated on : Thu Sep  9 18:19:09 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -16,23 +15,20 @@
 
 #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 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_;
 
-uint16_T Time=0;
-
 /* Model step function */
 void BCU_step(void)
-{ uint8_T i;
- 
+{
+      uint8_T i;
 	  osDelay(1000);
 	  PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
 	  while (TRUE)
@@ -41,6 +37,7 @@ void BCU_step(void)
 		{
 		  case PROCESS_STATE_INIT:
 		  { BCU_initialize();  
+		    cand_Nr_cellNr=0;
 			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;			
@@ -76,105 +73,50 @@ void BCU_step(void)
 		  {
 			while (TRUE)
 			{
-			  osDelay(1000);
+			  osDelay(100);
 			  if(gProcess_app==LISTEN)
 			  {
 				PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
 				break;
 			  }
 			  //***************
-			  ihd_I_curr = (int16_T)(-(battI - 10000)*10);
+			  ihd_I_curr = (int16_T)(-(battI - 10000));
 			  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;
+			  for(i=0;i<4;i++)
+			  {
+			   ihv_T_modT[i]= battCellTemp[i]-40;
+			  	}
+			  //memcpy(ihv_T_modT,battCellTemp,AppNVMData.BattTempCount*sizeof(uint16_T));
+			  ihd_T_modTMax = maxCellTemp-40;
+			  ihd_T_modTMin = minCellTemp-40;
+			  ihd_st_workStat  = BattWorkStateDelay;
+			  ihd_L_urtRecv=UartRecvFlag;
+			  ihd_flg_currFlt= ((battWarningState >> 1) & 0x01) == 1;   //battu low
+			  ihd_flg_chrgMosClosFlt= ((battWarningState >> 19) & 0x01) == 1;
+			  ihd_flg_dischrgMosClosFlt=((battWarningState >> 18) & 0x01) == 1;
 			 // socd_pct_battSocEi=300;
-			  ihd_T_bdtemp = 400;
 
-			  /* Constant: '<Root>/Constant' */
-			  
-			  //****************************
-			  /* ModelReference: '<Root>/SOH' incorporates:
-			  *  Inport: '<Root>/ihd_I_curr'
-			  *  Inport: '<Root>/ihd_st_workStat'
-			  *  Inport: '<Root>/ihd_tm_packTime'
-			  *  Inport: '<Root>/ihv_V_cellU'
-			  *  Inport: '<Root>/sohd_Q_chrgEi '
-			  *  Inport: '<Root>/sohd_flg_chrgEndEi '
-			  *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
-			  *  Inport: '<Root>/sohv_Q_packCapArrEi '
-			  *  Inport: '<Root>/sohv_V_chrgStartStatEi '
-			  */
-			   SOH();
+
+			  SFM();
 	
-			  /* ModelReference: '<Root>/SOC' incorporates:
-			  *  Inport: '<Root>/ihd_I_curr'
-			  *  Inport: '<Root>/ihd_V_cellUAvrg'
-			  *  Inport: '<Root>/ihd_V_cellUMax'
-			  *  Inport: '<Root>/ihd_V_cellUMin'
-			  *  Inport: '<Root>/ihd_st_workStat'
-			  *  Inport: '<Root>/ihd_tm_packTime'
-			  *  Inport: '<Root>/socd_pct_battSocEi'
-			  *  Inport: '<Root>/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: '<Root>/Constant' */
-			  /* ModelReference: '<Root>/BLC' incorporates:
-			  *  Inport: '<Root>/blcv_Q_reqCpEi'
-			  *  Inport: '<Root>/blcv_Q_totalCpEi'
-			  *  Inport: '<Root>/ihd_V_cellUMin'
-			  *  Inport: '<Root>/ihd_st_fault'
-			  *  Inport: '<Root>/ihd_tm_packTime'
-			  *  Inport: '<Root>/ihv_V_cellU'
-			  */
-			   BLC();
-			   SFM();
-              //
-              //
-             
-			 //printf("time:%d,socd_pct_battSocEi:%d,socd_pct_bcuSocEi:%d,ihd_I_curr:%d,ihd_V_cellUAvrg:%d,deltaU:%f,socd_pct_ahSoc:%d,socd_pct_ekfSoc:%d,socd_pct_battSoc:%d,socd_pct_bcuSoc:%d\n",Time++,socd_pct_battSocEi,socd_pct_bcuSocEi,ihd_I_curr,ihd_V_cellUAvrg,deltaU,socd_pct_ahSoc,socd_pct_ekfSoc,socd_pct_battSoc,socd_pct_bcuSoc);
-              
-             /* printf("time:%d,  ihd_st_workStat:%d,  ihd_I_curr:%d,  tm:%d,  sohd_Q_chrgEo:%d,sohd_flg_chrgEndEo:%d\n",Time++,ihd_st_workStat,ihd_I_curr,sohd_tm_chrgStartStatEo,sohd_Q_chrgEo,sohd_flg_chrgEndEo);
 
-             printf("sohd_Q_chrgEi:%d,  sohd_flg_chrgEndEi:%d,sohd_pct_bcuSoh:%d\n",sohd_Q_chrgEi,sohd_flg_chrgEndEi,sohd_pct_bcuSoh);
-			 for(i=0;i<17;i++)
-			  {
-			  printf("_cell%d_%d   ",i,battCellU[i]);
-			 }
-			 printf("\n");
-			 for(i=0;i<17;i++)
-			  {
-			  printf("_celo%d_%d   ",i,sohv_V_chrgStartStatEo[i]);
-			 }
-			 	 printf("\n");
-			 for(i=0;i<17;i++)
-			  {
-			  printf("_celi%d_%d   ",i,sohv_V_chrgStartStatEi[i]);
-			 }
-			 	 	 printf("\n");
-			 for(i=0;i<17;i++)
-			  {
-			  printf("_celpo%d_%d   ",i,sohv_Q_cellCapArrEo[i]);
-			 }
-			  	 	 printf("\n");
-			 for(i=0;i<17;i++)
-			  {
-			  printf("_celpi%d_%d   ",i,sohv_Q_cellCapArrEi[i]);
-			 }
-			 	 	 	 printf("\n");
-			 for(i=0;i<10;i++)
-			  {
-			  printf("_celp%d_%d   ",i,sohv_Q_packCapArrEo[i]);
-			 }
-			 printf("\n\n");*/
+			  SPM();
+
+
+			  //
+              cand_Nr_cellNr=cand_Nr_cellNr+1;
+			  if(cand_Nr_cellNr> cmnc_num_cellUNum)
+			  	{
+               cand_Nr_cellNr=1;
+
+			  }
+			  cand_Q_cellCap=sohv_Q_cellCap[cand_Nr_cellNr-1];
+			  cand_V_chrgStartStat=sohv_V_chrgStartStatEo[cand_Nr_cellNr-1];
+			  //
 
-			
 				if(socd_flg_EEsave==1)
 				{
 				  memcpy(AppDataInfo.blcv_Q_totalCpE,blcv_Q_totalCpEo, 28*sizeof(uint32_T));	   
@@ -188,7 +130,6 @@ void BCU_step(void)
 				  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;
-				  printf("save\n");
 				 }
 
 			}
@@ -208,14 +149,12 @@ void BCU_step(void)
 			memcpy(AppDataInfo.sohv_Q_cellCapArrE,sohv_Q_cellCapArrEo, 28*sizeof(uint16_T));
 			AppDataInfo.appDataModify = TRUE;
 			//
-			Time=0;
+			cand_Nr_cellNr=0;
 			ihd_tm_parkTime=0;
 			while (TRUE)
 			{
 			  osDelay(1000);
 			  ihd_tm_parkTime++;
-			  printf("[%d]-ihd_tm_parkTime:%d\n",__LINE__,ihd_tm_parkTime);
-	  
 			  if(gProcess_app!=LISTEN)
 			  {
 				PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
@@ -250,51 +189,40 @@ void BCU_initialize(void)
 
   sohd_pct_bcuSoh = 1000U;
 
-  /* Model Initialize function for ModelReference Block: '<Root>/BLC' */
-  BLC_initialize(rtmGetErrorStatusPointer(BCU_M));
+  /* Model Initialize function for ModelReference Block: '<Root>/SFM' */
+  SFM_initialize(rtmGetErrorStatusPointer(BCU_M));
 
-  /* Model Initialize function for ModelReference Block: '<Root>/SOC' */
-  SOC_initialize(rtmGetErrorStatusPointer(BCU_M));
+  /* Model Initialize function for ModelReference Block: '<Root>/SPM' */
+  SPM_initialize(rtmGetErrorStatusPointer(BCU_M));
 
-  /* Model Initialize function for ModelReference Block: '<Root>/SOH' */
-  SOH_initialize(rtmGetErrorStatusPointer(BCU_M));
-  //SFM_initialize(rtmGetErrorStatusPointer(BCU_M));
-
-  /* SystemInitialize for ModelReference: '<Root>/SOH' incorporates:
+  /* SystemInitialize for ModelReference: '<Root>/SFM' incorporates:
+   *  Inport: '<Root>/In1'
    *  Inport: '<Root>/battI '
-   *  Inport: '<Root>/ihd_st_workStat'
-   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/ihd_L_urtRecv'
+   *  Inport: '<Root>/ihd_P_gas'
+   *  Inport: '<Root>/ihd_flg_chrgMosClosFlt'
+   *  Inport: '<Root>/ihd_flg_disChrgMosClosFlt'
+   *  Inport: '<Root>/ihv_T_modT'
    *  Inport: '<Root>/ihv_V_cellU'
-   *  Inport: '<Root>/sohd_Q_chrgEi '
-   *  Inport: '<Root>/sohd_flg_chrgEndEi '
-   *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
-   *  Inport: '<Root>/sohv_Q_packCapArrEi '
-   *  Inport: '<Root>/sohv_V_chrgStartStatEi '
    */
-  SOH_Init();
+  SFM_Init();
 
-  /* SystemInitialize for ModelReference: '<Root>/SOC' incorporates:
-   *  Inport: '<Root>/battI '
-   *  Inport: '<Root>/ihd_V_cellUAvrg'
-   *  Inport: '<Root>/ihd_V_cellUMax'
-   *  Inport: '<Root>/ihd_V_cellUMin'
+  /* SystemInitialize for ModelReference: '<Root>/SPM' incorporates:
+   *  Inport: '<Root>/blcv_Q_reqCpEi'
+   *  Inport: '<Root>/blcv_Q_totalCpEi'
+   *  Inport: '<Root>/ihd_T_bdtemp'
    *  Inport: '<Root>/ihd_st_workStat'
    *  Inport: '<Root>/ihd_tm_packTime'
    *  Inport: '<Root>/socd_pct_battSocEi'
    *  Inport: '<Root>/socd_pct_bcuSocEi'
+   *  Inport: '<Root>/sohd_Q_chrgEi '
+   *  Inport: '<Root>/sohd_flg_chrgEndEi '
+   *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
+   *  Inport: '<Root>/sohv_Q_cellCapArrEi 1'
+   *  Inport: '<Root>/sohv_Q_packCapArrEi '
+   *  Inport: '<Root>/sohv_V_chrgStartStatEi '
    */
-  SOC_Init();
-
-  /* SystemInitialize for ModelReference: '<Root>/BLC' incorporates:
-   *  Inport: '<Root>/blcv_Q_reqCpEi'
-   *  Inport: '<Root>/blcv_Q_totalCpEi'
-   *  Inport: '<Root>/ihd_V_cellUMin'
-   *  Inport: '<Root>/ihd_st_fault'
-   *  Inport: '<Root>/ihd_tm_packTime'
-   *  Inport: '<Root>/ihv_V_cellU'
-   */
-  BLC_Init();
-  //SFM_Init();
+  SPM_Init();
 }
 
 /* Model terminate function */
@@ -308,16 +236,18 @@ void BCU_terminate(void)
  *
  * [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);
-}
+
+	  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);
+	}
+ 

+ 38 - 45
src/BCU1.c

@@ -1,3 +1,4 @@
+
 /*
  * File: BCU.c
  *
@@ -5,7 +6,7 @@
  *
  * Model version                  : 1.19
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Aug 19 14:23:24 2021
+ * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -15,24 +16,23 @@
 
 #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 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)
 
 
-/* Block states (default storage) */
-DW_BCU_T BCU_DW;
-
 /* 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;
+{      uint8_T i;
 	  osDelay(1000);
 	  PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
 	  while (TRUE)
@@ -50,6 +50,7 @@ void BCU_step(void)
 			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;
 		  }
@@ -75,14 +76,14 @@ void BCU_step(void)
 		  {
 			while (TRUE)
 			{
-			  osDelay(100);
+			  osDelay(1000);
 			  if(gProcess_app==LISTEN)
 			  {
 				PROC_BCU_STATE_SWITCH(PROCESS_STATE_SLEEP);
 				break;
 			  }
 			  //***************
-			  ihd_I_curr = (int16_T)(battI - 10000);
+			  ihd_I_curr = (int16_T)(-(battI - 10000)*10);
 			  ihd_V_cellUMax = maxCellVol;
 			  ihd_V_cellUMin = minCellVol;
 			  ihd_V_cellUAvrg = avrgCellVol;
@@ -90,17 +91,12 @@ void BCU_step(void)
 			  memcpy(ihv_T_modT,battCellTemp,AppNVMData.BattTempCount*sizeof(uint16_T));
 			  ihd_T_modTMax = maxCellTemp;
 			  ihd_T_modTMin = minCellTemp;
-			  ihd_st_workStat  = BattWorkStateDelay;
+			  ihd_st_workStat  = battWorkState;//BattWorkStateDelay;
 			  ihd_st_fault = 0;
+			 // socd_pct_battSocEi=300;
+			  ihd_T_bdtemp = 400;
 
-			  socd_pct_battSocEi=300;
-			  /*for(i=0;i<17;i++)
-			  	{sohv_V_chrgStartStatEi[i]=3400;
-			  	}
-			  for(i=0;i<10;i++)
-			  	{sohv_Q_packCapArrEi[i]=300;
-			  	}*/
-
+			  /* Constant: '<Root>/Constant' */
 			  
 			  //****************************
 			  /* ModelReference: '<Root>/SOH' incorporates:
@@ -114,7 +110,7 @@ void BCU_step(void)
 			  *  Inport: '<Root>/sohv_Q_packCapArrEi '
 			  *  Inport: '<Root>/sohv_V_chrgStartStatEi '
 			  */
-			    SOH();
+			   SOH();
 	
 			  /* ModelReference: '<Root>/SOC' incorporates:
 			  *  Inport: '<Root>/ihd_I_curr'
@@ -127,9 +123,8 @@ void BCU_step(void)
 			  *  Inport: '<Root>/socd_pct_bcuSocEi'
 			  */
 			  SOC();
-			   printf("[%d]-:socd_pct_battSocEi:%d,socd_pct_battSoc:%d,socd_pct_ekfSoc:%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,ihd_V_cellUMax,ihd_V_cellUMin,OCV,UL,Up,k1,k2);
+			  // 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: '<Root>/Constant' */
-			  ihd_T_bdtemp = 400;
 			  /* ModelReference: '<Root>/BLC' incorporates:
 			  *  Inport: '<Root>/blcv_Q_reqCpEi'
 			  *  Inport: '<Root>/blcv_Q_totalCpEi'
@@ -138,7 +133,7 @@ void BCU_step(void)
 			  *  Inport: '<Root>/ihd_tm_packTime'
 			  *  Inport: '<Root>/ihv_V_cellU'
 			  */
-			   BLC(&(BCU_DW.BLC_InstanceData.rtb), &(BCU_DW.BLC_InstanceData.rtdw));
+			   BLC();
               //
               //
 				if(socd_flg_EEsave==1)
@@ -152,6 +147,7 @@ void BCU_step(void)
 				  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;
 				 }
 
@@ -169,15 +165,15 @@ void BCU_step(void)
 			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++;
-			  printf("[%d]-ihd_tm_parkTime:%d\n",__LINE__,ihd_tm_parkTime);
-	  
 			  if(gProcess_app!=LISTEN)
 			  {
 				PROC_BCU_STATE_SWITCH(PROCESS_STATE_INIT);
@@ -212,30 +208,21 @@ void BCU_initialize(void)
 
   sohd_pct_bcuSoh = 1000U;
 
-  /* external inputs */
-  battI = 10000U;
-
-  {
-    int32_T i;
-    for (i = 0; i < 8; i++) {
-      battCellTemp[i] = ((uint16_T)40U);
-    }
-  }
-
-  maxCellTemp = ((uint16_T)40U);
-  minCellTemp = ((uint16_T)40U);
-
   /* Model Initialize function for ModelReference Block: '<Root>/BLC' */
-  BLC_initialize(rtmGetErrorStatusPointer(BCU_M), &(BCU_DW.BLC_InstanceData.rtm));
+  BLC_initialize(rtmGetErrorStatusPointer(BCU_M));
 
   /* Model Initialize function for ModelReference Block: '<Root>/SOC' */
   SOC_initialize(rtmGetErrorStatusPointer(BCU_M));
 
   /* Model Initialize function for ModelReference Block: '<Root>/SOH' */
   SOH_initialize(rtmGetErrorStatusPointer(BCU_M));
+  //SFM_initialize(rtmGetErrorStatusPointer(BCU_M));
 
   /* SystemInitialize for ModelReference: '<Root>/SOH' incorporates:
+   *  Inport: '<Root>/battI '
+   *  Inport: '<Root>/ihd_st_workStat'
    *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/ihv_V_cellU'
    *  Inport: '<Root>/sohd_Q_chrgEi '
    *  Inport: '<Root>/sohd_flg_chrgEndEi '
    *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
@@ -244,21 +231,28 @@ void BCU_initialize(void)
    */
   SOH_Init();
 
-
   /* SystemInitialize for ModelReference: '<Root>/SOC' incorporates:
+   *  Inport: '<Root>/battI '
+   *  Inport: '<Root>/ihd_V_cellUAvrg'
+   *  Inport: '<Root>/ihd_V_cellUMax'
+   *  Inport: '<Root>/ihd_V_cellUMin'
+   *  Inport: '<Root>/ihd_st_workStat'
    *  Inport: '<Root>/ihd_tm_packTime'
    *  Inport: '<Root>/socd_pct_battSocEi'
    *  Inport: '<Root>/socd_pct_bcuSocEi'
    */
-    SOC_Init();
+  SOC_Init();
 
   /* SystemInitialize for ModelReference: '<Root>/BLC' incorporates:
    *  Inport: '<Root>/blcv_Q_reqCpEi'
    *  Inport: '<Root>/blcv_Q_totalCpEi'
+   *  Inport: '<Root>/ihd_V_cellUMin'
    *  Inport: '<Root>/ihd_st_fault'
    *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/ihv_V_cellU'
    */
-  BLC_Init(&(BCU_DW.BLC_InstanceData.rtdw));
+  BLC_Init();
+  //SFM_Init();
 }
 
 /* Model terminate function */
@@ -272,7 +266,7 @@ void BCU_terminate(void)
  *
  * [EOF]
  */
- void AppTaskBcuInit(void *arg)
+  void AppTaskBcuInit(void *arg)
 {
     osThreadAttr_t task_attr;
     memset(&task_attr,0,sizeof(task_attr));
@@ -285,4 +279,3 @@ void BCU_terminate(void)
     task_attr.cb_size = sizeof(StaticTask_t);
     BcuTaskId = osThreadNew(BCU_step, NULL, &task_attr);
 }
- 

+ 31 - 6
src/BCUCal.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.19
+ * Model version                  : 1.33
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:49:53 2021
+ * C/C++ source code generated on : Thu Sep  9 18:19:09 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -21,16 +21,19 @@
 
 /* Const memory section */
 /* Definition for custom storage class: Const */
-const uint16_T blc_V_low = 10U;
 const uint16_T blcc_R_esr = 1U;
-const int16_T blcc_T_close = 850;
-const int16_T blcc_T_open = 600;
+const int16_T blcc_T_close = 85;
+const int16_T blcc_T_open = 60;
+const uint16_T blcc_V_low = 10U;
 const uint16_T cmnc_Q_ratedCp = 300U;
 
 /* 额定容量; */
-const uint8_T cmnc_num_cellUnum = 17U;
+const uint8_T cmnc_num_cellUNum = 17U;
 
 /* 电压采样点个数; */
+const uint8_T cmnc_num_modTNum = 4U;
+
+/* 温度采样点个数; */
 const uint16_T cmnc_tm_parkTime = 1800U;
 
 /* 静置时间阈值; */
@@ -54,6 +57,28 @@ const uint16_T cmnm_pct_soc[13] = { 0U, 50U, 100U, 200U, 300U, 400U, 500U, 600U,
   700U, 800U, 900U, 950U, 1000U } ;
 
 /* 放电OCV-SOC的SOC数组; */
+const uint16_T sfmc_flg_cellUDiffThr2=300;
+const uint16_T sfmc_flg_cellUDiffThr1=200;
+const int16_T sfmc_I_chrgCurrOverThr = 400;
+const int16_T sfmc_I_dischrgCurrOverThr = -600;
+const int16_T sfmc_T_modTDiffThr1 = 20;
+const int16_T sfmc_T_modTDiffThr2 = 15;
+const int16_T sfmc_T_modTMaxThr1 = 57;
+const int16_T sfmc_T_modTMaxThr2 = 60;
+const int16_T sfmc_T_modTMinThr1 = -10;
+const int16_T sfmc_T_modTMinThr2 = -20;
+const uint16_T sfmc_V_battUMaxThr1 = 722U;
+const uint16_T sfmc_V_battUMaxThr2 = 731U;
+const uint16_T sfmc_V_battUMinThr1 = 425U;
+const uint16_T sfmc_V_battUMinThr2 = 340U;
+const uint16_T sfmc_V_cellUMaxThr1 = 4250U;
+const uint16_T sfmc_V_cellUMaxThr2 = 4300U;
+const uint16_T sfmc_V_cellUMinThr1 = 2700U;
+const uint16_T sfmc_V_cellUMinThr2 = 2500U;
+const uint8_T sfmc_num_fltNumMax = 20U;
+
+/* 温度采样点个数; */
+const uint16_T sfmd_flg_cellUDiffThr2 = 200U;
 const uint16_T socc_V_chrgFulV = 4200U;
 
 /* 充满电的截至电压; */

+ 45 - 31
src/BCUDisp.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BCU'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.33
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 14:17:40 2021
+ * C/C++ source code generated on : Thu Sep  9 18:19:09 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -18,32 +18,19 @@
 #include "BCU_types.h"
 
 /* Exported data definition */
-
-/* Definition for custom storage class: ExportToFile */
-
-
-uint16_T SOC1[28];
-uint16_T SOC2[28];
-uint16_T deltaSoc[28];
-uint16_T minChrg[28];
-uint16_T minDischrg[28];
-real_T k1;
-real_T k2;
+boolean_T socd_flg_EEsave;
+uint16_T socd_pct_ekfSoc;
 real_T OCV;
-real_T UL;
-real_T Up;
 real_T deltaU;
-
+real_T k1;
+real_T k2;
 uint16_T blcn_Q_impleCp[28];
-uint16_T sohv_Q_cellCapArrEo[28];
-uint16_T sohv_Q_cellCapArrEi[28];
-
-
-/* 电池单体电压最小; */
-uint16_T minChrg[28];
-uint16_T minDischrg[28];
-
+uint8_T cand_Nr_cellNr;
+uint16_T FltCodeArr[20];
+uint16_T cand_Q_cellCap;
+uint16_T cand_V_chrgStartStat;
 
+/* Definition for custom storage class: ExportToFile */
 uint16_T blcv_Q_reqCpEi[28];
 
 /* 均衡需求容量 读取量(数组); */
@@ -62,7 +49,15 @@ boolean_T blcv_flg_excute[28];
 int16_T ihd_I_curr;
 
 /* 电池包电流; */
+uint16_T ihd_L_urtRecv;
+
+/* urt返回信号长度 */
+uint16_T ihd_P_gas;
+
+/* 气体浓度 */
 int16_T ihd_T_bdtemp;
+
+/* 板子温度 */
 int16_T ihd_T_modTMax;
 
 /* 模组温度最大 */
@@ -78,13 +73,13 @@ uint16_T ihd_V_cellUMax;
 uint16_T ihd_V_cellUMin;
 
 /* 电池单体电压最小; */
-uint8_T ihd_st_fault;
+boolean_T ihd_flg_currFlt;
 
-/* 故障等级 */
+/* 电流传感器故障 */
 uint8_T ihd_st_workStat;
 
 /* 电池工作状态; */
-uint32_T ihd_tm_parkTime;
+uint16_T ihd_tm_parkTime;
 
 /* 驻车时间; */
 int16_T ihv_T_modT[6];
@@ -93,7 +88,27 @@ int16_T ihv_T_modT[6];
 uint16_T ihv_V_cellU[28];
 
 /* 电池单体电压(数组); */
-boolean_T socd_flg_EEsave;
+int16_T sfmd_I_curr;
+uint8_T sfmd_N_fltLevel;
+int16_T sfmd_T_modTMax;
+int16_T sfmd_T_modTMin;
+uint16_T sfmd_V_cellUAvrg;
+uint16_T sfmd_V_cellUMax;
+uint16_T sfmd_V_cellUMin;
+boolean_T ihd_flg_chrgMosClosFlt;
+
+/* 充电电Mos失效 */
+boolean_T sfmd_flg_currFlt;
+boolean_T ihd_flg_dischrgMosClosFlt;
+
+/* 放电Mos失效 */
+boolean_T sfmd_flg_volFlt;
+uint16_T sfmd_idx_fltCode;
+uint16_T sfmd_num_fltNum;
+uint8_T sfmd_st_fltAct;
+int16_T sfmv_T_modT[6];
+uint16_T sfmv_V_cellU[28];
+boolean_T sfmv_flg_TFlt;
 uint16_T socd_pct_ahSoc;
 
 /* 安时SOC; */
@@ -115,9 +130,6 @@ uint16_T socd_pct_bcuSocEi;
 uint16_T socd_pct_bcuSocEo;
 
 /* 电池显示SOC写入量; */
-uint16_T socd_pct_ekfSoc;
-
-/* EKFSOC; */
 uint16_T sohd_Q_chrgEi;
 
 /* 充入容量读取量; */
@@ -140,6 +152,8 @@ uint16_T sohd_tm_chrgStartStatEo;
 
 /* 充电前静置时间写入量; */
 uint16_T sohv_Q_cellCap[28];
+uint16_T sohv_Q_cellCapArrEi[28];
+uint16_T sohv_Q_cellCapArrEo[28];
 uint16_T sohv_Q_packCapArrEi[10];
 
 /* 10次整包容量(数组)读取量; */

+ 63 - 29
src/BLC.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.42
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Fri Aug 20 13:55:26 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -33,15 +33,25 @@ DW_BLC_f_T BLC_DW;
 
 /* System initialize for referenced model: 'BLC' */
 void BLC_Init(void)
-{
-  /* InitializeConditions for UnitDelay: '<S1>/Unit Delay1' */
+{ 
+  uint8_T i;
+  /* InitializeConditions for UnitDelay: '<S11>/Unit Delay1' */
   BLC_DW.UnitDelay1_DSTATE = true;
 
+  /* InitializeConditions for UnitDelay: '<S1>/Unit Delay1' */
+  BLC_DW.UnitDelay1_DSTATE_a = true;
+
   /* SystemInitialize for Chart: '<S6>/Chart' */
   BLC_DW.FristFlg_b = true;
 
   /* SystemInitialize for Chart: '<S6>/Chart1' */
   BLC_DW.FristFlg = true;
+  for(i=0;i<17;i++)
+  	{
+     BLC_DW.reqCp_reset_DSTATE[i]=0;
+     BLC_DW.blcCap[i]=0;
+  	}
+  
 }
 
 /* Output and update for referenced model: 'BLC' */
@@ -77,7 +87,7 @@ void BLC(void)
 
   if (BLC_DW.i_close > 10) {
     BLC_DW.i_close = 11U;
-    for (i = 0U; i < cmnc_num_cellUnum; i++) {
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
       BLC_B.blcn_flg_pause[i] = true;
     }
   }
@@ -95,7 +105,7 @@ void BLC(void)
 
   if (BLC_DW.i_open > 10) {
     BLC_DW.i_open = 11U;
-    for (i = 0U; i < cmnc_num_cellUnum; i++) {
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
       BLC_B.blcn_flg_pause[i] = false;
     }
   }
@@ -104,9 +114,9 @@ void BLC(void)
 
   /* Chart: '<S7>/Chart' incorporates:
    *  Constant: '<S7>/Constant2'
-   *  UnitDelay: '<S1>/Unit Delay'
+   *  UnitDelay: '<S1>/reqCp_reset'
    */
-  for (i = 0U; i < cmnc_num_cellUnum; i++) {
+  for (i = 0U; i < cmnc_num_cellUNum; i++) {
     if ((int32_T)(blcv_Q_reqCpEo[i] * 16777U) > 0) {
       BLC_B.blcn_flg_stop[i] = false;
     } else {
@@ -116,10 +126,13 @@ void BLC(void)
 
   /* End of Chart: '<S7>/Chart' */
 
-  /* RelationalOperator: '<S3>/Relational Operator1?' incorporates:
-   *  Inport: '<Root>/ihd_st_fault'
+  /* RelationalOperator: '<S3>/Relational Operator1' incorporates:
+   *  Constant: '<S3>/Constant1'
+   *  Constant: '<S3>/Constant2'
+   *  Inport: '<Root>/sfmd_st_fltAct'
+   *  S-Function (sfix_bitop): '<S3>/Bitwise Operator'
    */
-  RelationalOperator1 = (ihd_st_fault < 1);
+  RelationalOperator1 = ((sfmd_st_fltAct & 128) == 128);
   for (i_0 = 0; i_0 < 28; i_0++) {
     /* SignalConversion generated from: '<S5>/Chart' incorporates:
      *  Chart: '<S5>/Chart'
@@ -133,15 +146,15 @@ void BLC(void)
   /* Chart: '<S5>/Chart' incorporates:
    *  Constant: '<S5>/Constant1'
    *  Constant: '<S5>/Constant2'
-   *  Inport: '<Root>/ihv_V_cellU'
+   *  Inport: '<Root>/sfmv_V_cellU'
    *  SignalConversion generated from: '<S5>/Chart'
    */
-  for (i = 0U; i < cmnc_num_cellUnum; i++) {
+  for (i = 0U; i < cmnc_num_cellUNum; i++) {
     if (RelationalOperator1 && (!BLC_B.blcn_flg_pause[i]) &&
         (!BLC_B.blcn_flg_stop[i])) {
       blcv_flg_excute[i] = true;
       i_0 = (int32_T)mul_u32_hiSR(BLC_DW.blcCap[i], 3435973837U, 3U);
-      q1 = div_su32(ihv_V_cellU[i], blcc_R_esr);
+      q1 = div_su32(sfmv_V_cellU[i], blcc_R_esr);
       if ((i_0 < 0) && (q1 < MIN_int32_T - i_0)) {
         i_0 = MIN_int32_T;
       } else if ((i_0 > 0) && (q1 > MAX_int32_T - i_0)) {
@@ -156,7 +169,7 @@ void BLC(void)
     }
   }
 
-  for (i = 0U; i < cmnc_num_cellUnum; i++) {
+  for (i = 0U; i < cmnc_num_cellUNum; i++) {
     tmp_0 = BLC_DW.blcCap[i] / 36000U;
     if (tmp_0 > 65535U) {
       tmp_0 = 65535U;
@@ -165,24 +178,40 @@ void BLC(void)
     blcn_Q_impleCp[i] = (uint16_T)tmp_0;
   }
 
-  /* RelationalOperator: '<S3>/Relational Operator' incorporates:
+  /* Outputs for Enabled SubSystem: '<S11>/Subsystem3' incorporates:
+   *  EnablePort: '<S12>/Enable'
+   */
+  /* UnitDelay: '<S11>/Unit Delay1' incorporates:
+   *  Inport: '<Root>/sfmd_flg_volFlt'
+   *  Inport: '<S12>/in'
+   *  Logic: '<S3>/Logical Operator1'
+   */
+  if (BLC_DW.UnitDelay1_DSTATE) {
+    BLC_B.in = !sfmd_flg_volFlt;
+  }
+
+  /* End of UnitDelay: '<S11>/Unit Delay1' */
+  /* End of Outputs for SubSystem: '<S11>/Subsystem3' */
+
+  /* Logic: '<S3>/Logical Operator' incorporates:
    *  Constant: '<S3>/Constant'
    *  Inport: '<Root>/ihd_tm_packTime'
+   *  RelationalOperator: '<S3>/Relational Operator'
    */
-  RelationalOperator1 = (ihd_tm_parkTime >= cmnc_tm_parkTime);
+  RelationalOperator1 = ((ihd_tm_parkTime >= cmnc_tm_parkTime) && BLC_B.in);
 
   /* Lookup_n-D: '<S6>/1-D Lookup Table1' incorporates:
-   *  Inport: '<Root>/ihd_V_cellUMin'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
    */
-  rtb_uDLookupTable1 = look1_iu16lu16n16tu16_binlcase(ihd_V_cellUMin,
+  rtb_uDLookupTable1 = look1_iu16lu16n16tu16_binlcase(sfmd_V_cellUMin,
     (&(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
 
   /* Lookup_n-D: '<S6>/1-D Lookup Table' incorporates:
-   *  Inport: '<Root>/ihv_V_cellU'
+   *  Inport: '<Root>/sfmv_V_cellU'
    */
   for (i_0 = 0; i_0 < 28; i_0++) {
-    rtb_uDLookupTable[i_0] = look1_iu16lu16n16tu16_binlcase(ihv_V_cellU[i_0],
-      (&(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
+    rtb_uDLookupTable[i_0] = look1_iu16lu16n16tu16_binlcase(sfmv_V_cellU[i_0], (
+      &(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
   }
 
   /* End of Lookup_n-D: '<S6>/1-D Lookup Table' */
@@ -191,15 +220,15 @@ void BLC(void)
    *  Constant: '<S6>/Constant'
    *  Constant: '<S6>/Constant1'
    *  Constant: '<S6>/Constant2'
-   *  Inport: '<Root>/ihd_V_cellUMin'
-   *  Inport: '<Root>/ihv_V_cellU'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
+   *  Inport: '<Root>/sfmv_V_cellU'
    *  Lookup_n-D: '<S6>/1-D Lookup Table'
    *  Lookup_n-D: '<S6>/1-D Lookup Table1'
    */
   i = 0U;
   if (BLC_DW.FristFlg_b && RelationalOperator1) {
-    while (i < cmnc_num_cellUnum) {
-      if (ihv_V_cellU[i] - ihd_V_cellUMin > blc_V_low) {
+    while (i < cmnc_num_cellUNum) {
+      if (sfmv_V_cellU[i] - sfmd_V_cellUMin > blcc_V_low) {
         i_0 = mul_s32_sat(mul_ssu32_sat(rtb_uDLookupTable[i] -
           rtb_uDLookupTable1, cmnc_Q_ratedCp) / 100, 10);
         if (i_0 < 0) {
@@ -229,7 +258,7 @@ void BLC(void)
   i = 0U;
   if (BLC_DW.FristFlg && RelationalOperator1) {
     rtb_uDLookupTable1 = 65000U;
-    while (i < cmnc_num_cellUnum) {
+    while (i < cmnc_num_cellUNum) {
       tmp_0 = (uint32_T)sohv_Q_cellCap[i] * rtb_uDLookupTable[i];
       tmp = tmp_0;
       if (tmp_0 > 2147483647U) {
@@ -276,7 +305,7 @@ void BLC(void)
    *  EnablePort: '<S2>/Enable'
    */
   /* UnitDelay: '<S1>/Unit Delay1' */
-  if (BLC_DW.UnitDelay1_DSTATE) {
+  if (BLC_DW.UnitDelay1_DSTATE_a) {
     /* MinMax: '<S10>/Min' incorporates:
      *  Inport: '<Root>/blcv_Q_reqCpEi'
      */
@@ -382,10 +411,15 @@ void BLC(void)
       blcn_Q_impleCp[i_0];
   }
 
+  /* Update for UnitDelay: '<S11>/Unit Delay1' incorporates:
+   *  Constant: '<S11>/Constant1'
+   */
+  BLC_DW.UnitDelay1_DSTATE = false;
+
   /* Update for UnitDelay: '<S1>/Unit Delay1' incorporates:
    *  Constant: '<S1>/Constant'
    */
-  BLC_DW.UnitDelay1_DSTATE = false;
+  BLC_DW.UnitDelay1_DSTATE_a = false;
 }
 
 /* Model initialize function */

+ 0 - 175
src/SFM-1.c

@@ -1,175 +0,0 @@
-
-UINT32 ErrFlg = FALSE; // if ErrFlg != 0, the voltage open-circuit error occurs, while the bit0 stand for cell 0, and so on..
-UINT16 avrgU = 0; //the modfied average cell voltage
-
-void SFM(void)
-{    
-    static UINT16 CellUAry[3][32]={0};
-    static UINT8  RecNr[32]={0};
-    static UINT8  ErrNr[32]={0};
-    static BOOL   FirstFlg = true;
-    static UINT32 ErrUFlg = 0;
-    static UINT32 Flg = 0;
-    UINT8 i;
-    UINT8 j;
-    UINT8 k;
-    UINT32 SumU;
-    UINT8 Num;
-    UINT16 MinU;
-    UINT16 MaxU;     
-//--------------------上电第一时刻对矩阵CellUAry(保存3s电压)初始赋值----------------------
-    if(FirstFlg)
-    {
-        for (j = 0U; j < 3; j++)
-        {
-            for (i = 0U; i < batSeries; i++)
-            {
-                CellUAry[j][i] = eachVoltageValue[i];
-            }
-        }
-    }
-    FirstFlg=false;
-       
-//--------------------矩阵周期迭代数据,最新电压放置最后一行----------------------
-    for (j = 0U; j < 2; j++)
-    {
-        for (i = 0U; i < batSeries; i++)
-        {
-            CellUAry[j][i] = CellUAry[j+1][i];
-        }
-    }
-    for (i = 0U; i < batSeries; i++)
-    {
-        CellUAry[2][i] = eachVoltageValue[i];
-    }
-    
-//-------------相邻单体电压2s内(前降后升50mv)  的连续次数        -------------------
-    for (i = 0U; i < batSeries - 1; i++)
-    {
-        if (((INT16)(CellUAry[2][i] - CellUAry[0][i]) <-50) && ((INT16)(CellUAry[2][i+1] - CellUAry[0][i+1]) >50))
-        {
-            ErrNr[i] =ErrNr[i]+1;
-        }
-        else
-        {
-            ErrNr[i] = 0U;
-        }
-    }
-    
-//-----------------------连续两次满足50mv或者 单次 最近1s变化满足1000mv------------------------
-    for (i = 0U; i < batSeries - 1; i++)
-    {
-        if ((ErrNr[i] >= 2) ||((INT16)(CellUAry[2][i] - CellUAry[1][i]) <-1000) && ((INT16)(CellUAry[2][i+1] - CellUAry[1][i+1]) >1000) )
-        {
-            ErrNr[i]=2;
-            ErrFlg = ErrFlg |(1<<i);
-            ErrUFlg = ErrUFlg |(1<<i);
-            ErrUFlg = ErrUFlg |(1<<(i+1));
-        }
-    }
-    
-//-----------------从判断故障单体编号           向前循环判断单体电压是否下降超过200mv----------------------------------------------
-    for (i = 1U; i < batSeries; i++)
-    {
-        if(((ErrFlg>>i)&0x01)==0x01)
-        {
-            for (k = 1U; k < i; k++)
-            {
-                if((INT16)(CellUAry[2][i-k] - CellUAry[1][i-k]) <-200)
-                {
-                    ErrFlg = ErrFlg |(1<<(i-k));
-                    ErrUFlg = ErrUFlg |(1<<(i-k));
-                }
-                else
-                {
-                    break;
-                }
-            }
-        }
-    }
-    
-//-----------------------B0开路:0 1 2 单体下降1000mv--- -------------------------
-    if(((INT16)(CellUAry[2][0] - CellUAry[1][0]) <-1000)&&((INT16)(CellUAry[2][1] - CellUAry[1][1]) <-1000)&&((INT16)(CellUAry[2][2] - CellUAry[1][2]) <-1000))
-    {
-        ErrUFlg = ErrUFlg|0x07;
-    }
-    
-//-----------------------求正常单体电压的平均--------------------
-    SumU=0;
-    Num=0;
-    MinU=eachVoltageValue[0];
-    MaxU=eachVoltageValue[0];
-    for (i = 0U; i < batSeries ; i++)
-    {
-        if ( ((ErrUFlg>>i)&0x01) == 0)
-        {
-            SumU=SumU+eachVoltageValue[i];
-            Num++;
-            if(MinU>eachVoltageValue[i])
-            {
-                MinU=eachVoltageValue[i];
-            }
-            if(MaxU<eachVoltageValue[i])
-            {
-                MaxU=eachVoltageValue[i];
-            }
-        }
-    }
-    if(MaxU-MinU>3000)
-    {
-        avrgU=(SumU-MaxU-MinU)/(Num-2);
-    }
-    else
-    {
-        avrgU=SumU/Num;
-    }
-//----------------------若上电初始已开路,无变化趋势,则采用压差判断-----------------------------------
-    if(MaxU-MinU>3000)
-    {
-        for (i = 0U; i < batSeries ; i++)
-        {   
-            if ( ((ErrUFlg>>i)&0x01) == 0)
-            {
-	            if((((INT16)(eachVoltageValue[i]-avrgU)>1500)||((INT16)(eachVoltageValue[i]-avrgU)<-1500))&&((Flg>>i)&0x01)==0x01)
-	            {
-	                ErrUFlg = ErrUFlg |(1<<i);
-	                ErrFlg = ErrFlg |(1<<i);
-	            }
-	            
-	            if(((INT16)(eachVoltageValue[i]-avrgU)>1500)||((INT16)(eachVoltageValue[i]-avrgU)<-1500))
-	            {
-	                Flg = Flg |(1<<i);
-	            }
-	            else
-	            {
-	                Flg = Flg&(~(1<<i));
-	            }
-        	}
-        }
-    }
-    
-//----------------------恢复条件:在平均电压的-200~200mv之间的连续次数----------------
-    for (i = 0U; i < batSeries ; i++)
-    {
-        if (((INT16)(eachVoltageValue[i]-avrgU) > -200) &&((INT16)(eachVoltageValue[i]-avrgU) < 200 && ((ErrUFlg>>i)&0x01==1)))
-        {
-            RecNr[i] =RecNr[i] + 1;
-        }
-        else
-        {
-            RecNr[i] =0;
-        }
-    }
-    
-//---------------------------------------------------------------------------
-    for (i = 0U; i < batSeries ; i++)
-    {
-        if (RecNr[i] > 3)
-        {
-            ErrFlg = ErrFlg&(~(1<<i)); //the bit i of ErrUFlg is 0
-            RecNr[i] = 4U;
-            ErrUFlg = ErrUFlg&(~(1<<i)); //the bit i of ErrUFlg is 0
-        }
-    }
-}
-

+ 2122 - 141
src/SFM.c

@@ -1,164 +1,2145 @@
+/*
+ * File: SFM.c
+ *
+ * Code generated for Simulink model 'SFM'.
+ *
+ * Model version                  : 1.90
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Fri Sep 10 18:11:28 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
 
- // if ErrFlg != 0, the voltage open-circuit error occurs, while the bit0 stand for cell 0, and so on..
-//UINT16 avrgU = 0; //the modfied average cell voltage
-#include "AppSignal.h"
+#include "SFM.h"
+#include "SFM_private.h"
+#include "div_uus32_sat.h"
+#include "mul_s32_hiSR.h"
+
+MdlrefDW_SFM_T SFM_MdlrefDW;
+
+/* Block signals (default storage) */
+B_SFM_c_T SFM_B;
+
+/* Block states (default storage) */
+DW_SFM_f_T SFM_DW;
+
+/*
+ * System initialize for atomic system:
+ *    '<S27>/Subsytem'
+ *    '<S27>/Subsytem2'
+ *    '<S27>/Subsytem4'
+ *    '<S27>/Subsytem5'
+ */
+void SFM_Subsytem_Init(DW_Subsytem_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S31>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S27>/Subsytem'
+ *    '<S27>/Subsytem2'
+ *    '<S27>/Subsytem4'
+ *    '<S27>/Subsytem5'
+ */
+boolean_T SFM_Subsytem(uint8_T rtu_Enable, boolean_T rtu_Precondition, int16_T
+  rtu_inputs, int16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_h;
+
+  /* Saturate: '<S31>/Saturation' incorporates:
+   *  Constant: '<S31>/Constant1'
+   *  Sum: '<S31>/Add'
+   *  UnitDelay: '<S31>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_h = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_h = 200U;
+  }
+
+  /* End of Saturate: '<S31>/Saturation' */
+
+  /* Product: '<S31>/Product' incorporates:
+   *  Logic: '<S31>/Logical Operator1'
+   *  RelationalOperator: '<S31>/Relational Operator'
+   *  UnitDelay: '<S31>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_inputs >= rtu_threshold) ? (int32_T)rtb_Saturation_h : 0);
+
+  /* RelationalOperator: '<S31>/Relational Operator1' */
+  return rtb_Saturation_h > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S27>/Subsytem1'
+ *    '<S27>/Subsytem3'
+ */
+void SFM_Subsytem1_Init(DW_Subsytem1_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S32>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S27>/Subsytem1'
+ *    '<S27>/Subsytem3'
+ */
+boolean_T SFM_Subsytem1(uint8_T rtu_Enable, boolean_T rtu_Precondition, int16_T
+  rtu_InputS, int16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem1_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_f;
+
+  /* Saturate: '<S32>/Saturation' incorporates:
+   *  Constant: '<S32>/Constant2'
+   *  Sum: '<S32>/Add'
+   *  UnitDelay: '<S32>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_f = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_f = 200U;
+  }
+
+  /* End of Saturate: '<S32>/Saturation' */
+
+  /* Product: '<S32>/Product' incorporates:
+   *  Logic: '<S32>/Logical Operator'
+   *  RelationalOperator: '<S32>/Relational Operator'
+   *  UnitDelay: '<S32>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_InputS <= rtu_threshold) ? (int32_T)rtb_Saturation_f : 0);
+
+  /* RelationalOperator: '<S32>/Relational Operator1' */
+  return rtb_Saturation_f > rtu_CtrN;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsystem5'
+ *    '<S28>/Subsystem6'
+ *    '<S28>/Subsystem7'
+ *    '<S28>/Subsystem8'
+ */
+boolean_T SFM_Subsystem5(boolean_T rtu_In1, boolean_T rtu_In2)
+{
+  /* Logic: '<S37>/Logical Operator' incorporates:
+   *  RelationalOperator: '<S37>/Relational Operator'
+   *  RelationalOperator: '<S37>/Relational Operator1'
+   */
+  return (!rtu_In1) && (!rtu_In2);
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem'
+ *    '<S28>/Subsytem2'
+ *    '<S28>/Subsytem4'
+ *    '<S28>/Subsytem5'
+ */
+void SFM_Subsytem_b_Init(DW_Subsytem_SFM_d_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S41>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem'
+ *    '<S28>/Subsytem2'
+ *    '<S28>/Subsytem4'
+ *    '<S28>/Subsytem5'
+ */
+boolean_T SFM_Subsytem_j(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint16_T rtu_inputs, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem_SFM_d_T *localDW)
+{
+  uint8_T rtb_Saturation_h;
+
+  /* Saturate: '<S41>/Saturation' incorporates:
+   *  Constant: '<S41>/Constant1'
+   *  Sum: '<S41>/Add'
+   *  UnitDelay: '<S41>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_h = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_h = 200U;
+  }
+
+  /* End of Saturate: '<S41>/Saturation' */
+
+  /* Product: '<S41>/Product' incorporates:
+   *  Logic: '<S41>/Logical Operator1'
+   *  RelationalOperator: '<S41>/Relational Operator'
+   *  UnitDelay: '<S41>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_inputs >= rtu_threshold) ? (int32_T)rtb_Saturation_h : 0);
+
+  /* RelationalOperator: '<S41>/Relational Operator1' */
+  return rtb_Saturation_h > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem1'
+ *    '<S28>/Subsytem3'
+ */
+void SFM_Subsytem1_f_Init(DW_Subsytem1_SFM_k_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S42>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem1'
+ *    '<S28>/Subsytem3'
+ */
+boolean_T SFM_Subsytem1_n(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint16_T rtu_InputS, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem1_SFM_k_T *localDW)
+{
+  uint8_T rtb_Saturation_i;
+
+  /* Saturate: '<S42>/Saturation' incorporates:
+   *  Constant: '<S42>/Constant2'
+   *  Sum: '<S42>/Add'
+   *  UnitDelay: '<S42>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_i = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_i = 200U;
+  }
+
+  /* End of Saturate: '<S42>/Saturation' */
+
+  /* Product: '<S42>/Product' incorporates:
+   *  Logic: '<S42>/Logical Operator'
+   *  RelationalOperator: '<S42>/Relational Operator'
+   *  UnitDelay: '<S42>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_InputS <= rtu_threshold) ? (int32_T)rtb_Saturation_i : 0);
+
+  /* RelationalOperator: '<S42>/Relational Operator1' */
+  return rtb_Saturation_i > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem6'
+ *    '<S28>/Subsytem8'
+ */
+void SFM_Subsytem6_Init(DW_Subsytem6_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S47>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem6'
+ *    '<S28>/Subsytem8'
+ */
+boolean_T SFM_Subsytem6(uint8_T rtu_Enable, boolean_T rtu_Precondition, uint32_T
+  rtu_inputs, uint16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem6_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_h;
+
+  /* Saturate: '<S47>/Saturation' incorporates:
+   *  Constant: '<S47>/Constant1'
+   *  Sum: '<S47>/Add'
+   *  UnitDelay: '<S47>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_h = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_h = 200U;
+  }
+
+  /* End of Saturate: '<S47>/Saturation' */
+
+  /* Product: '<S47>/Product' incorporates:
+   *  Logic: '<S47>/Logical Operator1'
+   *  RelationalOperator: '<S47>/Relational Operator'
+   *  UnitDelay: '<S47>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_inputs >= rtu_threshold * 100U) ? (int32_T)rtb_Saturation_h : 0);
+
+  /* RelationalOperator: '<S47>/Relational Operator1' */
+  return rtb_Saturation_h > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem7'
+ *    '<S28>/Subsytem9'
+ */
+void SFM_Subsytem7_Init(DW_Subsytem7_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S48>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem7'
+ *    '<S28>/Subsytem9'
+ */
+boolean_T SFM_Subsytem7(uint8_T rtu_Enable, boolean_T rtu_Precondition, uint32_T
+  rtu_InputS, uint16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem7_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_m;
+
+  /* Saturate: '<S48>/Saturation' incorporates:
+   *  Constant: '<S48>/Constant2'
+   *  Sum: '<S48>/Add'
+   *  UnitDelay: '<S48>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_m = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_m = 200U;
+  }
+
+  /* End of Saturate: '<S48>/Saturation' */
+
+  /* Product: '<S48>/Product' incorporates:
+   *  Logic: '<S48>/Logical Operator'
+   *  RelationalOperator: '<S48>/Relational Operator'
+   *  UnitDelay: '<S48>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_InputS <= rtu_threshold * 100U) ? (int32_T)rtb_Saturation_m : 0);
+
+  /* RelationalOperator: '<S48>/Relational Operator1' */
+  return rtb_Saturation_m > rtu_CtrN;
+}
+
+/* System initialize for referenced model: 'SFM' */
+void SFM_Init(void)
+{
+  /* InitializeConditions for UnitDelay: '<S23>/Time_Delay' */
+  SFM_DW.Time_Delay_DSTATE = 1U;
+
+  /* SystemInitialize for Chart: '<S13>/Chart' */
+  SFM_DW.FirstFlg = true;
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem_j0);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem2' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem2_p);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem2' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem1' */
+  SFM_Subsytem1_f_Init(&SFM_DW.Subsytem1_n);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem1' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem3' */
+  SFM_Subsytem1_f_Init(&SFM_DW.Subsytem3_b);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem3' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem4' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem4_p);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem4' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem5' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem5_l);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem5' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem6' */
+  SFM_Subsytem6_Init(&SFM_DW.Subsytem6);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem6' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem8' */
+  SFM_Subsytem6_Init(&SFM_DW.Subsytem8);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem8' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem7' */
+  SFM_Subsytem7_Init(&SFM_DW.Subsytem7);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem7' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem9' */
+  SFM_Subsytem7_Init(&SFM_DW.Subsytem9);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem9' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem_j);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem2' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem2);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem2' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem1' */
+  SFM_Subsytem1_Init(&SFM_DW.Subsytem1_e);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem1' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem3' */
+  SFM_Subsytem1_Init(&SFM_DW.Subsytem3);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem3' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem4' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem4);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem4' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem5' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem5);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem5' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S24>/Subsytem' */
+  /* InitializeConditions for UnitDelay: '<S29>/delay' */
+  SFM_DW.delay_DSTATE_j = 1U;
+
+  /* End of SystemInitialize for SubSystem: '<S24>/Subsytem' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S24>/Subsytem1' */
+  /* InitializeConditions for UnitDelay: '<S30>/delay' */
+  SFM_DW.delay_DSTATE = 1U;
+   uint8_T i;
+   for(i=0;i<17;i++)
+	 {
+  
+  SFM_DW.ChgNr[i]=0;
+  SFM_DW.RecNr[i]=0;
+  SFM_DW.UdelNr[i]=0;
+   }
+   SFM_DW.Cntl=0;
+
+  /* End of SystemInitialize for SubSystem: '<S24>/Subsytem1' */
+}
+
+/* Output and update for referenced model: 'SFM' */
 void SFM(void)
 {
-    static UINT16 CellUAry[3][32]={0};
-    static BOOL   FirstFlg = true;
-    static UINT32 RecFlg=0;
-    static UINT32 changeFlg=0;
-    static UINT32 ErrUFlg = 0;
-    static UINT32 intiFlg = 0;
-	UINT16 avrgU;
-    UINT8 i;
-    UINT8 j;
-    UINT8 k;
-    UINT32 SumU;
-    UINT8 Num;
-    UINT16 MinU;
-    UINT16 MaxU;
-//--------------------上电第一时刻对矩阵CellUAry(保存3s电压)初始赋值----------------------
-    if(FirstFlg)
-    {
-        for (j = 0U; j < 3; j++)
-        {
-            for (i = 0U; i < AppNVMData.BattCellCount; i++)
-            {
-                CellUAry[j][i] = battCellU[i];
-            }
-        }
+  /* local block i/o variables */
+  uint32_T rtb_SumU;
+  real_T tmp_2;
+  int32_T i_0;
+  int32_T tmp_0;
+  int32_T tmp_1;
+  uint32_T qY;
+  uint32_T qY_0;
+  uint16_T FltCodeArrS[20];
+  uint16_T avrgU;
+  uint16_T k;
+  uint16_T rtb_Saturation;
+  uint16_T temp;
+  uint16_T tmp_3;
+  uint8_T rtb_TmpSignalConversionAtSFun_l[155];
+  uint8_T rtb_TmpSignalConversionAtSFunct[155];
+  uint8_T rtb_FltActArr[20];
+  uint8_T rtb_FltLevelArr[20];
+  uint8_T i;
+  uint8_T j;
+  boolean_T rtb_TmpSignalConversionAtSFun_a[155];
+  boolean_T rtb_RelationalOperator1;
+  boolean_T rtb_RelationalOperator1_a;
+  boolean_T rtb_RelationalOperator1_bb;
+  boolean_T rtb_RelationalOperator1_d;
+  boolean_T rtb_RelationalOperator1_di;
+  boolean_T rtb_RelationalOperator1_eg;
+  boolean_T rtb_RelationalOperator1_ep;
+  boolean_T rtb_RelationalOperator1_fg;
+  boolean_T rtb_RelationalOperator1_gr;
+  boolean_T rtb_RelationalOperator1_i;
+  boolean_T rtb_RelationalOperator1_it;
+  boolean_T rtb_RelationalOperator1_j;
+  boolean_T rtb_RelationalOperator1_l;
+  boolean_T rtb_RelationalOperator1_lf;
+  boolean_T rtb_RelationalOperator1_o;
+  boolean_T rtb_RelationalOperator1_p;
+  boolean_T rtb_RelationalOperator_et;
+  boolean_T tmp;
+
+  /* Saturate: '<S23>/Saturation' incorporates:
+   *  Constant: '<S23>/Constant'
+   *  Sum: '<S23>/Add'
+   *  UnitDelay: '<S23>/Time_Delay'
+   */
+  if ((uint16_T)(SFM_DW.Time_Delay_DSTATE + 1U) < 60000) {
+    rtb_Saturation = (uint16_T)(SFM_DW.Time_Delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation = 60000U;
+  }
+
+  /* End of Saturate: '<S23>/Saturation' */
+
+  /* RelationalOperator: '<S23>/Relational Operator1' incorporates:
+   *  Constant: '<S23>/para'
+   */
+  rtb_RelationalOperator1 = (rtb_Saturation > 1);
+
+  /* Chart: '<S13>/Chart' incorporates:
+   *  Constant: '<S13>/Constant'
+   *  Constant: '<S13>/Constant1'
+   *  Inport: '<Root>/ihv_V_cellU'
+   */
+  if (!rtb_RelationalOperator1) {
+    j = 0U;
+    while ((j < 3) && SFM_DW.FirstFlg) {
+      for (i = 0U; i < cmnc_num_cellUNum; i++) {
+        SFM_DW.CellUArry[j + 3 * i] = ihv_V_cellU[i];
+      }
+
+      j++;
+    }
+
+    SFM_DW.FirstFlg = false;
+    for (j = 0U; j < 2; j++) {
+      for (i = 0U; i < cmnc_num_cellUNum; i++) {
+        i_0 = 3 * i + j;
+        SFM_DW.CellUArry[i_0] = SFM_DW.CellUArry[i_0 + 1];
+      }
+    }
+
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
+      SFM_DW.CellUArry[3 * i + 2] = ihv_V_cellU[i];
     }
-    FirstFlg=false;
-    
-//--------------------矩阵周期迭代数据,最新电压放置最后一行----------------------
-    for (j = 0U; j < 2; j++)
-    {
-        for (i = 0U; i < AppNVMData.BattCellCount; i++)
-        {
-            CellUAry[j][i] = CellUAry[j+1][i];
+
+    for (i = 0U; i < cmnc_num_cellUNum - 1; i++) {
+      i_0 = 3 * i;
+      tmp_1 = (i + 1) * 3;
+      i_0 = SFM_DW.CellUArry[i_0 + 2] - SFM_DW.CellUArry[i_0];
+      tmp_1 = SFM_DW.CellUArry[tmp_1 + 2] - SFM_DW.CellUArry[tmp_1];
+      if (((real_T)i_0 * 0.001 < -0.05) && ((real_T)tmp_1 * 0.001 > 0.05)) {
+        tmp_0 = SFM_DW.ChgNr[i] + 1;
+        if (tmp_0 > 255) {
+          tmp_0 = 255;
         }
+
+        SFM_DW.ChgNr[i] = (uint8_T)tmp_0;
+      } else {
+        SFM_DW.ChgNr[i] = 0U;
+      }
+
+      if ((SFM_DW.ChgNr[i] >= 2) && ((mul_s32_hiSR(i_0, 274877907, 6U) < -1) &&
+           (tmp_1 > 1000))) {
+        SFM_B.ErrFlg[i] = true;
+        SFM_DW.ErrUFlg[i] = true;
+        SFM_DW.ErrUFlg[i + 1] = true;
+      }
+
+      if (SFM_B.ErrFlg[i] && (i > 0)) {
+        for (j = 0U; j < i; j++) {
+          i_0 = i - j;
+          tmp_1 = i_0 * 3;
+          if ((real_T)(SFM_DW.CellUArry[tmp_1 + 2] - SFM_DW.CellUArry[tmp_1 + 1])
+              * 0.001 < -0.2) {
+            SFM_B.ErrFlg[i_0] = true;
+            SFM_DW.ErrUFlg[i_0] = true;
+          }
+        }
+      }
+    }
+
+    if ((mul_s32_hiSR(SFM_DW.CellUArry[2] - SFM_DW.CellUArry[1], 274877907, 6U) <
+         -1) && (mul_s32_hiSR(SFM_DW.CellUArry[5] - SFM_DW.CellUArry[4],
+          274877907, 6U) < -1) && (mul_s32_hiSR(SFM_DW.CellUArry[8] -
+          SFM_DW.CellUArry[7], 274877907, 6U) < -1)) {
+      SFM_B.GNDFlg = false;
+      SFM_DW.ErrUFlg[0] = true;
+      SFM_DW.ErrUFlg[1] = true;
+      SFM_DW.ErrUFlg[2] = true;
     }
-    for (i = 0U; i < AppNVMData.BattCellCount; i++)
-    {
-        CellUAry[2][i] = battCellU[i];
-    }
-    
-//-------------相邻单体电压2s内(前降后升50mv)连续两次或者单次 最近1s变化满足1000mv-------------------
-    for (i = 0U; i < AppNVMData.BattCellCount - 1; i++)
-    {
-        if ((((INT16)(CellUAry[2][i] - CellUAry[0][i]) <-50) && ((INT16)(CellUAry[2][i+1] - CellUAry[0][i+1]) >50)&&((changeFlg>>i)&0x01)==0x01) ||((INT16)(CellUAry[2][i] - CellUAry[1][i]) <-1000) && ((INT16)(CellUAry[2][i+1] - CellUAry[1][i+1]) >1000) )
-        {
-            ErrFlg = ErrFlg |(1<<i);
-            ErrUFlg = ErrUFlg |(1<<i);
-            ErrUFlg = ErrUFlg |(1<<(i+1));
+
+    i = 0U;
+    SFM_B.MinU = 10000U;
+    SFM_B.MaxU = 0U;
+    rtb_SumU = 0U;
+    j = 0U;
+    while (i < cmnc_num_cellUNum) {
+      if (!SFM_DW.ErrUFlg[i]) {
+        qY_0 = rtb_SumU + /*MW:OvSatOk*/ ihv_V_cellU[i];
+        if (qY_0 < rtb_SumU) {
+          qY_0 = MAX_uint32_T;
+        }
+
+        rtb_SumU = qY_0;
+        i_0 = j + 1;
+        if (j + 1 > 255) {
+          i_0 = 255;
         }
-        if (((INT16)(CellUAry[2][i] - CellUAry[0][i]) <-50) && ((INT16)(CellUAry[2][i+1] - CellUAry[0][i+1]) >50))
-        {
-            changeFlg = changeFlg |(1<<i);
+
+        j = (uint8_T)i_0;
+        if (ihv_V_cellU[i] > SFM_B.MaxU) {
+          SFM_B.MaxU = ihv_V_cellU[i];
         }
-        else
-        {
-            changeFlg = changeFlg&(~(1<<i));
+
+        if (ihv_V_cellU[i] < SFM_B.MinU) {
+          SFM_B.MinU = ihv_V_cellU[i];
         }
+      }
+
+      i++;
     }
 
-//-----------------从判断故障单体编号           向前循环判断单体电压是否下降超过200mv----------------------------------------------
-    for (i = 1U; i < AppNVMData.BattCellCount; i++)
-    {
-        if(((ErrFlg>>i)&0x01)==0x01)
-        {
-            for (k = 1U; k < i; k++)
-            {
-                if((INT16)(CellUAry[2][i-k] - CellUAry[1][i-k]) <-200)
-                {
-                    ErrFlg = ErrFlg |(1<<(i-k));
-                    ErrUFlg = ErrUFlg |(1<<(i-k));
-                }
-                else
-                {
-                    break;
-                }
+    if (SFM_B.MaxU - SFM_B.MinU > 3000) {
+      qY_0 = rtb_SumU - /*MW:OvSatOk*/ SFM_B.MaxU;
+      if (qY_0 > rtb_SumU) {
+        qY_0 = 0U;
+      }
+
+      qY = qY_0 - /*MW:OvSatOk*/ SFM_B.MinU;
+      if (qY > qY_0) {
+        qY = 0U;
+      }
+
+      qY_0 = div_uus32_sat(qY, j - 2);
+      if (qY_0 > 65535U) {
+        qY_0 = 65535U;
+      }
+
+      avrgU = (uint16_T)qY_0;
+      for (i = 0U; i < cmnc_num_cellUNum; i++) {
+        if (!SFM_DW.ErrUFlg[i]) {
+          tmp_2 = (real_T)(ihv_V_cellU[i] - (uint16_T)qY_0) * 0.001;
+          if ((tmp_2 > 1.5) || (tmp_2 < -1.5)) {
+            i_0 = SFM_DW.UdelNr[i] + 1;
+            if (i_0 > 255) {
+              i_0 = 255;
             }
+
+            SFM_DW.UdelNr[i] = (uint8_T)i_0;
+          } else {
+            SFM_DW.UdelNr[i] = 0U;
+          }
+
+          if (SFM_DW.UdelNr[i] >= 2) {
+            SFM_B.ErrFlg[i] = true;
+            SFM_DW.ErrUFlg[i] = true;
+          }
         }
+      }
+    } else {
+      qY_0 = j == 0U ? MAX_uint32_T : rtb_SumU / j;
+      if (qY_0 > 65535U) {
+        qY_0 = 65535U;
+      }
+
+      avrgU = (uint16_T)qY_0;
     }
-    
-//-----------------------B0开路:0 1 2 单体下降1000mv--- -------------------------
-    if(((INT16)(CellUAry[2][0] - CellUAry[1][0]) <-1000)&&((INT16)(CellUAry[2][1] - CellUAry[1][1]) <-1000)&&((INT16)(CellUAry[2][2] - CellUAry[1][2]) <-1000))
-    {
-        ErrUFlg = ErrUFlg|0x07;
-    }
-    
-//-----------------------求正常单体电压的平均--------------------
-    SumU=0;
-    Num=0;
-    MinU=battCellU[0];
-    MaxU=battCellU[0];
-    for (i = 0U; i < AppNVMData.BattCellCount ; i++)
-    {
-        if ( ((ErrUFlg>>i)&0x01) == 0)
-        {
-            SumU=SumU+battCellU[i];
-            Num++;
-            if(MinU>battCellU[i])
-            {
-                MinU=battCellU[i];
-            }
-            if(MaxU<battCellU[i])
-            {
-                MaxU=battCellU[i];
-            }
+
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
+      if (SFM_DW.ErrUFlg[i]) {
+        tmp_2 = (real_T)(ihv_V_cellU[i] - avrgU) * 0.001;
+        if ((tmp_2 < 0.2) && (tmp_2 > -0.2)) {
+          i_0 = SFM_DW.RecNr[i] + 1;
+          if (i_0 > 255) {
+            i_0 = 255;
+          }
+
+          SFM_DW.RecNr[i] = (uint8_T)i_0;
+        } else {
+          SFM_DW.RecNr[i] = 0U;
         }
+
+        if (SFM_DW.RecNr[i] >= 2) {
+          SFM_B.ErrFlg[i] = false;
+          SFM_DW.ErrUFlg[i] = false;
+          SFM_B.GNDFlg = ((i != 0) && SFM_B.GNDFlg);
+        }
+      }
+    }
+
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
+      if (SFM_DW.ErrUFlg[i]) {
+        SFM_B.CellU[i] = avrgU;
+      } else {
+        SFM_B.CellU[i] = ihv_V_cellU[i];
+      }
     }
-    if(MaxU-MinU>3000)
-    {
-        avrgU=(SumU-MaxU-MinU)/(Num-2);
-    }
-    else
-    {
-        avrgU=SumU/Num;
-    }
-//----------------------若上电初始已开路,无变化趋势,则采用压差判断-----------------------------------
-    if(MaxU-MinU>3000)
-    {
-        for (i = 0U; i < AppNVMData.BattCellCount ; i++)
-        {   if ( ((ErrUFlg>>i)&0x01) == 0)
-            {
-                if((((INT16)(battCellU[i]-avrgU)>1500)||((INT16)(battCellU[i]-avrgU)<-1500))&&((intiFlg>>i)&0x01)==0x01)
-                {
-                    ErrUFlg = ErrUFlg |(1<<i);
-                    ErrFlg = ErrFlg |(1<<i);
-                }
-                if(((INT16)(battCellU[i]-avrgU)>1500)||((INT16)(battCellU[i]-avrgU)<-1500))
-                {
-                    intiFlg = intiFlg |(1<<i);
-                }
-                else
-                {
-                    intiFlg = intiFlg&(~(1<<i));
-                }
+  } else {
+    for (i_0 = 0; i_0 < 28; i_0++) {
+      SFM_B.CellU[i_0] = ihv_V_cellU[i_0];
+      SFM_B.ErrFlg[i_0] = false;
+    }
+  }
+
+  i = 0U;
+  rtb_SumU = 0U;
+  while (i < cmnc_num_cellUNum) {
+    qY_0 = rtb_SumU + /*MW:OvSatOk*/ SFM_B.CellU[i];
+    if (qY_0 < rtb_SumU) {
+      qY_0 = MAX_uint32_T;
+    }
+
+    rtb_SumU = qY_0;
+    i++;
+  }
+
+  for (i_0 = 0; i_0 < 28; i_0++) {
+    /* SignalConversion generated from: '<S13>/Chart' */
+    sfmv_V_cellU[i_0] = SFM_B.CellU[i_0];
+  }
+
+
+
+
+  
+  /* Logic: '<S13>/Logical Operator1' */
+  tmp = SFM_B.ErrFlg[0];
+  for (i_0 = 0; i_0 < 27; i_0++) {
+    tmp = (tmp || SFM_B.ErrFlg[i_0 + 1]);
+  }
+
+  rtb_RelationalOperator_et = tmp;
+
+  /* Logic: '<S15>/Logical Operator' */
+  sfmv_flg_TFlt = false;
+
+  /* SignalConversion: '<S14>/Signal Conversion' incorporates:
+   *  Inport: '<Root>/ihd_flg_currFlt'
+   */
+  sfmd_flg_currFlt = ihd_flg_currFlt;
+
+  /* SignalConversion generated from: '<S13>/Chart' */
+  sfmd_V_cellUMax = SFM_B.MaxU;
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem' */
+  /* Constant: '<S28>/Constant28' incorporates:
+   *  Constant: '<S28>/Constant25'
+   *  Constant: '<S28>/Constant27'
+   *  Logic: '<S28>/Logical Operator5'
+   */
+  rtb_RelationalOperator1_ep = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMax, sfmc_V_cellUMaxThr2, 2, &SFM_DW.Subsytem_j0);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem2' */
+  /* Constant: '<S28>/Constant26' incorporates:
+   *  Constant: '<S28>/Constant23'
+   *  Constant: '<S28>/Constant24'
+   *  Logic: '<S28>/Logical Operator3'
+   */
+  rtb_RelationalOperator1_j = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMax, sfmc_V_cellUMaxThr1, 2, &SFM_DW.Subsytem2_p);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem2' */
+
+  /* SignalConversion generated from: '<S13>/Chart' */
+  sfmd_V_cellUMin = SFM_B.MinU;
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem1' */
+  /* Constant: '<S28>/Constant22' incorporates:
+   *  Constant: '<S28>/Constant20'
+   *  Constant: '<S28>/Constant21'
+   *  Logic: '<S28>/Logical Operator1'
+   */
+  rtb_RelationalOperator1_di = SFM_Subsytem1_n(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMin, sfmc_V_cellUMinThr2, 2, &SFM_DW.Subsytem1_n);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem1' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem3' */
+  /* Constant: '<S28>/Constant19' incorporates:
+   *  Constant: '<S28>/Constant10'
+   *  Constant: '<S28>/Constant18'
+   *  Logic: '<S28>/Logical Operator6'
+   */
+  rtb_RelationalOperator1_l = SFM_Subsytem1_n(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMin, sfmc_V_cellUMinThr1, 2, &SFM_DW.Subsytem3_b);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem3' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem4' */
+  /* Constant: '<S28>/Constant14' incorporates:
+   *  Constant: '<S28>/Constant12'
+   *  Constant: '<S28>/Constant13'
+   *  Logic: '<S28>/Logical Operator2'
+   *  SignalConversion generated from: '<S13>/Chart'
+   *  Sum: '<S28>/Add'
+   * */
+  rtb_RelationalOperator1_lf = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    (uint16_T)(sfmd_V_cellUMax - sfmd_V_cellUMin), sfmc_flg_cellUDiffThr2, 2,
+    &SFM_DW.Subsytem4_p);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem4' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem5' */
+  /* Constant: '<S28>/Constant1' incorporates:
+   *  Constant: '<S28>/Constant2'
+   *  Constant: '<S28>/Constant3'
+   *  Logic: '<S28>/Logical Operator9'
+   *  SignalConversion generated from: '<S13>/Chart'
+   *  Sum: '<S28>/Add1'
+   * */
+  rtb_RelationalOperator1_eg = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    (uint16_T)(sfmd_V_cellUMax - sfmd_V_cellUMin), sfmc_flg_cellUDiffThr1, 2,
+    &SFM_DW.Subsytem5_l);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem5' */
+
+  /* Logic: '<S13>/Logical Operator2' incorporates:
+   *  Logic: '<S13>/Logical Operator1'
+   */
+  sfmd_flg_volFlt = (tmp || rtb_RelationalOperator1);
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem5' */
+  rtb_RelationalOperator1_fg = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem5' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem6' */
+  /* Constant: '<S28>/Constant30' incorporates:
+   *  Constant: '<S28>/Constant16'
+   *  Constant: '<S28>/Constant29'
+   */
+  rtb_RelationalOperator1_fg = SFM_Subsytem6(1, rtb_RelationalOperator1_fg,
+    rtb_SumU, sfmc_V_battUMaxThr2, 2, &SFM_DW.Subsytem6);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem6' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem6' */
+  rtb_RelationalOperator1_o = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem6' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem8' */
+  /* Constant: '<S28>/Constant17' incorporates:
+   *  Constant: '<S28>/Constant11'
+   *  Constant: '<S28>/Constant15'
+   */
+  rtb_RelationalOperator1_it = SFM_Subsytem6(1, rtb_RelationalOperator1_o,
+    rtb_SumU, sfmc_V_battUMaxThr1, 2, &SFM_DW.Subsytem8);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem8' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem7' */
+  rtb_RelationalOperator1_o = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem7' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem7' */
+  /* Constant: '<S28>/Constant9' incorporates:
+   *  Constant: '<S28>/Constant7'
+   *  Constant: '<S28>/Constant8'
+   */
+  rtb_RelationalOperator1_o = SFM_Subsytem7(1, rtb_RelationalOperator1_o,
+    rtb_SumU, sfmc_V_battUMinThr2, 2, &SFM_DW.Subsytem7);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem7' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem8' */
+  rtb_RelationalOperator_et = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem8' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem9' */
+  /* Constant: '<S28>/Constant6' incorporates:
+   *  Constant: '<S28>/Constant4'
+   *  Constant: '<S28>/Constant5'
+   */
+  rtb_RelationalOperator_et = SFM_Subsytem7(1, rtb_RelationalOperator_et,
+    rtb_SumU, sfmc_V_battUMinThr1, 2, &SFM_DW.Subsytem9);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem9' */
+
+  /* Chart: '<S19>/ArrMin' incorporates:
+   *  Constant: '<S19>/Constant'
+   *  Inport: '<Root>/ihv_T_modT'
+   */
+  i = 0U;
+  sfmd_T_modTMax = ihv_T_modT[0];
+  while (i < cmnc_num_modTNum) {
+    if (sfmd_T_modTMax < ihv_T_modT[i]) {
+      sfmd_T_modTMax = ihv_T_modT[i];
+    }
+
+    i++;
+  }
+
+  /* End of Chart: '<S19>/ArrMin' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem' */
+  /* Constant: '<S27>/Constant28' incorporates:
+   *  Constant: '<S27>/Constant25'
+   *  Constant: '<S27>/Constant27'
+   *  Logic: '<S27>/Logical Operator5'
+   */
+  rtb_RelationalOperator1_p = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMax, sfmc_T_modTMaxThr2, 2, &SFM_DW.Subsytem_j);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem2' */
+  /* Constant: '<S27>/Constant26' incorporates:
+   *  Constant: '<S27>/Constant23'
+   *  Constant: '<S27>/Constant24'
+   *  Logic: '<S27>/Logical Operator1'
+   */
+  rtb_RelationalOperator1_a = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMax, sfmc_T_modTMaxThr1, 2, &SFM_DW.Subsytem2);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem2' */
+
+  /* Chart: '<S20>/ArrMin' incorporates:
+   *  Constant: '<S20>/Constant'
+   *  Inport: '<Root>/ihv_T_modT'
+   */
+  i = 0U;
+  sfmd_T_modTMin = ihv_T_modT[0];
+  while (i < cmnc_num_modTNum) {
+    if (sfmd_T_modTMin > ihv_T_modT[i]) {
+      sfmd_T_modTMin = ihv_T_modT[i];
+    }
+
+    i++;
+  }
+
+  /* End of Chart: '<S20>/ArrMin' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem1' */
+  /* Constant: '<S27>/Constant22' incorporates:
+   *  Constant: '<S27>/Constant20'
+   *  Constant: '<S27>/Constant21'
+   *  Logic: '<S27>/Logical Operator3'
+   */
+  rtb_RelationalOperator1_i = SFM_Subsytem1(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMin, sfmc_T_modTMinThr2, 2, &SFM_DW.Subsytem1_e);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem1' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem3' */
+  /* Constant: '<S27>/Constant19' incorporates:
+   *  Constant: '<S27>/Constant10'
+   *  Constant: '<S27>/Constant18'
+   *  Logic: '<S27>/Logical Operator7'
+   */
+  rtb_RelationalOperator1_d = SFM_Subsytem1(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMin, sfmc_T_modTMinThr1, 2, &SFM_DW.Subsytem3);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem3' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem4' */
+  /* Constant: '<S27>/Constant14' incorporates:
+   *  Constant: '<S27>/Constant12'
+   *  Constant: '<S27>/Constant13'
+   *  Logic: '<S27>/Logical Operator4'
+   *  Sum: '<S27>/Add'
+   */
+  rtb_RelationalOperator1_bb = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    (int16_T)(sfmd_T_modTMax - sfmd_T_modTMin), sfmc_T_modTDiffThr2, 2,
+    &SFM_DW.Subsytem4);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem4' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem5' */
+  /* Constant: '<S27>/Constant1' incorporates:
+   *  Constant: '<S27>/Constant2'
+   *  Constant: '<S27>/Constant3'
+   *  Logic: '<S27>/Logical Operator10'
+   *  Sum: '<S27>/Add1'
+   */
+  rtb_RelationalOperator1_gr = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    (int16_T)(sfmd_T_modTMax - sfmd_T_modTMin), sfmc_T_modTDiffThr1, 2,
+    &SFM_DW.Subsytem5);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem5' */
+
+  /* Switch: '<S14>/Switch' incorporates:
+   *  Inport: '<Root>/ihd_flg_currFlt'
+   */
+  if (ihd_flg_currFlt) {
+    /* Switch: '<S14>/Switch' incorporates:
+     *  Constant: '<S14>/Constant'
+     */
+    sfmd_I_curr = 0;
+  } else {
+    /* Switch: '<S14>/Switch' incorporates:
+     *  Inport: '<Root>/ihd_I_curr'
+     */
+    sfmd_I_curr = ihd_I_curr;
+  }
+
+  /* End of Switch: '<S14>/Switch' */
+
+  /* Outputs for Atomic SubSystem: '<S24>/Subsytem' */
+  /* Saturate: '<S29>/Saturation' incorporates:
+   *  Constant: '<S29>/Constant1'
+   *  Sum: '<S29>/Add'
+   *  UnitDelay: '<S29>/delay'
+   */
+  if ((uint8_T)(SFM_DW.delay_DSTATE_j + 1U) < 200) {
+    i = (uint8_T)(SFM_DW.delay_DSTATE_j + 1U);
+  } else {
+    i = 200U;
+  }
+
+  /* End of Saturate: '<S29>/Saturation' */
+
+  /* Product: '<S29>/Product' incorporates:
+   *  Constant: '<S24>/Constant27'
+   *  Logic: '<S24>/Logical Operator2'
+   *  Logic: '<S29>/Logical Operator1'
+   *  RelationalOperator: '<S29>/Relational Operator'
+   *  Switch: '<S14>/Switch'
+   *  UnitDelay: '<S29>/delay'
+   */
+  SFM_DW.delay_DSTATE_j = (uint8_T)((!rtb_RelationalOperator1) && (sfmd_I_curr >=
+    sfmc_I_chrgCurrOverThr) ? (int32_T)i : 0);
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S24>/Constant25'
+   *  RelationalOperator: '<S29>/Relational Operator1'
+   */
+  rtb_TmpSignalConversionAtSFun_a[130] = (i > 2);
+
+  /* End of Outputs for SubSystem: '<S24>/Subsytem' */
+
+  /* Outputs for Atomic SubSystem: '<S24>/Subsytem1' */
+  /* Saturate: '<S30>/Saturation' incorporates:
+   *  Constant: '<S30>/Constant2'
+   *  Sum: '<S30>/Add'
+   *  UnitDelay: '<S30>/delay'
+   */
+  if ((uint8_T)(SFM_DW.delay_DSTATE + 1U) < 200) {
+    i = (uint8_T)(SFM_DW.delay_DSTATE + 1U);
+  } else {
+    i = 200U;
+  }
+
+  /* End of Saturate: '<S30>/Saturation' */
+
+  /* Product: '<S30>/Product' incorporates:
+   *  Constant: '<S24>/Constant10'
+   *  Logic: '<S24>/Logical Operator1'
+   *  Logic: '<S30>/Logical Operator'
+   *  RelationalOperator: '<S30>/Relational Operator'
+   *  Switch: '<S14>/Switch'
+   *  UnitDelay: '<S30>/delay'
+   */
+  SFM_DW.delay_DSTATE = (uint8_T)((!rtb_RelationalOperator1) && (sfmd_I_curr <=
+    sfmc_I_dischrgCurrOverThr) ? (int32_T)i : 0);
+
+  /* End of Outputs for SubSystem: '<S24>/Subsytem1' */
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S10>/Constant1'
+   *  Constant: '<S10>/Constant10'
+   *  Constant: '<S10>/Constant12'
+   *  Constant: '<S10>/Constant13'
+   *  Constant: '<S10>/Constant14'
+   *  Constant: '<S10>/Constant15'
+   *  Constant: '<S10>/Constant16'
+   *  Constant: '<S10>/Constant17'
+   *  Constant: '<S10>/Constant18'
+   *  Constant: '<S10>/Constant19'
+   *  Constant: '<S10>/Constant2'
+   *  Constant: '<S10>/Constant20'
+   *  Constant: '<S10>/Constant21'
+   *  Constant: '<S10>/Constant22'
+   *  Constant: '<S10>/Constant23'
+   *  Constant: '<S10>/Constant24'
+   *  Constant: '<S10>/Constant25'
+   *  Constant: '<S10>/Constant26'
+   *  Constant: '<S10>/Constant27'
+   *  Constant: '<S10>/Constant28'
+   *  Constant: '<S10>/Constant29'
+   *  Constant: '<S10>/Constant3'
+   *  Constant: '<S10>/Constant4'
+   *  Constant: '<S10>/Constant5'
+   *  Constant: '<S10>/Constant6'
+   *  Constant: '<S10>/Constant7'
+   *  Constant: '<S10>/Constant8'
+   *  Constant: '<S10>/Constant9'
+   *  Constant: '<S12>/Constant'
+   *  Constant: '<S12>/Constant1'
+   *  Constant: '<S12>/Constant2'
+   *  Constant: '<S12>/Constant3'
+   *  Constant: '<S12>/Constant4'
+   *  Constant: '<S12>/Constant5'
+   *  Constant: '<S12>/Constant6'
+   *  Constant: '<S12>/Constant7'
+   *  Constant: '<S12>/Constant8'
+   *  Constant: '<S12>/Constant9'
+   *  Constant: '<S15>/Constant11'
+   *  Constant: '<S15>/Constant12'
+   *  Constant: '<S15>/Constant13'
+   *  Constant: '<S15>/Constant14'
+   *  Constant: '<S15>/Constant15'
+   *  Constant: '<S15>/Constant16'
+   *  Constant: '<S15>/Constant17'
+   *  Constant: '<S15>/Constant18'
+   *  Constant: '<S15>/Constant19'
+   *  Constant: '<S15>/Constant20'
+   *  Constant: '<S15>/Constant21'
+   *  Constant: '<S15>/Constant4'
+   *  Constant: '<S15>/Constant5'
+   *  Constant: '<S15>/Constant6'
+   *  Constant: '<S15>/Constant7'
+   *  Constant: '<S15>/Constant8'
+   *  Constant: '<S15>/Constant9'
+   *  Constant: '<S16>/Constant'
+   *  Constant: '<S16>/Constant1'
+   *  Constant: '<S16>/Constant2'
+   *  Constant: '<S16>/Constant3'
+   *  Constant: '<S16>/Constant4'
+   *  Constant: '<S16>/Constant5'
+   *  Constant: '<S16>/Constant6'
+   *  Constant: '<S16>/Constant7'
+   *  Constant: '<S17>/Constant1'
+   *  Constant: '<S24>/Constant1'
+   *  Constant: '<S24>/Constant2'
+   *  Constant: '<S24>/Constant3'
+   *  Constant: '<S24>/Constant4'
+   *  Constant: '<S24>/Constant5'
+   *  Constant: '<S24>/Constant6'
+   *  Constant: '<S24>/Constant7'
+   *  Constant: '<S24>/Constant8'
+   *  Constant: '<S24>/Constant9'
+   *  Constant: '<S25>/Constant1'
+   *  Constant: '<S25>/Constant2'
+   *  Constant: '<S25>/Constant3'
+   *  Constant: '<S25>/Constant4'
+   *  Constant: '<S25>/Constant5'
+   *  Constant: '<S25>/Constant6'
+   *  Constant: '<S25>/Constant7'
+   *  Constant: '<S25>/Constant8'
+   *  Constant: '<S25>/Constant9'
+   *  Constant: '<S26>/Constant'
+   *  Constant: '<S27>/Constant'
+   *  Constant: '<S27>/Constant11'
+   *  Constant: '<S27>/Constant15'
+   *  Constant: '<S27>/Constant16'
+   *  Constant: '<S27>/Constant17'
+   *  Constant: '<S27>/Constant29'
+   *  Constant: '<S27>/Constant30'
+   *  Constant: '<S27>/Constant31'
+   *  Constant: '<S27>/Constant32'
+   *  Constant: '<S27>/Constant33'
+   *  Constant: '<S27>/Constant34'
+   *  Constant: '<S27>/Constant35'
+   *  Constant: '<S27>/Constant36'
+   *  Constant: '<S27>/Constant37'
+   *  Constant: '<S27>/Constant38'
+   *  Constant: '<S27>/Constant39'
+   *  Constant: '<S27>/Constant4'
+   *  Constant: '<S27>/Constant40'
+   *  Constant: '<S27>/Constant41'
+   *  Constant: '<S27>/Constant5'
+   *  Constant: '<S27>/Constant6'
+   *  Constant: '<S27>/Constant7'
+   *  Constant: '<S27>/Constant8'
+   *  Constant: '<S27>/Constant9'
+   *  Constant: '<S28>/Constant'
+   *  Constant: '<S28>/Constant31'
+   *  Constant: '<S28>/Constant32'
+   *  Constant: '<S28>/Constant33'
+   *  Constant: '<S28>/Constant34'
+   *  Constant: '<S28>/Constant35'
+   *  Constant: '<S28>/Constant36'
+   *  Constant: '<S28>/Constant37'
+   *  Constant: '<S28>/Constant38'
+   *  Constant: '<S28>/Constant39'
+   *  Constant: '<S6>/Constant'
+   *  Constant: '<S8>/Constant'
+   *  Constant: '<S8>/Constant1'
+   *  Constant: '<S8>/Constant2'
+   *  Constant: '<S8>/Constant3'
+   *  Constant: '<S8>/Constant4'
+   *  Constant: '<S9>/Constant1'
+   *  Constant: '<S9>/Constant10'
+   *  Constant: '<S9>/Constant2'
+   *  Constant: '<S9>/Constant3'
+   *  Constant: '<S9>/Constant4'
+   *  Constant: '<S9>/Constant5'
+   *  Constant: '<S9>/Constant7'
+   *  Constant: '<S9>/Constant8'
+   *  Constant: '<S9>/Constant9'
+   *  Inport: '<Root>/ihd_flg_chrgMosClosFlt'
+   *  Inport: '<Root>/ihd_flg_disChrgMosClosFlt'
+   *  Logic: '<S13>/Logical Operator1'
+   *  Logic: '<S27>/Logical Operator12'
+   *  Logic: '<S27>/Logical Operator13'
+   *  Logic: '<S27>/Logical Operator2'
+   *  Logic: '<S27>/Logical Operator6'
+   *  Logic: '<S27>/Logical Operator8'
+   *  Logic: '<S27>/Logical Operator9'
+   *  Logic: '<S28>/Logical Operator'
+   *  Logic: '<S28>/Logical Operator10'
+   *  Logic: '<S28>/Logical Operator11'
+   *  Logic: '<S28>/Logical Operator12'
+   *  Logic: '<S28>/Logical Operator13'
+   *  Logic: '<S28>/Logical Operator14'
+   *  Logic: '<S28>/Logical Operator15'
+   *  Logic: '<S28>/Logical Operator4'
+   *  Logic: '<S28>/Logical Operator7'
+   *  Logic: '<S28>/Logical Operator8'
+   *  RelationalOperator: '<S30>/Relational Operator1'
+   */
+  rtb_TmpSignalConversionAtSFun_a[0] = rtb_RelationalOperator1;
+  rtb_TmpSignalConversionAtSFun_a[1] = false;
+  rtb_TmpSignalConversionAtSFun_a[2] = false;
+  rtb_TmpSignalConversionAtSFun_a[3] = false;
+  rtb_TmpSignalConversionAtSFun_a[4] = false;
+  rtb_TmpSignalConversionAtSFun_a[5] = false;
+  rtb_TmpSignalConversionAtSFun_a[6] = false;
+  rtb_TmpSignalConversionAtSFun_a[7] = false;
+  rtb_TmpSignalConversionAtSFun_a[8] = false;
+  rtb_TmpSignalConversionAtSFun_a[9] = false;
+  rtb_TmpSignalConversionAtSFun_a[10] = false;
+  rtb_TmpSignalConversionAtSFun_a[11] = false;
+  rtb_TmpSignalConversionAtSFun_a[12] = false;
+  rtb_TmpSignalConversionAtSFun_a[13] = false;
+  rtb_TmpSignalConversionAtSFun_a[14] = false;
+  rtb_TmpSignalConversionAtSFun_a[15] = false;
+  rtb_TmpSignalConversionAtSFun_a[16] = false;
+  rtb_TmpSignalConversionAtSFun_a[17] = false;
+  rtb_TmpSignalConversionAtSFun_a[18] = false;
+  rtb_TmpSignalConversionAtSFun_a[19] = false;
+  rtb_TmpSignalConversionAtSFun_a[20] = false;
+  rtb_TmpSignalConversionAtSFun_a[21] = ihd_flg_chrgMosClosFlt;
+  rtb_TmpSignalConversionAtSFun_a[22] = false;
+  rtb_TmpSignalConversionAtSFun_a[23] = ihd_flg_dischrgMosClosFlt;
+  rtb_TmpSignalConversionAtSFun_a[24] = false;
+  rtb_TmpSignalConversionAtSFun_a[25] = false;
+  rtb_TmpSignalConversionAtSFun_a[26] = false;
+  rtb_TmpSignalConversionAtSFun_a[27] = false;
+  rtb_TmpSignalConversionAtSFun_a[28] = false;
+  rtb_TmpSignalConversionAtSFun_a[29] = false;
+  rtb_TmpSignalConversionAtSFun_a[30] = false;
+  rtb_TmpSignalConversionAtSFun_a[31] = false;
+  rtb_TmpSignalConversionAtSFun_a[32] = false;
+  rtb_TmpSignalConversionAtSFun_a[33] = false;
+  rtb_TmpSignalConversionAtSFun_a[34] = false;
+  rtb_TmpSignalConversionAtSFun_a[35] = false;
+  rtb_TmpSignalConversionAtSFun_a[36] = false;
+  rtb_TmpSignalConversionAtSFun_a[37] = false;
+  rtb_TmpSignalConversionAtSFun_a[38] = false;
+  rtb_TmpSignalConversionAtSFun_a[39] = false;
+  rtb_TmpSignalConversionAtSFun_a[40] = false;
+  rtb_TmpSignalConversionAtSFun_a[41] = false;
+  rtb_TmpSignalConversionAtSFun_a[42] = false;
+  rtb_TmpSignalConversionAtSFun_a[43] = false;
+  rtb_TmpSignalConversionAtSFun_a[44] = false;
+  rtb_TmpSignalConversionAtSFun_a[45] = false;
+  rtb_TmpSignalConversionAtSFun_a[46] = false;
+  rtb_TmpSignalConversionAtSFun_a[47] = false;
+  rtb_TmpSignalConversionAtSFun_a[48] = false;
+  rtb_TmpSignalConversionAtSFun_a[49] = false;
+  rtb_TmpSignalConversionAtSFun_a[50] = false;
+  rtb_TmpSignalConversionAtSFun_a[51] = tmp;
+  rtb_TmpSignalConversionAtSFun_a[52] = sfmv_flg_TFlt;
+  rtb_TmpSignalConversionAtSFun_a[53] = false;
+  rtb_TmpSignalConversionAtSFun_a[54] = false;
+  rtb_TmpSignalConversionAtSFun_a[55] = false;
+  rtb_TmpSignalConversionAtSFun_a[56] = false;
+  rtb_TmpSignalConversionAtSFun_a[57] = false;
+  rtb_TmpSignalConversionAtSFun_a[58] = false;
+  rtb_TmpSignalConversionAtSFun_a[59] = false;
+  rtb_TmpSignalConversionAtSFun_a[60] = false;
+  rtb_TmpSignalConversionAtSFun_a[61] = false;
+  rtb_TmpSignalConversionAtSFun_a[62] = false;
+  rtb_TmpSignalConversionAtSFun_a[63] = false;
+  rtb_TmpSignalConversionAtSFun_a[64] = false;
+  rtb_TmpSignalConversionAtSFun_a[65] = false;
+  rtb_TmpSignalConversionAtSFun_a[66] = false;
+  rtb_TmpSignalConversionAtSFun_a[67] = false;
+  rtb_TmpSignalConversionAtSFun_a[68] = false;
+  rtb_TmpSignalConversionAtSFun_a[69] = false;
+  rtb_TmpSignalConversionAtSFun_a[70] = sfmd_flg_currFlt;
+  rtb_TmpSignalConversionAtSFun_a[71] = false;
+  rtb_TmpSignalConversionAtSFun_a[72] = false;
+  rtb_TmpSignalConversionAtSFun_a[73] = false;
+  rtb_TmpSignalConversionAtSFun_a[74] = false;
+  rtb_TmpSignalConversionAtSFun_a[75] = false;
+  rtb_TmpSignalConversionAtSFun_a[76] = false;
+  rtb_TmpSignalConversionAtSFun_a[77] = false;
+  rtb_TmpSignalConversionAtSFun_a[78] = false;
+  rtb_TmpSignalConversionAtSFun_a[79] = false;
+  rtb_TmpSignalConversionAtSFun_a[80] = rtb_RelationalOperator1_ep;
+  rtb_TmpSignalConversionAtSFun_a[81] = (rtb_RelationalOperator1_j &&
+    (!rtb_RelationalOperator1_ep));
+  rtb_TmpSignalConversionAtSFun_a[82] = rtb_RelationalOperator1_di;
+  rtb_TmpSignalConversionAtSFun_a[83] = (rtb_RelationalOperator1_l &&
+    (!rtb_RelationalOperator1_di));
+  rtb_TmpSignalConversionAtSFun_a[84] = rtb_RelationalOperator1_lf;
+  rtb_TmpSignalConversionAtSFun_a[85] = (rtb_RelationalOperator1_eg &&
+    (!rtb_RelationalOperator1_lf));
+  rtb_TmpSignalConversionAtSFun_a[86] = rtb_RelationalOperator1_fg;
+  rtb_TmpSignalConversionAtSFun_a[87] = (rtb_RelationalOperator1_it &&
+    (!rtb_RelationalOperator1_fg));
+  rtb_TmpSignalConversionAtSFun_a[88] = rtb_RelationalOperator1_o;
+  rtb_TmpSignalConversionAtSFun_a[89] = (rtb_RelationalOperator_et &&
+    (!rtb_RelationalOperator1_o));
+  rtb_TmpSignalConversionAtSFun_a[90] = false;
+  rtb_TmpSignalConversionAtSFun_a[91] = false;
+  rtb_TmpSignalConversionAtSFun_a[92] = false;
+  rtb_TmpSignalConversionAtSFun_a[93] = false;
+  rtb_TmpSignalConversionAtSFun_a[94] = false;
+  rtb_TmpSignalConversionAtSFun_a[95] = false;
+  rtb_TmpSignalConversionAtSFun_a[96] = false;
+  rtb_TmpSignalConversionAtSFun_a[97] = false;
+  rtb_TmpSignalConversionAtSFun_a[98] = false;
+  rtb_TmpSignalConversionAtSFun_a[99] = false;
+  rtb_TmpSignalConversionAtSFun_a[100] = rtb_RelationalOperator1_p;
+  rtb_TmpSignalConversionAtSFun_a[101] = (rtb_RelationalOperator1_a &&
+    (!rtb_RelationalOperator1_p));
+  rtb_TmpSignalConversionAtSFun_a[102] = rtb_RelationalOperator1_i;
+  rtb_TmpSignalConversionAtSFun_a[103] = (rtb_RelationalOperator1_d &&
+    (!rtb_RelationalOperator1_i));
+  rtb_TmpSignalConversionAtSFun_a[104] = rtb_RelationalOperator1_bb;
+  rtb_TmpSignalConversionAtSFun_a[105] = (rtb_RelationalOperator1_gr &&
+    (!rtb_RelationalOperator1_bb));
+  rtb_TmpSignalConversionAtSFun_a[106] = false;
+  rtb_TmpSignalConversionAtSFun_a[107] = false;
+  rtb_TmpSignalConversionAtSFun_a[108] = false;
+  rtb_TmpSignalConversionAtSFun_a[109] = false;
+  rtb_TmpSignalConversionAtSFun_a[110] = false;
+  rtb_TmpSignalConversionAtSFun_a[111] = false;
+  rtb_TmpSignalConversionAtSFun_a[112] = false;
+  rtb_TmpSignalConversionAtSFun_a[113] = false;
+  rtb_TmpSignalConversionAtSFun_a[114] = false;
+  rtb_TmpSignalConversionAtSFun_a[115] = false;
+  rtb_TmpSignalConversionAtSFun_a[116] = false;
+  rtb_TmpSignalConversionAtSFun_a[117] = false;
+  rtb_TmpSignalConversionAtSFun_a[118] = false;
+  rtb_TmpSignalConversionAtSFun_a[119] = false;
+  rtb_TmpSignalConversionAtSFun_a[120] = false;
+  rtb_TmpSignalConversionAtSFun_a[121] = false;
+  rtb_TmpSignalConversionAtSFun_a[122] = false;
+  rtb_TmpSignalConversionAtSFun_a[123] = false;
+  rtb_TmpSignalConversionAtSFun_a[124] = false;
+  rtb_TmpSignalConversionAtSFun_a[125] = false;
+  rtb_TmpSignalConversionAtSFun_a[126] = false;
+  rtb_TmpSignalConversionAtSFun_a[127] = false;
+  rtb_TmpSignalConversionAtSFun_a[128] = false;
+  rtb_TmpSignalConversionAtSFun_a[129] = false;
+
+  /* Outputs for Atomic SubSystem: '<S24>/Subsytem1' */
+  rtb_TmpSignalConversionAtSFun_a[131] = (i > 2);
+
+  /* End of Outputs for SubSystem: '<S24>/Subsytem1' */
+  rtb_TmpSignalConversionAtSFun_a[132] = false;
+  rtb_TmpSignalConversionAtSFun_a[133] = false;
+  rtb_TmpSignalConversionAtSFun_a[134] = false;
+  rtb_TmpSignalConversionAtSFun_a[135] = false;
+  rtb_TmpSignalConversionAtSFun_a[136] = false;
+  rtb_TmpSignalConversionAtSFun_a[137] = false;
+  rtb_TmpSignalConversionAtSFun_a[138] = false;
+  rtb_TmpSignalConversionAtSFun_a[139] = false;
+  rtb_TmpSignalConversionAtSFun_a[140] = false;
+  rtb_TmpSignalConversionAtSFun_a[141] = false;
+  rtb_TmpSignalConversionAtSFun_a[142] = false;
+  rtb_TmpSignalConversionAtSFun_a[143] = false;
+  rtb_TmpSignalConversionAtSFun_a[144] = false;
+  rtb_TmpSignalConversionAtSFun_a[145] = false;
+  rtb_TmpSignalConversionAtSFun_a[146] = false;
+  rtb_TmpSignalConversionAtSFun_a[147] = false;
+  rtb_TmpSignalConversionAtSFun_a[148] = false;
+  rtb_TmpSignalConversionAtSFun_a[149] = false;
+  rtb_TmpSignalConversionAtSFun_a[150] = false;
+  rtb_TmpSignalConversionAtSFun_a[151] = false;
+  rtb_TmpSignalConversionAtSFun_a[152] = false;
+  rtb_TmpSignalConversionAtSFun_a[153] = false;
+  rtb_TmpSignalConversionAtSFun_a[154] = false;
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S3>/Constant1'
+   *  Constant: '<S3>/Constant10'
+   *  Constant: '<S3>/Constant100'
+   *  Constant: '<S3>/Constant101'
+   *  Constant: '<S3>/Constant102'
+   *  Constant: '<S3>/Constant103'
+   *  Constant: '<S3>/Constant104'
+   *  Constant: '<S3>/Constant105'
+   *  Constant: '<S3>/Constant106'
+   *  Constant: '<S3>/Constant107'
+   *  Constant: '<S3>/Constant108'
+   *  Constant: '<S3>/Constant109'
+   *  Constant: '<S3>/Constant11'
+   *  Constant: '<S3>/Constant110'
+   *  Constant: '<S3>/Constant111'
+   *  Constant: '<S3>/Constant112'
+   *  Constant: '<S3>/Constant113'
+   *  Constant: '<S3>/Constant114'
+   *  Constant: '<S3>/Constant115'
+   *  Constant: '<S3>/Constant116'
+   *  Constant: '<S3>/Constant117'
+   *  Constant: '<S3>/Constant118'
+   *  Constant: '<S3>/Constant119'
+   *  Constant: '<S3>/Constant12'
+   *  Constant: '<S3>/Constant120'
+   *  Constant: '<S3>/Constant121'
+   *  Constant: '<S3>/Constant122'
+   *  Constant: '<S3>/Constant123'
+   *  Constant: '<S3>/Constant124'
+   *  Constant: '<S3>/Constant125'
+   *  Constant: '<S3>/Constant126'
+   *  Constant: '<S3>/Constant127'
+   *  Constant: '<S3>/Constant128'
+   *  Constant: '<S3>/Constant129'
+   *  Constant: '<S3>/Constant13'
+   *  Constant: '<S3>/Constant130'
+   *  Constant: '<S3>/Constant131'
+   *  Constant: '<S3>/Constant132'
+   *  Constant: '<S3>/Constant133'
+   *  Constant: '<S3>/Constant134'
+   *  Constant: '<S3>/Constant135'
+   *  Constant: '<S3>/Constant136'
+   *  Constant: '<S3>/Constant137'
+   *  Constant: '<S3>/Constant138'
+   *  Constant: '<S3>/Constant139'
+   *  Constant: '<S3>/Constant14'
+   *  Constant: '<S3>/Constant140'
+   *  Constant: '<S3>/Constant141'
+   *  Constant: '<S3>/Constant142'
+   *  Constant: '<S3>/Constant143'
+   *  Constant: '<S3>/Constant144'
+   *  Constant: '<S3>/Constant145'
+   *  Constant: '<S3>/Constant146'
+   *  Constant: '<S3>/Constant147'
+   *  Constant: '<S3>/Constant148'
+   *  Constant: '<S3>/Constant149'
+   *  Constant: '<S3>/Constant15'
+   *  Constant: '<S3>/Constant150'
+   *  Constant: '<S3>/Constant151'
+   *  Constant: '<S3>/Constant152'
+   *  Constant: '<S3>/Constant153'
+   *  Constant: '<S3>/Constant154'
+   *  Constant: '<S3>/Constant155'
+   *  Constant: '<S3>/Constant157'
+   *  Constant: '<S3>/Constant158'
+   *  Constant: '<S3>/Constant159'
+   *  Constant: '<S3>/Constant16'
+   *  Constant: '<S3>/Constant160'
+   *  Constant: '<S3>/Constant17'
+   *  Constant: '<S3>/Constant18'
+   *  Constant: '<S3>/Constant19'
+   *  Constant: '<S3>/Constant20'
+   *  Constant: '<S3>/Constant21'
+   *  Constant: '<S3>/Constant22'
+   *  Constant: '<S3>/Constant23'
+   *  Constant: '<S3>/Constant24'
+   *  Constant: '<S3>/Constant25'
+   *  Constant: '<S3>/Constant26'
+   *  Constant: '<S3>/Constant27'
+   *  Constant: '<S3>/Constant28'
+   *  Constant: '<S3>/Constant29'
+   *  Constant: '<S3>/Constant30'
+   *  Constant: '<S3>/Constant31'
+   *  Constant: '<S3>/Constant32'
+   *  Constant: '<S3>/Constant33'
+   *  Constant: '<S3>/Constant34'
+   *  Constant: '<S3>/Constant35'
+   *  Constant: '<S3>/Constant36'
+   *  Constant: '<S3>/Constant37'
+   *  Constant: '<S3>/Constant38'
+   *  Constant: '<S3>/Constant39'
+   *  Constant: '<S3>/Constant4'
+   *  Constant: '<S3>/Constant40'
+   *  Constant: '<S3>/Constant41'
+   *  Constant: '<S3>/Constant42'
+   *  Constant: '<S3>/Constant43'
+   *  Constant: '<S3>/Constant44'
+   *  Constant: '<S3>/Constant45'
+   *  Constant: '<S3>/Constant46'
+   *  Constant: '<S3>/Constant47'
+   *  Constant: '<S3>/Constant48'
+   *  Constant: '<S3>/Constant49'
+   *  Constant: '<S3>/Constant5'
+   *  Constant: '<S3>/Constant50'
+   *  Constant: '<S3>/Constant51'
+   *  Constant: '<S3>/Constant52'
+   *  Constant: '<S3>/Constant53'
+   *  Constant: '<S3>/Constant54'
+   *  Constant: '<S3>/Constant55'
+   *  Constant: '<S3>/Constant56'
+   *  Constant: '<S3>/Constant57'
+   *  Constant: '<S3>/Constant58'
+   *  Constant: '<S3>/Constant59'
+   *  Constant: '<S3>/Constant6'
+   *  Constant: '<S3>/Constant60'
+   *  Constant: '<S3>/Constant61'
+   *  Constant: '<S3>/Constant62'
+   *  Constant: '<S3>/Constant63'
+   *  Constant: '<S3>/Constant64'
+   *  Constant: '<S3>/Constant65'
+   *  Constant: '<S3>/Constant66'
+   *  Constant: '<S3>/Constant67'
+   *  Constant: '<S3>/Constant68'
+   *  Constant: '<S3>/Constant69'
+   *  Constant: '<S3>/Constant7'
+   *  Constant: '<S3>/Constant70'
+   *  Constant: '<S3>/Constant71'
+   *  Constant: '<S3>/Constant72'
+   *  Constant: '<S3>/Constant73'
+   *  Constant: '<S3>/Constant74'
+   *  Constant: '<S3>/Constant75'
+   *  Constant: '<S3>/Constant76'
+   *  Constant: '<S3>/Constant77'
+   *  Constant: '<S3>/Constant78'
+   *  Constant: '<S3>/Constant79'
+   *  Constant: '<S3>/Constant8'
+   *  Constant: '<S3>/Constant80'
+   *  Constant: '<S3>/Constant81'
+   *  Constant: '<S3>/Constant84'
+   *  Constant: '<S3>/Constant85'
+   *  Constant: '<S3>/Constant86'
+   *  Constant: '<S3>/Constant87'
+   *  Constant: '<S3>/Constant88'
+   *  Constant: '<S3>/Constant89'
+   *  Constant: '<S3>/Constant9'
+   *  Constant: '<S3>/Constant90'
+   *  Constant: '<S3>/Constant91'
+   *  Constant: '<S3>/Constant92'
+   *  Constant: '<S3>/Constant93'
+   *  Constant: '<S3>/Constant94'
+   *  Constant: '<S3>/Constant95'
+   *  Constant: '<S3>/Constant96'
+   *  Constant: '<S3>/Constant97'
+   *  Constant: '<S3>/Constant98'
+   *  Constant: '<S3>/Constant99'
+   */
+  rtb_TmpSignalConversionAtSFunct[0] = 2U;
+  rtb_TmpSignalConversionAtSFunct[1] = 2U;
+  rtb_TmpSignalConversionAtSFunct[2] = 2U;
+  rtb_TmpSignalConversionAtSFunct[3] = 2U;
+  rtb_TmpSignalConversionAtSFunct[4] = 4U;
+  rtb_TmpSignalConversionAtSFunct[5] = 0U;
+  rtb_TmpSignalConversionAtSFunct[6] = 0U;
+  rtb_TmpSignalConversionAtSFunct[7] = 0U;
+  rtb_TmpSignalConversionAtSFunct[8] = 0U;
+  rtb_TmpSignalConversionAtSFunct[9] = 0U;
+  rtb_TmpSignalConversionAtSFunct[10] = 5U;
+  rtb_TmpSignalConversionAtSFunct[11] = 5U;
+  rtb_TmpSignalConversionAtSFunct[12] = 2U;
+  rtb_TmpSignalConversionAtSFunct[13] = 5U;
+  rtb_TmpSignalConversionAtSFunct[14] = 3U;
+  rtb_TmpSignalConversionAtSFunct[15] = 0U;
+  rtb_TmpSignalConversionAtSFunct[16] = 0U;
+  rtb_TmpSignalConversionAtSFunct[17] = 0U;
+  rtb_TmpSignalConversionAtSFunct[18] = 0U;
+  rtb_TmpSignalConversionAtSFunct[19] = 0U;
+  rtb_TmpSignalConversionAtSFunct[20] = 5U;
+  rtb_TmpSignalConversionAtSFunct[21] = 4U;
+  rtb_TmpSignalConversionAtSFunct[22] = 2U;
+  rtb_TmpSignalConversionAtSFunct[23] = 4U;
+  rtb_TmpSignalConversionAtSFunct[24] = 2U;
+  rtb_TmpSignalConversionAtSFunct[25] = 3U;
+  rtb_TmpSignalConversionAtSFunct[26] = 3U;
+  rtb_TmpSignalConversionAtSFunct[27] = 3U;
+  rtb_TmpSignalConversionAtSFunct[28] = 3U;
+  rtb_TmpSignalConversionAtSFunct[29] = 5U;
+  rtb_TmpSignalConversionAtSFunct[30] = 2U;
+  rtb_TmpSignalConversionAtSFunct[31] = 4U;
+  rtb_TmpSignalConversionAtSFunct[32] = 0U;
+  rtb_TmpSignalConversionAtSFunct[33] = 0U;
+  rtb_TmpSignalConversionAtSFunct[34] = 0U;
+  rtb_TmpSignalConversionAtSFunct[35] = 0U;
+  rtb_TmpSignalConversionAtSFunct[36] = 0U;
+  rtb_TmpSignalConversionAtSFunct[37] = 0U;
+  rtb_TmpSignalConversionAtSFunct[38] = 0U;
+  rtb_TmpSignalConversionAtSFunct[39] = 0U;
+  rtb_TmpSignalConversionAtSFunct[40] = 0U;
+  rtb_TmpSignalConversionAtSFunct[41] = 0U;
+  rtb_TmpSignalConversionAtSFunct[42] = 0U;
+  rtb_TmpSignalConversionAtSFunct[43] = 0U;
+  rtb_TmpSignalConversionAtSFunct[44] = 0U;
+  rtb_TmpSignalConversionAtSFunct[45] = 0U;
+  rtb_TmpSignalConversionAtSFunct[46] = 0U;
+  rtb_TmpSignalConversionAtSFunct[47] = 0U;
+  rtb_TmpSignalConversionAtSFunct[48] = 0U;
+  rtb_TmpSignalConversionAtSFunct[49] = 0U;
+  rtb_TmpSignalConversionAtSFunct[50] = 2U;
+  rtb_TmpSignalConversionAtSFunct[51] = 4U;
+  rtb_TmpSignalConversionAtSFunct[52] = 4U;
+  rtb_TmpSignalConversionAtSFunct[53] = 4U;
+  rtb_TmpSignalConversionAtSFunct[54] = 4U;
+  rtb_TmpSignalConversionAtSFunct[55] = 4U;
+  rtb_TmpSignalConversionAtSFunct[56] = 4U;
+  rtb_TmpSignalConversionAtSFunct[57] = 2U;
+  rtb_TmpSignalConversionAtSFunct[58] = 2U;
+  rtb_TmpSignalConversionAtSFunct[59] = 3U;
+  rtb_TmpSignalConversionAtSFunct[60] = 0U;
+  rtb_TmpSignalConversionAtSFunct[61] = 0U;
+  rtb_TmpSignalConversionAtSFunct[62] = 0U;
+  rtb_TmpSignalConversionAtSFunct[63] = 0U;
+  rtb_TmpSignalConversionAtSFunct[64] = 0U;
+  rtb_TmpSignalConversionAtSFunct[65] = 0U;
+  rtb_TmpSignalConversionAtSFunct[66] = 0U;
+  rtb_TmpSignalConversionAtSFunct[67] = 0U;
+  rtb_TmpSignalConversionAtSFunct[68] = 0U;
+  rtb_TmpSignalConversionAtSFunct[69] = 0U;
+  rtb_TmpSignalConversionAtSFunct[70] = 4U;
+  rtb_TmpSignalConversionAtSFunct[71] = 2U;
+  rtb_TmpSignalConversionAtSFunct[72] = 0U;
+  rtb_TmpSignalConversionAtSFunct[73] = 0U;
+  rtb_TmpSignalConversionAtSFunct[74] = 0U;
+  rtb_TmpSignalConversionAtSFunct[75] = 0U;
+  rtb_TmpSignalConversionAtSFunct[76] = 0U;
+  rtb_TmpSignalConversionAtSFunct[77] = 0U;
+  rtb_TmpSignalConversionAtSFunct[78] = 0U;
+  rtb_TmpSignalConversionAtSFunct[79] = 0U;
+  rtb_TmpSignalConversionAtSFunct[80] = 4U;
+  rtb_TmpSignalConversionAtSFunct[81] = 3U;
+  rtb_TmpSignalConversionAtSFunct[82] = 4U;
+  rtb_TmpSignalConversionAtSFunct[83] = 3U;
+  rtb_TmpSignalConversionAtSFunct[84] = 3U;
+  rtb_TmpSignalConversionAtSFunct[85] = 2U;
+  rtb_TmpSignalConversionAtSFunct[86] = 4U;
+  rtb_TmpSignalConversionAtSFunct[87] = 3U;
+  rtb_TmpSignalConversionAtSFunct[88] = 4U;
+  rtb_TmpSignalConversionAtSFunct[89] = 3U;
+  rtb_TmpSignalConversionAtSFunct[90] = 0U;
+  rtb_TmpSignalConversionAtSFunct[91] = 0U;
+  rtb_TmpSignalConversionAtSFunct[92] = 0U;
+  rtb_TmpSignalConversionAtSFunct[93] = 0U;
+  rtb_TmpSignalConversionAtSFunct[94] = 0U;
+  rtb_TmpSignalConversionAtSFunct[95] = 0U;
+  rtb_TmpSignalConversionAtSFunct[96] = 0U;
+  rtb_TmpSignalConversionAtSFunct[97] = 0U;
+  rtb_TmpSignalConversionAtSFunct[98] = 0U;
+  rtb_TmpSignalConversionAtSFunct[99] = 0U;
+  rtb_TmpSignalConversionAtSFunct[100] = 4U;
+  rtb_TmpSignalConversionAtSFunct[101] = 3U;
+  rtb_TmpSignalConversionAtSFunct[102] = 4U;
+  rtb_TmpSignalConversionAtSFunct[103] = 3U;
+  rtb_TmpSignalConversionAtSFunct[104] = 3U;
+  rtb_TmpSignalConversionAtSFunct[105] = 1U;
+  rtb_TmpSignalConversionAtSFunct[106] = 4U;
+  rtb_TmpSignalConversionAtSFunct[107] = 3U;
+  rtb_TmpSignalConversionAtSFunct[108] = 4U;
+  rtb_TmpSignalConversionAtSFunct[109] = 3U;
+  rtb_TmpSignalConversionAtSFunct[110] = 4U;
+  rtb_TmpSignalConversionAtSFunct[111] = 3U;
+  rtb_TmpSignalConversionAtSFunct[112] = 4U;
+  rtb_TmpSignalConversionAtSFunct[113] = 3U;
+  rtb_TmpSignalConversionAtSFunct[114] = 4U;
+  rtb_TmpSignalConversionAtSFunct[115] = 3U;
+  rtb_TmpSignalConversionAtSFunct[116] = 1U;
+  rtb_TmpSignalConversionAtSFunct[117] = 1U;
+  rtb_TmpSignalConversionAtSFunct[118] = 0U;
+  rtb_TmpSignalConversionAtSFunct[119] = 0U;
+  rtb_TmpSignalConversionAtSFunct[120] = 0U;
+  rtb_TmpSignalConversionAtSFunct[121] = 0U;
+  rtb_TmpSignalConversionAtSFunct[122] = 0U;
+  rtb_TmpSignalConversionAtSFunct[123] = 0U;
+  rtb_TmpSignalConversionAtSFunct[124] = 0U;
+  rtb_TmpSignalConversionAtSFunct[125] = 0U;
+  rtb_TmpSignalConversionAtSFunct[126] = 0U;
+  rtb_TmpSignalConversionAtSFunct[127] = 0U;
+  rtb_TmpSignalConversionAtSFunct[128] = 0U;
+  rtb_TmpSignalConversionAtSFunct[129] = 0U;
+  rtb_TmpSignalConversionAtSFunct[130] = 4U;
+  rtb_TmpSignalConversionAtSFunct[131] = 4U;
+  rtb_TmpSignalConversionAtSFunct[132] = 3U;
+  rtb_TmpSignalConversionAtSFunct[133] = 0U;
+  rtb_TmpSignalConversionAtSFunct[134] = 0U;
+  rtb_TmpSignalConversionAtSFunct[135] = 0U;
+  rtb_TmpSignalConversionAtSFunct[136] = 0U;
+  rtb_TmpSignalConversionAtSFunct[137] = 0U;
+  rtb_TmpSignalConversionAtSFunct[138] = 0U;
+  rtb_TmpSignalConversionAtSFunct[139] = 0U;
+  rtb_TmpSignalConversionAtSFunct[140] = 3U;
+  rtb_TmpSignalConversionAtSFunct[141] = 0U;
+  rtb_TmpSignalConversionAtSFunct[142] = 0U;
+  rtb_TmpSignalConversionAtSFunct[143] = 0U;
+  rtb_TmpSignalConversionAtSFunct[144] = 0U;
+  rtb_TmpSignalConversionAtSFunct[145] = 0U;
+  rtb_TmpSignalConversionAtSFunct[146] = 0U;
+  rtb_TmpSignalConversionAtSFunct[147] = 0U;
+  rtb_TmpSignalConversionAtSFunct[148] = 0U;
+  rtb_TmpSignalConversionAtSFunct[149] = 0U;
+  rtb_TmpSignalConversionAtSFunct[150] = 2U;
+  rtb_TmpSignalConversionAtSFunct[151] = 2U;
+  rtb_TmpSignalConversionAtSFunct[152] = 2U;
+  rtb_TmpSignalConversionAtSFunct[153] = 1U;
+  rtb_TmpSignalConversionAtSFunct[154] = 1U;
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S3>/Constant156'
+   *  Constant: '<S3>/Constant161'
+   *  Constant: '<S3>/Constant162'
+   *  Constant: '<S3>/Constant163'
+   *  Constant: '<S3>/Constant164'
+   *  Constant: '<S3>/Constant165'
+   *  Constant: '<S3>/Constant166'
+   *  Constant: '<S3>/Constant167'
+   *  Constant: '<S3>/Constant168'
+   *  Constant: '<S3>/Constant169'
+   *  Constant: '<S3>/Constant170'
+   *  Constant: '<S3>/Constant171'
+   *  Constant: '<S3>/Constant172'
+   *  Constant: '<S3>/Constant173'
+   *  Constant: '<S3>/Constant174'
+   *  Constant: '<S3>/Constant175'
+   *  Constant: '<S3>/Constant176'
+   *  Constant: '<S3>/Constant177'
+   *  Constant: '<S3>/Constant178'
+   *  Constant: '<S3>/Constant179'
+   *  Constant: '<S3>/Constant180'
+   *  Constant: '<S3>/Constant181'
+   *  Constant: '<S3>/Constant182'
+   *  Constant: '<S3>/Constant183'
+   *  Constant: '<S3>/Constant184'
+   *  Constant: '<S3>/Constant185'
+   *  Constant: '<S3>/Constant186'
+   *  Constant: '<S3>/Constant187'
+   *  Constant: '<S3>/Constant188'
+   *  Constant: '<S3>/Constant189'
+   *  Constant: '<S3>/Constant190'
+   *  Constant: '<S3>/Constant191'
+   *  Constant: '<S3>/Constant192'
+   *  Constant: '<S3>/Constant193'
+   *  Constant: '<S3>/Constant194'
+   *  Constant: '<S3>/Constant195'
+   *  Constant: '<S3>/Constant196'
+   *  Constant: '<S3>/Constant197'
+   *  Constant: '<S3>/Constant198'
+   *  Constant: '<S3>/Constant199'
+   *  Constant: '<S3>/Constant200'
+   *  Constant: '<S3>/Constant201'
+   *  Constant: '<S3>/Constant202'
+   *  Constant: '<S3>/Constant203'
+   *  Constant: '<S3>/Constant204'
+   *  Constant: '<S3>/Constant205'
+   *  Constant: '<S3>/Constant206'
+   *  Constant: '<S3>/Constant207'
+   *  Constant: '<S3>/Constant208'
+   *  Constant: '<S3>/Constant209'
+   *  Constant: '<S3>/Constant210'
+   *  Constant: '<S3>/Constant211'
+   *  Constant: '<S3>/Constant212'
+   *  Constant: '<S3>/Constant213'
+   *  Constant: '<S3>/Constant214'
+   *  Constant: '<S3>/Constant215'
+   *  Constant: '<S3>/Constant216'
+   *  Constant: '<S3>/Constant217'
+   *  Constant: '<S3>/Constant218'
+   *  Constant: '<S3>/Constant219'
+   *  Constant: '<S3>/Constant220'
+   *  Constant: '<S3>/Constant221'
+   *  Constant: '<S3>/Constant222'
+   *  Constant: '<S3>/Constant223'
+   *  Constant: '<S3>/Constant224'
+   *  Constant: '<S3>/Constant225'
+   *  Constant: '<S3>/Constant226'
+   *  Constant: '<S3>/Constant227'
+   *  Constant: '<S3>/Constant228'
+   *  Constant: '<S3>/Constant229'
+   *  Constant: '<S3>/Constant230'
+   *  Constant: '<S3>/Constant231'
+   *  Constant: '<S3>/Constant232'
+   *  Constant: '<S3>/Constant233'
+   *  Constant: '<S3>/Constant234'
+   *  Constant: '<S3>/Constant235'
+   *  Constant: '<S3>/Constant236'
+   *  Constant: '<S3>/Constant237'
+   *  Constant: '<S3>/Constant238'
+   *  Constant: '<S3>/Constant239'
+   *  Constant: '<S3>/Constant240'
+   *  Constant: '<S3>/Constant241'
+   *  Constant: '<S3>/Constant242'
+   *  Constant: '<S3>/Constant243'
+   *  Constant: '<S3>/Constant244'
+   *  Constant: '<S3>/Constant245'
+   *  Constant: '<S3>/Constant246'
+   *  Constant: '<S3>/Constant247'
+   *  Constant: '<S3>/Constant248'
+   *  Constant: '<S3>/Constant249'
+   *  Constant: '<S3>/Constant250'
+   *  Constant: '<S3>/Constant251'
+   *  Constant: '<S3>/Constant252'
+   *  Constant: '<S3>/Constant253'
+   *  Constant: '<S3>/Constant254'
+   *  Constant: '<S3>/Constant255'
+   *  Constant: '<S3>/Constant256'
+   *  Constant: '<S3>/Constant257'
+   *  Constant: '<S3>/Constant258'
+   *  Constant: '<S3>/Constant259'
+   *  Constant: '<S3>/Constant260'
+   *  Constant: '<S3>/Constant261'
+   *  Constant: '<S3>/Constant262'
+   *  Constant: '<S3>/Constant263'
+   *  Constant: '<S3>/Constant264'
+   *  Constant: '<S3>/Constant265'
+   *  Constant: '<S3>/Constant266'
+   *  Constant: '<S3>/Constant267'
+   *  Constant: '<S3>/Constant268'
+   *  Constant: '<S3>/Constant269'
+   *  Constant: '<S3>/Constant270'
+   *  Constant: '<S3>/Constant271'
+   *  Constant: '<S3>/Constant272'
+   *  Constant: '<S3>/Constant273'
+   *  Constant: '<S3>/Constant274'
+   *  Constant: '<S3>/Constant275'
+   *  Constant: '<S3>/Constant276'
+   *  Constant: '<S3>/Constant277'
+   *  Constant: '<S3>/Constant278'
+   *  Constant: '<S3>/Constant279'
+   *  Constant: '<S3>/Constant280'
+   *  Constant: '<S3>/Constant281'
+   *  Constant: '<S3>/Constant282'
+   *  Constant: '<S3>/Constant283'
+   *  Constant: '<S3>/Constant284'
+   *  Constant: '<S3>/Constant285'
+   *  Constant: '<S3>/Constant286'
+   *  Constant: '<S3>/Constant287'
+   *  Constant: '<S3>/Constant288'
+   *  Constant: '<S3>/Constant289'
+   *  Constant: '<S3>/Constant290'
+   *  Constant: '<S3>/Constant291'
+   *  Constant: '<S3>/Constant292'
+   *  Constant: '<S3>/Constant293'
+   *  Constant: '<S3>/Constant294'
+   *  Constant: '<S3>/Constant295'
+   *  Constant: '<S3>/Constant296'
+   *  Constant: '<S3>/Constant297'
+   *  Constant: '<S3>/Constant298'
+   *  Constant: '<S3>/Constant299'
+   *  Constant: '<S3>/Constant300'
+   *  Constant: '<S3>/Constant301'
+   *  Constant: '<S3>/Constant302'
+   *  Constant: '<S3>/Constant303'
+   *  Constant: '<S3>/Constant304'
+   *  Constant: '<S3>/Constant305'
+   *  Constant: '<S3>/Constant306'
+   *  Constant: '<S3>/Constant307'
+   *  Constant: '<S3>/Constant308'
+   *  Constant: '<S3>/Constant309'
+   *  Constant: '<S3>/Constant310'
+   *  Constant: '<S3>/Constant311'
+   *  Constant: '<S3>/Constant312'
+   *  Constant: '<S3>/Constant313'
+   *  Constant: '<S3>/Constant314'
+   */
+  rtb_TmpSignalConversionAtSFun_l[0] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[1] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[2] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[3] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[4] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[5] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[6] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[7] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[8] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[9] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[10] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[11] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[12] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[13] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[14] = 1U;
+  rtb_TmpSignalConversionAtSFun_l[15] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[16] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[17] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[18] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[19] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[20] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[21] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[22] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[23] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[24] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[25] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[26] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[27] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[28] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[29] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[30] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[31] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[32] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[33] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[34] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[35] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[36] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[37] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[38] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[39] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[40] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[41] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[42] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[43] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[44] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[45] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[46] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[47] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[48] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[49] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[50] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[51] = 234U;
+  rtb_TmpSignalConversionAtSFun_l[52] = 122U;
+  rtb_TmpSignalConversionAtSFun_l[53] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[54] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[55] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[56] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[57] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[58] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[59] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[60] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[61] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[62] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[63] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[64] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[65] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[66] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[67] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[68] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[69] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[70] = 122U;
+  rtb_TmpSignalConversionAtSFun_l[71] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[72] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[73] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[74] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[75] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[76] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[77] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[78] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[79] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[80] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[81] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[82] = 234U;
+  rtb_TmpSignalConversionAtSFun_l[83] = 131U;
+  rtb_TmpSignalConversionAtSFun_l[84] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[85] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[86] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[87] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[88] = 162U;
+  rtb_TmpSignalConversionAtSFun_l[89] = 131U;
+  rtb_TmpSignalConversionAtSFun_l[90] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[91] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[92] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[93] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[94] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[95] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[96] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[97] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[98] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[99] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[100] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[101] = 145U;
+  rtb_TmpSignalConversionAtSFun_l[102] = 234U;
+  rtb_TmpSignalConversionAtSFun_l[103] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[104] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[105] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[106] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[107] = 19U;
+  rtb_TmpSignalConversionAtSFun_l[108] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[109] = 19U;
+  rtb_TmpSignalConversionAtSFun_l[110] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[111] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[112] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[113] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[114] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[115] = 146U;
+  rtb_TmpSignalConversionAtSFun_l[116] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[117] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[118] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[119] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[120] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[121] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[122] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[123] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[124] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[125] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[126] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[127] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[128] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[129] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[130] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[131] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[132] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[133] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[134] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[135] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[136] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[137] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[138] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[139] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[140] = 131U;
+  rtb_TmpSignalConversionAtSFun_l[141] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[142] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[143] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[144] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[145] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[146] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[147] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[148] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[149] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[150] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[151] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[152] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[153] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[154] = 0U;
+
+  /* Chart: '<S3>/FltCodeArry' incorporates:
+   *  Constant: '<S3>/Constant'
+   *  Constant: '<S3>/Constant266'
+   *  Constant: '<S3>/Constant315'
+   *  Constant: '<S3>/Constant317'
+   *  Constant: '<S3>/Constant53'
+   *  SignalConversion generated from: '<S5>/ SFunction '
+   */
+  avrgU = 0U;
+  sfmd_num_fltNum = 0U;
+  for (i_0 = 0; i_0 < 20; i_0++) {
+    FltCodeArr[i_0] = 0U;
+    rtb_FltLevelArr[i_0] = 0U;
+    rtb_FltActArr[i_0] = 0U;
+    FltCodeArrS[i_0] = 0U;
+  }
+
+  while (avrgU < 155) {
+    if (rtb_TmpSignalConversionAtSFun_a[avrgU] && (sfmd_num_fltNum <
+         sfmc_num_fltNumMax)) {
+      FltCodeArr[sfmd_num_fltNum] = (uint16_T)(avrgU + 1);
+      rtb_FltLevelArr[sfmd_num_fltNum] = rtb_TmpSignalConversionAtSFunct[avrgU];
+      rtb_FltActArr[sfmd_num_fltNum] = rtb_TmpSignalConversionAtSFun_l[avrgU];
+      sfmd_num_fltNum = (uint16_T)(sfmd_num_fltNum + 1);
+      if (avrgU == 51) {
+        for (k = 0U; k < cmnc_num_cellUNum; k++) {
+          if (SFM_B.ErrFlg[k]) {
+            FltCodeArr[sfmd_num_fltNum] = (uint16_T)(k + 2001);
+            rtb_FltLevelArr[sfmd_num_fltNum] = 4U;
+            rtb_FltActArr[sfmd_num_fltNum] = 234U;
+            i_0 = sfmd_num_fltNum + 1;
+            if (sfmd_num_fltNum + 1 > 65535) {
+              i_0 = 65535;
             }
+
+            sfmd_num_fltNum = (uint16_T)i_0;
+          }
         }
+      }
     }
-    
-//----------------------恢复条件:在平均电压的-200~200mv之间的连续两次----------------
-    for (i = 0U; i < AppNVMData.BattCellCount ; i++)
-    {
-        if (((INT16)(battCellU[i]-avrgU) > -200) &&((INT16)(battCellU[i]-avrgU) < 200 && ((ErrUFlg>>i)&0x01==1))&& ((RecFlg>>i)&0x01==1))
-        {
-            ErrFlg = ErrFlg&(~(1<<i)); 
-            ErrUFlg = ErrUFlg&(~(1<<i)); 
-        }
-        if (((INT16)(battCellU[i]-avrgU) > -200) &&((INT16)(battCellU[i]-avrgU) < 200 && ((ErrUFlg>>i)&0x01==1)))
-        {
-            RecFlg = RecFlg |(1<<i);
-        }
-        else
-        {
-            RecFlg = RecFlg&(~(1<<i));
-        }
+
+    avrgU++;
+  }
+
+  for (avrgU = 0U; avrgU < sfmd_num_fltNum; avrgU++) {
+    i_0 = rtb_FltLevelArr[avrgU] * 10000 + FltCodeArr[avrgU];
+    if (i_0 > 65535) {
+      i_0 = 65535;
+    }
+
+    FltCodeArrS[avrgU] = (uint16_T)i_0;
+  }
+
+  for (avrgU = 0U; avrgU < sfmd_num_fltNum; avrgU++) {
+    for (k = 0U; k < (sfmd_num_fltNum - avrgU) - 1; k++) {
+      tmp_3 = FltCodeArrS[k + 1];
+      if (FltCodeArrS[k] < tmp_3) {
+        temp = FltCodeArrS[k];
+        FltCodeArrS[k] = tmp_3;
+        FltCodeArrS[k + 1] = temp;
+      }
     }
-    
+  }
+
+  if ((SFM_DW.Cntl > 4) || (SFM_DW.Cntl >= sfmd_num_fltNum)) {
+    SFM_DW.Cntl = 0U;
+  }
+
+  avrgU = FltCodeArrS[SFM_DW.Cntl];
+  i_0 = SFM_DW.Cntl + 1;
+  if (SFM_DW.Cntl + 1 > 65535) {
+    i_0 = 65535;
+  }
+
+  SFM_DW.Cntl = (uint16_T)i_0;
+
+  /* S-Function (sfix_bitop): '<S3>/Bitwise Operator1' */
+  sfmd_st_fltAct = rtb_FltActArr[0];
+
+  /* MinMax: '<S3>/MinMax' */
+  sfmd_N_fltLevel = rtb_FltLevelArr[0];
+  for (i_0 = 0; i_0 < 19; i_0++) {
+    /* S-Function (sfix_bitop): '<S3>/Bitwise Operator1' */
+    sfmd_st_fltAct = (uint8_T)(rtb_FltActArr[i_0 + 1] | sfmd_st_fltAct);
+
+    /* MinMax: '<S3>/MinMax' */
+    i = rtb_FltLevelArr[i_0 + 1];
+    if (sfmd_N_fltLevel <= i) {
+      sfmd_N_fltLevel = i;
+    }
+  }
+
+  /* Math: '<S3>/Rem1' */
+  sfmd_idx_fltCode = (uint16_T)(avrgU % 10000);
+
+  /* Chart: '<S13>/Chart' incorporates:
+   *  Constant: '<S13>/Constant'
+   */
+  qY_0 = cmnc_num_cellUNum == 0U ? MAX_uint32_T : rtb_SumU / cmnc_num_cellUNum;
+  if (qY_0 > 65535U) {
+    qY_0 = 65535U;
+  }
+
+  /* SignalConversion generated from: '<S13>/Chart' incorporates:
+   *  Chart: '<S13>/Chart'
+   */
+  sfmd_V_cellUAvrg = (uint16_T)qY_0;
+
+  /* Product: '<S23>/Product' incorporates:
+   *  Inport: '<Root>/ihd_L_urtRecv'
+   *  RelationalOperator: '<S9>/Relational Operator'
+   *  UnitDelay: '<S23>/Time_Delay'
+   */
+  SFM_DW.Time_Delay_DSTATE = (uint16_T)(ihd_L_urtRecv == 0 ? (int32_T)
+    rtb_Saturation : 0);
+  for (i_0 = 0; i_0 < 6; i_0++) {
+    /* SignalConversion: '<S15>/Signal Conversion' incorporates:
+     *  Inport: '<Root>/ihv_T_modT'
+     */
+    sfmv_T_modT[i_0] = ihv_T_modT[i_0];
+  }
 }
 
+/* Model initialize function */
+void SFM_initialize(const char_T **rt_errorStatus)
+{
+  RT_MODEL_SFM_T *const SFM_M = &(SFM_MdlrefDW.rtm);
+
+  /* Registration code */
+
+  /* initialize error status */
+  rtmSetErrorStatusPointer(SFM_M, rt_errorStatus);
+}
 
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 2162 - 0
src/SFM1.c

@@ -0,0 +1,2162 @@
+/*
+ * File: SFM.c
+ *
+ * Code generated for Simulink model 'SFM'.
+ *
+ * Model version                  : 1.88
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Fri Sep 10 17:41:38 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#include "SFM.h"
+#include "SFM_private.h"
+#include "div_uus32_sat.h"
+#include "mul_s32_hiSR.h"
+
+MdlrefDW_SFM_T SFM_MdlrefDW;
+
+/* Block signals (default storage) */
+B_SFM_c_T SFM_B;
+
+/* Block states (default storage) */
+DW_SFM_f_T SFM_DW;
+
+/*
+ * System initialize for atomic system:
+ *    '<S27>/Subsytem'
+ *    '<S27>/Subsytem2'
+ *    '<S27>/Subsytem4'
+ *    '<S27>/Subsytem5'
+ */
+void SFM_Subsytem_Init(DW_Subsytem_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S31>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S27>/Subsytem'
+ *    '<S27>/Subsytem2'
+ *    '<S27>/Subsytem4'
+ *    '<S27>/Subsytem5'
+ */
+boolean_T SFM_Subsytem(uint8_T rtu_Enable, boolean_T rtu_Precondition, int16_T
+  rtu_inputs, int16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_h;
+
+  /* Saturate: '<S31>/Saturation' incorporates:
+   *  Constant: '<S31>/Constant1'
+   *  Sum: '<S31>/Add'
+   *  UnitDelay: '<S31>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_h = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_h = 200U;
+  }
+
+  /* End of Saturate: '<S31>/Saturation' */
+
+  /* Product: '<S31>/Product' incorporates:
+   *  Logic: '<S31>/Logical Operator1'
+   *  RelationalOperator: '<S31>/Relational Operator'
+   *  UnitDelay: '<S31>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_inputs >= rtu_threshold) ? (int32_T)rtb_Saturation_h : 0);
+
+  /* RelationalOperator: '<S31>/Relational Operator1' */
+  return rtb_Saturation_h > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S27>/Subsytem1'
+ *    '<S27>/Subsytem3'
+ */
+void SFM_Subsytem1_Init(DW_Subsytem1_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S32>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S27>/Subsytem1'
+ *    '<S27>/Subsytem3'
+ */
+boolean_T SFM_Subsytem1(uint8_T rtu_Enable, boolean_T rtu_Precondition, int16_T
+  rtu_InputS, int16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem1_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_f;
+
+  /* Saturate: '<S32>/Saturation' incorporates:
+   *  Constant: '<S32>/Constant2'
+   *  Sum: '<S32>/Add'
+   *  UnitDelay: '<S32>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_f = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_f = 200U;
+  }
+
+  /* End of Saturate: '<S32>/Saturation' */
+
+  /* Product: '<S32>/Product' incorporates:
+   *  Logic: '<S32>/Logical Operator'
+   *  RelationalOperator: '<S32>/Relational Operator'
+   *  UnitDelay: '<S32>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_InputS <= rtu_threshold) ? (int32_T)rtb_Saturation_f : 0);
+
+  /* RelationalOperator: '<S32>/Relational Operator1' */
+  return rtb_Saturation_f > rtu_CtrN;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsystem5'
+ *    '<S28>/Subsystem6'
+ *    '<S28>/Subsystem7'
+ *    '<S28>/Subsystem8'
+ */
+boolean_T SFM_Subsystem5(boolean_T rtu_In1, boolean_T rtu_In2)
+{
+  /* Logic: '<S37>/Logical Operator' incorporates:
+   *  RelationalOperator: '<S37>/Relational Operator'
+   *  RelationalOperator: '<S37>/Relational Operator1'
+   */
+  return (!rtu_In1) && (!rtu_In2);
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem'
+ *    '<S28>/Subsytem2'
+ *    '<S28>/Subsytem4'
+ *    '<S28>/Subsytem5'
+ */
+void SFM_Subsytem_b_Init(DW_Subsytem_SFM_d_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S41>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem'
+ *    '<S28>/Subsytem2'
+ *    '<S28>/Subsytem4'
+ *    '<S28>/Subsytem5'
+ */
+boolean_T SFM_Subsytem_j(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint16_T rtu_inputs, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem_SFM_d_T *localDW)
+{
+  uint8_T rtb_Saturation_h;
+
+  /* Saturate: '<S41>/Saturation' incorporates:
+   *  Constant: '<S41>/Constant1'
+   *  Sum: '<S41>/Add'
+   *  UnitDelay: '<S41>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_h = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_h = 200U;
+  }
+
+  /* End of Saturate: '<S41>/Saturation' */
+
+  /* Product: '<S41>/Product' incorporates:
+   *  Logic: '<S41>/Logical Operator1'
+   *  RelationalOperator: '<S41>/Relational Operator'
+   *  UnitDelay: '<S41>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_inputs >= rtu_threshold) ? (int32_T)rtb_Saturation_h : 0);
+
+  /* RelationalOperator: '<S41>/Relational Operator1' */
+  return rtb_Saturation_h > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem1'
+ *    '<S28>/Subsytem3'
+ */
+void SFM_Subsytem1_f_Init(DW_Subsytem1_SFM_k_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S42>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem1'
+ *    '<S28>/Subsytem3'
+ */
+boolean_T SFM_Subsytem1_n(uint8_T rtu_Enable, boolean_T rtu_Precondition,
+  uint16_T rtu_InputS, uint16_T rtu_threshold, uint8_T rtu_CtrN,
+  DW_Subsytem1_SFM_k_T *localDW)
+{
+  uint8_T rtb_Saturation_i;
+
+  /* Saturate: '<S42>/Saturation' incorporates:
+   *  Constant: '<S42>/Constant2'
+   *  Sum: '<S42>/Add'
+   *  UnitDelay: '<S42>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_i = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_i = 200U;
+  }
+
+  /* End of Saturate: '<S42>/Saturation' */
+
+  /* Product: '<S42>/Product' incorporates:
+   *  Logic: '<S42>/Logical Operator'
+   *  RelationalOperator: '<S42>/Relational Operator'
+   *  UnitDelay: '<S42>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_InputS <= rtu_threshold) ? (int32_T)rtb_Saturation_i : 0);
+
+  /* RelationalOperator: '<S42>/Relational Operator1' */
+  return rtb_Saturation_i > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem6'
+ *    '<S28>/Subsytem8'
+ */
+void SFM_Subsytem6_Init(DW_Subsytem6_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S47>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem6'
+ *    '<S28>/Subsytem8'
+ */
+boolean_T SFM_Subsytem6(uint8_T rtu_Enable, boolean_T rtu_Precondition, uint32_T
+  rtu_inputs, uint16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem6_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_h;
+
+  /* Saturate: '<S47>/Saturation' incorporates:
+   *  Constant: '<S47>/Constant1'
+   *  Sum: '<S47>/Add'
+   *  UnitDelay: '<S47>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_h = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_h = 200U;
+  }
+
+  /* End of Saturate: '<S47>/Saturation' */
+
+  /* Product: '<S47>/Product' incorporates:
+   *  Logic: '<S47>/Logical Operator1'
+   *  RelationalOperator: '<S47>/Relational Operator'
+   *  UnitDelay: '<S47>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_inputs >= rtu_threshold * 100U) ? (int32_T)rtb_Saturation_h : 0);
+
+  /* RelationalOperator: '<S47>/Relational Operator1' */
+  return rtb_Saturation_h > rtu_CtrN;
+}
+
+/*
+ * System initialize for atomic system:
+ *    '<S28>/Subsytem7'
+ *    '<S28>/Subsytem9'
+ */
+void SFM_Subsytem7_Init(DW_Subsytem7_SFM_T *localDW)
+{
+  /* InitializeConditions for UnitDelay: '<S48>/delay' */
+  localDW->delay_DSTATE = 1U;
+}
+
+/*
+ * Output and update for atomic system:
+ *    '<S28>/Subsytem7'
+ *    '<S28>/Subsytem9'
+ */
+boolean_T SFM_Subsytem7(uint8_T rtu_Enable, boolean_T rtu_Precondition, uint32_T
+  rtu_InputS, uint16_T rtu_threshold, uint8_T rtu_CtrN, DW_Subsytem7_SFM_T
+  *localDW)
+{
+  uint8_T rtb_Saturation_m;
+
+  /* Saturate: '<S48>/Saturation' incorporates:
+   *  Constant: '<S48>/Constant2'
+   *  Sum: '<S48>/Add'
+   *  UnitDelay: '<S48>/delay'
+   */
+  if ((uint8_T)(localDW->delay_DSTATE + 1U) < 200) {
+    rtb_Saturation_m = (uint8_T)(localDW->delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation_m = 200U;
+  }
+
+  /* End of Saturate: '<S48>/Saturation' */
+
+  /* Product: '<S48>/Product' incorporates:
+   *  Logic: '<S48>/Logical Operator'
+   *  RelationalOperator: '<S48>/Relational Operator'
+   *  UnitDelay: '<S48>/delay'
+   */
+  localDW->delay_DSTATE = (uint8_T)((rtu_Enable != 0) && rtu_Precondition &&
+    (rtu_InputS <= rtu_threshold * 100U) ? (int32_T)rtb_Saturation_m : 0);
+
+  /* RelationalOperator: '<S48>/Relational Operator1' */
+  return rtb_Saturation_m > rtu_CtrN;
+}
+
+/* System initialize for referenced model: 'SFM' */
+void SFM_Init(void)
+{
+  /* InitializeConditions for UnitDelay: '<S23>/Time_Delay' */
+  SFM_DW.Time_Delay_DSTATE = 1U;
+
+  /* SystemInitialize for Chart: '<S13>/Chart' */
+  SFM_DW.FirstFlg = true;
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem_j0);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem2' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem2_p);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem2' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem1' */
+  SFM_Subsytem1_f_Init(&SFM_DW.Subsytem1_n);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem1' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem3' */
+  SFM_Subsytem1_f_Init(&SFM_DW.Subsytem3_b);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem3' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem4' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem4_p);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem4' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem5' */
+  SFM_Subsytem_b_Init(&SFM_DW.Subsytem5_l);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem5' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem6' */
+  SFM_Subsytem6_Init(&SFM_DW.Subsytem6);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem6' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem8' */
+  SFM_Subsytem6_Init(&SFM_DW.Subsytem8);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem8' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem7' */
+  SFM_Subsytem7_Init(&SFM_DW.Subsytem7);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem7' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S28>/Subsytem9' */
+  SFM_Subsytem7_Init(&SFM_DW.Subsytem9);
+
+  /* End of SystemInitialize for SubSystem: '<S28>/Subsytem9' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem_j);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem2' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem2);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem2' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem1' */
+  SFM_Subsytem1_Init(&SFM_DW.Subsytem1_e);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem1' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem3' */
+  SFM_Subsytem1_Init(&SFM_DW.Subsytem3);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem3' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem4' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem4);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem4' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S27>/Subsytem5' */
+  SFM_Subsytem_Init(&SFM_DW.Subsytem5);
+
+  /* End of SystemInitialize for SubSystem: '<S27>/Subsytem5' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S24>/Subsytem' */
+  /* InitializeConditions for UnitDelay: '<S29>/delay' */
+  SFM_DW.delay_DSTATE_j = 1U;
+
+  /* End of SystemInitialize for SubSystem: '<S24>/Subsytem' */
+
+  /* SystemInitialize for Atomic SubSystem: '<S24>/Subsytem1' */
+  /* InitializeConditions for UnitDelay: '<S30>/delay' */
+  SFM_DW.delay_DSTATE = 1U;
+  uint8_T i;
+  for(i=0;i<17;i++)
+  	{
+
+ SFM_DW.ChgNr[i]=0;
+ SFM_DW.RecNr[i]=0;
+ SFM_DW.UdelNr[i]=0;
+  }
+  SFM_DW.Cntl=0;
+
+  /* End of SystemInitialize for SubSystem: '<S24>/Subsytem1' */
+}
+
+/* Output and update for referenced model: 'SFM' */
+void SFM(void)
+{
+  /* local block i/o variables */
+  uint32_T rtb_SumU;
+  real_T tmp_2;
+  int32_T i_0;
+  int32_T tmp_0;
+  int32_T tmp_1;
+  uint32_T qY;
+  uint32_T qY_0;
+  uint16_T FltCodeArrS[20];
+  uint16_T avrgU;
+  uint16_T k;
+  uint16_T rtb_Saturation;
+  uint16_T temp;
+  uint16_T tmp_3;
+  uint8_T rtb_TmpSignalConversionAtSFun_l[155];
+  uint8_T rtb_TmpSignalConversionAtSFunct[155];
+  uint8_T rtb_FltActArr[20];
+  uint8_T rtb_FltLevelArr[20];
+  uint8_T i;
+  uint8_T j;
+  boolean_T rtb_TmpSignalConversionAtSFun_a[155];
+  boolean_T rtb_RelationalOperator1;
+  boolean_T rtb_RelationalOperator1_a;
+  boolean_T rtb_RelationalOperator1_bb;
+  boolean_T rtb_RelationalOperator1_d;
+  boolean_T rtb_RelationalOperator1_di;
+  boolean_T rtb_RelationalOperator1_eg;
+  boolean_T rtb_RelationalOperator1_ep;
+  boolean_T rtb_RelationalOperator1_fg;
+  boolean_T rtb_RelationalOperator1_gr;
+  boolean_T rtb_RelationalOperator1_i;
+  boolean_T rtb_RelationalOperator1_it;
+  boolean_T rtb_RelationalOperator1_j;
+  boolean_T rtb_RelationalOperator1_l;
+  boolean_T rtb_RelationalOperator1_lf;
+  boolean_T rtb_RelationalOperator1_o;
+  boolean_T rtb_RelationalOperator1_p;
+  boolean_T rtb_RelationalOperator_et;
+  boolean_T tmp;
+
+  /* Saturate: '<S23>/Saturation' incorporates:
+   *  Constant: '<S23>/Constant'
+   *  Sum: '<S23>/Add'
+   *  UnitDelay: '<S23>/Time_Delay'
+   */
+  if ((uint16_T)(SFM_DW.Time_Delay_DSTATE + 1U) < 60000) {
+    rtb_Saturation = (uint16_T)(SFM_DW.Time_Delay_DSTATE + 1U);
+  } else {
+    rtb_Saturation = 60000U;
+  }
+
+  /* End of Saturate: '<S23>/Saturation' */
+
+  /* RelationalOperator: '<S23>/Relational Operator1' incorporates:
+   *  Constant: '<S23>/para'
+   */
+  rtb_RelationalOperator1 = (rtb_Saturation > 1);
+
+  /* Chart: '<S13>/Chart' incorporates:
+   *  Constant: '<S13>/Constant'
+   *  Constant: '<S13>/Constant1'
+   *  Inport: '<Root>/ihv_V_cellU'
+   */
+  if (!rtb_RelationalOperator1) {
+    j = 0U;
+    while ((j < 3) && SFM_DW.FirstFlg) {
+      for (i = 0U; i < cmnc_num_cellUNum; i++) {
+        SFM_DW.CellUArry[j + 3 * i] = ihv_V_cellU[i];
+      }
+
+      j++;
+    }
+
+    SFM_DW.FirstFlg = false;
+    for (j = 0U; j < 2; j++) {
+      for (i = 0U; i < cmnc_num_cellUNum; i++) {
+        i_0 = 3 * i + j;
+        SFM_DW.CellUArry[i_0] = SFM_DW.CellUArry[i_0 + 1];
+      }
+    }
+
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
+      SFM_DW.CellUArry[3 * i + 2] = ihv_V_cellU[i];
+    }
+
+    for (i = 0U; i < cmnc_num_cellUNum - 1; i++) {
+      i_0 = 3 * i;
+      tmp_1 = (i + 1) * 3;
+      i_0 = SFM_DW.CellUArry[i_0 + 2] - SFM_DW.CellUArry[i_0];
+      tmp_1 = SFM_DW.CellUArry[tmp_1 + 2] - SFM_DW.CellUArry[tmp_1];
+      if (((real_T)i_0 * 0.001 < -0.05) && ((real_T)tmp_1 * 0.001 > 0.05)) {
+        tmp_0 = SFM_DW.ChgNr[i] + 1;
+        if (tmp_0 > 255) {
+          tmp_0 = 255;
+        }
+
+        SFM_DW.ChgNr[i] = (uint8_T)tmp_0;
+      } else {
+        SFM_DW.ChgNr[i] = 0U;
+      }
+
+      if ((SFM_DW.ChgNr[i] >= 2) && ((mul_s32_hiSR(i_0, 274877907, 6U) < -1) &&
+           (tmp_1 > 1000))) {
+        SFM_B.ErrFlg[i] = true;
+        SFM_DW.ErrUFlg[i] = true;
+        SFM_DW.ErrUFlg[i + 1] = true;
+      }
+
+      if (SFM_B.ErrFlg[i] && (i > 0)) {
+        for (j = 0U; j < i; j++) {
+          i_0 = i - j;
+          tmp_1 = i_0 * 3;
+          if ((real_T)(SFM_DW.CellUArry[tmp_1 + 2] - SFM_DW.CellUArry[tmp_1 + 1])
+              * 0.001 < -0.2) {
+            SFM_B.ErrFlg[i_0] = true;
+            SFM_DW.ErrUFlg[i_0] = true;
+          }
+        }
+      }
+    }
+
+    if ((mul_s32_hiSR(SFM_DW.CellUArry[2] - SFM_DW.CellUArry[1], 274877907, 6U) <
+         -1) && (mul_s32_hiSR(SFM_DW.CellUArry[5] - SFM_DW.CellUArry[4],
+          274877907, 6U) < -1) && (mul_s32_hiSR(SFM_DW.CellUArry[8] -
+          SFM_DW.CellUArry[7], 274877907, 6U) < -1)) {
+      SFM_B.GNDFlg = false;
+      SFM_DW.ErrUFlg[0] = true;
+      SFM_DW.ErrUFlg[1] = true;
+      SFM_DW.ErrUFlg[2] = true;
+    }
+
+    i = 0U;
+    SFM_B.MinU = 10000U;
+    SFM_B.MaxU = 0U;
+    rtb_SumU = 0U;
+    j = 0U;
+    while (i < cmnc_num_cellUNum) {
+      if (!SFM_DW.ErrUFlg[i]) {
+        qY_0 = rtb_SumU + /*MW:OvSatOk*/ ihv_V_cellU[i];
+        if (qY_0 < rtb_SumU) {
+          qY_0 = MAX_uint32_T;
+        }
+
+        rtb_SumU = qY_0;
+        i_0 = j + 1;
+        if (j + 1 > 255) {
+          i_0 = 255;
+        }
+
+        j = (uint8_T)i_0;
+        if (ihv_V_cellU[i] > SFM_B.MaxU) {
+          SFM_B.MaxU = ihv_V_cellU[i];
+        }
+
+        if (ihv_V_cellU[i] < SFM_B.MinU) {
+          SFM_B.MinU = ihv_V_cellU[i];
+        }
+      }
+
+      i++;
+    }
+
+    if (SFM_B.MaxU - SFM_B.MinU > 3000) {
+      qY_0 = rtb_SumU - /*MW:OvSatOk*/ SFM_B.MaxU;
+      if (qY_0 > rtb_SumU) {
+        qY_0 = 0U;
+      }
+
+      qY = qY_0 - /*MW:OvSatOk*/ SFM_B.MinU;
+      if (qY > qY_0) {
+        qY = 0U;
+      }
+
+      qY_0 = div_uus32_sat(qY, j - 2);
+      if (qY_0 > 65535U) {
+        qY_0 = 65535U;
+      }
+
+      avrgU = (uint16_T)qY_0;
+      for (i = 0U; i < cmnc_num_cellUNum; i++) {
+        if (!SFM_DW.ErrUFlg[i]) {
+          if ((real_T)(ihv_V_cellU[i] - (uint16_T)qY_0) * 0.001 > 1.5) {
+            i_0 = SFM_DW.UdelNr[i] + 1;
+            if (i_0 > 255) {
+              i_0 = 255;
+            }
+
+            SFM_DW.UdelNr[i] = (uint8_T)i_0;
+          } else {
+            SFM_DW.UdelNr[i] = 0U;
+          }
+
+          if (SFM_DW.UdelNr[i] >= 2) {
+            SFM_B.ErrFlg[i] = true;
+            SFM_DW.ErrUFlg[i] = true;
+          }
+        }
+      }
+    } else {
+      qY_0 = j == 0U ? MAX_uint32_T : rtb_SumU / j;
+      if (qY_0 > 65535U) {
+        qY_0 = 65535U;
+      }
+
+      avrgU = (uint16_T)qY_0;
+    }
+
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
+      if (SFM_DW.ErrUFlg[i]) {
+        tmp_2 = (real_T)(ihv_V_cellU[i] - avrgU) * 0.001;
+        if ((tmp_2 < 0.2) && (tmp_2 > -0.2)) {
+          i_0 = SFM_DW.RecNr[i] + 1;
+          if (i_0 > 255) {
+            i_0 = 255;
+          }
+
+          SFM_DW.RecNr[i] = (uint8_T)i_0;
+        } else {
+          SFM_DW.RecNr[i] = 0U;
+        }
+
+        if (SFM_DW.RecNr[i] >= 2) {
+          SFM_B.ErrFlg[i] = false;
+          SFM_DW.ErrUFlg[i] = false;
+          SFM_B.GNDFlg = ((i != 0) && SFM_B.GNDFlg);
+        }
+      }
+    }
+
+    for (i = 0U; i < cmnc_num_cellUNum; i++) {
+      if (SFM_DW.ErrUFlg[i]) {
+        SFM_B.CellU[i] = avrgU;
+      } else {
+        SFM_B.CellU[i] = ihv_V_cellU[i];
+      }
+    }
+  } else {
+    for (i_0 = 0; i_0 < 28; i_0++) {
+      SFM_B.CellU[i_0] = ihv_V_cellU[i_0];
+      SFM_B.ErrFlg[i_0] = false;
+    }
+  }
+
+  i = 0U;
+  rtb_SumU = 0U;
+  while (i < cmnc_num_cellUNum) {
+    qY_0 = rtb_SumU + /*MW:OvSatOk*/ SFM_B.CellU[i];
+    if (qY_0 < rtb_SumU) {
+      qY_0 = MAX_uint32_T;
+    }
+
+    rtb_SumU = qY_0;
+    i++;
+  }
+
+  for (i_0 = 0; i_0 < 28; i_0++) {
+    /* SignalConversion generated from: '<S13>/Chart' */
+    sfmv_V_cellU[i_0] = SFM_B.CellU[i_0];
+  }
+
+
+ for(i=0;i<17;i++)
+ 	{
+ 	printf("cell%d  %d  ",i,SFM_B.ErrFlg[i]);
+ 	}
+ printf('\n');
+
+ for(i=0;i<17;i++)
+ 	{
+ 	printf("cell%d  %d  ",i,ihv_V_cellU[i]);
+ 	}
+ printf('\n');
+  for(i=0;i<17;i++)
+ 	{
+ 	printf("cell%d  %d  ",i,sfmv_V_cellU[i]);
+ 	}
+ printf('\n');
+
+
+ 
+
+
+  /* Logic: '<S13>/Logical Operator1' */
+  tmp = SFM_B.ErrFlg[0];
+  for (i_0 = 0; i_0 < 27; i_0++) {
+    tmp = (tmp || SFM_B.ErrFlg[i_0 + 1]);
+  }
+
+  rtb_RelationalOperator_et = tmp;
+
+  /* Logic: '<S15>/Logical Operator' */
+  sfmv_flg_TFlt = false;
+
+  /* SignalConversion: '<S14>/Signal Conversion' incorporates:
+   *  Inport: '<Root>/ihd_flg_currFlt'
+   */
+  sfmd_flg_currFlt = ihd_flg_currFlt;
+
+  /* SignalConversion generated from: '<S13>/Chart' */
+  sfmd_V_cellUMax = SFM_B.MaxU;
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem' */
+  /* Constant: '<S28>/Constant28' incorporates:
+   *  Constant: '<S28>/Constant25'
+   *  Constant: '<S28>/Constant27'
+   *  Logic: '<S28>/Logical Operator5'
+   */
+  rtb_RelationalOperator1_ep = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMax, sfmc_V_cellUMaxThr2, 2, &SFM_DW.Subsytem_j0);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem2' */
+  /* Constant: '<S28>/Constant26' incorporates:
+   *  Constant: '<S28>/Constant23'
+   *  Constant: '<S28>/Constant24'
+   *  Logic: '<S28>/Logical Operator3'
+   */
+  rtb_RelationalOperator1_j = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMax, sfmc_V_cellUMaxThr1, 2, &SFM_DW.Subsytem2_p);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem2' */
+
+  /* SignalConversion generated from: '<S13>/Chart' */
+  sfmd_V_cellUMin = SFM_B.MinU;
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem1' */
+  /* Constant: '<S28>/Constant22' incorporates:
+   *  Constant: '<S28>/Constant20'
+   *  Constant: '<S28>/Constant21'
+   *  Logic: '<S28>/Logical Operator1'
+   */
+  rtb_RelationalOperator1_di = SFM_Subsytem1_n(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMin, sfmc_V_cellUMinThr2, 2, &SFM_DW.Subsytem1_n);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem1' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem3' */
+  /* Constant: '<S28>/Constant19' incorporates:
+   *  Constant: '<S28>/Constant10'
+   *  Constant: '<S28>/Constant18'
+   *  Logic: '<S28>/Logical Operator6'
+   */
+  rtb_RelationalOperator1_l = SFM_Subsytem1_n(1, !rtb_RelationalOperator1,
+    sfmd_V_cellUMin, sfmc_V_cellUMinThr1, 2, &SFM_DW.Subsytem3_b);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem3' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem4' */
+  /* Constant: '<S28>/Constant14' incorporates:
+   *  Constant: '<S28>/Constant12'
+   *  Constant: '<S28>/Constant13'
+   *  Logic: '<S28>/Logical Operator2'
+   *  SignalConversion generated from: '<S13>/Chart'
+   *  Sum: '<S28>/Add'
+   * */
+  rtb_RelationalOperator1_lf = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    (uint16_T)(sfmd_V_cellUMax - sfmd_V_cellUMin), sfmc_flg_cellUDiffThr2, 2,
+    &SFM_DW.Subsytem4_p);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem4' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem5' */
+  /* Constant: '<S28>/Constant1' incorporates:
+   *  Constant: '<S28>/Constant2'
+   *  Constant: '<S28>/Constant3'
+   *  Logic: '<S28>/Logical Operator9'
+   *  SignalConversion generated from: '<S13>/Chart'
+   *  Sum: '<S28>/Add1'
+   * */
+  rtb_RelationalOperator1_eg = SFM_Subsytem_j(1, !rtb_RelationalOperator1,
+    (uint16_T)(sfmd_V_cellUMax - sfmd_V_cellUMin), sfmc_flg_cellUDiffThr1, 2,
+    &SFM_DW.Subsytem5_l);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem5' */
+
+  /* Logic: '<S13>/Logical Operator2' incorporates:
+   *  Logic: '<S13>/Logical Operator1'
+   */
+  sfmd_flg_volFlt = (tmp || rtb_RelationalOperator1);
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem5' */
+  rtb_RelationalOperator1_fg = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem5' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem6' */
+  /* Constant: '<S28>/Constant30' incorporates:
+   *  Constant: '<S28>/Constant16'
+   *  Constant: '<S28>/Constant29'
+   */
+  rtb_RelationalOperator1_fg = SFM_Subsytem6(1, rtb_RelationalOperator1_fg,
+    rtb_SumU, sfmc_V_battUMaxThr2, 2, &SFM_DW.Subsytem6);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem6' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem6' */
+  rtb_RelationalOperator1_o = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem6' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem8' */
+  /* Constant: '<S28>/Constant17' incorporates:
+   *  Constant: '<S28>/Constant11'
+   *  Constant: '<S28>/Constant15'
+   */
+  rtb_RelationalOperator1_it = SFM_Subsytem6(1, rtb_RelationalOperator1_o,
+    rtb_SumU, sfmc_V_battUMaxThr1, 2, &SFM_DW.Subsytem8);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem8' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem7' */
+  rtb_RelationalOperator1_o = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem7' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem7' */
+  /* Constant: '<S28>/Constant9' incorporates:
+   *  Constant: '<S28>/Constant7'
+   *  Constant: '<S28>/Constant8'
+   */
+  rtb_RelationalOperator1_o = SFM_Subsytem7(1, rtb_RelationalOperator1_o,
+    rtb_SumU, sfmc_V_battUMinThr2, 2, &SFM_DW.Subsytem7);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem7' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsystem8' */
+  rtb_RelationalOperator_et = SFM_Subsystem5(sfmd_flg_volFlt,
+    rtb_RelationalOperator1);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsystem8' */
+
+  /* Outputs for Atomic SubSystem: '<S28>/Subsytem9' */
+  /* Constant: '<S28>/Constant6' incorporates:
+   *  Constant: '<S28>/Constant4'
+   *  Constant: '<S28>/Constant5'
+   */
+  rtb_RelationalOperator_et = SFM_Subsytem7(1, rtb_RelationalOperator_et,
+    rtb_SumU, sfmc_V_battUMinThr1, 2, &SFM_DW.Subsytem9);
+
+  /* End of Outputs for SubSystem: '<S28>/Subsytem9' */
+
+  /* Chart: '<S19>/ArrMin' incorporates:
+   *  Constant: '<S19>/Constant'
+   *  Inport: '<Root>/ihv_T_modT'
+   */
+  i = 0U;
+  sfmd_T_modTMax = ihv_T_modT[0];
+  while (i < cmnc_num_modTNum) {
+    if (sfmd_T_modTMax < ihv_T_modT[i]) {
+      sfmd_T_modTMax = ihv_T_modT[i];
+    }
+
+    i++;
+  }
+
+  /* End of Chart: '<S19>/ArrMin' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem' */
+  /* Constant: '<S27>/Constant28' incorporates:
+   *  Constant: '<S27>/Constant25'
+   *  Constant: '<S27>/Constant27'
+   *  Logic: '<S27>/Logical Operator5'
+   */
+  rtb_RelationalOperator1_p = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMax, sfmc_T_modTMaxThr2, 2, &SFM_DW.Subsytem_j);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem2' */
+  /* Constant: '<S27>/Constant26' incorporates:
+   *  Constant: '<S27>/Constant23'
+   *  Constant: '<S27>/Constant24'
+   *  Logic: '<S27>/Logical Operator1'
+   */
+  rtb_RelationalOperator1_a = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMax, sfmc_T_modTMaxThr1, 2, &SFM_DW.Subsytem2);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem2' */
+
+  /* Chart: '<S20>/ArrMin' incorporates:
+   *  Constant: '<S20>/Constant'
+   *  Inport: '<Root>/ihv_T_modT'
+   */
+  i = 0U;
+  sfmd_T_modTMin = ihv_T_modT[0];
+  while (i < cmnc_num_modTNum) {
+    if (sfmd_T_modTMin > ihv_T_modT[i]) {
+      sfmd_T_modTMin = ihv_T_modT[i];
+    }
+
+    i++;
+  }
+
+  /* End of Chart: '<S20>/ArrMin' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem1' */
+  /* Constant: '<S27>/Constant22' incorporates:
+   *  Constant: '<S27>/Constant20'
+   *  Constant: '<S27>/Constant21'
+   *  Logic: '<S27>/Logical Operator3'
+   */
+  rtb_RelationalOperator1_i = SFM_Subsytem1(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMin, sfmc_T_modTMinThr2, 2, &SFM_DW.Subsytem1_e);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem1' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem3' */
+  /* Constant: '<S27>/Constant19' incorporates:
+   *  Constant: '<S27>/Constant10'
+   *  Constant: '<S27>/Constant18'
+   *  Logic: '<S27>/Logical Operator7'
+   */
+  rtb_RelationalOperator1_d = SFM_Subsytem1(1, !rtb_RelationalOperator1,
+    sfmd_T_modTMin, sfmc_T_modTMinThr1, 2, &SFM_DW.Subsytem3);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem3' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem4' */
+  /* Constant: '<S27>/Constant14' incorporates:
+   *  Constant: '<S27>/Constant12'
+   *  Constant: '<S27>/Constant13'
+   *  Logic: '<S27>/Logical Operator4'
+   *  Sum: '<S27>/Add'
+   */
+  rtb_RelationalOperator1_bb = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    (int16_T)(sfmd_T_modTMax - sfmd_T_modTMin), sfmc_T_modTDiffThr2, 2,
+    &SFM_DW.Subsytem4);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem4' */
+
+  /* Outputs for Atomic SubSystem: '<S27>/Subsytem5' */
+  /* Constant: '<S27>/Constant1' incorporates:
+   *  Constant: '<S27>/Constant2'
+   *  Constant: '<S27>/Constant3'
+   *  Logic: '<S27>/Logical Operator10'
+   *  Sum: '<S27>/Add1'
+   */
+  rtb_RelationalOperator1_gr = SFM_Subsytem(1, !rtb_RelationalOperator1,
+    (int16_T)(sfmd_T_modTMax - sfmd_T_modTMin), sfmc_T_modTDiffThr1, 2,
+    &SFM_DW.Subsytem5);
+
+  /* End of Outputs for SubSystem: '<S27>/Subsytem5' */
+
+  /* Switch: '<S14>/Switch' incorporates:
+   *  Inport: '<Root>/ihd_flg_currFlt'
+   */
+  if (ihd_flg_currFlt) {
+    /* Switch: '<S14>/Switch' incorporates:
+     *  Constant: '<S14>/Constant'
+     */
+    sfmd_I_curr = 0;
+  } else {
+    /* Switch: '<S14>/Switch' incorporates:
+     *  Inport: '<Root>/ihd_I_curr'
+     */
+    sfmd_I_curr = ihd_I_curr;
+  }
+
+  /* End of Switch: '<S14>/Switch' */
+
+  /* Outputs for Atomic SubSystem: '<S24>/Subsytem' */
+  /* Saturate: '<S29>/Saturation' incorporates:
+   *  Constant: '<S29>/Constant1'
+   *  Sum: '<S29>/Add'
+   *  UnitDelay: '<S29>/delay'
+   */
+  if ((uint8_T)(SFM_DW.delay_DSTATE_j + 1U) < 200) {
+    i = (uint8_T)(SFM_DW.delay_DSTATE_j + 1U);
+  } else {
+    i = 200U;
+  }
+
+  /* End of Saturate: '<S29>/Saturation' */
+
+  /* Product: '<S29>/Product' incorporates:
+   *  Constant: '<S24>/Constant27'
+   *  Logic: '<S24>/Logical Operator2'
+   *  Logic: '<S29>/Logical Operator1'
+   *  RelationalOperator: '<S29>/Relational Operator'
+   *  Switch: '<S14>/Switch'
+   *  UnitDelay: '<S29>/delay'
+   */
+  SFM_DW.delay_DSTATE_j = (uint8_T)((!rtb_RelationalOperator1) && (sfmd_I_curr >=
+    sfmc_I_chrgCurrOverThr) ? (int32_T)i : 0);
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S24>/Constant25'
+   *  RelationalOperator: '<S29>/Relational Operator1'
+   */
+  rtb_TmpSignalConversionAtSFun_a[130] = (i > 2);
+
+  /* End of Outputs for SubSystem: '<S24>/Subsytem' */
+
+  /* Outputs for Atomic SubSystem: '<S24>/Subsytem1' */
+  /* Saturate: '<S30>/Saturation' incorporates:
+   *  Constant: '<S30>/Constant2'
+   *  Sum: '<S30>/Add'
+   *  UnitDelay: '<S30>/delay'
+   */
+  if ((uint8_T)(SFM_DW.delay_DSTATE + 1U) < 200) {
+    i = (uint8_T)(SFM_DW.delay_DSTATE + 1U);
+  } else {
+    i = 200U;
+  }
+
+  /* End of Saturate: '<S30>/Saturation' */
+
+  /* Product: '<S30>/Product' incorporates:
+   *  Constant: '<S24>/Constant10'
+   *  Logic: '<S24>/Logical Operator1'
+   *  Logic: '<S30>/Logical Operator'
+   *  RelationalOperator: '<S30>/Relational Operator'
+   *  Switch: '<S14>/Switch'
+   *  UnitDelay: '<S30>/delay'
+   */
+  SFM_DW.delay_DSTATE = (uint8_T)((!rtb_RelationalOperator1) && (sfmd_I_curr <=
+    sfmc_I_dischrgCurrOverThr) ? (int32_T)i : 0);
+
+  /* End of Outputs for SubSystem: '<S24>/Subsytem1' */
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S10>/Constant1'
+   *  Constant: '<S10>/Constant10'
+   *  Constant: '<S10>/Constant12'
+   *  Constant: '<S10>/Constant13'
+   *  Constant: '<S10>/Constant14'
+   *  Constant: '<S10>/Constant15'
+   *  Constant: '<S10>/Constant16'
+   *  Constant: '<S10>/Constant17'
+   *  Constant: '<S10>/Constant18'
+   *  Constant: '<S10>/Constant19'
+   *  Constant: '<S10>/Constant2'
+   *  Constant: '<S10>/Constant20'
+   *  Constant: '<S10>/Constant21'
+   *  Constant: '<S10>/Constant22'
+   *  Constant: '<S10>/Constant23'
+   *  Constant: '<S10>/Constant24'
+   *  Constant: '<S10>/Constant25'
+   *  Constant: '<S10>/Constant26'
+   *  Constant: '<S10>/Constant27'
+   *  Constant: '<S10>/Constant28'
+   *  Constant: '<S10>/Constant29'
+   *  Constant: '<S10>/Constant3'
+   *  Constant: '<S10>/Constant4'
+   *  Constant: '<S10>/Constant5'
+   *  Constant: '<S10>/Constant6'
+   *  Constant: '<S10>/Constant7'
+   *  Constant: '<S10>/Constant8'
+   *  Constant: '<S10>/Constant9'
+   *  Constant: '<S12>/Constant'
+   *  Constant: '<S12>/Constant1'
+   *  Constant: '<S12>/Constant2'
+   *  Constant: '<S12>/Constant3'
+   *  Constant: '<S12>/Constant4'
+   *  Constant: '<S12>/Constant5'
+   *  Constant: '<S12>/Constant6'
+   *  Constant: '<S12>/Constant7'
+   *  Constant: '<S12>/Constant8'
+   *  Constant: '<S12>/Constant9'
+   *  Constant: '<S15>/Constant11'
+   *  Constant: '<S15>/Constant12'
+   *  Constant: '<S15>/Constant13'
+   *  Constant: '<S15>/Constant14'
+   *  Constant: '<S15>/Constant15'
+   *  Constant: '<S15>/Constant16'
+   *  Constant: '<S15>/Constant17'
+   *  Constant: '<S15>/Constant18'
+   *  Constant: '<S15>/Constant19'
+   *  Constant: '<S15>/Constant20'
+   *  Constant: '<S15>/Constant21'
+   *  Constant: '<S15>/Constant4'
+   *  Constant: '<S15>/Constant5'
+   *  Constant: '<S15>/Constant6'
+   *  Constant: '<S15>/Constant7'
+   *  Constant: '<S15>/Constant8'
+   *  Constant: '<S15>/Constant9'
+   *  Constant: '<S16>/Constant'
+   *  Constant: '<S16>/Constant1'
+   *  Constant: '<S16>/Constant2'
+   *  Constant: '<S16>/Constant3'
+   *  Constant: '<S16>/Constant4'
+   *  Constant: '<S16>/Constant5'
+   *  Constant: '<S16>/Constant6'
+   *  Constant: '<S16>/Constant7'
+   *  Constant: '<S17>/Constant1'
+   *  Constant: '<S24>/Constant1'
+   *  Constant: '<S24>/Constant2'
+   *  Constant: '<S24>/Constant3'
+   *  Constant: '<S24>/Constant4'
+   *  Constant: '<S24>/Constant5'
+   *  Constant: '<S24>/Constant6'
+   *  Constant: '<S24>/Constant7'
+   *  Constant: '<S24>/Constant8'
+   *  Constant: '<S24>/Constant9'
+   *  Constant: '<S25>/Constant1'
+   *  Constant: '<S25>/Constant2'
+   *  Constant: '<S25>/Constant3'
+   *  Constant: '<S25>/Constant4'
+   *  Constant: '<S25>/Constant5'
+   *  Constant: '<S25>/Constant6'
+   *  Constant: '<S25>/Constant7'
+   *  Constant: '<S25>/Constant8'
+   *  Constant: '<S25>/Constant9'
+   *  Constant: '<S26>/Constant'
+   *  Constant: '<S27>/Constant'
+   *  Constant: '<S27>/Constant11'
+   *  Constant: '<S27>/Constant15'
+   *  Constant: '<S27>/Constant16'
+   *  Constant: '<S27>/Constant17'
+   *  Constant: '<S27>/Constant29'
+   *  Constant: '<S27>/Constant30'
+   *  Constant: '<S27>/Constant31'
+   *  Constant: '<S27>/Constant32'
+   *  Constant: '<S27>/Constant33'
+   *  Constant: '<S27>/Constant34'
+   *  Constant: '<S27>/Constant35'
+   *  Constant: '<S27>/Constant36'
+   *  Constant: '<S27>/Constant37'
+   *  Constant: '<S27>/Constant38'
+   *  Constant: '<S27>/Constant39'
+   *  Constant: '<S27>/Constant4'
+   *  Constant: '<S27>/Constant40'
+   *  Constant: '<S27>/Constant41'
+   *  Constant: '<S27>/Constant5'
+   *  Constant: '<S27>/Constant6'
+   *  Constant: '<S27>/Constant7'
+   *  Constant: '<S27>/Constant8'
+   *  Constant: '<S27>/Constant9'
+   *  Constant: '<S28>/Constant'
+   *  Constant: '<S28>/Constant31'
+   *  Constant: '<S28>/Constant32'
+   *  Constant: '<S28>/Constant33'
+   *  Constant: '<S28>/Constant34'
+   *  Constant: '<S28>/Constant35'
+   *  Constant: '<S28>/Constant36'
+   *  Constant: '<S28>/Constant37'
+   *  Constant: '<S28>/Constant38'
+   *  Constant: '<S28>/Constant39'
+   *  Constant: '<S6>/Constant'
+   *  Constant: '<S8>/Constant'
+   *  Constant: '<S8>/Constant1'
+   *  Constant: '<S8>/Constant2'
+   *  Constant: '<S8>/Constant3'
+   *  Constant: '<S8>/Constant4'
+   *  Constant: '<S9>/Constant1'
+   *  Constant: '<S9>/Constant10'
+   *  Constant: '<S9>/Constant2'
+   *  Constant: '<S9>/Constant3'
+   *  Constant: '<S9>/Constant4'
+   *  Constant: '<S9>/Constant5'
+   *  Constant: '<S9>/Constant7'
+   *  Constant: '<S9>/Constant8'
+   *  Constant: '<S9>/Constant9'
+   *  Inport: '<Root>/ihd_flg_chrgMosClosFlt'
+   *  Inport: '<Root>/ihd_flg_disChrgMosClosFlt'
+   *  Logic: '<S13>/Logical Operator1'
+   *  Logic: '<S27>/Logical Operator12'
+   *  Logic: '<S27>/Logical Operator13'
+   *  Logic: '<S27>/Logical Operator2'
+   *  Logic: '<S27>/Logical Operator6'
+   *  Logic: '<S27>/Logical Operator8'
+   *  Logic: '<S27>/Logical Operator9'
+   *  Logic: '<S28>/Logical Operator'
+   *  Logic: '<S28>/Logical Operator10'
+   *  Logic: '<S28>/Logical Operator11'
+   *  Logic: '<S28>/Logical Operator12'
+   *  Logic: '<S28>/Logical Operator13'
+   *  Logic: '<S28>/Logical Operator14'
+   *  Logic: '<S28>/Logical Operator15'
+   *  Logic: '<S28>/Logical Operator4'
+   *  Logic: '<S28>/Logical Operator7'
+   *  Logic: '<S28>/Logical Operator8'
+   *  RelationalOperator: '<S30>/Relational Operator1'
+   */
+  rtb_TmpSignalConversionAtSFun_a[0] = rtb_RelationalOperator1;
+  rtb_TmpSignalConversionAtSFun_a[1] = false;
+  rtb_TmpSignalConversionAtSFun_a[2] = false;
+  rtb_TmpSignalConversionAtSFun_a[3] = false;
+  rtb_TmpSignalConversionAtSFun_a[4] = false;
+  rtb_TmpSignalConversionAtSFun_a[5] = false;
+  rtb_TmpSignalConversionAtSFun_a[6] = false;
+  rtb_TmpSignalConversionAtSFun_a[7] = false;
+  rtb_TmpSignalConversionAtSFun_a[8] = false;
+  rtb_TmpSignalConversionAtSFun_a[9] = false;
+  rtb_TmpSignalConversionAtSFun_a[10] = false;
+  rtb_TmpSignalConversionAtSFun_a[11] = false;
+  rtb_TmpSignalConversionAtSFun_a[12] = false;
+  rtb_TmpSignalConversionAtSFun_a[13] = false;
+  rtb_TmpSignalConversionAtSFun_a[14] = false;
+  rtb_TmpSignalConversionAtSFun_a[15] = false;
+  rtb_TmpSignalConversionAtSFun_a[16] = false;
+  rtb_TmpSignalConversionAtSFun_a[17] = false;
+  rtb_TmpSignalConversionAtSFun_a[18] = false;
+  rtb_TmpSignalConversionAtSFun_a[19] = false;
+  rtb_TmpSignalConversionAtSFun_a[20] = false;
+  rtb_TmpSignalConversionAtSFun_a[21] = ihd_flg_chrgMosClosFlt;
+  rtb_TmpSignalConversionAtSFun_a[22] = false;
+  rtb_TmpSignalConversionAtSFun_a[23] = ihd_flg_dischrgMosClosFlt;
+  rtb_TmpSignalConversionAtSFun_a[24] = false;
+  rtb_TmpSignalConversionAtSFun_a[25] = false;
+  rtb_TmpSignalConversionAtSFun_a[26] = false;
+  rtb_TmpSignalConversionAtSFun_a[27] = false;
+  rtb_TmpSignalConversionAtSFun_a[28] = false;
+  rtb_TmpSignalConversionAtSFun_a[29] = false;
+  rtb_TmpSignalConversionAtSFun_a[30] = false;
+  rtb_TmpSignalConversionAtSFun_a[31] = false;
+  rtb_TmpSignalConversionAtSFun_a[32] = false;
+  rtb_TmpSignalConversionAtSFun_a[33] = false;
+  rtb_TmpSignalConversionAtSFun_a[34] = false;
+  rtb_TmpSignalConversionAtSFun_a[35] = false;
+  rtb_TmpSignalConversionAtSFun_a[36] = false;
+  rtb_TmpSignalConversionAtSFun_a[37] = false;
+  rtb_TmpSignalConversionAtSFun_a[38] = false;
+  rtb_TmpSignalConversionAtSFun_a[39] = false;
+  rtb_TmpSignalConversionAtSFun_a[40] = false;
+  rtb_TmpSignalConversionAtSFun_a[41] = false;
+  rtb_TmpSignalConversionAtSFun_a[42] = false;
+  rtb_TmpSignalConversionAtSFun_a[43] = false;
+  rtb_TmpSignalConversionAtSFun_a[44] = false;
+  rtb_TmpSignalConversionAtSFun_a[45] = false;
+  rtb_TmpSignalConversionAtSFun_a[46] = false;
+  rtb_TmpSignalConversionAtSFun_a[47] = false;
+  rtb_TmpSignalConversionAtSFun_a[48] = false;
+  rtb_TmpSignalConversionAtSFun_a[49] = false;
+  rtb_TmpSignalConversionAtSFun_a[50] = false;
+  rtb_TmpSignalConversionAtSFun_a[51] = tmp;
+  rtb_TmpSignalConversionAtSFun_a[52] = sfmv_flg_TFlt;
+  rtb_TmpSignalConversionAtSFun_a[53] = false;
+  rtb_TmpSignalConversionAtSFun_a[54] = false;
+  rtb_TmpSignalConversionAtSFun_a[55] = false;
+  rtb_TmpSignalConversionAtSFun_a[56] = false;
+  rtb_TmpSignalConversionAtSFun_a[57] = false;
+  rtb_TmpSignalConversionAtSFun_a[58] = false;
+  rtb_TmpSignalConversionAtSFun_a[59] = false;
+  rtb_TmpSignalConversionAtSFun_a[60] = false;
+  rtb_TmpSignalConversionAtSFun_a[61] = false;
+  rtb_TmpSignalConversionAtSFun_a[62] = false;
+  rtb_TmpSignalConversionAtSFun_a[63] = false;
+  rtb_TmpSignalConversionAtSFun_a[64] = false;
+  rtb_TmpSignalConversionAtSFun_a[65] = false;
+  rtb_TmpSignalConversionAtSFun_a[66] = false;
+  rtb_TmpSignalConversionAtSFun_a[67] = false;
+  rtb_TmpSignalConversionAtSFun_a[68] = false;
+  rtb_TmpSignalConversionAtSFun_a[69] = false;
+  rtb_TmpSignalConversionAtSFun_a[70] = sfmd_flg_currFlt;
+  rtb_TmpSignalConversionAtSFun_a[71] = false;
+  rtb_TmpSignalConversionAtSFun_a[72] = false;
+  rtb_TmpSignalConversionAtSFun_a[73] = false;
+  rtb_TmpSignalConversionAtSFun_a[74] = false;
+  rtb_TmpSignalConversionAtSFun_a[75] = false;
+  rtb_TmpSignalConversionAtSFun_a[76] = false;
+  rtb_TmpSignalConversionAtSFun_a[77] = false;
+  rtb_TmpSignalConversionAtSFun_a[78] = false;
+  rtb_TmpSignalConversionAtSFun_a[79] = false;
+  rtb_TmpSignalConversionAtSFun_a[80] = rtb_RelationalOperator1_ep;
+  rtb_TmpSignalConversionAtSFun_a[81] = (rtb_RelationalOperator1_j &&
+    (!rtb_RelationalOperator1_ep));
+  rtb_TmpSignalConversionAtSFun_a[82] = rtb_RelationalOperator1_di;
+  rtb_TmpSignalConversionAtSFun_a[83] = (rtb_RelationalOperator1_l &&
+    (!rtb_RelationalOperator1_di));
+  rtb_TmpSignalConversionAtSFun_a[84] = rtb_RelationalOperator1_lf;
+  rtb_TmpSignalConversionAtSFun_a[85] = (rtb_RelationalOperator1_eg &&
+    (!rtb_RelationalOperator1_lf));
+  rtb_TmpSignalConversionAtSFun_a[86] = rtb_RelationalOperator1_fg;
+  rtb_TmpSignalConversionAtSFun_a[87] = (rtb_RelationalOperator1_it &&
+    (!rtb_RelationalOperator1_fg));
+  rtb_TmpSignalConversionAtSFun_a[88] = rtb_RelationalOperator1_o;
+  rtb_TmpSignalConversionAtSFun_a[89] = (rtb_RelationalOperator_et &&
+    (!rtb_RelationalOperator1_o));
+  rtb_TmpSignalConversionAtSFun_a[90] = false;
+  rtb_TmpSignalConversionAtSFun_a[91] = false;
+  rtb_TmpSignalConversionAtSFun_a[92] = false;
+  rtb_TmpSignalConversionAtSFun_a[93] = false;
+  rtb_TmpSignalConversionAtSFun_a[94] = false;
+  rtb_TmpSignalConversionAtSFun_a[95] = false;
+  rtb_TmpSignalConversionAtSFun_a[96] = false;
+  rtb_TmpSignalConversionAtSFun_a[97] = false;
+  rtb_TmpSignalConversionAtSFun_a[98] = false;
+  rtb_TmpSignalConversionAtSFun_a[99] = false;
+  rtb_TmpSignalConversionAtSFun_a[100] = rtb_RelationalOperator1_p;
+  rtb_TmpSignalConversionAtSFun_a[101] = (rtb_RelationalOperator1_a &&
+    (!rtb_RelationalOperator1_p));
+  rtb_TmpSignalConversionAtSFun_a[102] = rtb_RelationalOperator1_i;
+  rtb_TmpSignalConversionAtSFun_a[103] = (rtb_RelationalOperator1_d &&
+    (!rtb_RelationalOperator1_i));
+  rtb_TmpSignalConversionAtSFun_a[104] = rtb_RelationalOperator1_bb;
+  rtb_TmpSignalConversionAtSFun_a[105] = (rtb_RelationalOperator1_gr &&
+    (!rtb_RelationalOperator1_bb));
+  rtb_TmpSignalConversionAtSFun_a[106] = false;
+  rtb_TmpSignalConversionAtSFun_a[107] = false;
+  rtb_TmpSignalConversionAtSFun_a[108] = false;
+  rtb_TmpSignalConversionAtSFun_a[109] = false;
+  rtb_TmpSignalConversionAtSFun_a[110] = false;
+  rtb_TmpSignalConversionAtSFun_a[111] = false;
+  rtb_TmpSignalConversionAtSFun_a[112] = false;
+  rtb_TmpSignalConversionAtSFun_a[113] = false;
+  rtb_TmpSignalConversionAtSFun_a[114] = false;
+  rtb_TmpSignalConversionAtSFun_a[115] = false;
+  rtb_TmpSignalConversionAtSFun_a[116] = false;
+  rtb_TmpSignalConversionAtSFun_a[117] = false;
+  rtb_TmpSignalConversionAtSFun_a[118] = false;
+  rtb_TmpSignalConversionAtSFun_a[119] = false;
+  rtb_TmpSignalConversionAtSFun_a[120] = false;
+  rtb_TmpSignalConversionAtSFun_a[121] = false;
+  rtb_TmpSignalConversionAtSFun_a[122] = false;
+  rtb_TmpSignalConversionAtSFun_a[123] = false;
+  rtb_TmpSignalConversionAtSFun_a[124] = false;
+  rtb_TmpSignalConversionAtSFun_a[125] = false;
+  rtb_TmpSignalConversionAtSFun_a[126] = false;
+  rtb_TmpSignalConversionAtSFun_a[127] = false;
+  rtb_TmpSignalConversionAtSFun_a[128] = false;
+  rtb_TmpSignalConversionAtSFun_a[129] = false;
+
+  /* Outputs for Atomic SubSystem: '<S24>/Subsytem1' */
+  rtb_TmpSignalConversionAtSFun_a[131] = (i > 2);
+
+  /* End of Outputs for SubSystem: '<S24>/Subsytem1' */
+  rtb_TmpSignalConversionAtSFun_a[132] = false;
+  rtb_TmpSignalConversionAtSFun_a[133] = false;
+  rtb_TmpSignalConversionAtSFun_a[134] = false;
+  rtb_TmpSignalConversionAtSFun_a[135] = false;
+  rtb_TmpSignalConversionAtSFun_a[136] = false;
+  rtb_TmpSignalConversionAtSFun_a[137] = false;
+  rtb_TmpSignalConversionAtSFun_a[138] = false;
+  rtb_TmpSignalConversionAtSFun_a[139] = false;
+  rtb_TmpSignalConversionAtSFun_a[140] = false;
+  rtb_TmpSignalConversionAtSFun_a[141] = false;
+  rtb_TmpSignalConversionAtSFun_a[142] = false;
+  rtb_TmpSignalConversionAtSFun_a[143] = false;
+  rtb_TmpSignalConversionAtSFun_a[144] = false;
+  rtb_TmpSignalConversionAtSFun_a[145] = false;
+  rtb_TmpSignalConversionAtSFun_a[146] = false;
+  rtb_TmpSignalConversionAtSFun_a[147] = false;
+  rtb_TmpSignalConversionAtSFun_a[148] = false;
+  rtb_TmpSignalConversionAtSFun_a[149] = false;
+  rtb_TmpSignalConversionAtSFun_a[150] = false;
+  rtb_TmpSignalConversionAtSFun_a[151] = false;
+  rtb_TmpSignalConversionAtSFun_a[152] = false;
+  rtb_TmpSignalConversionAtSFun_a[153] = false;
+  rtb_TmpSignalConversionAtSFun_a[154] = false;
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S3>/Constant1'
+   *  Constant: '<S3>/Constant10'
+   *  Constant: '<S3>/Constant100'
+   *  Constant: '<S3>/Constant101'
+   *  Constant: '<S3>/Constant102'
+   *  Constant: '<S3>/Constant103'
+   *  Constant: '<S3>/Constant104'
+   *  Constant: '<S3>/Constant105'
+   *  Constant: '<S3>/Constant106'
+   *  Constant: '<S3>/Constant107'
+   *  Constant: '<S3>/Constant108'
+   *  Constant: '<S3>/Constant109'
+   *  Constant: '<S3>/Constant11'
+   *  Constant: '<S3>/Constant110'
+   *  Constant: '<S3>/Constant111'
+   *  Constant: '<S3>/Constant112'
+   *  Constant: '<S3>/Constant113'
+   *  Constant: '<S3>/Constant114'
+   *  Constant: '<S3>/Constant115'
+   *  Constant: '<S3>/Constant116'
+   *  Constant: '<S3>/Constant117'
+   *  Constant: '<S3>/Constant118'
+   *  Constant: '<S3>/Constant119'
+   *  Constant: '<S3>/Constant12'
+   *  Constant: '<S3>/Constant120'
+   *  Constant: '<S3>/Constant121'
+   *  Constant: '<S3>/Constant122'
+   *  Constant: '<S3>/Constant123'
+   *  Constant: '<S3>/Constant124'
+   *  Constant: '<S3>/Constant125'
+   *  Constant: '<S3>/Constant126'
+   *  Constant: '<S3>/Constant127'
+   *  Constant: '<S3>/Constant128'
+   *  Constant: '<S3>/Constant129'
+   *  Constant: '<S3>/Constant13'
+   *  Constant: '<S3>/Constant130'
+   *  Constant: '<S3>/Constant131'
+   *  Constant: '<S3>/Constant132'
+   *  Constant: '<S3>/Constant133'
+   *  Constant: '<S3>/Constant134'
+   *  Constant: '<S3>/Constant135'
+   *  Constant: '<S3>/Constant136'
+   *  Constant: '<S3>/Constant137'
+   *  Constant: '<S3>/Constant138'
+   *  Constant: '<S3>/Constant139'
+   *  Constant: '<S3>/Constant14'
+   *  Constant: '<S3>/Constant140'
+   *  Constant: '<S3>/Constant141'
+   *  Constant: '<S3>/Constant142'
+   *  Constant: '<S3>/Constant143'
+   *  Constant: '<S3>/Constant144'
+   *  Constant: '<S3>/Constant145'
+   *  Constant: '<S3>/Constant146'
+   *  Constant: '<S3>/Constant147'
+   *  Constant: '<S3>/Constant148'
+   *  Constant: '<S3>/Constant149'
+   *  Constant: '<S3>/Constant15'
+   *  Constant: '<S3>/Constant150'
+   *  Constant: '<S3>/Constant151'
+   *  Constant: '<S3>/Constant152'
+   *  Constant: '<S3>/Constant153'
+   *  Constant: '<S3>/Constant154'
+   *  Constant: '<S3>/Constant155'
+   *  Constant: '<S3>/Constant157'
+   *  Constant: '<S3>/Constant158'
+   *  Constant: '<S3>/Constant159'
+   *  Constant: '<S3>/Constant16'
+   *  Constant: '<S3>/Constant160'
+   *  Constant: '<S3>/Constant17'
+   *  Constant: '<S3>/Constant18'
+   *  Constant: '<S3>/Constant19'
+   *  Constant: '<S3>/Constant20'
+   *  Constant: '<S3>/Constant21'
+   *  Constant: '<S3>/Constant22'
+   *  Constant: '<S3>/Constant23'
+   *  Constant: '<S3>/Constant24'
+   *  Constant: '<S3>/Constant25'
+   *  Constant: '<S3>/Constant26'
+   *  Constant: '<S3>/Constant27'
+   *  Constant: '<S3>/Constant28'
+   *  Constant: '<S3>/Constant29'
+   *  Constant: '<S3>/Constant30'
+   *  Constant: '<S3>/Constant31'
+   *  Constant: '<S3>/Constant32'
+   *  Constant: '<S3>/Constant33'
+   *  Constant: '<S3>/Constant34'
+   *  Constant: '<S3>/Constant35'
+   *  Constant: '<S3>/Constant36'
+   *  Constant: '<S3>/Constant37'
+   *  Constant: '<S3>/Constant38'
+   *  Constant: '<S3>/Constant39'
+   *  Constant: '<S3>/Constant4'
+   *  Constant: '<S3>/Constant40'
+   *  Constant: '<S3>/Constant41'
+   *  Constant: '<S3>/Constant42'
+   *  Constant: '<S3>/Constant43'
+   *  Constant: '<S3>/Constant44'
+   *  Constant: '<S3>/Constant45'
+   *  Constant: '<S3>/Constant46'
+   *  Constant: '<S3>/Constant47'
+   *  Constant: '<S3>/Constant48'
+   *  Constant: '<S3>/Constant49'
+   *  Constant: '<S3>/Constant5'
+   *  Constant: '<S3>/Constant50'
+   *  Constant: '<S3>/Constant51'
+   *  Constant: '<S3>/Constant52'
+   *  Constant: '<S3>/Constant53'
+   *  Constant: '<S3>/Constant54'
+   *  Constant: '<S3>/Constant55'
+   *  Constant: '<S3>/Constant56'
+   *  Constant: '<S3>/Constant57'
+   *  Constant: '<S3>/Constant58'
+   *  Constant: '<S3>/Constant59'
+   *  Constant: '<S3>/Constant6'
+   *  Constant: '<S3>/Constant60'
+   *  Constant: '<S3>/Constant61'
+   *  Constant: '<S3>/Constant62'
+   *  Constant: '<S3>/Constant63'
+   *  Constant: '<S3>/Constant64'
+   *  Constant: '<S3>/Constant65'
+   *  Constant: '<S3>/Constant66'
+   *  Constant: '<S3>/Constant67'
+   *  Constant: '<S3>/Constant68'
+   *  Constant: '<S3>/Constant69'
+   *  Constant: '<S3>/Constant7'
+   *  Constant: '<S3>/Constant70'
+   *  Constant: '<S3>/Constant71'
+   *  Constant: '<S3>/Constant72'
+   *  Constant: '<S3>/Constant73'
+   *  Constant: '<S3>/Constant74'
+   *  Constant: '<S3>/Constant75'
+   *  Constant: '<S3>/Constant76'
+   *  Constant: '<S3>/Constant77'
+   *  Constant: '<S3>/Constant78'
+   *  Constant: '<S3>/Constant79'
+   *  Constant: '<S3>/Constant8'
+   *  Constant: '<S3>/Constant80'
+   *  Constant: '<S3>/Constant81'
+   *  Constant: '<S3>/Constant84'
+   *  Constant: '<S3>/Constant85'
+   *  Constant: '<S3>/Constant86'
+   *  Constant: '<S3>/Constant87'
+   *  Constant: '<S3>/Constant88'
+   *  Constant: '<S3>/Constant89'
+   *  Constant: '<S3>/Constant9'
+   *  Constant: '<S3>/Constant90'
+   *  Constant: '<S3>/Constant91'
+   *  Constant: '<S3>/Constant92'
+   *  Constant: '<S3>/Constant93'
+   *  Constant: '<S3>/Constant94'
+   *  Constant: '<S3>/Constant95'
+   *  Constant: '<S3>/Constant96'
+   *  Constant: '<S3>/Constant97'
+   *  Constant: '<S3>/Constant98'
+   *  Constant: '<S3>/Constant99'
+   */
+  rtb_TmpSignalConversionAtSFunct[0] = 2U;
+  rtb_TmpSignalConversionAtSFunct[1] = 2U;
+  rtb_TmpSignalConversionAtSFunct[2] = 2U;
+  rtb_TmpSignalConversionAtSFunct[3] = 2U;
+  rtb_TmpSignalConversionAtSFunct[4] = 4U;
+  rtb_TmpSignalConversionAtSFunct[5] = 0U;
+  rtb_TmpSignalConversionAtSFunct[6] = 0U;
+  rtb_TmpSignalConversionAtSFunct[7] = 0U;
+  rtb_TmpSignalConversionAtSFunct[8] = 0U;
+  rtb_TmpSignalConversionAtSFunct[9] = 0U;
+  rtb_TmpSignalConversionAtSFunct[10] = 5U;
+  rtb_TmpSignalConversionAtSFunct[11] = 5U;
+  rtb_TmpSignalConversionAtSFunct[12] = 2U;
+  rtb_TmpSignalConversionAtSFunct[13] = 5U;
+  rtb_TmpSignalConversionAtSFunct[14] = 3U;
+  rtb_TmpSignalConversionAtSFunct[15] = 0U;
+  rtb_TmpSignalConversionAtSFunct[16] = 0U;
+  rtb_TmpSignalConversionAtSFunct[17] = 0U;
+  rtb_TmpSignalConversionAtSFunct[18] = 0U;
+  rtb_TmpSignalConversionAtSFunct[19] = 0U;
+  rtb_TmpSignalConversionAtSFunct[20] = 5U;
+  rtb_TmpSignalConversionAtSFunct[21] = 4U;
+  rtb_TmpSignalConversionAtSFunct[22] = 2U;
+  rtb_TmpSignalConversionAtSFunct[23] = 4U;
+  rtb_TmpSignalConversionAtSFunct[24] = 2U;
+  rtb_TmpSignalConversionAtSFunct[25] = 3U;
+  rtb_TmpSignalConversionAtSFunct[26] = 3U;
+  rtb_TmpSignalConversionAtSFunct[27] = 3U;
+  rtb_TmpSignalConversionAtSFunct[28] = 3U;
+  rtb_TmpSignalConversionAtSFunct[29] = 5U;
+  rtb_TmpSignalConversionAtSFunct[30] = 2U;
+  rtb_TmpSignalConversionAtSFunct[31] = 4U;
+  rtb_TmpSignalConversionAtSFunct[32] = 0U;
+  rtb_TmpSignalConversionAtSFunct[33] = 0U;
+  rtb_TmpSignalConversionAtSFunct[34] = 0U;
+  rtb_TmpSignalConversionAtSFunct[35] = 0U;
+  rtb_TmpSignalConversionAtSFunct[36] = 0U;
+  rtb_TmpSignalConversionAtSFunct[37] = 0U;
+  rtb_TmpSignalConversionAtSFunct[38] = 0U;
+  rtb_TmpSignalConversionAtSFunct[39] = 0U;
+  rtb_TmpSignalConversionAtSFunct[40] = 0U;
+  rtb_TmpSignalConversionAtSFunct[41] = 0U;
+  rtb_TmpSignalConversionAtSFunct[42] = 0U;
+  rtb_TmpSignalConversionAtSFunct[43] = 0U;
+  rtb_TmpSignalConversionAtSFunct[44] = 0U;
+  rtb_TmpSignalConversionAtSFunct[45] = 0U;
+  rtb_TmpSignalConversionAtSFunct[46] = 0U;
+  rtb_TmpSignalConversionAtSFunct[47] = 0U;
+  rtb_TmpSignalConversionAtSFunct[48] = 0U;
+  rtb_TmpSignalConversionAtSFunct[49] = 0U;
+  rtb_TmpSignalConversionAtSFunct[50] = 2U;
+  rtb_TmpSignalConversionAtSFunct[51] = 4U;
+  rtb_TmpSignalConversionAtSFunct[52] = 4U;
+  rtb_TmpSignalConversionAtSFunct[53] = 4U;
+  rtb_TmpSignalConversionAtSFunct[54] = 4U;
+  rtb_TmpSignalConversionAtSFunct[55] = 4U;
+  rtb_TmpSignalConversionAtSFunct[56] = 4U;
+  rtb_TmpSignalConversionAtSFunct[57] = 2U;
+  rtb_TmpSignalConversionAtSFunct[58] = 2U;
+  rtb_TmpSignalConversionAtSFunct[59] = 3U;
+  rtb_TmpSignalConversionAtSFunct[60] = 0U;
+  rtb_TmpSignalConversionAtSFunct[61] = 0U;
+  rtb_TmpSignalConversionAtSFunct[62] = 0U;
+  rtb_TmpSignalConversionAtSFunct[63] = 0U;
+  rtb_TmpSignalConversionAtSFunct[64] = 0U;
+  rtb_TmpSignalConversionAtSFunct[65] = 0U;
+  rtb_TmpSignalConversionAtSFunct[66] = 0U;
+  rtb_TmpSignalConversionAtSFunct[67] = 0U;
+  rtb_TmpSignalConversionAtSFunct[68] = 0U;
+  rtb_TmpSignalConversionAtSFunct[69] = 0U;
+  rtb_TmpSignalConversionAtSFunct[70] = 4U;
+  rtb_TmpSignalConversionAtSFunct[71] = 2U;
+  rtb_TmpSignalConversionAtSFunct[72] = 0U;
+  rtb_TmpSignalConversionAtSFunct[73] = 0U;
+  rtb_TmpSignalConversionAtSFunct[74] = 0U;
+  rtb_TmpSignalConversionAtSFunct[75] = 0U;
+  rtb_TmpSignalConversionAtSFunct[76] = 0U;
+  rtb_TmpSignalConversionAtSFunct[77] = 0U;
+  rtb_TmpSignalConversionAtSFunct[78] = 0U;
+  rtb_TmpSignalConversionAtSFunct[79] = 0U;
+  rtb_TmpSignalConversionAtSFunct[80] = 4U;
+  rtb_TmpSignalConversionAtSFunct[81] = 3U;
+  rtb_TmpSignalConversionAtSFunct[82] = 4U;
+  rtb_TmpSignalConversionAtSFunct[83] = 3U;
+  rtb_TmpSignalConversionAtSFunct[84] = 3U;
+  rtb_TmpSignalConversionAtSFunct[85] = 2U;
+  rtb_TmpSignalConversionAtSFunct[86] = 4U;
+  rtb_TmpSignalConversionAtSFunct[87] = 3U;
+  rtb_TmpSignalConversionAtSFunct[88] = 4U;
+  rtb_TmpSignalConversionAtSFunct[89] = 3U;
+  rtb_TmpSignalConversionAtSFunct[90] = 0U;
+  rtb_TmpSignalConversionAtSFunct[91] = 0U;
+  rtb_TmpSignalConversionAtSFunct[92] = 0U;
+  rtb_TmpSignalConversionAtSFunct[93] = 0U;
+  rtb_TmpSignalConversionAtSFunct[94] = 0U;
+  rtb_TmpSignalConversionAtSFunct[95] = 0U;
+  rtb_TmpSignalConversionAtSFunct[96] = 0U;
+  rtb_TmpSignalConversionAtSFunct[97] = 0U;
+  rtb_TmpSignalConversionAtSFunct[98] = 0U;
+  rtb_TmpSignalConversionAtSFunct[99] = 0U;
+  rtb_TmpSignalConversionAtSFunct[100] = 4U;
+  rtb_TmpSignalConversionAtSFunct[101] = 3U;
+  rtb_TmpSignalConversionAtSFunct[102] = 4U;
+  rtb_TmpSignalConversionAtSFunct[103] = 3U;
+  rtb_TmpSignalConversionAtSFunct[104] = 3U;
+  rtb_TmpSignalConversionAtSFunct[105] = 1U;
+  rtb_TmpSignalConversionAtSFunct[106] = 4U;
+  rtb_TmpSignalConversionAtSFunct[107] = 3U;
+  rtb_TmpSignalConversionAtSFunct[108] = 4U;
+  rtb_TmpSignalConversionAtSFunct[109] = 3U;
+  rtb_TmpSignalConversionAtSFunct[110] = 4U;
+  rtb_TmpSignalConversionAtSFunct[111] = 3U;
+  rtb_TmpSignalConversionAtSFunct[112] = 4U;
+  rtb_TmpSignalConversionAtSFunct[113] = 3U;
+  rtb_TmpSignalConversionAtSFunct[114] = 4U;
+  rtb_TmpSignalConversionAtSFunct[115] = 3U;
+  rtb_TmpSignalConversionAtSFunct[116] = 1U;
+  rtb_TmpSignalConversionAtSFunct[117] = 1U;
+  rtb_TmpSignalConversionAtSFunct[118] = 0U;
+  rtb_TmpSignalConversionAtSFunct[119] = 0U;
+  rtb_TmpSignalConversionAtSFunct[120] = 0U;
+  rtb_TmpSignalConversionAtSFunct[121] = 0U;
+  rtb_TmpSignalConversionAtSFunct[122] = 0U;
+  rtb_TmpSignalConversionAtSFunct[123] = 0U;
+  rtb_TmpSignalConversionAtSFunct[124] = 0U;
+  rtb_TmpSignalConversionAtSFunct[125] = 0U;
+  rtb_TmpSignalConversionAtSFunct[126] = 0U;
+  rtb_TmpSignalConversionAtSFunct[127] = 0U;
+  rtb_TmpSignalConversionAtSFunct[128] = 0U;
+  rtb_TmpSignalConversionAtSFunct[129] = 0U;
+  rtb_TmpSignalConversionAtSFunct[130] = 4U;
+  rtb_TmpSignalConversionAtSFunct[131] = 4U;
+  rtb_TmpSignalConversionAtSFunct[132] = 3U;
+  rtb_TmpSignalConversionAtSFunct[133] = 0U;
+  rtb_TmpSignalConversionAtSFunct[134] = 0U;
+  rtb_TmpSignalConversionAtSFunct[135] = 0U;
+  rtb_TmpSignalConversionAtSFunct[136] = 0U;
+  rtb_TmpSignalConversionAtSFunct[137] = 0U;
+  rtb_TmpSignalConversionAtSFunct[138] = 0U;
+  rtb_TmpSignalConversionAtSFunct[139] = 0U;
+  rtb_TmpSignalConversionAtSFunct[140] = 3U;
+  rtb_TmpSignalConversionAtSFunct[141] = 0U;
+  rtb_TmpSignalConversionAtSFunct[142] = 0U;
+  rtb_TmpSignalConversionAtSFunct[143] = 0U;
+  rtb_TmpSignalConversionAtSFunct[144] = 0U;
+  rtb_TmpSignalConversionAtSFunct[145] = 0U;
+  rtb_TmpSignalConversionAtSFunct[146] = 0U;
+  rtb_TmpSignalConversionAtSFunct[147] = 0U;
+  rtb_TmpSignalConversionAtSFunct[148] = 0U;
+  rtb_TmpSignalConversionAtSFunct[149] = 0U;
+  rtb_TmpSignalConversionAtSFunct[150] = 2U;
+  rtb_TmpSignalConversionAtSFunct[151] = 2U;
+  rtb_TmpSignalConversionAtSFunct[152] = 2U;
+  rtb_TmpSignalConversionAtSFunct[153] = 1U;
+  rtb_TmpSignalConversionAtSFunct[154] = 1U;
+
+  /* SignalConversion generated from: '<S5>/ SFunction ' incorporates:
+   *  Chart: '<S3>/FltCodeArry'
+   *  Constant: '<S3>/Constant156'
+   *  Constant: '<S3>/Constant161'
+   *  Constant: '<S3>/Constant162'
+   *  Constant: '<S3>/Constant163'
+   *  Constant: '<S3>/Constant164'
+   *  Constant: '<S3>/Constant165'
+   *  Constant: '<S3>/Constant166'
+   *  Constant: '<S3>/Constant167'
+   *  Constant: '<S3>/Constant168'
+   *  Constant: '<S3>/Constant169'
+   *  Constant: '<S3>/Constant170'
+   *  Constant: '<S3>/Constant171'
+   *  Constant: '<S3>/Constant172'
+   *  Constant: '<S3>/Constant173'
+   *  Constant: '<S3>/Constant174'
+   *  Constant: '<S3>/Constant175'
+   *  Constant: '<S3>/Constant176'
+   *  Constant: '<S3>/Constant177'
+   *  Constant: '<S3>/Constant178'
+   *  Constant: '<S3>/Constant179'
+   *  Constant: '<S3>/Constant180'
+   *  Constant: '<S3>/Constant181'
+   *  Constant: '<S3>/Constant182'
+   *  Constant: '<S3>/Constant183'
+   *  Constant: '<S3>/Constant184'
+   *  Constant: '<S3>/Constant185'
+   *  Constant: '<S3>/Constant186'
+   *  Constant: '<S3>/Constant187'
+   *  Constant: '<S3>/Constant188'
+   *  Constant: '<S3>/Constant189'
+   *  Constant: '<S3>/Constant190'
+   *  Constant: '<S3>/Constant191'
+   *  Constant: '<S3>/Constant192'
+   *  Constant: '<S3>/Constant193'
+   *  Constant: '<S3>/Constant194'
+   *  Constant: '<S3>/Constant195'
+   *  Constant: '<S3>/Constant196'
+   *  Constant: '<S3>/Constant197'
+   *  Constant: '<S3>/Constant198'
+   *  Constant: '<S3>/Constant199'
+   *  Constant: '<S3>/Constant200'
+   *  Constant: '<S3>/Constant201'
+   *  Constant: '<S3>/Constant202'
+   *  Constant: '<S3>/Constant203'
+   *  Constant: '<S3>/Constant204'
+   *  Constant: '<S3>/Constant205'
+   *  Constant: '<S3>/Constant206'
+   *  Constant: '<S3>/Constant207'
+   *  Constant: '<S3>/Constant208'
+   *  Constant: '<S3>/Constant209'
+   *  Constant: '<S3>/Constant210'
+   *  Constant: '<S3>/Constant211'
+   *  Constant: '<S3>/Constant212'
+   *  Constant: '<S3>/Constant213'
+   *  Constant: '<S3>/Constant214'
+   *  Constant: '<S3>/Constant215'
+   *  Constant: '<S3>/Constant216'
+   *  Constant: '<S3>/Constant217'
+   *  Constant: '<S3>/Constant218'
+   *  Constant: '<S3>/Constant219'
+   *  Constant: '<S3>/Constant220'
+   *  Constant: '<S3>/Constant221'
+   *  Constant: '<S3>/Constant222'
+   *  Constant: '<S3>/Constant223'
+   *  Constant: '<S3>/Constant224'
+   *  Constant: '<S3>/Constant225'
+   *  Constant: '<S3>/Constant226'
+   *  Constant: '<S3>/Constant227'
+   *  Constant: '<S3>/Constant228'
+   *  Constant: '<S3>/Constant229'
+   *  Constant: '<S3>/Constant230'
+   *  Constant: '<S3>/Constant231'
+   *  Constant: '<S3>/Constant232'
+   *  Constant: '<S3>/Constant233'
+   *  Constant: '<S3>/Constant234'
+   *  Constant: '<S3>/Constant235'
+   *  Constant: '<S3>/Constant236'
+   *  Constant: '<S3>/Constant237'
+   *  Constant: '<S3>/Constant238'
+   *  Constant: '<S3>/Constant239'
+   *  Constant: '<S3>/Constant240'
+   *  Constant: '<S3>/Constant241'
+   *  Constant: '<S3>/Constant242'
+   *  Constant: '<S3>/Constant243'
+   *  Constant: '<S3>/Constant244'
+   *  Constant: '<S3>/Constant245'
+   *  Constant: '<S3>/Constant246'
+   *  Constant: '<S3>/Constant247'
+   *  Constant: '<S3>/Constant248'
+   *  Constant: '<S3>/Constant249'
+   *  Constant: '<S3>/Constant250'
+   *  Constant: '<S3>/Constant251'
+   *  Constant: '<S3>/Constant252'
+   *  Constant: '<S3>/Constant253'
+   *  Constant: '<S3>/Constant254'
+   *  Constant: '<S3>/Constant255'
+   *  Constant: '<S3>/Constant256'
+   *  Constant: '<S3>/Constant257'
+   *  Constant: '<S3>/Constant258'
+   *  Constant: '<S3>/Constant259'
+   *  Constant: '<S3>/Constant260'
+   *  Constant: '<S3>/Constant261'
+   *  Constant: '<S3>/Constant262'
+   *  Constant: '<S3>/Constant263'
+   *  Constant: '<S3>/Constant264'
+   *  Constant: '<S3>/Constant265'
+   *  Constant: '<S3>/Constant266'
+   *  Constant: '<S3>/Constant267'
+   *  Constant: '<S3>/Constant268'
+   *  Constant: '<S3>/Constant269'
+   *  Constant: '<S3>/Constant270'
+   *  Constant: '<S3>/Constant271'
+   *  Constant: '<S3>/Constant272'
+   *  Constant: '<S3>/Constant273'
+   *  Constant: '<S3>/Constant274'
+   *  Constant: '<S3>/Constant275'
+   *  Constant: '<S3>/Constant276'
+   *  Constant: '<S3>/Constant277'
+   *  Constant: '<S3>/Constant278'
+   *  Constant: '<S3>/Constant279'
+   *  Constant: '<S3>/Constant280'
+   *  Constant: '<S3>/Constant281'
+   *  Constant: '<S3>/Constant282'
+   *  Constant: '<S3>/Constant283'
+   *  Constant: '<S3>/Constant284'
+   *  Constant: '<S3>/Constant285'
+   *  Constant: '<S3>/Constant286'
+   *  Constant: '<S3>/Constant287'
+   *  Constant: '<S3>/Constant288'
+   *  Constant: '<S3>/Constant289'
+   *  Constant: '<S3>/Constant290'
+   *  Constant: '<S3>/Constant291'
+   *  Constant: '<S3>/Constant292'
+   *  Constant: '<S3>/Constant293'
+   *  Constant: '<S3>/Constant294'
+   *  Constant: '<S3>/Constant295'
+   *  Constant: '<S3>/Constant296'
+   *  Constant: '<S3>/Constant297'
+   *  Constant: '<S3>/Constant298'
+   *  Constant: '<S3>/Constant299'
+   *  Constant: '<S3>/Constant300'
+   *  Constant: '<S3>/Constant301'
+   *  Constant: '<S3>/Constant302'
+   *  Constant: '<S3>/Constant303'
+   *  Constant: '<S3>/Constant304'
+   *  Constant: '<S3>/Constant305'
+   *  Constant: '<S3>/Constant306'
+   *  Constant: '<S3>/Constant307'
+   *  Constant: '<S3>/Constant308'
+   *  Constant: '<S3>/Constant309'
+   *  Constant: '<S3>/Constant310'
+   *  Constant: '<S3>/Constant311'
+   *  Constant: '<S3>/Constant312'
+   *  Constant: '<S3>/Constant313'
+   *  Constant: '<S3>/Constant314'
+   */
+  rtb_TmpSignalConversionAtSFun_l[0] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[1] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[2] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[3] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[4] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[5] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[6] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[7] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[8] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[9] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[10] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[11] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[12] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[13] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[14] = 1U;
+  rtb_TmpSignalConversionAtSFun_l[15] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[16] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[17] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[18] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[19] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[20] = 254U;
+  rtb_TmpSignalConversionAtSFun_l[21] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[22] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[23] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[24] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[25] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[26] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[27] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[28] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[29] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[30] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[31] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[32] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[33] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[34] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[35] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[36] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[37] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[38] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[39] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[40] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[41] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[42] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[43] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[44] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[45] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[46] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[47] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[48] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[49] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[50] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[51] = 234U;
+  rtb_TmpSignalConversionAtSFun_l[52] = 122U;
+  rtb_TmpSignalConversionAtSFun_l[53] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[54] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[55] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[56] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[57] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[58] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[59] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[60] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[61] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[62] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[63] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[64] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[65] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[66] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[67] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[68] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[69] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[70] = 122U;
+  rtb_TmpSignalConversionAtSFun_l[71] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[72] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[73] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[74] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[75] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[76] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[77] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[78] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[79] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[80] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[81] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[82] = 234U;
+  rtb_TmpSignalConversionAtSFun_l[83] = 131U;
+  rtb_TmpSignalConversionAtSFun_l[84] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[85] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[86] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[87] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[88] = 162U;
+  rtb_TmpSignalConversionAtSFun_l[89] = 131U;
+  rtb_TmpSignalConversionAtSFun_l[90] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[91] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[92] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[93] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[94] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[95] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[96] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[97] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[98] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[99] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[100] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[101] = 145U;
+  rtb_TmpSignalConversionAtSFun_l[102] = 234U;
+  rtb_TmpSignalConversionAtSFun_l[103] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[104] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[105] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[106] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[107] = 19U;
+  rtb_TmpSignalConversionAtSFun_l[108] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[109] = 19U;
+  rtb_TmpSignalConversionAtSFun_l[110] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[111] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[112] = 106U;
+  rtb_TmpSignalConversionAtSFun_l[113] = 3U;
+  rtb_TmpSignalConversionAtSFun_l[114] = 250U;
+  rtb_TmpSignalConversionAtSFun_l[115] = 146U;
+  rtb_TmpSignalConversionAtSFun_l[116] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[117] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[118] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[119] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[120] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[121] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[122] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[123] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[124] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[125] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[126] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[127] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[128] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[129] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[130] = 66U;
+  rtb_TmpSignalConversionAtSFun_l[131] = 34U;
+  rtb_TmpSignalConversionAtSFun_l[132] = 18U;
+  rtb_TmpSignalConversionAtSFun_l[133] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[134] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[135] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[136] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[137] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[138] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[139] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[140] = 131U;
+  rtb_TmpSignalConversionAtSFun_l[141] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[142] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[143] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[144] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[145] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[146] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[147] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[148] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[149] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[150] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[151] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[152] = 2U;
+  rtb_TmpSignalConversionAtSFun_l[153] = 0U;
+  rtb_TmpSignalConversionAtSFun_l[154] = 0U;
+
+  /* Chart: '<S3>/FltCodeArry' incorporates:
+   *  Constant: '<S3>/Constant'
+   *  Constant: '<S3>/Constant266'
+   *  Constant: '<S3>/Constant315'
+   *  Constant: '<S3>/Constant317'
+   *  Constant: '<S3>/Constant53'
+   *  SignalConversion generated from: '<S5>/ SFunction '
+   */
+  avrgU = 0U;
+  sfmd_num_fltNum = 0U;
+  for (i_0 = 0; i_0 < 20; i_0++) {
+    FltCodeArr[i_0] = 0U;
+    rtb_FltLevelArr[i_0] = 0U;
+    rtb_FltActArr[i_0] = 0U;
+    FltCodeArrS[i_0] = 0U;
+  }
+
+  while (avrgU < 155) {
+    if (rtb_TmpSignalConversionAtSFun_a[avrgU] && (sfmd_num_fltNum <
+         sfmc_num_fltNumMax)) {
+      FltCodeArr[sfmd_num_fltNum] = (uint16_T)(avrgU + 1);
+      rtb_FltLevelArr[sfmd_num_fltNum] = rtb_TmpSignalConversionAtSFunct[avrgU];
+      rtb_FltActArr[sfmd_num_fltNum] = rtb_TmpSignalConversionAtSFun_l[avrgU];
+      sfmd_num_fltNum = (uint16_T)(sfmd_num_fltNum + 1);
+      if (avrgU == 51) {
+        for (k = 0U; k < cmnc_num_cellUNum; k++) {
+          if (SFM_B.ErrFlg[k]) {
+            FltCodeArr[sfmd_num_fltNum] = (uint16_T)(k + 2001);
+            rtb_FltLevelArr[sfmd_num_fltNum] = 4U;
+            rtb_FltActArr[sfmd_num_fltNum] = 234U;
+            i_0 = sfmd_num_fltNum + 1;
+            if (sfmd_num_fltNum + 1 > 65535) {
+              i_0 = 65535;
+            }
+
+            sfmd_num_fltNum = (uint16_T)i_0;
+          }
+        }
+      }
+    }
+
+    avrgU++;
+  }
+
+  for (avrgU = 0U; avrgU < sfmd_num_fltNum; avrgU++) {
+    i_0 = rtb_FltLevelArr[avrgU] * 10000 + FltCodeArr[avrgU];
+    if (i_0 > 65535) {
+      i_0 = 65535;
+    }
+
+    FltCodeArrS[avrgU] = (uint16_T)i_0;
+  }
+
+  for (avrgU = 0U; avrgU < sfmd_num_fltNum; avrgU++) {
+    for (k = 0U; k < (sfmd_num_fltNum - avrgU) - 1; k++) {
+      tmp_3 = FltCodeArrS[k + 1];
+      if (FltCodeArrS[k] < tmp_3) {
+        temp = FltCodeArrS[k];
+        FltCodeArrS[k] = tmp_3;
+        FltCodeArrS[k + 1] = temp;
+      }
+    }
+  }
+
+  if ((SFM_DW.Cntl > 4) || (SFM_DW.Cntl >= sfmd_num_fltNum)) {
+    SFM_DW.Cntl = 0U;
+  }
+
+  avrgU = FltCodeArrS[SFM_DW.Cntl];
+  i_0 = SFM_DW.Cntl + 1;
+  if (SFM_DW.Cntl + 1 > 65535) {
+    i_0 = 65535;
+  }
+
+  SFM_DW.Cntl = (uint16_T)i_0;
+
+  /* S-Function (sfix_bitop): '<S3>/Bitwise Operator1' */
+  sfmd_st_fltAct = rtb_FltActArr[0];
+
+  /* MinMax: '<S3>/MinMax' */
+  sfmd_N_fltLevel = rtb_FltLevelArr[0];
+  for (i_0 = 0; i_0 < 19; i_0++) {
+    /* S-Function (sfix_bitop): '<S3>/Bitwise Operator1' */
+    sfmd_st_fltAct = (uint8_T)(rtb_FltActArr[i_0 + 1] | sfmd_st_fltAct);
+
+    /* MinMax: '<S3>/MinMax' */
+    i = rtb_FltLevelArr[i_0 + 1];
+    if (sfmd_N_fltLevel <= i) {
+      sfmd_N_fltLevel = i;
+    }
+  }
+
+  /* Math: '<S3>/Rem1' */
+  sfmd_idx_fltCode = (uint16_T)(avrgU % 10000);
+
+  /* Chart: '<S13>/Chart' incorporates:
+   *  Constant: '<S13>/Constant'
+   */
+  qY_0 = cmnc_num_cellUNum == 0U ? MAX_uint32_T : rtb_SumU / cmnc_num_cellUNum;
+  if (qY_0 > 65535U) {
+    qY_0 = 65535U;
+  }
+
+  /* SignalConversion generated from: '<S13>/Chart' incorporates:
+   *  Chart: '<S13>/Chart'
+   */
+  sfmd_V_cellUAvrg = (uint16_T)qY_0;
+
+  /* Product: '<S23>/Product' incorporates:
+   *  Inport: '<Root>/ihd_L_urtRecv'
+   *  RelationalOperator: '<S9>/Relational Operator'
+   *  UnitDelay: '<S23>/Time_Delay'
+   */
+  SFM_DW.Time_Delay_DSTATE = (uint16_T)(ihd_L_urtRecv == 0 ? (int32_T)
+    rtb_Saturation : 0);
+  for (i_0 = 0; i_0 < 6; i_0++) {
+    /* SignalConversion: '<S15>/Signal Conversion' incorporates:
+     *  Inport: '<Root>/ihv_T_modT'
+     */
+    sfmv_T_modT[i_0] = ihv_T_modT[i_0];
+  }
+}
+
+/* Model initialize function */
+void SFM_initialize(const char_T **rt_errorStatus)
+{
+  RT_MODEL_SFM_T *const SFM_M = &(SFM_MdlrefDW.rtm);
+
+  /* Registration code */
+
+  /* initialize error status */
+  rtmSetErrorStatusPointer(SFM_M, rt_errorStatus);
+}
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

文件差异内容过多而无法显示
+ 354 - 267
src/SOC.c


+ 375 - 270
src/SOH.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOH'.
  *
- * Model version                  : 1.31
+ * Model version                  : 1.38
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Sep  2 11:40:39 2021
+ * C/C++ source code generated on : Thu Sep  9 18:12:51 2021
  *
  * Target selection: ert.tlc
  * Embedded hardware selection: Intel->x86-64 (Windows64)
@@ -28,80 +28,93 @@ DW_SOH_f_T SOH_DW;
 
 /*
  * System initialize for atomic system:
- *    '<S14>/ArrMin'
- *    '<S15>/ArrMin'
+ *    '<S14>/Min'
+ *    '<S14>/Min1'
+ *    '<S23>/Min1'
  */
-void SOH_ArrMin_Init(uint16_T *rty_minCap)
+void SOH_Min_Init(uint16_T *rty_Min)
 {
-  *rty_minCap = 0U;
+  /* SystemInitialize for Chart: '<S16>/ArrMin' */
+  *rty_Min = 0U;
 }
 
 /*
  * Output and update for atomic system:
- *    '<S14>/ArrMin'
- *    '<S15>/ArrMin'
+ *    '<S14>/Min'
+ *    '<S14>/Min1'
+ *    '<S23>/Min1'
  */
-void SOH_ArrMin(const uint16_T rtu_sohn_Q_cellCap[28], uint8_T rtu_N, uint16_T
-                *rty_minCap)
+uint16_T SOH_Min(const uint16_T rtu_Arry[28])
 {
+  uint16_T rty_Min_0;
   uint8_T i;
 
-  /* Chart: '<S14>/ArrMin' */
+  /* Chart: '<S16>/ArrMin' incorporates:
+   *  Constant: '<S16>/Constant'
+   */
   i = 0U;
-  *rty_minCap = rtu_sohn_Q_cellCap[0];
-  while (i < rtu_N) {
-    if (*rty_minCap > rtu_sohn_Q_cellCap[i]) {
-      *rty_minCap = rtu_sohn_Q_cellCap[i];
+  rty_Min_0 = rtu_Arry[0];
+  while (i < cmnc_num_cellUNum) {
+    if (rty_Min_0 > rtu_Arry[i]) {
+      rty_Min_0 = rtu_Arry[i];
     }
 
     i++;
   }
 
-  /* End of Chart: '<S14>/ArrMin' */
+  /* End of Chart: '<S16>/ArrMin' */
+  return rty_Min_0;
 }
 
 /* System initialize for referenced model: 'SOH' */
 void SOH_Init(void)
 {
   /* local block i/o variables */
-  uint16_T rtb_minCap;
-  uint16_T rtb_minCap_g;
-
-  /* InitializeConditions for UnitDelay: '<S4>/First_Delay' */
-  SOH_DW.First_Delay_DSTATE = true;
+  uint16_T rtb_Min;
+  uint16_T rtb_Min_o;
+  uint16_T rtb_Min_g;
 
-  /* InitializeConditions for UnitDelay: '<S3>/Unit Delay' */
-  SOH_DW.UnitDelay_DSTATE_e = true;
+  /* InitializeConditions for UnitDelay: '<S21>/Unit Delay1' */
+  SOH_DW.UnitDelay1_DSTATE = true;
 
   /* InitializeConditions for UnitDelay: '<S6>/Unit Delay' */
   SOH_DW.UnitDelay_DSTATE = 1U;
 
-  /* InitializeConditions for Logic: '<S6>/Logical Operator1' incorporates:
-   *  UnitDelay: '<S6>/Unit Delay1'
-   */
-  SOH_DW.UnitDelay1_DSTATE_j = true;
+  /* SystemInitialize for Atomic SubSystem: '<S23>/Min1' */
+  SOH_Min_Init(&rtb_Min);
+
+  /* End of SystemInitialize for SubSystem: '<S23>/Min1' */
 
   /* SystemInitialize for Enabled SubSystem: '<S3>/Subsystem' */
+  /* InitializeConditions for UnitDelay: '<S15>/Unit Delay1' */
+  SOH_DW.UnitDelay1_DSTATE_g = true;
 
-  /* SystemInitialize for Chart: '<S14>/ArrMin' */
-  SOH_ArrMin_Init(&rtb_minCap_g);
+  /* SystemInitialize for Atomic SubSystem: '<S14>/Min' */
+  SOH_Min_Init(&rtb_Min_g);
 
-  /* SystemInitialize for Chart: '<S15>/ArrMin' */
-  SOH_ArrMin_Init(&rtb_minCap);
+  /* End of SystemInitialize for SubSystem: '<S14>/Min' */
 
+  /* SystemInitialize for Atomic SubSystem: '<S14>/Min1' */
+  SOH_Min_Init(&rtb_Min_o);
+
+  /* End of SystemInitialize for SubSystem: '<S14>/Min1' */
   /* End of SystemInitialize for SubSystem: '<S3>/Subsystem' */
 
   /* SystemInitialize for Chart: '<S3>/Chart' */
   SOH_DW.Fflg = true;
-  SOH_B.Divide1=0;
-  SOH_DW.ResettableSubsystem_MODE=false;
-  SOH_DW.UnitDelay1_DSTATE=false;
-  SOH_DW.UnitDelay1_DSTATE_j=0;
-  SOH_DW.Time_Delay_DSTATE=0;
+
+  /* SystemInitialize for Enabled SubSystem: '<S6>/Resettable Subsystem' */
+  /* InitializeConditions for UnitDelay: '<S9>/Time_Delay' */
+  SOH_DW.Time_Delay_DSTATE = 1U;
+  SOH_DW.Ahincr_reset_DSTATE=0;
+  SOH_DW.reset_DSTATE=0;
+  SOH_DW.ResettableSubsystem_MODE=0;
+  SOH_DW.ResettableSubsystem_MODE_i=0;
+  SOH_DW.reset_DSTATE_b=0;
+  SOH_DW.sohd_flg_chrgEndEo_reset_DSTATE=0;
   SOH_DW.sohd_tm_chrgStartSta_Delay_DSTA=0;
-  SOH_DW.UnitDelay_DSTATE_e=false;
-  SOH_DW.ResettableSubsystem_MODE_i=false;
-  SOH_DW.Time_Delay_DSTATE_k=0;
+
+  /* End of SystemInitialize for SubSystem: '<S6>/Resettable Subsystem' */
 }
 
 /* Disable for referenced model: 'SOH' */
@@ -112,6 +125,11 @@ void SOH_Disable(void)
 
   /* End of Disable for SubSystem: '<S6>/Resettable Subsystem' */
 
+  /* Disable for Enabled SubSystem: '<S7>/Enabled Subsystem' */
+  SOH_DW.EnabledSubsystem_MODE = false;
+
+  /* End of Disable for SubSystem: '<S7>/Enabled Subsystem' */
+
   /* Disable for Enabled SubSystem: '<S8>/Resettable Subsystem' */
   SOH_DW.ResettableSubsystem_MODE = false;
 
@@ -122,81 +140,108 @@ void SOH_Disable(void)
 void SOH(void)
 {
   /* local block i/o variables */
-  uint16_T rtb_minCap;
-  uint16_T rtb_minCap_g;
+  uint16_T rtb_Min;
+  uint16_T rtb_Min_o;
+  uint16_T rtb_Min_g;
   int32_T i_0;
-  int32_T i_1;
-  uint32_T rtb_LogicalOperator1_0;
-  int16_T tmp;
+  int32_T tmp;
+  int16_T rtb_Divide1;
+  uint16_T rtb_SOC2[28];
   uint16_T rtb_sohn_V_chrgStartStatEE_Merg[28];
   uint16_T rtb_sohn_Q_packCapArrEE_Merge[10];
   uint16_T maxV;
+  uint16_T minV;
+  uint16_T rtb_Max;
   uint16_T rtb_sohn_Q_chrgEE_Merge;
-  uint16_T tmp_0;
   uint8_T i;
-  boolean_T rtb_RelationalOperator1_n;
-  boolean_T rtb_sohn_flg_chrgEndEE_Merge;
-  
+  boolean_T rtb_LogicalOperator_g;
+  boolean_T rtb_RelationalOperator2_l;
+
+  /* Outputs for Atomic SubSystem: '<S23>/Min1' */
+  /* Inport: '<Root>/sohv_Q_cellCapArrEi 1' */
+  rtb_Min = SOH_Min((&(sohv_Q_cellCapArrEi[0])));
+
+  /* End of Outputs for SubSystem: '<S23>/Min1' */
+
+  /* Outputs for Atomic SubSystem: '<S23>/Max' */
+  /* Chart: '<S26>/ArrMin' incorporates:
+   *  Constant: '<S26>/Constant'
+   *  Inport: '<Root>/sohv_Q_cellCapArrEi 1'
+   */
+  i = 0U;
+  rtb_Max = sohv_Q_cellCapArrEi[0];
+  while (i < cmnc_num_cellUNum) {
+    if (rtb_Max < sohv_Q_cellCapArrEi[i]) {
+      rtb_Max = sohv_Q_cellCapArrEi[i];
+    }
 
-  /* MinMax: '<S18>/Min' incorporates:
+    i++;
+  }
+
+  /* End of Chart: '<S26>/ArrMin' */
+  /* End of Outputs for SubSystem: '<S23>/Max' */
+
+  /* MinMax: '<S23>/Min' incorporates:
    *  Inport: '<Root>/sohv_Q_packCapArrEi '
    */
-  rtb_sohn_Q_chrgEE_Merge = sohv_Q_packCapArrEi[0];
+  minV = sohv_Q_packCapArrEi[0];
 
-  /* MinMax: '<S18>/Min1' incorporates:
+  /* MinMax: '<S23>/Min2' incorporates:
    *  Inport: '<Root>/sohv_Q_packCapArrEi '
    */
   maxV = sohv_Q_packCapArrEi[0];
   for (i_0 = 0; i_0 < 9; i_0++) {
-    /* MinMax: '<S18>/Min' incorporates:
+    /* MinMax: '<S23>/Min' incorporates:
      *  Inport: '<Root>/sohv_Q_packCapArrEi '
-     *  MinMax: '<S18>/Min1'
+     *  MinMax: '<S23>/Min2'
      */
-    tmp_0 = sohv_Q_packCapArrEi[i_0 + 1];
-    if (rtb_sohn_Q_chrgEE_Merge >= tmp_0) {
-      rtb_sohn_Q_chrgEE_Merge = sohv_Q_packCapArrEi[i_0 + 1];
+    rtb_sohn_Q_chrgEE_Merge = sohv_Q_packCapArrEi[i_0 + 1];
+    if (minV >= rtb_sohn_Q_chrgEE_Merge) {
+      minV = sohv_Q_packCapArrEi[i_0 + 1];
     }
 
-    /* MinMax: '<S18>/Min1' incorporates:
+    /* MinMax: '<S23>/Min2' incorporates:
      *  Inport: '<Root>/sohv_Q_packCapArrEi '
-     *  MinMax: '<S18>/Min'
+     *  MinMax: '<S23>/Min'
      */
-    if (maxV <= tmp_0) {
-      maxV = tmp_0;
+    if (maxV <= rtb_sohn_Q_chrgEE_Merge) {
+      maxV = rtb_sohn_Q_chrgEE_Merge;
     }
   }
 
   /* If: '<S5>/If' incorporates:
-   *  Constant: '<S18>/C'
-   *  Constant: '<S18>/C1'
-   *  Constant: '<S18>/Constant'
+   *  Constant: '<S23>/C'
+   *  Constant: '<S23>/C1'
+   *  Constant: '<S23>/C2'
    *  Inport: '<Root>/sohd_Q_chrgEi '
    *  Inport: '<Root>/sohd_flg_chrgEndEi '
    *  Inport: '<Root>/sohv_Q_cellCapArrEi 1'
    *  Inport: '<Root>/sohv_Q_packCapArrEi '
    *  Inport: '<Root>/sohv_V_chrgStartStatEi '
-   *  Inport: '<S20>/sohd_Q_chrgEi '
-   *  Inport: '<S20>/sohd_flg_chrgEndEi '
-   *  Inport: '<S20>/sohv_Q_cellCapArrEi'
-   *  Inport: '<S20>/sohv_Q_packCapArrEi '
-   *  Inport: '<S20>/sohv_V_chrgStartStatEi '
-   *  Logic: '<S18>/Logical Operator3'
+   *  Inport: '<S25>/sohd_Q_chrgEi '
+   *  Inport: '<S25>/sohd_flg_chrgEndEi '
+   *  Inport: '<S25>/sohv_Q_cellCapArrEi'
+   *  Inport: '<S25>/sohv_Q_packCapArrEi '
+   *  Inport: '<S25>/sohv_V_chrgStartStatEi '
+   *  Logic: '<S23>/Logical Operator3'
    *  Merge: '<S5>/sohn_Q_chrgEE_Merge'
    *  Merge: '<S5>/sohn_Q_packCapArrEE_Merge'
    *  Merge: '<S5>/sohn_V_chrgStartStatEE_Merge'
-   *  MinMax: '<S18>/Min'
-   *  MinMax: '<S18>/Min1'
-   *  RelationalOperator: '<S18>/Relational Operator1'
-   *  RelationalOperator: '<S18>/Relational Operator2'
-   *  RelationalOperator: '<S18>/Relational Operator3'
+   *  MinMax: '<S23>/Min'
+   *  MinMax: '<S23>/Min2'
+   *  RelationalOperator: '<S23>/Relational Operator1'
+   *  RelationalOperator: '<S23>/Relational Operator2'
+   *  RelationalOperator: '<S23>/Relational Operator3'
+   *  RelationalOperator: '<S23>/Relational Operator4'
+   *  RelationalOperator: '<S23>/Relational Operator5'
    *  UnitDelay: '<S6>/sohv_V_chrgStartEo_Delay'
    */
-  if ((sohd_Q_chrgEi < cmnc_Q_ratedCp) && (!((real_T)rtb_sohn_Q_chrgEE_Merge *
-        0.1 < 1.0)) && (maxV <= cmnc_Q_ratedCp)) {
+  if ((sohd_Q_chrgEi < cmnc_Q_ratedCp) && (rtb_Min >= 10) && (rtb_Max <=
+       cmnc_Q_ratedCp) && (minV >= 10) && (maxV <= cmnc_Q_ratedCp)) {
     /* Outputs for IfAction SubSystem: '<S5>/TureAction' incorporates:
-     *  ActionPort: '<S20>/Action Port'
+     *  ActionPort: '<S25>/Action Port'
      */
-    rtb_sohn_flg_chrgEndEE_Merge = sohd_flg_chrgEndEi;
+    rtb_LogicalOperator_g = sohd_flg_chrgEndEi;
     for (i_0 = 0; i_0 < 28; i_0++) {
       rtb_sohn_V_chrgStartStatEE_Merg[i_0] = sohv_V_chrgStartStatEi[i_0];
     }
@@ -213,24 +258,24 @@ void SOH(void)
     /* End of Outputs for SubSystem: '<S5>/TureAction' */
   } else {
     /* Outputs for IfAction SubSystem: '<S5>/FalseAction' incorporates:
-     *  ActionPort: '<S19>/Action Port'
+     *  ActionPort: '<S24>/Action Port'
      */
     for (i_0 = 0; i_0 < 28; i_0++) {
-      /* SignalConversion generated from: '<S19>/sohn_V_chrgStartStatEE1' incorporates:
+      /* SignalConversion generated from: '<S24>/sohn_V_chrgStartStatEE1' incorporates:
        *  Merge: '<S5>/sohn_V_chrgStartStatEE_Merge'
        */
       rtb_sohn_V_chrgStartStatEE_Merg[i_0] = 0U;
 
-      /* Product: '<S19>/Product1' incorporates:
-       *  Constant: '<S19>/Constant7'
+      /* Product: '<S24>/Product1' incorporates:
+       *  Constant: '<S24>/Constant7'
        *  UnitDelay: '<S6>/sohv_V_chrgStartEo_Delay'
        */
       sohv_Q_cellCapArrEo[i_0] = (uint16_T)((((5U * cmnc_Q_ratedCp) >> 3) *
         52429U) >> 15);
     }
 
-    /* Product: '<S19>/Product' incorporates:
-     *  Constant: '<S19>/Constant5'
+    /* Product: '<S24>/Product' incorporates:
+     *  Constant: '<S24>/Constant5'
      *  Merge: '<S5>/sohn_Q_packCapArrEE_Merge'
      */
     for (i_0 = 0; i_0 < 10; i_0++) {
@@ -238,15 +283,15 @@ void SOH(void)
         3) * 52429U) >> 15);
     }
 
-    /* End of Product: '<S19>/Product' */
+    /* End of Product: '<S24>/Product' */
 
-    /* SignalConversion generated from: '<S19>/sohn_flg_chrgEndEE1' incorporates:
-     *  Constant: '<S19>/Constant'
+    /* SignalConversion generated from: '<S24>/sohn_flg_chrgEndEE1' incorporates:
+     *  Constant: '<S24>/Constant'
      */
-    rtb_sohn_flg_chrgEndEE_Merge = false;
+    rtb_LogicalOperator_g = false;
 
-    /* SignalConversion generated from: '<S19>/sohn_Q_chrgEE1' incorporates:
-     *  Constant: '<S19>/Constant3'
+    /* SignalConversion generated from: '<S24>/sohn_Q_chrgEE1' incorporates:
+     *  Constant: '<S24>/Constant3'
      *  Merge: '<S5>/sohn_Q_chrgEE_Merge'
      */
     rtb_sohn_Q_chrgEE_Merge = 0U;
@@ -256,106 +301,125 @@ void SOH(void)
 
   /* End of If: '<S5>/If' */
 
+  /* Outputs for Enabled SubSystem: '<S21>/Subsystem3' incorporates:
+   *  EnablePort: '<S22>/Enable'
+   */
+  /* UnitDelay: '<S21>/Unit Delay1' incorporates:
+   *  Inport: '<Root>/sfmd_flg_volFlt '
+   *  Inport: '<S22>/in'
+   *  Logic: '<S4>/Logical Operator1'
+   */
+  if (SOH_DW.UnitDelay1_DSTATE) {
+    SOH_B.in_g = !sfmd_flg_volFlt;
+  }
+
+  /* End of UnitDelay: '<S21>/Unit Delay1' */
+  /* End of Outputs for SubSystem: '<S21>/Subsystem3' */
+
   /* Logic: '<S4>/Logical Operator' incorporates:
    *  Constant: '<S4>/Constant1'
    *  Inport: '<Root>/ihd_tm_parkTime'
    *  Merge: '<S5>/sohn_Q_chrgEE_Merge'
    *  RelationalOperator: '<S4>/Relational Operator'
    *  RelationalOperator: '<S4>/Relational Operator1'
-   *  UnitDelay: '<S4>/First_Delay'
    */
-  rtb_sohn_flg_chrgEndEE_Merge = ((ihd_tm_parkTime >= cmnc_tm_parkTime) &&
-    rtb_sohn_flg_chrgEndEE_Merge && (rtb_sohn_Q_chrgEE_Merge >= 150) &&
-    SOH_DW.First_Delay_DSTATE);
+  rtb_LogicalOperator_g = ((ihd_tm_parkTime >= cmnc_tm_parkTime) && SOH_B.in_g &&
+    rtb_LogicalOperator_g && (rtb_sohn_Q_chrgEE_Merge >= 150));
 
   /* Outputs for Enabled SubSystem: '<S3>/Subsystem' incorporates:
-   *  EnablePort: '<S13>/Enable'
+   *  EnablePort: '<S14>/Enable'
    */
-  if (rtb_sohn_flg_chrgEndEE_Merge) {
+  if (rtb_LogicalOperator_g) {
+    /* Outputs for Enabled SubSystem: '<S15>/Subsystem3' incorporates:
+     *  EnablePort: '<S18>/Enable'
+     */
     for (i_0 = 0; i_0 < 28; i_0++) {
-      /* Lookup_n-D: '<S13>/SOC2' incorporates:
-       *  Inport: '<Root>/ihv_V_cellU'
+      /* UnitDelay: '<S15>/Unit Delay1' incorporates:
+       *  Inport: '<Root>/sfmv_V_cellU'
+       *  Inport: '<S18>/in'
+       *  Lookup_n-D: '<S14>/SOC2'
        */
-      SOC2[i_0] = look1_iu16lu16n16tu16_binlcase(ihv_V_cellU[i_0],
-        (&(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
+      if (SOH_DW.UnitDelay1_DSTATE_g) {
+        SOH_B.in[i_0] = look1_iu16lu16n16tu16_binlcase(sfmv_V_cellU[i_0],
+          (&(cmnm_V_ocv[0])), (&(cmnm_pct_soc[0])), 12U);
+      }
+
+      /* End of UnitDelay: '<S15>/Unit Delay1' */
 
-      /* Lookup_n-D: '<S13>/SOC1' incorporates:
+      /* Lookup_n-D: '<S14>/SOC1' incorporates:
        *  Merge: '<S5>/sohn_V_chrgStartStatEE_Merge'
+       *  Sum: '<S14>/Add1'
        */
-      SOC1[i_0] = look1_iu16lu16n16tu16_binlcase
+      SOH_B.d[i_0] = look1_iu16lu16n16tu16_binlcase
         (rtb_sohn_V_chrgStartStatEE_Merg[i_0], (&(cmnm_V_ocv[0])),
          (&(cmnm_pct_soc[0])), 12U);
 
-      /* Product: '<S13>/Divide4' incorporates:
-       *  Lookup_n-D: '<S13>/SOC1'
-       *  Lookup_n-D: '<S13>/SOC2'
-       *  Sum: '<S13>/Add'
+      /* Product: '<S14>/d' incorporates:
+       *  Inport: '<S18>/in'
+       *  Product: '<S14>/Divide4'
+       *  Sum: '<S14>/Add'
+       *  Sum: '<S14>/Add1'
        */
-      deltaSoc[i_0] = (uint16_T)((((uint32_T)(uint16_T)(SOC2[i_0] - SOC1[i_0]) <<
-        6) / 125U * 125U) >> 6);
+      tmp = (int32_T)((((uint32_T)(uint16_T)(SOH_B.in[i_0] - SOH_B.d[i_0]) << 6)
+                       / 125U * 125U) >> 6);
 
-      /* Product: '<S13>/d' incorporates:
-       *  Product: '<S13>/Divide4'
-       */
-      i_1 = deltaSoc[i_0];
-
-      /* Product: '<S13>/d' incorporates:
+      /* Product: '<S14>/d' incorporates:
+       *  Inport: '<S18>/in'
        *  Merge: '<S5>/sohn_Q_chrgEE_Merge'
+       *  Sum: '<S14>/Add'
        */
-      SOH_B.d[i_0] = (uint16_T)(((uint16_T)((uint32_T)i_1 == 0U ? MAX_uint32_T :
-        ((uint32_T)rtb_sohn_Q_chrgEE_Merge << 9) / i_1) * 125U) >> 6);
+      SOH_B.d[i_0] = (uint16_T)(((uint16_T)((uint32_T)tmp == 0U ? MAX_uint32_T :
+        ((uint32_T)rtb_sohn_Q_chrgEE_Merge << 9) / tmp) * 125U) >> 6);
 
-      /* Product: '<S13>/Divide5' incorporates:
-       *  Lookup_n-D: '<S13>/SOC2'
+      /* Product: '<S14>/Divide5' incorporates:
+       *  Inport: '<S18>/in'
        */
-      minDischrg[i_0] = (uint16_T)((((uint32_T)SOC2[i_0] << 6) / 125U * 125U) >>
-        6);
-
-      /* Product: '<S13>/Divide3' incorporates:
-       *  Constant: '<S13>/Constant3'
-       *  Product: '<S13>/Divide5'
-       *  Product: '<S13>/d'
-       *  Sum: '<S13>/Add1'
+      rtb_Max = (uint16_T)((((uint32_T)SOH_B.in[i_0] << 6) / 125U * 125U) >> 6);
+
+      /* Lookup_n-D: '<S14>/SOC2' incorporates:
+       *  Constant: '<S14>/Constant3'
+       *  Product: '<S14>/Divide3'
+       *  Product: '<S14>/d'
+       *  Sum: '<S14>/Add1'
        */
-      minChrg[i_0] = (uint16_T)(((uint16_T)(((uint32_T)(uint16_T)(1000 -
-        minDischrg[i_0]) * SOH_B.d[i_0]) >> 10) * 16777U) >> 14);
+      rtb_SOC2[i_0] = (uint16_T)(((uint16_T)(((uint32_T)(uint16_T)(1000 -
+        rtb_Max) * SOH_B.d[i_0]) >> 10) * 16777U) >> 14);
 
-      /* Product: '<S13>/Divide2' incorporates:
-       *  Product: '<S13>/Divide5'
-       *  Product: '<S13>/d'
+      /* Product: '<S14>/Divide5' incorporates:
+       *  Product: '<S14>/Divide2'
+       *  Product: '<S14>/d'
        */
-      minDischrg[i_0] = (uint16_T)(((uint16_T)(((uint32_T)SOH_B.d[i_0] *
-        minDischrg[i_0]) >> 10) * 16777U) >> 14);
+      rtb_sohn_V_chrgStartStatEE_Merg[i_0] = (uint16_T)(((uint16_T)(((uint32_T)
+        SOH_B.d[i_0] * rtb_Max) >> 10) * 16777U) >> 14);
     }
 
-    /* Chart: '<S14>/ArrMin' incorporates:
-     *  Constant: '<S14>/Constant'
-     */
-    SOH_ArrMin((&(minChrg[0])), cmnc_num_cellUnum, &rtb_minCap_g);
+    /* End of Outputs for SubSystem: '<S15>/Subsystem3' */
 
-    /* Chart: '<S15>/ArrMin' incorporates:
-     *  Constant: '<S15>/Constant'
-     */
-    SOH_ArrMin((&(minDischrg[0])), cmnc_num_cellUnum, &rtb_minCap);
+    /* Outputs for Atomic SubSystem: '<S14>/Min' */
+    rtb_Min_g = SOH_Min(rtb_SOC2);
+
+    /* End of Outputs for SubSystem: '<S14>/Min' */
+
+    /* Outputs for Atomic SubSystem: '<S14>/Min1' */
+    rtb_Min_o = SOH_Min(rtb_sohn_V_chrgStartStatEE_Merg);
 
-    /* Sum: '<S13>/Add2' */
-    SOH_B.Add2 = (uint16_T)((uint32_T)rtb_minCap_g + rtb_minCap);
+    /* End of Outputs for SubSystem: '<S14>/Min1' */
+
+    /* Sum: '<S14>/Add2' */
+    SOH_B.Add2 = (uint16_T)((uint32_T)rtb_Min_g + rtb_Min_o);
+
+    /* Update for UnitDelay: '<S15>/Unit Delay1' incorporates:
+     *  Constant: '<S15>/Constant1'
+     */
+    SOH_DW.UnitDelay1_DSTATE_g = false;
   }
 
   /* End of Outputs for SubSystem: '<S3>/Subsystem' */
-
-  /* Logic: '<S3>/Logical Operator' incorporates:
-   *  UnitDelay: '<S3>/Unit Delay'
-   */
-  SOH_DW.UnitDelay_DSTATE_e = (rtb_sohn_flg_chrgEndEE_Merge ||
-    SOH_DW.UnitDelay_DSTATE_e);
   for (i_0 = 0; i_0 < 28; i_0++) {
-    /* Switch: '<S3>/Switch' incorporates:
-     *  UnitDelay: '<S3>/Unit Delay'
-     */
-    if (SOH_DW.UnitDelay_DSTATE_e) {
+    /* Switch: '<S3>/Switch' */
+    if (rtb_LogicalOperator_g) {
       /* Switch: '<S3>/Switch' incorporates:
-       *  Product: '<S13>/d'
+       *  Product: '<S14>/d'
        */
       sohv_Q_cellCapArrEo[i_0] = SOH_B.d[i_0];
     }
@@ -370,7 +434,7 @@ void SOH(void)
 
   /* Chart: '<S3>/Chart' incorporates:
    *  Merge: '<S5>/sohn_Q_packCapArrEE_Merge'
-   *  Sum: '<S13>/Add2'
+   *  Sum: '<S14>/Add2'
    */
   i = 0U;
   if (SOH_DW.Fflg) {
@@ -378,12 +442,12 @@ void SOH(void)
       SOH_B.sohn_Q_packCapArrEo[i_0] = rtb_sohn_Q_packCapArrEE_Merge[i_0];
     }
 
-    i_1 = rtb_sohn_Q_packCapArrEE_Merge[9] - SOH_B.Add2;
-    if (i_1 < 0) {
-      i_1 = -i_1;
+    tmp = rtb_sohn_Q_packCapArrEE_Merge[9] - SOH_B.Add2;
+    if (tmp < 0) {
+      tmp = -tmp;
     }
 
-    if (rtb_sohn_flg_chrgEndEE_Merge && (i_1 < 50)) {
+    if (rtb_LogicalOperator_g && (tmp < 50)) {
       while (i < 9) {
         SOH_B.sohn_Q_packCapArrEo[i] = rtb_sohn_Q_packCapArrEE_Merge[i + 1];
         i++;
@@ -395,12 +459,12 @@ void SOH(void)
     i = 0U;
     rtb_sohn_Q_chrgEE_Merge = 0U;
     while (i < 10) {
-      i_1 = rtb_sohn_Q_chrgEE_Merge + SOH_B.sohn_Q_packCapArrEo[i];
-      if (i_1 > 65535) {
-        i_1 = 65535;
+      tmp = rtb_sohn_Q_chrgEE_Merge + SOH_B.sohn_Q_packCapArrEo[i];
+      if (tmp > 65535) {
+        tmp = 65535;
       }
 
-      rtb_sohn_Q_chrgEE_Merge = (uint16_T)i_1;
+      rtb_sohn_Q_chrgEE_Merge = (uint16_T)tmp;
       i++;
     }
 
@@ -415,22 +479,19 @@ void SOH(void)
     sohv_Q_packCapArrEo[i_0] = SOH_B.sohn_Q_packCapArrEo[i_0];
   }
 
-  /* Product: '<S3>/Divide' incorporates:
+  /* Sum: '<S6>/Add1' incorporates:
    *  Constant: '<S3>/Constant2'
+   *  Product: '<S3>/Divide'
    *  Product: '<S3>/Product'
-   *  UnitDelay: '<S7>/Unit Delay1'
    */
-  rtb_sohn_Q_chrgEE_Merge = (uint16_T)(((uint16_T)(cmnc_Q_ratedCp == 0U ?
-    MAX_uint32_T : ((uint32_T)(uint16_T)(((uint16_T)((SOH_B.Qavrg * 125U) >> 1) *
-    52429U) >> 15) << 3) / cmnc_Q_ratedCp) * 5U) >> 2);
+  sohd_pct_bcuSoh = (uint16_T)(((uint16_T)(cmnc_Q_ratedCp == 0U ? MAX_uint32_T :
+    ((uint32_T)(uint16_T)(((uint16_T)((SOH_B.Qavrg * 125U) >> 1) * 52429U) >> 15)
+     << 3) / cmnc_Q_ratedCp) * 5U) >> 2);
 
   /* Saturate: '<S3>/Saturation' incorporates:
-   *  UnitDelay: '<S7>/Unit Delay1'
+   *  Sum: '<S6>/Add1'
    */
-  if (rtb_sohn_Q_chrgEE_Merge < 1000) {
-    /* Saturate: '<S3>/Saturation' */
-    sohd_pct_bcuSoh = rtb_sohn_Q_chrgEE_Merge;
-  } else {
+  if (sohd_pct_bcuSoh >= 1000) {
     /* Saturate: '<S3>/Saturation' */
     sohd_pct_bcuSoh = 1000U;
   }
@@ -445,48 +506,54 @@ void SOH(void)
    *  RelationalOperator: '<S6>/Relational Operator1'
    *  UnitDelay: '<S6>/Unit Delay'
    */
-  rtb_sohn_flg_chrgEndEE_Merge = ((SOH_DW.UnitDelay_DSTATE != 2) &&
-    (ihd_st_workStat == 2));
-
-  /* Switch: '<S6>/Switch' */
-  if (rtb_sohn_flg_chrgEndEE_Merge) {
-    /* Switch: '<S6>/Switch' incorporates:
-     *  Inport: '<Root>/ihv_V_cellU'
-     */
-    for (i_1 = 0; i_1 < 28; i_1++) {
-      sohv_V_chrgStartStatEo[i_1] = ihv_V_cellU[i_1];
-    }
-
-    /* End of Switch: '<S6>/Switch' */
-  }
+  rtb_LogicalOperator_g = ((SOH_DW.UnitDelay_DSTATE != 2) && (ihd_st_workStat ==
+    2));
 
-  /* End of Switch: '<S6>/Switch' */
-
-  /* Saturate: '<S10>/Saturation' incorporates:
-   *  Constant: '<S10>/Constant'
-   *  Sum: '<S10>/Add'
-   *  UnitDelay: '<S10>/Time_Delay'
+  /* Abs: '<S6>/Abs' incorporates:
+   *  Inport: '<Root>/sfmd_I_curr'
    */
-  if ((uint16_T)(SOH_DW.Time_Delay_DSTATE + 1U) < 60000) {
-    rtb_sohn_Q_chrgEE_Merge = (uint16_T)(SOH_DW.Time_Delay_DSTATE + 1U);
+  if (sfmd_I_curr < 0) {
+    rtb_Divide1 = (int16_T)-sfmd_I_curr;
   } else {
-    rtb_sohn_Q_chrgEE_Merge = 60000U;
+    rtb_Divide1 = sfmd_I_curr;
   }
 
-  /* End of Saturate: '<S10>/Saturation' */
+  /* End of Abs: '<S6>/Abs' */
+
+  /* RelationalOperator: '<S6>/Relational Operator2' */
+  rtb_RelationalOperator2_l = (rtb_Divide1 <= 10);
 
-  /* RelationalOperator: '<S10>/Relational Operator1' incorporates:
-   *  Constant: '<S10>/para'
+  /* Outputs for Enabled SubSystem: '<S6>/Resettable Subsystem1' incorporates:
+   *  EnablePort: '<S10>/Enable'
    */
-  rtb_RelationalOperator1_n = (rtb_sohn_Q_chrgEE_Merge >= 20);
+  for (i_0 = 0; i_0 < 28; i_0++) {
+    if (rtb_RelationalOperator2_l) {
+      /* Inport: '<S10>/ihv_V_CellU' incorporates:
+       *  Inport: '<Root>/sfmv_V_cellU'
+       */
+      SOH_B.ihv_V_CellU[i_0] = sfmv_V_cellU[i_0];
+    }
+
+    /* Switch: '<S6>/Switch' */
+    if (rtb_LogicalOperator_g) {
+      /* Switch: '<S6>/Switch' incorporates:
+       *  Inport: '<S10>/ihv_V_CellU'
+       */
+      sohv_V_chrgStartStatEo[i_0] = SOH_B.ihv_V_CellU[i_0];
+    }
+
+    /* End of Switch: '<S6>/Switch' */
+  }
+
+  /* End of Outputs for SubSystem: '<S6>/Resettable Subsystem1' */
 
   /* Outputs for Enabled SubSystem: '<S6>/Resettable Subsystem' incorporates:
    *  EnablePort: '<S9>/Enable'
    */
-  if (rtb_RelationalOperator1_n) {
+  if (rtb_RelationalOperator2_l) {
     if (!SOH_DW.ResettableSubsystem_MODE_i) {
       /* InitializeConditions for UnitDelay: '<S9>/Time_Delay' */
-      SOH_DW.Time_Delay_DSTATE_k = 0U;
+      SOH_DW.Time_Delay_DSTATE = 1U;
       SOH_DW.ResettableSubsystem_MODE_i = true;
     }
 
@@ -494,13 +561,13 @@ void SOH(void)
      *  Constant: '<S9>/Constant'
      *  UnitDelay: '<S9>/Time_Delay'
      */
-    SOH_DW.Time_Delay_DSTATE_k++;
+    SOH_DW.Time_Delay_DSTATE++;
 
     /* Product: '<S9>/Divide' incorporates:
      *  Constant: '<S9>/Constant1'
      *  UnitDelay: '<S9>/Time_Delay'
      */
-    SOH_B.Divide = (uint16_T)(SOH_DW.Time_Delay_DSTATE_k / 10U);
+    SOH_B.Divide = (uint16_T)(SOH_DW.Time_Delay_DSTATE / 10U);
   } else {
     SOH_DW.ResettableSubsystem_MODE_i = false;
   }
@@ -508,76 +575,119 @@ void SOH(void)
   /* End of Outputs for SubSystem: '<S6>/Resettable Subsystem' */
 
   /* Logic: '<S6>/Logical Operator1' incorporates:
-   *  UnitDelay: '<S6>/Unit Delay1'
+   *  Logic: '<S6>/Logical Operator2'
+   *  UnitDelay: '<S6>/reset'
    */
-  SOH_DW.UnitDelay1_DSTATE_j = (rtb_RelationalOperator1_n ||
-    SOH_DW.UnitDelay1_DSTATE_j);
+  SOH_DW.reset_DSTATE = ((!rtb_RelationalOperator2_l) || SOH_DW.reset_DSTATE);
 
   /* Switch: '<S6>/Switch2' incorporates:
    *  Sum: '<S6>/Add'
    *  UnitDelay: '<S6>/sohd_tm_chrgStartSta_Delay'
    */
-  if (rtb_sohn_flg_chrgEndEE_Merge) {
+  if (rtb_LogicalOperator_g) {
     /* Switch: '<S6>/Switch1' incorporates:
      *  Constant: '<S6>/Constant3'
      *  Inport: '<Root>/ihd_tm_parkTime'
+     *  UnitDelay: '<S6>/reset'
      */
-    if (SOH_DW.UnitDelay1_DSTATE_j) {
-      rtb_LogicalOperator1_0 = 0U;
+    if (SOH_DW.reset_DSTATE) {
+      rtb_sohn_Q_chrgEE_Merge = 0U;
     } else {
-      rtb_LogicalOperator1_0 = ihd_tm_parkTime;
+      rtb_sohn_Q_chrgEE_Merge = ihd_tm_parkTime;
     }
 
     /* End of Switch: '<S6>/Switch1' */
-    SOH_DW.sohd_tm_chrgStartSta_Delay_DSTA = (uint16_T)(SOH_B.Divide +
-      rtb_LogicalOperator1_0);
+    SOH_DW.sohd_tm_chrgStartSta_Delay_DSTA = (uint16_T)((uint32_T)SOH_B.Divide +
+      rtb_sohn_Q_chrgEE_Merge);
   }
 
   /* End of Switch: '<S6>/Switch2' */
 
-  /* Saturate: '<S6>/Saturation' incorporates:
+  /* Saturate: '<S6>/Saturation1' incorporates:
    *  UnitDelay: '<S6>/sohd_tm_chrgStartSta_Delay'
    */
-  sohd_tm_chrgStartStatEo = SOH_DW.sohd_tm_chrgStartSta_Delay_DSTA;
-
-  /* Abs: '<S6>/Abs' incorporates:
-   *  Inport: '<Root>/ihd_I_curr'
-   */
-  if (ihd_I_curr < 0) {
-    tmp = (int16_T)-ihd_I_curr;
+  if (SOH_DW.sohd_tm_chrgStartSta_Delay_DSTA > 60) {
+    rtb_sohn_Q_chrgEE_Merge = SOH_DW.sohd_tm_chrgStartSta_Delay_DSTA;
   } else {
-    tmp = ihd_I_curr;
+    rtb_sohn_Q_chrgEE_Merge = 60U;
   }
 
-  /* End of Abs: '<S6>/Abs' */
+  /* End of Saturate: '<S6>/Saturation1' */
 
-  /* Product: '<S10>/Product' incorporates:
-   *  RelationalOperator: '<S6>/Relational Operator2'
-   *  UnitDelay: '<S10>/Time_Delay'
+  /* Saturate: '<S6>/Saturation' incorporates:
+   *  Constant: '<S6>/Constant4'
+   *  Sum: '<S6>/Add1'
    */
-  SOH_DW.Time_Delay_DSTATE = (uint16_T)(tmp >= 20 ? (int32_T)
-    rtb_sohn_Q_chrgEE_Merge : 0);
+  sohd_tm_chrgStartStatEo = (uint16_T)(rtb_sohn_Q_chrgEE_Merge - 60);
 
   /* UnitDelay: '<S7>/Unit Delay' incorporates:
    *  UnitDelay: '<S6>/Unit Delay'
    */
   SOH_DW.UnitDelay_DSTATE = SOH_DW.UnitDelay_DSTATE_g;
 
-  /* Switch: '<S7>/Switch' incorporates:
+  /* RelationalOperator: '<S7>/Relational Operator' incorporates:
    *  Constant: '<S7>/Constant'
+   *  UnitDelay: '<S6>/Unit Delay'
+   */
+  rtb_LogicalOperator_g = (SOH_DW.UnitDelay_DSTATE == 2);
+
+  /* Outputs for Enabled SubSystem: '<S7>/Enabled Subsystem' incorporates:
+   *  EnablePort: '<S11>/Enable'
+   */
+  if (rtb_LogicalOperator_g) {
+    if (!SOH_DW.EnabledSubsystem_MODE) {
+      /* InitializeConditions for UnitDelay: '<S11>/reset' */
+      SOH_DW.reset_DSTATE_b = false;
+      SOH_DW.EnabledSubsystem_MODE = true;
+    }
+
+    /* Logic: '<S11>/Logical Operator' incorporates:
+     *  Inport: '<Root>/sfmd_flg_currFlt'
+     *  UnitDelay: '<S11>/reset'
+     */
+    SOH_DW.reset_DSTATE_b = (sfmd_flg_currFlt || SOH_DW.reset_DSTATE_b);
+  } else {
+    SOH_DW.EnabledSubsystem_MODE = false;
+  }
+
+  /* End of Outputs for SubSystem: '<S7>/Enabled Subsystem' */
+
+  /* Switch: '<S7>/Switch' incorporates:
    *  Constant: '<S7>/Constant1'
    *  Inport: '<Root>/ihd_st_ChrgStat '
    *  Logic: '<S7>/Logical Operator'
-   *  RelationalOperator: '<S7>/Relational Operator'
    *  RelationalOperator: '<S7>/Relational Operator1'
-   *  UnitDelay: '<S6>/Unit Delay'
-   *  UnitDelay: '<S7>/Unit Delay1'
+   *  UnitDelay: '<S7>/sohd_flg_chrgEndEo_reset'
    */
-  sohd_flg_chrgEndEo = (((SOH_DW.UnitDelay_DSTATE == 2) && (ihd_st_workStat != 2))
-                        || (SOH_DW.UnitDelay1_DSTATE != 0));
+  rtb_LogicalOperator_g = ((rtb_LogicalOperator_g && (ihd_st_workStat != 2)) ||
+    SOH_DW.sohd_flg_chrgEndEo_reset_DSTATE);
+
+  /* Logic: '<S7>/Logical Operator1' incorporates:
+   *  Logic: '<S7>/Logical Operator2'
+   *  UnitDelay: '<S11>/reset'
+   */
+  sohd_flg_chrgEndEo = ((!SOH_DW.reset_DSTATE_b) && rtb_LogicalOperator_g);
+
+  /* Abs: '<S7>/Abs' incorporates:
+   *  Inport: '<Root>/sfmd_I_curr'
+   */
+  if (sfmd_I_curr < 0) {
+    rtb_Divide1 = (int16_T)-sfmd_I_curr;
+  } else {
+    rtb_Divide1 = sfmd_I_curr;
+  }
+
+  /* End of Abs: '<S7>/Abs' */
+
+  /* Logic: '<S7>/Logical Operator3' incorporates:
+   *  RelationalOperator: '<S7>/Relational Operator3'
+   *  UnitDelay: '<S7>/sohd_flg_chrgEndEo_reset'
+   */
+  SOH_DW.sohd_flg_chrgEndEo_reset_DSTATE = (rtb_LogicalOperator_g &&
+    (rtb_Divide1 < 10));
 
   /* Outputs for Enabled SubSystem: '<S8>/Resettable Subsystem' incorporates:
-   *  EnablePort: '<S11>/Enable'
+   *  EnablePort: '<S12>/Enable'
    */
   /* RelationalOperator: '<S8>/Relational Operator1' incorporates:
    *  Constant: '<S8>/Constant1'
@@ -585,24 +695,37 @@ void SOH(void)
    */
   if (ihd_st_workStat == 2) {
     if (!SOH_DW.ResettableSubsystem_MODE) {
-      /* InitializeConditions for UnitDelay: '<S11>/curr_icr_Delay' */
-      SOH_DW.curr_icr_Delay_DSTATE = 0;
+      /* InitializeConditions for UnitDelay: '<S12>/Ahincr_reset' */
+      SOH_DW.Ahincr_reset_DSTATE = 0;
       SOH_DW.ResettableSubsystem_MODE = true;
     }
 
-    /* Sum: '<S11>/Add' incorporates:
-     *  Inport: '<Root>/ihd_I_curr'
-     *  UnitDelay: '<S11>/curr_icr_Delay'
+    /* Sum: '<S12>/Add' incorporates:
+     *  Inport: '<Root>/sfmd_I_curr'
+     *  UnitDelay: '<S12>/Ahincr_reset'
+     */
+    SOH_DW.Ahincr_reset_DSTATE += sfmd_I_curr * 10;
+
+    /* Product: '<S12>/Divide1' incorporates:
+     *  Product: '<S12>/Divide'
+     *  Sum: '<S12>/Add'
+     *  UnitDelay: '<S12>/Ahincr_reset'
      */
-    SOH_DW.curr_icr_Delay_DSTATE += ihd_I_curr * 10;
+    rtb_Divide1 = (int16_T)(((int16_T)div_nde_s32_floor(div_nde_s32_floor
+      (SOH_DW.Ahincr_reset_DSTATE, 200) << 1, 4500) * 5) >> 2);
 
-    /* Product: '<S11>/Divide1' incorporates:
-     *  Product: '<S11>/Divide'
-     *  Sum: '<S11>/Add'
-     *  UnitDelay: '<S11>/curr_icr_Delay'
+    /* Saturate: '<S12>/Saturation' incorporates:
+     *  Product: '<S12>/Divide1'
      */
-    SOH_B.Divide1 = (uint16_T)(((uint16_T)(((uint32_T)div_nde_s32_floor
-      (SOH_DW.curr_icr_Delay_DSTATE, 200) << 1) / 4500U) * 5U) >> 2);
+    if (rtb_Divide1 > 0) {
+      /* Saturate: '<S12>/Saturation' */
+      SOH_B.Saturation = (uint16_T)rtb_Divide1;
+    } else {
+      /* Saturate: '<S12>/Saturation' */
+      SOH_B.Saturation = 0U;
+    }
+
+    /* End of Saturate: '<S12>/Saturation' */
   } else {
     SOH_DW.ResettableSubsystem_MODE = false;
   }
@@ -611,14 +734,14 @@ void SOH(void)
   /* End of Outputs for SubSystem: '<S8>/Resettable Subsystem' */
 
   /* SignalConversion generated from: '<S8>/Resettable Subsystem' incorporates:
-   *  Product: '<S11>/Divide1'
+   *  Saturate: '<S12>/Saturation'
    */
-  sohd_Q_chrgEo = SOH_B.Divide1;
+  sohd_Q_chrgEo = SOH_B.Saturation;
 
-  /* Update for UnitDelay: '<S4>/First_Delay' incorporates:
-   *  Constant: '<S4>/Constant2'
+  /* Update for UnitDelay: '<S21>/Unit Delay1' incorporates:
+   *  Constant: '<S21>/Constant1'
    */
-  SOH_DW.First_Delay_DSTATE = false;
+  SOH_DW.UnitDelay1_DSTATE = false;
 
   /* Update for UnitDelay: '<S6>/Unit Delay' incorporates:
    *  Inport: '<Root>/ihd_st_ChrgStat '
@@ -629,24 +752,6 @@ void SOH(void)
    *  Inport: '<Root>/ihd_st_ChrgStat '
    */
   SOH_DW.UnitDelay_DSTATE_g = ihd_st_workStat;
-
-  /* Abs: '<S7>/Abs' incorporates:
-   *  Inport: '<Root>/ihd_I_curr'
-   */
-  if (ihd_I_curr < 0) {
-    tmp = (int16_T)-ihd_I_curr;
-  } else {
-    tmp = ihd_I_curr;
-  }
-
-  /* End of Abs: '<S7>/Abs' */
-
-  /* Update for UnitDelay: '<S7>/Unit Delay1' incorporates:
-   *  Logic: '<S7>/Logical Operator1'
-   *  Product: '<S7>/Product'
-   *  RelationalOperator: '<S7>/Relational Operator3'
-   */
-  SOH_DW.UnitDelay1_DSTATE = (uint16_T)(sohd_flg_chrgEndEo ? tmp < 20 : 0);
 }
 
 /* Model initialize function */

+ 165 - 0
src/SPM.c

@@ -0,0 +1,165 @@
+/*
+ * File: SPM.c
+ *
+ * Code generated for Simulink model 'SPM'.
+ *
+ * Model version                  : 1.31
+ * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
+ * C/C++ source code generated on : Thu Sep  9 18:13:23 2021
+ *
+ * Target selection: ert.tlc
+ * Embedded hardware selection: Intel->x86-64 (Windows64)
+ * Code generation objectives: Unspecified
+ * Validation result: Not run
+ */
+
+#include "SPM.h"
+#include "SPM_private.h"
+
+MdlrefDW_SPM_T SPM_MdlrefDW;
+
+/* System initialize for referenced model: 'SPM' */
+void SPM_Init(void)
+{
+  /* SystemInitialize for ModelReference: '<Root>/SOH' incorporates:
+   *  Inport: '<Root>/<sfmd_flg_currFlt>'
+   *  Inport: '<Root>/ihd_st_workStat'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_I_curr '
+   *  Inport: '<Root>/sfmd_flg_volFlt'
+   *  Inport: '<Root>/sfmv_V_cellU'
+   *  Inport: '<Root>/sohd_Q_chrgEi '
+   *  Inport: '<Root>/sohd_flg_chrgEndEi '
+   *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
+   *  Inport: '<Root>/sohv_Q_cellCapArrEi 1'
+   *  Inport: '<Root>/sohv_Q_packCapArrEi '
+   *  Inport: '<Root>/sohv_V_chrgStartStatEi '
+   */
+  SOH_Init();
+
+  /* SystemInitialize for ModelReference: '<Root>/BLC' incorporates:
+   *  Inport: '<Root>/blcv_Q_reqCpEi'
+   *  Inport: '<Root>/blcv_Q_totalCpEi'
+   *  Inport: '<Root>/ihd_T_bdtemp'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
+   *  Inport: '<Root>/sfmd_flg_volFlt'
+   *  Inport: '<Root>/sfmd_st_fltAct'
+   *  Inport: '<Root>/sfmv_V_cellU'
+   */
+  BLC_Init();
+
+  /* SystemInitialize for ModelReference: '<Root>/SOC' incorporates:
+   *  Inport: '<Root>/ihd_st_workStat'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_I_curr '
+   *  Inport: '<Root>/sfmd_V_cellUAvrg'
+   *  Inport: '<Root>/sfmd_V_cellUMax'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
+   *  Inport: '<Root>/socd_pct_battSocEi'
+   *  Inport: '<Root>/socd_pct_bcuSocEi'
+   */
+  SOC_Init();
+}
+
+/* Disable for referenced model: 'SPM' */
+void SPM_Disable(void)
+{
+  /* Disable for ModelReference: '<Root>/SOH' incorporates:
+   *  Inport: '<Root>/<sfmd_flg_currFlt>'
+   *  Inport: '<Root>/ihd_st_workStat'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_I_curr '
+   *  Inport: '<Root>/sfmd_flg_volFlt'
+   *  Inport: '<Root>/sfmv_V_cellU'
+   *  Inport: '<Root>/sohd_Q_chrgEi '
+   *  Inport: '<Root>/sohd_flg_chrgEndEi '
+   *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
+   *  Inport: '<Root>/sohv_Q_cellCapArrEi 1'
+   *  Inport: '<Root>/sohv_Q_packCapArrEi '
+   *  Inport: '<Root>/sohv_V_chrgStartStatEi '
+   */
+  SOH_Disable();
+
+  /* Disable for ModelReference: '<Root>/SOC' incorporates:
+   *  Inport: '<Root>/ihd_st_workStat'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_I_curr '
+   *  Inport: '<Root>/sfmd_V_cellUAvrg'
+   *  Inport: '<Root>/sfmd_V_cellUMax'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
+   *  Inport: '<Root>/socd_pct_battSocEi'
+   *  Inport: '<Root>/socd_pct_bcuSocEi'
+   */
+  SOC_Disable();
+}
+
+/* Output and update for referenced model: 'SPM' */
+void SPM(void)
+{
+  /* ModelReference: '<Root>/SOH' incorporates:
+   *  Inport: '<Root>/<sfmd_flg_currFlt>'
+   *  Inport: '<Root>/ihd_st_workStat'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_I_curr '
+   *  Inport: '<Root>/sfmd_flg_volFlt'
+   *  Inport: '<Root>/sfmv_V_cellU'
+   *  Inport: '<Root>/sohd_Q_chrgEi '
+   *  Inport: '<Root>/sohd_flg_chrgEndEi '
+   *  Inport: '<Root>/sohd_tm_chrgStartStatEi '
+   *  Inport: '<Root>/sohv_Q_cellCapArrEi 1'
+   *  Inport: '<Root>/sohv_Q_packCapArrEi '
+   *  Inport: '<Root>/sohv_V_chrgStartStatEi '
+   */
+  SOH();
+
+  /* ModelReference: '<Root>/BLC' incorporates:
+   *  Inport: '<Root>/blcv_Q_reqCpEi'
+   *  Inport: '<Root>/blcv_Q_totalCpEi'
+   *  Inport: '<Root>/ihd_T_bdtemp'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
+   *  Inport: '<Root>/sfmd_flg_volFlt'
+   *  Inport: '<Root>/sfmd_st_fltAct'
+   *  Inport: '<Root>/sfmv_V_cellU'
+   */
+  BLC();
+
+  /* ModelReference: '<Root>/SOC' incorporates:
+   *  Inport: '<Root>/ihd_st_workStat'
+   *  Inport: '<Root>/ihd_tm_packTime'
+   *  Inport: '<Root>/sfmd_I_curr '
+   *  Inport: '<Root>/sfmd_V_cellUAvrg'
+   *  Inport: '<Root>/sfmd_V_cellUMax'
+   *  Inport: '<Root>/sfmd_V_cellUMin'
+   *  Inport: '<Root>/socd_pct_battSocEi'
+   *  Inport: '<Root>/socd_pct_bcuSocEi'
+   */
+  SOC();
+}
+
+/* Model initialize function */
+void SPM_initialize(const char_T **rt_errorStatus)
+{
+  RT_MODEL_SPM_T *const SPM_M = &(SPM_MdlrefDW.rtm);
+
+  /* Registration code */
+
+  /* initialize error status */
+  rtmSetErrorStatusPointer(SPM_M, rt_errorStatus);
+
+  /* Model Initialize function for ModelReference Block: '<Root>/BLC' */
+  BLC_initialize(rtmGetErrorStatusPointer(SPM_M));
+
+  /* Model Initialize function for ModelReference Block: '<Root>/SOC' */
+  SOC_initialize(rtmGetErrorStatusPointer(SPM_M));
+
+  /* Model Initialize function for ModelReference Block: '<Root>/SOH' */
+  SOH_initialize(rtmGetErrorStatusPointer(SPM_M));
+}
+
+/*
+ * File trailer for generated code.
+ *
+ * [EOF]
+ */

+ 2 - 2
src/bsp_custom.c

@@ -223,8 +223,8 @@ void BSP_CustomInit(void)
 	NVIC_EnableIRQ(PadWakeup0_IRQn);//can
 	NVIC_DisableIRQ(PadWakeup1_IRQn);//rx
 	NVIC_EnableIRQ(PadWakeup2_IRQn);//lock
-	NVIC_EnableIRQ(PadWakeup3_IRQn);//gsensor
-	NVIC_EnableIRQ(PadWakeup4_IRQn);//gsensor
+	NVIC_DisableIRQ(PadWakeup3_IRQn);//gsensor
+	NVIC_DisableIRQ(PadWakeup4_IRQn);//gsensor
 	NVIC_EnableIRQ(PadWakeup5_IRQn);//wakeup2
 	CheckLockOutState();
 	slpManStartWaitATTimer();

+ 0 - 37
src/const_params.c

@@ -1,37 +0,0 @@
-#include "rtwtypes.h"
-
-extern const real_T rtCP_pooled_2yqyybnjRkAg[13];
-const real_T rtCP_pooled_2yqyybnjRkAg[13] = {   1.8, 1.1, 7.4, 1.5, 1.2000000000000002, 1.1, 1.2000000000000002, 1.3, 1.2000000000000002, 1.2000000000000002, 1.1, 1.2000000000000002, 1.0 } ;
-
-extern const real_T rtCP_pooled_4Oms9Dl3djxK[13];
-const real_T rtCP_pooled_4Oms9Dl3djxK[13] = {   3.88, 5.0600000000000005, 4.45, 10.8, 12.89, 12.99, 14.33, 10.75, 9.38, 10.34, 10.59, 11.950000000000001, 11.51 } ;
-
-extern const int16_T rtCP_pooled_5IPKsXGYnKyg[4];
-const int16_T rtCP_pooled_5IPKsXGYnKyg[4] = {   50, 100, 200, 400 } ;
-
-extern const real_T rtCP_pooled_6SXVB9Ymnskr[13];
-const real_T rtCP_pooled_6SXVB9Ymnskr[13] = {   2.2, 2.0, 2.0, 1.9000000000000001, 1.8, 1.8, 1.8, 1.7000000000000002, 1.7000000000000002, 1.7000000000000002, 1.7000000000000002, 1.8, 1.8 } ;
-
-extern const int16_T rtCP_pooled_9BXJPVWA4BJI[3];
-const int16_T rtCP_pooled_9BXJPVWA4BJI[3] = {   -400, -200, -100 } ;
-
-extern const real_T rtCP_pooled_Hq33G5zkPPgT[13];
-const real_T rtCP_pooled_Hq33G5zkPPgT[13] = {   0.0, 5.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 95.0, 100.0 } ;
-
-extern const uint16_T rtCP_pooled_J4vL4j1Fk1zG[3];
-const uint16_T rtCP_pooled_J4vL4j1Fk1zG[3] = {   3100U, 3270U, 3380U } ;
-
-extern const uint16_T rtCP_pooled_P4rYfkzHqAVr[4];
-const uint16_T rtCP_pooled_P4rYfkzHqAVr[4] = {   4126U, 4128U, 4132U, 4137U } ;
-
-extern const uint16_T rtCP_pooled_Pg3wA7d95Txu[13];
-const uint16_T rtCP_pooled_Pg3wA7d95Txu[13] = {   0U, 50U, 100U, 200U, 300U, 400U, 500U, 600U, 700U, 800U, 900U, 950U, 1000U } ;
-
-extern const uint16_T rtCP_pooled_neXCembKU1Do[13];
-const uint16_T rtCP_pooled_neXCembKU1Do[13] = {   3311U, 3411U, 3476U, 3553U, 3610U, 3638U, 3674U, 3758U, 3845U, 3942U, 4051U, 4106U, 4175U } ;
-
-extern const uint16_T rtCP_pooled_qce4hcBQN8fp[4];
-const uint16_T rtCP_pooled_qce4hcBQN8fp[4] = {   4125U, 4128U, 4132U, 4137U } ;
-
-extern const real_T rtCP_pooled_ygMHmGen2OIb[13];
-const real_T rtCP_pooled_ygMHmGen2OIb[13] = {   3.311, 3.411, 3.476, 3.553, 3.61, 3.638, 3.674, 3.758, 3.845, 3.942, 4.051, 4.106, 4.175 } ;

+ 2 - 2
src/div_nde_s32_floor.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/div_nzp_repeat_u32.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/div_nzp_repeat_u32_ceiling.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/div_repeat_s16s32_floor.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/div_repeat_u32.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.41
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Sep  1 15:06:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/div_su32.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.33
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 18 14:01:45 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/div_uus32_sat.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SFM'.
  *
- * Model version                  : 1.37
+ * Model version                  : 1.71
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Tue Aug 24 16:20:45 2021
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
  */
 
 #include "rtwtypes.h"

+ 0 - 105
src/ert_main.c

@@ -1,105 +0,0 @@
-/*
- * File: ert_main.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 <stddef.h>
-#include <stdio.h>              /* This ert_main.c example uses printf/fflush */
-#include "BCU.h"                       /* Model's header file */
-#include "rtwtypes.h"
-#include "zero_crossing_types.h"
-
-/*
- * Associating rt_OneStep with a real-time clock or interrupt service routine
- * is what makes the generated code "real-time".  The function rt_OneStep is
- * always associated with the base rate of the model.  Subrates are managed
- * by the base rate from inside the generated code.  Enabling/disabling
- * interrupts and floating point context switches are target specific.  This
- * example code indicates where these should take place relative to executing
- * the generated code step function.  Overrun behavior should be tailored to
- * your application needs.  This example simply sets an error status in the
- * real-time model and returns from rt_OneStep.
- */
-void rt_OneStep(void);
-void rt_OneStep(void)
-{
-  static boolean_T OverrunFlag = false;
-
-  /* Disable interrupts here */
-
-  /* Check for overrun */
-  if (OverrunFlag) {
-    rtmSetErrorStatus(BCU_M, "Overrun");
-    return;
-  }
-
-  OverrunFlag = true;
-
-  /* Save FPU context here (if necessary) */
-  /* Re-enable timer or interrupt here */
-  /* Set model inputs here */
-
-  /* Step the model */
-  BCU_step();
-
-  /* Get model outputs here */
-
-  /* Indicate task complete */
-  OverrunFlag = false;
-
-  /* Disable interrupts here */
-  /* Restore FPU context here (if necessary) */
-  /* Enable interrupts here */
-}
-
-/*
- * The example "main" function illustrates what is required by your
- * application code to initialize, execute, and terminate the generated code.
- * Attaching rt_OneStep to a real-time clock is target specific.  This example
- * illustrates how you do this relative to initializing the model.
- */
-int_T main(int_T argc, const char *argv[])
-{
-  /* Unused arguments */
-  (void)(argc);
-  (void)(argv);
-
-  /* Initialize model */
-  BCU_initialize();
-
-  /* Attach rt_OneStep to a timer or interrupt service routine with
-   * period 0.1 seconds (the model's base sample time) here.  The
-   * call syntax for rt_OneStep is
-   *
-   *  rt_OneStep();
-   */
-  printf("Warning: The simulation will run forever. "
-         "Generated ERT main won't simulate model step behavior. "
-         "To change this behavior select the 'MAT-file logging' option.\n");
-  fflush((NULL));
-  while (rtmGetErrorStatus(BCU_M) == (NULL)) {
-    /*  Perform other application tasks here */
-  }
-
-  /* Disable rt_OneStep() here */
-
-  /* Terminate model */
-  BCU_terminate();
-  return 0;
-}
-
-/*
- * File trailer for generated code.
- *
- * [EOF]
- */

+ 2 - 2
src/look1_is16lu16n16tu16_binlcase.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.15
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:45:09 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/look1_iu16lu16n16tu16_binlcase.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_s32_hiSR.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SFM'.
  *
- * Model version                  : 1.36
+ * Model version                  : 1.71
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Tue Aug 24 14:53:06 2021
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_s32_loSR_sat.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_s32_sat.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_ssu32_sat.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_u32_hiSR.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_u32_hiSR_near.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'SOC'.
  *
- * Model version                  : 1.24
+ * Model version                  : 1.51
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Thu Aug 12 17:54:23 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:48 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_us32_sat.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 3 - 3
src/mul_wide_s32.c

@@ -1,11 +1,11 @@
 /*
  * File: mul_wide_s32.c
  *
- * Code generated for Simulink model 'BLC'.
+ * Code generated for Simulink model 'SFM'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.71
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:17:31 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_wide_su32.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

+ 2 - 2
src/mul_wide_u32.c

@@ -3,9 +3,9 @@
  *
  * Code generated for Simulink model 'BLC'.
  *
- * Model version                  : 1.20
+ * Model version                  : 1.50
  * Simulink Coder version         : 9.4 (R2020b) 29-Jul-2020
- * C/C++ source code generated on : Wed Aug 11 09:44:57 2021
+ * C/C++ source code generated on : Thu Sep  9 17:18:08 2021
  */
 
 #include "rtwtypes.h"

部分文件因为文件数量过多而无法显示