Forráskód Böngészése

[BT-6709/11/11-v1]add check load

balbekova 2 éve
szülő
commit
26d109261a

+ 3 - 1
config/board_bt6709.h

@@ -52,7 +52,7 @@ WDG_PIN(X)
 /**
   * @brief  Версия прошивки
   */
-#define VERSION                         "1.15"
+#define VERSION                         "1.15b"
 
 /**
   * brief  Текст сообщения при запуске CLI
@@ -139,6 +139,8 @@ XSETTING( uint8_t, sFlagNotification[ALL_TRAPS], SETTINGS_SetFlagNotificationDef
   XJSON_PARAMS_TAG("in_freq",            GetInputFreqStr) \
   XJSON_PARAMS_TAG("out_freq",           GetOutputFreqStr) \
   XJSON_PARAMS_TAG("pwr",                GetPowerStr) \
+  XJSON_PARAMS_TAG("pwr_akb",            GetLoadAKBModeStr) \
+  XJSON_PARAMS_TAG("data_check_pwr",     GetDataFormatCheckLoadStr) \
   XJSON_PARAMS_TAG("bat_rem_cap",        GetBatCapacityStr) \
   XJSON_PARAMS_TAG("inner_temp",         GetInternalTempStr) \
   XJSON_PARAMS_TAG("bat_time_left",      GetRuntimeStr) \

+ 2 - 0
config/board_bt6711.h

@@ -157,6 +157,8 @@ XSETTING( RADIUS_t, sRADIUS, SETTINGS_SetRADIUSDef, PART_DEFAULT_1 ) \
   XJSON_PARAMS_TAG("in_freq",            GetInputFreqStr) \
   XJSON_PARAMS_TAG("out_freq",           GetOutputFreqStr) \
   XJSON_PARAMS_TAG("pwr",                GetPowerStr) \
+  XJSON_PARAMS_TAG("pwr_akb",            GetLoadAKBModeStr) \
+  XJSON_PARAMS_TAG("data_check_pwr",     GetDataFormatCheckLoadStr) \
   XJSON_PARAMS_TAG("bat_rem_cap",        GetBatCapacityStr) \
   XJSON_PARAMS_TAG("inner_temp",         GetInternalTempStr) \
   XJSON_PARAMS_TAG("bat_time_left",      GetRuntimeStr) \

+ 2 - 0
config/board_bt6711_v1.h

@@ -157,6 +157,8 @@ XSETTING( RADIUS_t, sRADIUS, SETTINGS_SetRADIUSDef, PART_DEFAULT_1 ) \
   XJSON_PARAMS_TAG("in_freq",            GetInputFreqStr) \
   XJSON_PARAMS_TAG("out_freq",           GetOutputFreqStr) \
   XJSON_PARAMS_TAG("pwr",                GetPowerStr) \
+  XJSON_PARAMS_TAG("pwr_akb",            GetLoadAKBModeStr) \
+  XJSON_PARAMS_TAG("data_check_pwr",     GetDataFormatCheckLoadStr) \
   XJSON_PARAMS_TAG("bat_rem_cap",        GetBatCapacityStr) \
   XJSON_PARAMS_TAG("inner_temp",         GetInternalTempStr) \
   XJSON_PARAMS_TAG("bat_time_left",      GetRuntimeStr) \

+ 17 - 1
docs/bt6709/BT6709.MIB

@@ -429,7 +429,23 @@ IMPORTS
     STATUS  current
     DESCRIPTION
     "Data of change AKB" 
-    ::= { signals 49 }    
+    ::= { signals 49 } 
+
+    loadAKBMode OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Value of load in AKB mode" 
+    ::= { signals 50 }
+
+    dataCheckLoad OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Data of checking UPS load in AKB mode" 
+    ::= { signals 51 }     
 
 -- DEVICE TRAPS
 

+ 16 - 0
docs/bt6711/BT6711.MIB

@@ -539,6 +539,22 @@ IMPORTS
     "Controller serial" 
     ::= { signals 62 }
 
+    loadAKBMode OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Value of load in AKB mode" 
+    ::= { signals 63 }
+
+    dataCheckLoad OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Data of checking UPS load in AKB mode" 
+    ::= { signals 64 }    
+
 -- DEVICE TRAPS
 
      fwVersionUpdate  NOTIFICATION-TYPE

+ 16 - 0
docs/bt6711_v1/BT6711_v1.MIB

@@ -538,6 +538,22 @@ IMPORTS
     "Controller serial" 
     ::= { signals 62 }
 
+    loadAKBMode OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Value of load in AKB mode" 
+    ::= { signals 63 }
+
+    dataCheckLoad OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Data of checking UPS load in AKB mode" 
+    ::= { signals 64 }    
+
 -- DEVICE TRAPS
 
      fwVersionUpdate  NOTIFICATION-TYPE

+ 16 - 0
modules/Ethernet/private_mib_bt6709.c

@@ -50,6 +50,14 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value);
 static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value);
 static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value);
 
+/* signal .1.3.6.1.4.1.41752.911.10.1.51  */
+static const struct snmp_scalar_node signal51 = SNMP_SCALAR_CREATE_NODE_READONLY(51, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.10.1.50  */
+static const struct snmp_scalar_node signal50 = SNMP_SCALAR_CREATE_NODE_READONLY(50, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
 /* signal .1.3.6.1.4.1.41752.911.10.1.49  */
 static const struct snmp_scalar_node signal49 = SNMP_SCALAR_CREATE_NODE_READONLY(49, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
@@ -298,6 +306,8 @@ static const struct snmp_node *const signals_nodes[] = {
     &signal47.node.node,
     &signal48.node.node,
     &signal49.node.node,
+    &signal50.node.node,
+    &signal51.node.node,
 };
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
@@ -521,6 +531,12 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
         case 49: /*  DataNextChangeAKB*/
             GetDataNextChangeAKBStr((char *)paramStr, &paramLength);
             break;
+        case 50: /*  LoadAKBMode */
+            GetLoadAKBModeStr((char *)paramStr, &paramLength);
+            break;
+        case 51: /*  DataFormatCheckLoad */
+            GetDataFormatCheckLoadStr((char *)paramStr, &paramLength);
+            break;
         default:
             break;
     }

+ 16 - 0
modules/Ethernet/private_mib_bt6711.c

@@ -49,6 +49,14 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value);
 static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value);
 static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value);
 
