Sfoglia il codice sorgente

Making changes for UPS Mega.

Dmitry Telenkov 4 mesi fa
parent
commit
6b7ff0e7e6
3 ha cambiato i file con 96 aggiunte e 55 eliminazioni
  1. 3 0
      Makefile
  2. 1 1
      config/board_bt6711_v1.h
  3. 92 54
      modules/MegaTec/megatec.c

+ 3 - 0
Makefile

@@ -80,6 +80,9 @@ fullflash_6711:
 	sleep 1
 	st-flash --reset write output/stm32bt6711.bin 0x8020000	
 
+fwflash_6711_v1:
+	st-flash --reset write output/stm32bt6711_v1.bin 0x8020000
+
 fullflash_6711_v1:
 	st-flash --reset write output/iap.bin 0x8000000
 	sleep 1

+ 1 - 1
config/board_bt6711_v1.h

@@ -309,6 +309,6 @@ typedef enum {
 #define SERVICE_CONTROLLER_IP  "192.168.0.12"
 
 #define UPS_BUZZER_OFF //выключение звукового сигнала ИБП
-#define CHECK_LOAD_ENABLE //включение алгоритма проверки нагрузки на ИБП
+//#define CHECK_LOAD_ENABLE //включение алгоритма проверки нагрузки на ИБП
 
 #endif /* BOARD_PRS_H */

+ 92 - 54
modules/MegaTec/megatec.c

@@ -73,39 +73,39 @@ static struct {
 
 
 const char *MegaTecCMD[] = {
-    "Q1\r",
-    "T\r",
-    "TL\r",
-    "T",
-    "Q\r",
-    "S",
-    "R",
-    "C\r",
-    "CT\r",
-    "I\r",
-    "F\r",
-    "Q2\r",
-    "QGS\r",
-    "QBV\r",
-    "QMD\r",
-    "QVFW\r",
-    "QVFW2\r",
-    "QID\r",
-    "QPI\r",
-    "QS\r",
-    "M\r",
-    "PDA\r",
-    "QMOD\r",
-    "SON\r",
-    "QWS\r",
-    "QBYV\r",
-    "PHV264\r",//264
-    "QFLAG\r",
-    "PEL\r",
-    "BT\r",
-    "QTPR\r",
-	"QFS\r",
-    "SOFF\r",
+    "Q1\r",     // ups_status_req           [1] - OK
+    "T\r",      // ups_test_10sec
+    "TL\r",     // ups_test_low_bat
+    "T",        // ups_test_time
+    "Q\r",      // ups_beep
+    "S",        // ups_shutdown
+    "R",        // ups_shutdown_restore
+    "C\r",      // ups_cancel_shut_down
+    "CT\r",     // ups_cancel_test
+    "I\r",      // ups_info                 [3] - OK
+    "F\r",      // ups_rating_info
+    "Q2\r",     // ups_remain_time_reg      [2] - ERR
+    "QGS\r",    // ups_general_status_req
+    "QBV\r",    // ups_akb_info
+    "QMD\r",    // ups_model_req
+    "QVFW\r",   // ups_version_req
+    "QVFW2\r",  // ups_version2_req
+    "QID\r",    // ups_serial_req
+    "QPI\r",    // ups_protocol_id_req
+    "QS\r",     // ups_offline_status_req
+    "M\r",      // ups_passw_req
+    "PDA\r",    // ups_buzzer_cntrl
+    "QMOD\r",   // ups_mode_req
+    "SON\r",    // ups_remote_turn_on
+    "QWS\r",    // ups_warning_status
+    "QBYV\r",   // ups_bypass_volt_range
+    "PHV264\r", // ups_bypass_hvolt_264_set
+    "QFLAG\r",  // ups_qflag_status
+    "PEL\r",    // ups_cmd_enable_flag_l
+    "BT\r",     // ups_kstar_status         [4] - ERR
+    "QTPR\r",   // ups_temperature
+	"QFS\r",    // ups_fault_status
+    "SOFF\r",   // ups_remote_turn_off
 };
 
 extern bool flUpdateLog;
@@ -239,8 +239,8 @@ bool ups_megatec_rx_pdu(void)
         return false;
     }
 
-    DBG printf("UPS raw data: %s\r\n", ups_pdu.data);
-    DBG printf("UPS raw data len: %d\r\n", ups_pdu.len);
+    printf("UPS raw data: %s\r\n", ups_pdu.data);
+    printf("UPS raw data len: %d\r\n", ups_pdu.len);
 
     return true;
 }
