Browse Source

[megatec] improve answer Test cmd
[BT-6703_RT]add UPS mode parameter

balbekova 4 years ago
parent
commit
5be57ea732
5 changed files with 130 additions and 1 deletions
  1. 1 0
      config/board_bt6703_rt.h
  2. 86 1
      modules/MegaTec/megatec.c
  3. 2 0
      modules/MegaTec/megatec.h
  4. 39 0
      modules/parameters.c
  5. 2 0
      modules/parameters.h

+ 1 - 0
config/board_bt6703_rt.h

@@ -147,6 +147,7 @@ XSETTING( char, our_srv_crt[1705], SETTINGS_SetSSLcrtDef, PART_DEFAULT_1 ) \
   XJSON_PARAMS_TAG("di1",                GetDIN0StatusStr) \
   XJSON_PARAMS_TAG("ro1",                GetDOUT0StatusStr) \
   XJSON_PARAMS_TAG("ro2",                GetDOUT1StatusStr) \
+  XJSON_PARAMS_TAG("mode",               GetModeStr) \
   XJSON_PARAMS_TAG("m_alarm",            GetAlarmMonitorStr) \
   XJSON_PARAMS_TAG("u_alarm",            GetAlarmStr) \
   XJSON_PARAMS_TAG("netsettings_changed",GetWebReinitFlag) \

+ 86 - 1
modules/MegaTec/megatec.c

@@ -78,6 +78,7 @@ const char *MegaTecCMD[] = {
     "QS\r",
     "M\r",
     "PDA\r",
+    "QMOD\r",
 };
 
 extern bool flUpdateLog;
@@ -95,6 +96,7 @@ void init_UPS_value(void)
     UPS.work_time = 0;
     UPS.akb_work_time = 0;
     UPS.Status = 0;
+    UPS.Mode = 0;
     UPS.Alarm = 0;
     UPS.cnt_err_ups = 0;
     UPS.Flag_Present = false;
@@ -704,6 +706,25 @@ void ups_buzzer_cntrl_response(char *data)
 
 }
 
+void ups_mode_response(char *data)
+{
+    char value[20];
+    uint8_t len = 0;
+    DBG printf("ups_serialresponse: %s\r\n", data);
+    if (data[0] != '(') {
+        return;
+    }
+    DBG printf("ups_serial_parser_start\r\n");
+    UPS.Present = true;
+    UPS.Flag_Present = true;
+    UPS.cnt_err_ups = 0;
+
+    data++;
+
+    DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
+    UPS.Mode = data[0]; 
+}
+
 void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
 {
     switch (command) {
@@ -743,6 +764,9 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
         case ups_buzzer_cntrl:
             ups_buzzer_cntrl_response(ups_pdu.data);
             break;
+        case ups_mode_req:
+            ups_mode_response(ups_pdu.data);
+            break;
         default:
             break;
     }
@@ -750,10 +774,12 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
 
 int ups_metac_service_pdu(cmdMegaTecEnums_t command)
 {
+    uint8_t UPS_Status_prev;
     if (UPS.Present) {
         while (!megatec_send) {
             vTaskDelay(50);
         }
+        UPS_Status_prev = UPS.Status;
         memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
         megatec_send = false;
         if (sSettings.UPS_Setting.type_ups == ups_offline && command == ups_shutdown) {
@@ -771,17 +797,71 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
                 return 0;
             }
         }
+        memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
+        megatec_send = false;
+        UPS.Flag_Present = false;
+        send_MegaTec_cmd(ups_status_req);
+        if (ups_megatec_rx_pdu()) {
+            ups_megatec_process_pdu(ups_status_req);
+        }
+        megatec_send = true;
+        if (command == ups_shutdown) {
+            if ((((UPS.Status >> 1) & 0x01) != ((UPS_Status_prev >> 1) & 0x01))
+             && ((UPS.Status >> 1) & 0x01)) {
+                return 1;
+            }
+        } else if (command == ups_cancel_shut_down) {
+            if ((((UPS.Status >> 1) & 0x01) != ((UPS_Status_prev >> 1) & 0x01))
+             && !((UPS.Status >> 1) & 0x01)) {
+                return 1;
+            }           
+        }  else if (command == ups_cancel_test) {
+            if ((((UPS.Status >> 2) & 0x01) != ((UPS_Status_prev >> 2) & 0x01))
+             && !((UPS.Status >> 2) & 0x01)) {
+                return 1;
+            }           
+        } else {
+            if  ((((UPS.Status >> 2) & 0x01) != ((UPS_Status_prev >> 2) & 0x01))
+             && ((UPS.Status >> 2) & 0x01)) {
+                return 1;
+            }
+        }
+
         megatec_send = true;
     }
     return -1;
 }
 