+/* signal .1.3.6.1.4.1.41752.911.11.1.64  */
+static const struct snmp_scalar_node signal64 = SNMP_SCALAR_CREATE_NODE_READONLY(64, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.63  */
+static const struct snmp_scalar_node signal63 = SNMP_SCALAR_CREATE_NODE_READONLY(63, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
 /* signal .1.3.6.1.4.1.41752.911.11.1.62  */
 static const struct snmp_scalar_node signal62 = SNMP_SCALAR_CREATE_NODE_READONLY(62, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
@@ -361,6 +369,8 @@ static const struct snmp_node *const signals_nodes[] = {
     &signal60.node.node,
     &signal61.node.node,
     &signal62.node.node,
+    &signal63.node.node,
+    &signal64.node.node,
 };
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
@@ -623,6 +633,12 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
         case 62: /* ControllerModel*/
             GetSerialNumberStr((char *)paramStr, &paramLength);
             break;
+        case 63: /*  LoadAKBMode */
+            GetLoadAKBModeStr((char *)paramStr, &paramLength);
+            break;
+        case 64: /*  DataFormatCheckLoad */
+            GetDataFormatCheckLoadStr((char *)paramStr, &paramLength);
+            break;
         default:
             break;
     }

+ 84 - 33
modules/MegaTec/megatec.c

@@ -15,6 +15,8 @@
 #include "syslog.h"
 #include "settings_api.h"
 #include "parameters.h"
+#include "hal.h"
+#include "rtc.h"
 #ifdef PRINTF_STDLIB
 #include <stdio.h>
 #endif
@@ -28,6 +30,7 @@
 #define DBG if (0)
 
 TimerHandle_t UPSRestoreTimer;
+TimerHandle_t AutoTestTimer;
 
 /**
   * @brief  Общая структура настроек
@@ -103,6 +106,7 @@ const char *MegaTecCMD[] = {
 
 extern bool flUpdateLog;
 static bool flag_WPHVR2K0L = false;
+void AutoTestCallback(void);
 
 void init_UPS_value(void)
 {
@@ -110,7 +114,9 @@ void init_UPS_value(void)
     UPS.VAC_in = 0;
     UPS.VAC_out = 0;
     UPS.Temp = 0;
+    UPS.data_check_load = 0;
     UPS.Load = 0;
+    UPS.Load_test_akb = 0;
     UPS.SOC = 0;
     UPS.work_time = 0;
     UPS.akb_work_time = 0;
@@ -856,7 +862,14 @@ void ups_mode_response(char *data)
         SNMP_SendUserTrap(UPS_MODE);
         syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
         log_event_data(LOG_UPS_MODE, value);
-#endif 
+#endif
+        if(UPS.Mode == 'B' || UPS.Mode == 'T') {
+            UPS.Load_test_akb = UPS.Load;
+            TM_RTC_t data;
+            TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
+            UPS.data_check_load = data.unix;
+            xTimerReset(AutoTestTimer, 0);
+        }
     }
    
 }
@@ -1011,6 +1024,7 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
                 return 0;
             }
         }
+        vTaskDelay(1500);
         memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
         megatec_send = false;
         UPS.Flag_Present = false;
@@ -1022,11 +1036,14 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
         if (command == ups_shutdown) {
             if ((((UPS.Status >> 1) & 0x01) != ((UPS_Status_prev >> 1) & 0x01))
              && ((UPS.Status >> 1) & 0x01)) {
+                xTimerChangePeriod(UPSRestoreTimer, (TimeParamFloat + 0.3)*60*configTICK_RATE_HZ, 0);
+                xTimerStart(UPSRestoreTimer, 0);
                 return 1;
             }
         } else if (command == ups_cancel_shut_down) {
             if ((((UPS.Status >> 1) & 0x01) != ((UPS_Status_prev >> 1) & 0x01))
              && !((UPS.Status >> 1) & 0x01)) {
+                xTimerStop(UPSRestoreTimer, 0);
                 return 1;
             }           
         }  else if (command == ups_cancel_test) {
@@ -1060,10 +1077,13 @@ void kstar_mode(void)
         UPS.Mode = 'B';
     } else if(!((UPS.Status >> 7) & 0x01) && UPS.VAC_out > 190) {
         UPS.Mode = 'L';
+    } else if((UPS.Status >> 2) & 0x01) {
+        UPS.Mode = 'T';
     }
 
-#ifdef UPS_MODE_MONITOR
+
     if (UPS.Mode != mode) {
+#ifdef UPS_MODE_MONITOR
         char value[20];
         uint8_t len = 0;
         memset(value, 0, sizeof(value));
@@ -1071,8 +1091,15 @@ void kstar_mode(void)
         SNMP_SendUserTrap(UPS_MODE);
         syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
         log_event_data(LOG_UPS_MODE, value);
-    }
 #endif
+        if(UPS.Mode == 'B' || UPS.Mode == 'T') {
+            UPS.Load_test_akb = UPS.Load;
+            TM_RTC_t data;
+            TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
+            UPS.data_check_load = data.unix;
+            xTimerReset(AutoTestTimer, 0);
+        }
+    }
 }
 
 // TODO ����������� ���������
@@ -1097,6 +1124,7 @@ void request_task(void *params)
                     UPS.VAC_out = 0;
                     UPS.Temp = 0;
                     UPS.Load = 0;
+                    UPS.Load_test_akb = 0;
                     UPS.SOC = 0;
                     UPS.work_time = 0;
                     UPS.Status = 0;
@@ -1148,47 +1176,52 @@ void request_task(void *params)
                     }
                 }
 #endif
-                if(!flag_init_ups) {
-                    flag_init_ups = true;
-                    if (megatec_send) {
-                        memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
-                        megatec_send = false;
-                        UPS.Flag_Present = false;
-                        send_MegaTec_cmd(ups_bypass_hvolt_264_set);
-                        if (ups_megatec_rx_pdu()) {
-                            ups_megatec_process_pdu(ups_bypass_hvolt_264_set);
-                        }
-                        megatec_send = true;
+                break;
+            default:
+                num_req = sizeof(kestar_req);
+                req = kestar_req;
+                break;
+        }
+        if(!flag_init_ups) {
+            flag_init_ups = true;
+            xTimerStart(AutoTestTimer, 0);
+            AutoTestCallback();
+            if(sSettings.UPS_Setting.type_ups == ups_voltronic) {
+                if (megatec_send) {
+                    memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
+                    megatec_send = false;
+                    UPS.Flag_Present = false;
+                    send_MegaTec_cmd(ups_bypass_hvolt_264_set);
+                    if (ups_megatec_rx_pdu()) {
+                        ups_megatec_process_pdu(ups_bypass_hvolt_264_set);
+                    }
+                    megatec_send = true;
+                }
+                if (megatec_send) {
+                    memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
+                    megatec_send = false;
+                    UPS.Flag_Present = false;
+                    send_MegaTec_cmd(ups_qflag_status);
+                    if (ups_megatec_rx_pdu()) {
+                        ups_megatec_process_pdu(ups_qflag_status);
                     }
+                    megatec_send = true;
+                }
+                if (QFLAG_L) {
                     if (megatec_send) {
                         memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
                         megatec_send = false;
                         UPS.Flag_Present = false;
-                        send_MegaTec_cmd(ups_qflag_status);
+                        send_MegaTec_cmd(ups_cmd_enable_flag_l);
                         if (ups_megatec_rx_pdu()) {
-                            ups_megatec_process_pdu(ups_qflag_status);
+                            ups_megatec_process_pdu(ups_cmd_enable_flag_l);
                         }
                         megatec_send = true;
                     }
-                    if (QFLAG_L) {
-                        if (megatec_send) {
-                            memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
-                            megatec_send = false;
-                            UPS.Flag_Present = false;
-                            send_MegaTec_cmd(ups_cmd_enable_flag_l);
-                            if (ups_megatec_rx_pdu()) {
-                                ups_megatec_process_pdu(ups_cmd_enable_flag_l);
-                            }
-                            megatec_send = true;
-                        }
-                    }
                 }
-                break;
-            default:
-                num_req = sizeof(kestar_req);
-                req = kestar_req;
-                break;
+            }
         }
+        
         vTaskDelay(1000);
         for (uint8_t i = 0; i < num_req; i++) {
             if (megatec_send) {
@@ -1280,6 +1313,23 @@ void UPSReadTestStatus(void)
     }
 }
 
+void AutoTestCallback(void)
+{
+    uint8_t res;
+
+    TimeParam = 1;
+    if((UPS.Status >> 2) & 0x01) {
+        UPS.Load_test_akb = UPS.Load;
+        TM_RTC_t data;
+        TM_RTC_GetDateTime(&data, TM_RTC_Format_BIN);
+        UPS.data_check_load = data.unix;
+    } else {
+        res = ups_metac_service_pdu(ups_test_time);
+        set_act_source(AUTO_ACT);
+    }
+    
+}
+
 void ups_megatec_init(void)
 {
     init_UPS_value();
@@ -1287,4 +1337,5 @@ 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);
+    AutoTestTimer = xTimerCreate("AutoTestTmr", configTICK_RATE_HZ*PERIOD_AUTO_TEST, pdTRUE, ( void * ) 0, AutoTestCallback);
 }

+ 4 - 0
modules/MegaTec/megatec.h

@@ -13,6 +13,8 @@
 #include <stdlib.h>
 
 
+#define PERIOD_AUTO_TEST	12*3600
+
 #define K_EFFICIENCY		0.9
 #define AKB_VOLTAGE			12
 #define AKB_NUM_CELL		6
@@ -70,7 +72,9 @@ typedef struct{
 	float Temp;
 	float Vcell_curr;
 	float Vakb_curr;
+	uint32_t data_check_load;
 	uint8_t Load;
+	uint8_t Load_test_akb;
 	uint8_t SOC;
 	uint16_t work_time;
 	uint32_t akb_work_time;

+ 10 - 0
modules/cli/CLI_Parameters.c

@@ -529,6 +529,16 @@ void ups_sensor_param(int8_t *buf)
     GetPowerStr(str, &len);
     strncat(( char * ) buf, str, len);
 
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS || HARDWARE_BT6711 || HARDWARE_BT6711_V1
+    strcat(( char * ) buf, "\r\nНагрузка (Режим АКБ):\t\t\t");
+    GetLoadAKBModeStr(str, &len);
+    strncat(( char * ) buf, str, len);
+    strcat(( char * ) buf, " (");
+    GetDataFormatCheckLoadStr(str, &len);
+    strncat(( char * ) buf, str, len);
+    strcat(( char * ) buf, ")");
+#endif
+
     strcat(( char * ) buf, "\r\nТекущий режим:\t\t\t\t");
     str[0] = 0;
     GetModeStr(str, &len);

+ 2 - 1
modules/common/hal.h

@@ -13,7 +13,8 @@ typedef enum {
     SNMP_ACT,
     CLI_ACT,
     FTP_ACT,
-    OTHER_ACT
+    OTHER_ACT,
+    AUTO_ACT
 } source_act_t;
 
 void Reboot(source_act_t source_reset);

+ 4 - 1
modules/monitor/ups_monitor.c

@@ -430,6 +430,9 @@ void UPS_TestFinishMonitor(void)
             strcpy(log_string, "Администратор");
             break;
 #endif
+        case AUTO_ACT:
+            strcpy(log_string, "Автоматический");
+            break;
         default:
             break;
       }
@@ -1672,7 +1675,7 @@ void UPS_EPOMonitor(void)
   uint8_t EPOStatusCurrent;
   static uint8_t EPOStatusOld = 0;
 
-  EPOStatusCurrent = ((UPS.warn_status >> 10) & 0x01);
+  EPOStatusCurrent = ((UPS.warn_status >> 8) & 0x01);
 
   if (EPOStatusCurrent != 0){
     flCriticalAlarm = true;

+ 42 - 0
modules/parameters.c

@@ -167,6 +167,48 @@ void GetPowerInt(int32_t *value)
     *value = UPS.Load;
 }
 
+/**
+  * @brief
+  */
+void GetLoadAKBModeStr(char *str, uint8_t *len)
+{
+    sprintf(str, "%d", UPS.Load_test_akb);
+    *len = strlen(str);
+}
+
+/**
+  * @brief
+  */
+void GetLoadAKBModeInt(int32_t *value)
+{
+    *value = UPS.Load_test_akb;
+}
+
+/**
+  * @brief
+  */
+void GetDataCheckLoadStr(char *str, uint8_t *len)
+{
+    sprintf(str, "%d", UPS.data_check_load);
+    *len = strlen(str);
+}
+
+/**
+  * @brief
+  */
+void GetDataFormatCheckLoadStr(char *str, uint8_t *len)
+{
+  TM_RTC_t data;
+  uint16_t sys_year;
+
+  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);
+  *len = strlen(str);
+}
+
 /**
   * @brief
   */

+ 4 - 0
modules/parameters.h

@@ -34,6 +34,10 @@ void GetOutputVoltageStr(char *str, uint8_t *len);
 void GetOutputVoltageInt(float *value);
 void GetPowerStr(char *str, uint8_t *len);
 void GetPowerInt(int32_t *value);
+void GetLoadAKBModeStr(char *str, uint8_t *len);
+void GetLoadAKBModeInt(int32_t *value);
+void GetDataCheckLoadStr(char *str, uint8_t *len);
+void GetDataFormatCheckLoadStr(char *str, uint8_t *len);
 void GetBatCapacityStr(char *str, uint8_t *len);
 void GetBatCapacityInt(int32_t *value);
 void GetRuntimeStr(char *str, uint8_t *len);