Răsfoiți Sursa

[UPS]change algorithm for checking load

balbekova 2 ani în urmă
părinte
comite
e4931f8c53
3 a modificat fișierele cu 28 adăugiri și 9 ștergeri
  1. 17 3
      modules/MegaTec/megatec.c
  2. 1 0
      modules/MegaTec/megatec.h
  3. 10 6
      modules/parameters.c

+ 17 - 3
modules/MegaTec/megatec.c

@@ -115,6 +115,7 @@ void init_UPS_value(void)
     UPS.VAC_out = 0;
     UPS.Temp = 0;
     UPS.data_check_load = 0;
+    UPS.data_check_load_flag = false;
     UPS.Load = 0;
     UPS.Load_test_akb = 0;
     UPS.SOC = 0;
@@ -354,10 +355,11 @@ void ups_status_response(char *data)
         UPS.Status = stat;
     }
 
-     if((UPS.Status >> 2) & 0x01) {
+     if((UPS.Status >> 2) & 0x01 || ((UPS.Status >> 7) & 0x01)) {
         UPS.Load_test_akb = UPS.Load;
         TM_RTC_t data;
         TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
+        UPS.data_check_load_flag = true;
         UPS.data_check_load = data.unix;
     }
 
@@ -1211,8 +1213,10 @@ void request_task(void *params)
                     }
                 }
             }
+#if CHECK_LOAD_ENABLE
             xTimerStart(AutoTestTimer, 0);
-            AutoTestCallback();
+            xTimerChangePeriod(AutoTestTimer, 60*configTICK_RATE_HZ, 0);
+#endif
         }
         
         vTaskDelay(1000);
@@ -1307,11 +1311,19 @@ void UPSReadTestStatus(void)
 }
 
 void AutoTestCallback(void)
-{
+{ 
+    static bool first_start = false;
+
+    if (!first_start) {
+        xTimerChangePeriod(AutoTestTimer, configTICK_RATE_HZ*PERIOD_AUTO_TEST, 0);
+    }
+
     if(!((UPS.Status >> 2) & 0x01)) {
         int res = ups_metac_service_pdu(ups_test_10sec);
         set_act_source(AUTO_ACT);
     } 
+
+    first_start = true;
 }
 
 void ups_megatec_init(void)
@@ -1321,5 +1333,7 @@ void ups_megatec_init(void)
     xTaskCreate(akb_time_work_task, ( char * ) "akb_time_work_task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY,
         NULL);
     UPSRestoreTimer = xTimerCreate("UPSRestoreTmr", configTICK_RATE_HZ*30, pdFALSE, ( void * ) 0, UPSRestoreCallback);
+#if CHECK_LOAD_ENABLE
     AutoTestTimer = xTimerCreate("AutoTestTmr", configTICK_RATE_HZ*PERIOD_AUTO_TEST, pdTRUE, ( void * ) 0, AutoTestCallback);
+#endif
 }

+ 1 - 0
modules/MegaTec/megatec.h

@@ -73,6 +73,7 @@ typedef struct{
 	float Vcell_curr;
 	float Vakb_curr;
 	uint32_t data_check_load;
+	bool data_check_load_flag;
 	uint8_t Load;
 	uint8_t Load_test_akb;
 	uint8_t SOC;

+ 10 - 6
modules/parameters.c

@@ -191,9 +191,12 @@ void GetLoadAKBModeInt(int32_t *value)
   * @brief
   */
 void GetDataCheckLoadStr(char *str, uint8_t *len)
-{
-    sprintf(str, "%d", UPS.data_check_load);
+{   
+    if (UPS.data_check_load_flag) {
+      sprintf(str, "%d", UPS.data_check_load);
+    }
     *len = strlen(str);
+    
 }
 
 /**
@@ -207,8 +210,9 @@ void GetDataFormatCheckLoadStr(char *str, uint8_t *len)
   TM_RTC_GetDateTimeFromUnix(&data, UPS.data_check_load);
 
   sys_year = 2000 + data.year;
-
-  sprintf(str, "%04i-%02i-%02i %02i:%02i", sys_year, data.month, data.date, data.hours, data.minutes);
+  if (UPS.data_check_load_flag) {
+    sprintf(str, "%04i-%02i-%02i %02i:%02i", sys_year, data.month, data.date, data.hours, data.minutes);
+  }
   *len = strlen(str);
 }
 
@@ -1574,9 +1578,9 @@ void GetPortGwParityStr(char *str, uint8_t *len)
 void GetPortGwParityRUStr(char *str, uint8_t *len)
 {
     if (sSettings.sPortGw.parity == GW_EVEN_PAR) {
-        sprintf(str, "%s", "Нечетный");
-    } else if (sSettings.sPortGw.parity == GW_ODD_PAR) {
         sprintf(str, "%s", "Четный");
+    } else if (sSettings.sPortGw.parity == GW_ODD_PAR) {
+        sprintf(str, "%s", "Нечетный");
     } else {
         sprintf(str, "%s", "Нет");
     }