@@ -273,7 +273,7 @@ void ups_status_response(char *data)
     char value[20];
     float tmp;
     uint8_t len = 0;
-    DBG printf("ups_status_response: %s\r\n", data);
+    printf("ups_status_response: %s\r\n", data);
     if (data[0] != '(') {
         return;
     }
@@ -364,23 +364,24 @@ void ups_status_response(char *data)
         for (i = 0; i < len; i ++) {
             stat |= (value[i] - 0x30) << (7 - i);
         }
-        UPS.Status = stat;
+        UPS.Status = stat;  // теперь параметр как обычное число
     }
 
     //   if (sSettings.UPS_Setting.type_ups == ups_kestar || sSettings.UPS_Setting.type_ups == ups_offline) {
-        if(UPS.Status & 0x04){
-            UPS.SOC_prev = UPS.SOC;
-        }
-        if (UPS.Vcell_curr < 7) {
-            UPS.SOC = round(100 * (UPS.Vcell_curr - sSettings.UPS_Setting.Ucellmin) / (sSettings.UPS_Setting.Ucellmax -
-                        sSettings.UPS_Setting.Ucellmin));
-        } else {
-            UPS.SOC = round(100 * (UPS.Vcell_curr / AKB_NUM_CELL - sSettings.UPS_Setting.Ucellmin) /
-                    (sSettings.UPS_Setting.Ucellmax - sSettings.UPS_Setting.Ucellmin));
-        }
+    // Bat Capacity
+    if(UPS.Status & 0x04) {
+        UPS.SOC_prev = UPS.SOC;
+    }
+    if (UPS.Vcell_curr < 7) {
+        UPS.SOC = round(100 * (UPS.Vcell_curr - sSettings.UPS_Setting.Ucellmin) / (sSettings.UPS_Setting.Ucellmax -
+                  sSettings.UPS_Setting.Ucellmin));
+    } else {
+        UPS.SOC = round(100 * (UPS.Vcell_curr / AKB_NUM_CELL - sSettings.UPS_Setting.Ucellmin) /
+                  (sSettings.UPS_Setting.Ucellmax - sSettings.UPS_Setting.Ucellmin));
+    }
  //   }
 
