|
@@ -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);
|
|
|
}
|