Explorar el Código

【3.1.0.38】
1.加热常闭故障诊断策略修改:增加模组温度最高的判断
2.观测量更改,SOH替换
3.ADC采集部分更改

LAPTOP-EG88H5BE\86151 hace 3 años
padre
commit
f5756d02b6
Se han modificado 4 ficheros con 57 adiciones y 18 borrados
  1. 2 2
      inc/AppConfig.h
  2. 12 9
      src/AppTaskControl.c
  3. 11 4
      src/AppTaskTcp.c
  4. 32 3
      src/EmbeddedCoder_src/SFM.c

+ 2 - 2
inc/AppConfig.h

@@ -2,7 +2,7 @@
  * @Author       : ChenJie
  * @Date         : 2021-10-14 09:27:15
  * @LastEditors  : ChenJie
- * @LastEditTime : 2021-11-08 15:15:43
+ * @LastEditTime : 2021-11-10 11:09:44
  * @Description  : App Config H file 配置文件,可以针对不同参数进行更改
  * @FilePath     : \PLAT\project\ec616_0h00\apps\qx_app\inc\AppConfig.h
  */
@@ -14,7 +14,7 @@
 #define DATA_MODULE_TYPE (1)           //1表示NB模块,2表示4G cat1
 #define EOLSTATE (0)                   //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN "RLTEST00000000001" //默认上传的SN编码
-#define APPSWVERSION 0x03010025        //数据模块软件版本号
+#define APPSWVERSION 0x03010026        //数据模块软件版本号
 #define RELAYCONFIG 1                  //继电器配置
 #define TCP_ADD "iotp.fast-fun.cn"     //数据上传的地址
 #define TCP_PORT 8712                  //数据上传的端口

+ 12 - 9
src/AppTaskControl.c

@@ -21,6 +21,7 @@ static void ControlTask(void *arg)
     PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_IDLE);
     UINT32 CurrentTime = 0;
     UINT16 RingTimes = 0;