+void kstar_mode(void)
+{
+    if((UPS.Status >> 4) & 0x01) {
+        UPS.Mode = 'F';
+        return;
+    } 
+    if(!((UPS.Status >> 4) & 0x01) && UPS.VAC_out == 0) {
+        UPS.Mode = 'D';
+        return;
+    }
+    if(((UPS.Status >> 5) & 0x01) && UPS.VAC_out > 120 && UPS.VAC_in != 0) {
+        UPS.Mode = 'Y';
+        return;
+    }
+    if(((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
+        UPS.Mode = 'B';
+        return;
+    }
+     if(!((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
+        UPS.Mode = 'L';
+        return;
+    }
+}
+
 // TODO ����������� ���������
 //void request_task(void)
 void request_task(void *params)
 {
     uint8_t kestar_req[3] = { ups_status_req, ups_remain_time_reg, ups_info};
-    uint8_t voltronic_req[6] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_version2_req, ups_serial_req};//
+    uint8_t voltronic_req[6] = {ups_status_req, ups_akb_info, ups_model_req, ups_version_req, ups_version2_req, ups_serial_req, ups_mode_req};//
     uint8_t num_req = 0;
     uint8_t *req;
 
@@ -800,6 +880,7 @@ void request_task(void *params)
                     UPS.SOC = 0;
                     UPS.work_time = 0;
                     UPS.Status = 0;
+                    UPS.Mode = 0;
                     UPS.Alarm = 0;
                     UPS.Present = false;
 
@@ -864,6 +945,10 @@ void request_task(void *params)
                 megatec_send = true;
             }
         }
+        if(sSettings.UPS_Setting.type_ups == ups_kestar 
+            || sSettings.UPS_Setting.type_ups == ups_offline) {
+                kstar_mode();
+        }
     }
 }
 

+ 2 - 0
modules/MegaTec/megatec.h

@@ -48,6 +48,7 @@ typedef enum{
 	ups_offline_status_req,
 	ups_passw_req,
 	ups_buzzer_cntrl,
+	ups_mode_req,
 
 	MegaTec_cmd_max
 } cmdMegaTecEnums_t;
@@ -65,6 +66,7 @@ typedef struct{
 	uint32_t akb_work_time;
 	uint32_t Alarm;
 	uint8_t Status;
+	uint8_t Mode;
 	char model[16];
 	char vertion[22];
 	char serial[15];

+ 39 - 0
modules/parameters.c

@@ -371,6 +371,45 @@ void GetVoltageAKBInt(float *value)
     }
 }
 
+void GetModeStr(char *str, uint8_t *len)
+{
+  switch(UPS.Mode){
+    case 'P':
+      strcpy(str, "Power on");
+    break;
+    case 'S':
+      strcpy(str, "Stanby");
+    break;
+    case 'Y':
+      strcpy(str, "Bypass");
+    break;
+    case 'L':
+      strcpy(str, "OnLine");
+    break;
+    case 'B':
+      strcpy(str, "Battery");
+    break;
+    case 'T':
+      strcpy(str, "Battery test");
+    break;
+    case 'F':
+      strcpy(str, "Fault");
+    break;
+    case 'E':
+      strcpy(str, "ECO");
+    break;
+    case 'C':
+      strcpy(str, "Converter");
+    break;
+    case 'D':
+      strcpy(str, "Shutdown");
+    break;
+    default:
+    break;
+  }
+  *len = strlen(str);
+}
+
 // ************************************************************************** //
 //                             Alarms
 

+ 2 - 0
modules/parameters.h

@@ -48,6 +48,8 @@ void GetInternalTempInt(float *value);
 void GetAlarmMonitorStr(char *str, uint8_t *len);
 void GetConnectMonitorStr(char *str, uint8_t *len);
 
+void GetModeStr(char *str, uint8_t *len);
+
 /**
   * @brief
   */