-    if((UPS.Status >> 2) & 0x01 || ((UPS.Status >> 7) & 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);
@@ -837,7 +838,7 @@ void ups_serial_response(char *data)
 
 void ups_protocol_id_response(char *data)
 {
-
+    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
     DBG printf("ups_protocol_id_response: %s\r\n", data);
 
     UPS.Present = UPS_CONNECTED;
@@ -846,15 +847,24 @@ void ups_protocol_id_response(char *data)
 
     if (data[0] != '(') {
         if (strncmp(data, "NAK", 3) == 0 || strncmp(data, " \r", 2) == 0) {
+            printf("-------------------------------------------");
+            printf("UPS protocol kestar!!!!!!!");
+            printf("-------------------------------------------");
             sSettings.UPS_Setting.type_ups = ups_kestar;
         }
         else if(strncmp(data, "QPI", 3) == 0) {
+            printf("-------------------------------------------");
+            printf("UPS protocol ups_offline!!!!!!!");
+            printf("-------------------------------------------");
             sSettings.UPS_Setting.type_ups = ups_offline;
         }
         return;
     }
 
     data++;
+    printf("-------------------------------------------");
+    printf("UPS protocol coltronic!!!!!!!");
+    printf("-------------------------------------------");
     sSettings.UPS_Setting.type_ups = ups_voltronic;
 
     DBG printf("UPS ups_protocol_id_parser_start: %s\r\n", data);
@@ -895,16 +905,17 @@ void ups_mode_response(char *data)
 
     DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
 
+#if 1
     // -----------------------------------------------------------------------
     // Тестовый 
     // Если значение режима изменилось или режим "Fault"
     if ((UPS.Mode != data[0]) || (data[0] == 'F')) {
+        UPS.Mode = data[0];
 #ifdef UPS_MODE_MONITOR
         memset(value, 0, sizeof(value));
         GetModeStr(value, &len);
         // В режиме "Fault" запрашиваем статус
         if (data[0] == 'F') {
-            
             memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
             send_MegaTec_cmd(ups_fault_status);
             if (ups_megatec_rx_pdu()) {
@@ -921,23 +932,23 @@ void ups_mode_response(char *data)
                 strncat(value, &ups_pdu.data[53], 4);
                 strncat(value, &ups_pdu.data[59], 8);
 
-                if ((strncmp(value, fault_status, sizeof(value)) != 0) || (UPS.Mode != data[0])) 
+                if ((strncmp(value, fault_status, sizeof(value)) != 0)) 
                 {
                     SNMP_SendUserTrap(UPS_MODE);
                     syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
                     log_event_data(LOG_UPS_MODE, value);
                 }
                 memcmp(fault_status, value, sizeof(value));
+                return;
             }
         }
         SNMP_SendUserTrap(UPS_MODE);
         syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
         log_event_data(LOG_UPS_MODE, value);
 #endif        
-        UPS.Mode = data[0];
     }
     // -----------------------------------------------------------------------
-
+#endif
 
 #if 0 // Пока закроем
     if (UPS.Mode != data[0]) {
@@ -1231,6 +1242,7 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
 void kstar_mode(void)
 {
     uint8_t mode = UPS.Mode;
+#if 0    
     if((UPS.Status >> 4) & 0x01) {
         UPS.Mode = 'F';
     } else if(!((UPS.Status >> 4) & 0x01) && UPS.VAC_out == 0) {
@@ -1244,6 +1256,19 @@ void kstar_mode(void)
     } else if((UPS.Status >> 2) & 0x01) {
         UPS.Mode = 'T';
     }
+#endif
+
+    if((UPS.Status >> 4) & 0x01) {
+        UPS.Mode = 'F';
+    } else if(!((UPS.Status >> 4) & 0x01) && UPS.VAC_out == 0) {
+        UPS.Mode = 'D';
+    } else if(((UPS.Status >> 5) & 0x01) && UPS.VAC_out > 120 && UPS.VAC_in != 0) {
+        UPS.Mode = 'Y';
+    } else if(((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
+        UPS.Mode = 'B';
+    } else if((UPS.Status >> 2) & 0x01) {
+        UPS.Mode = 'T';
+    }
 
 
     if (UPS.Mode != mode) {
@@ -1263,7 +1288,8 @@ void kstar_mode(void)
 //void request_task(void)
 void request_task(void *params)
 {
-    uint8_t kestar_req[4] = { ups_status_req, ups_remain_time_reg, ups_info, ups_kstar_status};
+    //uint8_t kestar_req[4] = { ups_status_req, ups_remain_time_reg, ups_info, ups_kstar_status};
+    uint8_t kestar_req[1] = { ups_status_req};
     uint8_t voltronic_req[9] = {ups_temperature, ups_status_req, ups_akb_info, ups_model_req, ups_mode_req, ups_version_req, ups_version2_req, ups_serial_req, ups_warning_status};//
     uint8_t num_req = 0;
     uint8_t *req;
@@ -1301,6 +1327,9 @@ void request_task(void *params)
             }
         }
 
+        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
+        printf("megatec_send: %u\r\n", megatec_send);
+
         if (megatec_send) {
             memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
             megatec_send = false;
@@ -1389,14 +1418,23 @@ void request_task(void *params)
                 memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
                 megatec_send = false;
                 UPS.Flag_Present = false;
+                // printf("~~~~~~~~~~ set UPS.Flag_Present false\r\n");
                 send_MegaTec_cmd(req[i]);
                 if (ups_megatec_rx_pdu()) {
                     ups_megatec_process_pdu(req[i]);
                 }
 
                 megatec_send = true;
+
+                // printf("~~~~~~~~~~~~~~~ Current UPS.Flag_Present: %u\r\n", (uint8_t)UPS.Flag_Present);
             }
         }
+
+        // printf("UPS.Flag_Present: %u\r\n", (uint8_t)UPS.Flag_Present);
+        // printf("UPS_Setting.type_ups: %u\r\n", sSettings.UPS_Setting.type_ups);
+        kstar_mode();
+
+
         if(UPS.Flag_Present && (sSettings.UPS_Setting.type_ups == ups_kestar 
             || sSettings.UPS_Setting.type_ups == ups_offline)) {
                 kstar_mode();