+    UINT8 AdcIndex = 1;
     while (true)
     {
         switch (gProcess_Control_Task)
@@ -40,7 +41,7 @@ static void ControlTask(void *arg)
         }
         case PROCESS_CONTROL_STATE_WORK:
         {
-            osDelay(100);
+            osDelayUntil(100);
             if (CurrentTime != TimeCounter)
             {
                 UINT16 Buzzerperiod = 400;
@@ -74,10 +75,12 @@ static void ControlTask(void *arg)
                     relayControl(FALSE);
                 }
                 CurrentTime = TimeCounter;
-            }
-            if (TimeCounter % 10 == 0)
-            {
-                GetAdcValue(1);
+                GetAdcValue(AdcIndex);
+                AdcIndex++;
+                if (AdcIndex > 5)
+                {
+                    AdcIndex = 0;
+                }
             }
             if (gProcess_app != WORK)
             {
@@ -135,19 +138,19 @@ void GetAdcValue(UINT8 num)
     case FAST_CHARGE_TEMP:
         NB_ADC_Get(&adcValue, FAST_CHARGE_TEMP);
         fastChargeTemp = LookUpRTtable(adcValue);
-		osDelay(200);
+        break;
     case NORMAL_CHARGE_TEMP:
         NB_ADC_Get(&adcValue, NORMAL_CHARGE_TEMP);
         normalChargeTemp = LookUpRTtable(adcValue);
-		osDelay(200);
+        break;
     case OTHER_TEMP_1:
         NB_ADC_Get(&adcValue, OTHER_TEMP_1);
         heatTemp1 = LookUpRTtable(adcValue);
-		osDelay(200);
+        break;
     case OTHER_TEMP_2:
         NB_ADC_Get(&adcValue, OTHER_TEMP_2);
         heatTemp2 = LookUpRTtable(adcValue);
-		osDelay(200);
+        break;
     case VBAT:
         NB_ADC_Get(&adcValue, VBAT);
         PowerVoltage = adcValue;

+ 11 - 4
src/AppTaskTcp.c

@@ -8,6 +8,7 @@
  ****************************************************************************/
 #include "AppTaskTcp.h"
 #include "BCUDisp.h"
+#include "numeric.h"
 //局部变量申请
 static StaticTask_t gProcess_Tcp_Task_t;
 static UINT8 gProcess_Tcp_TaskStack[PROC_TCP_TASK_STACK_SIZE];
@@ -342,7 +343,7 @@ static void TcpDataInfoAssembleSend()
         *(SendBuffer + 46) = battPackVol & 0xFF;            //电压-47
         *(SendBuffer + 47) = battMOSSwitchState;            //mos状态-48
         *(SendBuffer + 48) = (UINT8)(socd_pct_bcuSoc / 10); //soc-49
-        *(SendBuffer + 49) = battSOH;                       //soh-50
+        *(SendBuffer + 49) = (UINT8)(sohd_pct_bcuSoh / 10); //soh-50
         *(SendBuffer + 50) = (battBalanceoInfo >> 24) & 0xFF;
         *(SendBuffer + 51) = (battBalanceoInfo >> 16) & 0xFF;
         *(SendBuffer + 52) = (battBalanceoInfo >> 8) & 0xFF;
@@ -555,6 +556,7 @@ static void TcpDataInfoAssembleSend()
             if (len > 0)
             {
                 TcpSendLen = 0x01 | TcpSendLen;
+                BMSupdatestatus = 0xFF;
             }
             else
             {
@@ -577,10 +579,15 @@ static void TcpDataInfoAssembleSend()
         }
         else
         {
-            sprintf((char *)rbuf, "B-%d,%d,%d,%d,%d,%d,%d,\
+            INT16 temp = cdmv_ohm_deltR[0];
+            for (UINT8 i = 0; i < cmnc_num_cellUNum; i++)
+            {
+                temp = max(temp, cdmv_ohm_deltR[i]);
+            }
+            sprintf((char *)rbuf, "B-%d,%d,%d,%d,%d,%d,%d,%d,%d,,\
                                 %d,%d,%d",
-                    socd_pct_ahSoc, socd_pct_ekfSoc, socd_pct_estSoc, socd_pct_battSoc, socd_pct_bcuSoc, battSOC * 10, socd_pct_cellBattSoc,
-                    battI, maxCellVol, minCellVol);
+                    socd_pct_ahSoc, socd_pct_ekfSoc, socd_pct_estSoc, socd_pct_battSoc, socd_pct_bcuSoc, battSOC * 10, socd_pct_cellBattSoc, sohv_Q_packCapArrEo[9], temp,
+                    battI - 10000, maxCellVol, minCellVol);
         }
         Debugcounter++;
         if (Debugcounter > 100)

+ 32 - 3
src/EmbeddedCoder_src/SFM.c

@@ -17,6 +17,9 @@ void SFM(void)
     boolean_T sfmd_flg_chrgMosClosFlt;
     boolean_T sfmd_flg_disChrgMosClosFlt;
 
+	static uint16_T Time0Cntl;
+    static uint16_T modTMaxArr[10];
+    static uint16_T SumT0;
     static uint16_T Time1Cntl;
     static uint16_T heatT1Arr[10];
     static uint16_T SumT1;
@@ -176,6 +179,7 @@ void SFM(void)
         memset(RecNr, 0, sizeof(RecNr));
         memset(modTOpenNr, 0, sizeof(modTOpenNr));
         memset(modTRationNr, 0, sizeof(modTRationNr));
+		memset(deltRFltNr, 0, sizeof(deltRFltNr));
         sfmd_flg_cellUOverFlt2 = false;
         sfmd_flg_cellUOverFlt1 = false;
         sfmd_flg_cellULowFlt2 = false;
@@ -846,6 +850,31 @@ void SFM(void)
 
 	
     ////32 加热回路常闭故障
+    if(!sfmd_flg_modTAllFlt)
+    {
+	    if (FirstRun_SFM)
+	   {
+		   for (i = 0; i < 10; i++)
+		  {
+			modTMaxArr[i] = sfmd_T_modTMax;
+		  }
+		  Time0Cntl = 0;
+		  SumT0 = 0;
+	   }
+	   Time0Cntl++;
+	   SumT0 = SumT0 + sfmd_T_modTMax;
+	   if (Time0Cntl >= 60)
+	   {
+		  for (i = 0; i < 9; i++)
+		  {
+			 modTMaxArr[i] = modTMaxArr[i + 1];
+		  }
+		  modTMaxArr[9] = SumT0 / Time0Cntl;
+		  Time0Cntl = 0;
+		  SumT0 = 0;
+	    }
+    }	
+    
     if (!sfmd_flg_heatPanT1OpenFlt && !sfmd_flg_heatPanT1RationFlt && (int16_T)(ihd_T_heatPanT1 - ihd_T_heatPanT1_Delay1) > -10 && (int16_T)(ihd_T_heatPanT1 - ihd_T_heatPanT1_Delay1) < 20 )
     {
         if (FirstRun_SFM)
@@ -901,7 +930,7 @@ void SFM(void)
     deltaTEn1  = !sfmd_flg_heatPanT1OpenFlt && !sfmd_flg_heatPanT1RationFlt && !sfmd_flg_ACPlugTOpenFlt &&!sfmd_flg_ACPlugTRationFlt && !sfmd_flg_DCPlugTOpenFlt &&!sfmd_flg_DCPlugTRationFlt && ((ihd_T_heatPanT1 > ihd_T_ACPlugT + 5) && (ihd_T_heatPanT1 > ihd_T_DCPlugT + 5));
     deltaTEn2  = !sfmd_flg_heatPanT2OpenFlt && !sfmd_flg_heatPanT2RationFlt && !sfmd_flg_ACPlugTOpenFlt &&!sfmd_flg_ACPlugTRationFlt && !sfmd_flg_DCPlugTOpenFlt &&!sfmd_flg_DCPlugTRationFlt && ((ihd_T_heatPanT2 > ihd_T_ACPlugT + 5) && (ihd_T_heatPanT2 > ihd_T_DCPlugT + 5));
 	Enable1 = JudgeTimeSystem(1, tmsd_st_heatAct == 0, &DiagTime.N32, 600);
-    sfmd_flg_heatCirClosFltEo = (((int16_T)(heatT2Arr[9] - heatT2Arr[0]) > 5 || (int16_T)(heatT1Arr[9] - heatT1Arr[0]) > 5) && Enable1 && (deltaTEn1 || deltaTEn2)) || sfmd_flg_heatCirClosFltEo || sfmd_flg_heatCirClosFltEi;
+    sfmd_flg_heatCirClosFltEo = (((int16_T)(heatT2Arr[9] - heatT2Arr[0]) > 5 || (int16_T)(heatT1Arr[9] - heatT1Arr[0]) > 5) && (modTMaxArr[9] > modTMaxArr[0] + 3) && Enable1 && (deltaTEn1 || deltaTEn2)) || sfmd_flg_heatCirClosFltEo || sfmd_flg_heatCirClosFltEi;
 
     //33 加热回路常开故障
     Enable2 = JudgeTimeSystem(1, tmsd_st_heatAct == 1, &DiagTime.N33, 600);
@@ -1043,7 +1072,7 @@ void SFM(void)
     FltAct[30] = 0;
 	
     FltFlg[31] = sfmd_flg_heatCirClosFltEo;
-    FltLevel[31] = 5;
+    FltLevel[31] = 4;
     FltAct[31] = 250; //32 加热回路常闭故障
     
     FltFlg[32] = sfmd_flg_heatCirOpenFltEo;
@@ -1051,7 +1080,7 @@ void SFM(void)
     FltAct[32] = 0; //33 加热回路常开故障
     
     FltFlg[33] = sfmd_flg_mainCirClosFltEo;
-    FltLevel[33] = 5;
+    FltLevel[33] = 4;
     FltAct[33] = 250; //34 主回路常闭故障
     
     FltFlg[34] = 0;