SOR.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "SOR.h"
  2. boolean_T FirstRun_SOR;
  3. void SOR_Init(void)
  4. {
  5. FirstRun_SOR = true;
  6. }
  7. //-------------------------------------------------------------------------
  8. void SOR(void)
  9. {
  10. static uint16_T sorn_ohm_cellREE[cmnc_num_cellUNumMax];
  11. static uint16_T sorn_ohm_cellREEArr[5][cmnc_num_cellUNumMax];
  12. uint16_T sorn_ohm_cellRSum[cmnc_num_cellUNumMax];
  13. static uint16_T sorn_V_cellU[cmnc_num_cellUNumMax];
  14. static uint8_T sorn_num_ctn;
  15. static int16_T sorn_I_curr;
  16. uint16_T i;
  17. uint16_T j;
  18. socd_pct_battSoc = 600;
  19. //
  20. if(FirstRun_SOR)
  21. {
  22. sorn_num_ctn = 0;
  23. sorn_I_curr = sfmd_I_curr;
  24. memcpy(sorn_V_cellU,sfmv_V_cellU, sizeof(sfmv_V_cellU));
  25. }
  26. if(FirstRun_SOR)
  27. {
  28. if(ArrMax((&(sorv_ohm_cellREi[0])) , cmnc_num_cellUNum) > 65000)
  29. {
  30. memset(sorn_ohm_cellREE,0, sizeof(sorn_ohm_cellREE));
  31. }
  32. else
  33. {
  34. memcpy(sorn_ohm_cellREE,sorv_ohm_cellREi, sizeof(sorv_ohm_cellREi));
  35. }
  36. }
  37. if(socd_pct_battSoc >= 550 && socd_pct_battSoc <= 700 && sorn_num_ctn < 5)
  38. {
  39. if(sfmd_I_curr - sorn_I_curr > 200 || sfmd_I_curr - sorn_I_curr < -200)
  40. {
  41. for(i = 0;i < cmnc_num_cellUNum;i++)
  42. {
  43. sorn_ohm_cellREEArr[sorn_num_ctn][i] = (uint16_T)( ((real_T)(sorn_V_cellU[i] - sfmv_V_cellU[i]) * 0.001) / ((real_T)(sorn_I_curr - sfmd_I_curr) * 0.1) * 1000000 );
  44. }
  45. sorn_num_ctn = sorn_num_ctn + 1;
  46. memset(sorn_ohm_cellRSum,0, sizeof(sorn_ohm_cellRSum));
  47. for(i = 0;i < cmnc_num_cellUNum;i++)
  48. {
  49. for(j = 0;j < sorn_num_ctn;j++)
  50. {
  51. sorn_ohm_cellRSum[i] = sorn_ohm_cellRSum[i] + sorn_ohm_cellREEArr[j][i];
  52. }
  53. sorn_ohm_cellREE[i] = sorn_ohm_cellRSum[i]/sorn_num_ctn;
  54. }
  55. }
  56. }
  57. memcpy(sorv_ohm_cellREo,sorn_ohm_cellREE, sizeof(sorn_ohm_cellREE));
  58. sorn_I_curr = sfmd_I_curr;
  59. memcpy(sorn_V_cellU,sfmv_V_cellU, sizeof(sfmv_V_cellU));
  60. FirstRun_SOR = false;
  61. }