|
@@ -26,15 +26,6 @@
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
-#define UPS_LOAD 70.0 // Нагрука (граница)
|
|
|
-#define UPS_LOAD_HIST 1.0 // Гистерезис нагрузки
|
|
|
-
|
|
|
-#define UPS_TEMPERATURE 40.0 // Температура (граница)
|
|
|
-#define UPS_TEMPERATURE_HIST 1.0 // Гистерезис температуры
|
|
|
-
|
|
|
-#define UPS_VAC_OUTPUT 150.0 // Выходного напряжения (граница)
|
|
|
-#define UPS_VAC_OUTPUT_HIST 20.0 // Гистерезис Выходного напряжения
|
|
|
-
|
|
|
|
|
|
bool flCriticalAlarm = false;
|
|
|
bool flNonCriticalAlarm = false;
|
|
@@ -62,11 +53,13 @@ void UPS_Monitor(void *params)
|
|
|
UPS_TestFinishMonitor();
|
|
|
UPS_LineFailMonitor();
|
|
|
#if defined HARDWARE_BT6706 || HARDWARE_BT6708
|
|
|
- UPS_VACoutputMonitor();
|
|
|
+ UPS_VACoutputLowRangeMonitor();
|
|
|
+ UPS_VACoutputHighRangeMonitor();
|
|
|
#endif
|
|
|
UPS_LowBatMonitor();
|
|
|
UPS_PowerMonitor();
|
|
|
- UPS_TemperatureMonitor();
|
|
|
+ UPS_TemperatureHighRangeMonitor();
|
|
|
+ UPS_TemperatureLowRangeMonitor();
|
|
|
UPS_BatteryConnectMonitor();
|
|
|
}
|
|
|
UPS_ConnectMonitor();
|
|
@@ -430,9 +423,9 @@ void UPS_LineFailMonitor(void)
|
|
|
|
|
|
#if defined HARDWARE_BT6706 || HARDWARE_BT6708
|
|
|
/**
|
|
|
- * @brief Мониторинг аварии выходного напряжения
|
|
|
+ * @brief Мониторинг аварии выходного напряжения по нижней границе
|
|
|
*/
|
|
|
-void UPS_VACoutputMonitor(void)
|
|
|
+void UPS_VACoutputLowRangeMonitor(void)
|
|
|
{
|
|
|
|
|
|
static uint8_t stateCurrentVACoutput = HYST_IDLE;
|
|
@@ -453,7 +446,76 @@ void UPS_VACoutputMonitor(void)
|
|
|
VACoutputCurrent = UPS.VAC_out;
|
|
|
|
|
|
/* Отслеживается переход через нижнию границу */
|
|
|
- if (VACoutputCurrent < UPS_VAC_OUTPUT)
|
|
|
+ if (VACoutputCurrent < sSettings.sAlarmManager.ac_output_range.low)
|
|
|
+ {
|
|
|
+ if (stateCurrentVACoutput == HYST_IDLE)
|
|
|
+ {
|
|
|
+ LED_On(LED_MINOR_R);
|
|
|
+ LED_On(LED_MINOR_G);
|
|
|
+ stateCurrentVACoutput = HYST_DOWN;
|
|
|
+#if defined HARDWARE_BT6706
|
|
|
+ relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 1);
|
|
|
+#endif
|
|
|
+ log_event_data(LOG_ALARM_VAC_LOW_OUTPUT, "Авария");
|
|
|
+ // Отправка трапа о завышении
|
|
|
+ // SNMP_SendUserTrap(POWER_ALARM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+#if defined HARDWARE_BT6706
|
|
|
+ relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT);
|
|
|
+#endif
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* Отслеживается нормализация */
|
|
|
+ else if (VACoutputCurrent > (sSettings.sAlarmManager.ac_output_range.low + sSettings.sAlarmManager.ac_output_range.hyst))
|
|
|
+ {
|
|
|
+ if (stateCurrentVACoutput == HYST_DOWN)
|
|
|
+ {
|
|
|
+ LED_Off(LED_MINOR_R);
|
|
|
+ LED_Off(LED_MINOR_G);
|
|
|
+ stateCurrentVACoutput = HYST_IDLE;
|
|
|
+#if defined HARDWARE_BT6706
|
|
|
+ relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
|
|
|
+#endif
|
|
|
+ log_event_data(LOG_ALARM_VAC_LOW_OUTPUT, "Норма");
|
|
|
+ // Отправка трапа о нормализации
|
|
|
+ // SNMP_SendUserTrap(POWER_NORM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+#if defined HARDWARE_BT6706
|
|
|
+ for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
|
|
|
+ OldROtype_Sourse[i] = CurrROtype_Sourse[i];
|
|
|
+ }
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Мониторинг аварии выходного напряжения по верхней границе
|
|
|
+ */
|
|
|
+void UPS_VACoutputHighRangeMonitor(void)
|
|
|
+{
|
|
|
+
|
|
|
+ static uint8_t stateCurrentVACoutput = HYST_IDLE;
|
|
|
+ uint8_t VACoutputCurrent;
|
|
|
+#if defined HARDWARE_BT6706
|
|
|
+ uint8_t i = 0;
|
|
|
+ static bool isValueRecv = false;
|
|
|
+ static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
|
|
|
+ uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
|
|
|
+
|
|
|
+ for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
|
|
|
+ CurrROtype_Sourse[i] = sSettings.sInOuts.ro_type_source[i];
|
|
|
+ if(!isValueRecv)
|
|
|
+ OldROtype_Sourse[i] = CurrROtype_Sourse[i];
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
+ VACoutputCurrent = UPS.VAC_out;
|
|
|
+
|
|
|
+ /* Отслеживается переход через верхнюю границу */
|
|
|
+ if (VACoutputCurrent > sSettings.sAlarmManager.ac_output_range.high)
|
|
|
{
|
|
|
if (stateCurrentVACoutput == HYST_IDLE)
|
|
|
{
|
|
@@ -463,7 +525,7 @@ void UPS_VACoutputMonitor(void)
|
|
|
#if defined HARDWARE_BT6706
|
|
|
relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 1);
|
|
|
#endif
|
|
|
- log_event_data(LOG_ALARM_VAC_OUTPUT, "Авария");
|
|
|
+ log_event_data(LOG_ALARM_VAC_HIGH_OUTPUT, "Авария");
|
|
|
// Отправка трапа о завышении
|
|
|
// SNMP_SendUserTrap(POWER_ALARM);
|
|
|
flUpdateLog = true;
|
|
@@ -475,7 +537,7 @@ void UPS_VACoutputMonitor(void)
|
|
|
}
|
|
|
}
|
|
|
/* Отслеживается нормализация */
|
|
|
- else if (VACoutputCurrent > (UPS_VAC_OUTPUT + UPS_VAC_OUTPUT_HIST))
|
|
|
+ else if (VACoutputCurrent < (sSettings.sAlarmManager.ac_output_range.high - sSettings.sAlarmManager.ac_output_range.hyst))
|
|
|
{
|
|
|
if (stateCurrentVACoutput == HYST_UP)
|
|
|
{
|
|
@@ -485,7 +547,7 @@ void UPS_VACoutputMonitor(void)
|
|
|
#if defined HARDWARE_BT6706
|
|
|
relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
|
|
|
#endif
|
|
|
- log_event_data(LOG_ALARM_VAC_OUTPUT, "Норма");
|
|
|
+ log_event_data(LOG_ALARM_VAC_HIGH_OUTPUT, "Норма");
|
|
|
// Отправка трапа о нормализации
|
|
|
// SNMP_SendUserTrap(POWER_NORM);
|
|
|
flUpdateLog = true;
|
|
@@ -607,7 +669,7 @@ void UPS_PowerMonitor(void)
|
|
|
load = UPS.Load;
|
|
|
|
|
|
/* Отслеживается переход через верхнюю границу */
|
|
|
- if (load > UPS_LOAD)
|
|
|
+ if (load > sSettings.sAlarmManager.load_range.high)
|
|
|
{
|
|
|
flCriticalAlarm = true;
|
|
|
UPS.Alarm = (UPS.Alarm & 0x0e) | (1 << 0);
|
|
@@ -624,7 +686,7 @@ void UPS_PowerMonitor(void)
|
|
|
}
|
|
|
}
|
|
|
/* Отслеживается нормализация */
|
|
|
- else if (load < (UPS_LOAD - UPS_LOAD_HIST))
|
|
|
+ else if (load < (sSettings.sAlarmManager.load_range.high - sSettings.sAlarmManager.load_range.hyst))
|
|
|
{
|
|
|
UPS.Alarm = (UPS.Alarm & 0x0e);
|
|
|
if (stateCurrent == HYST_UP)
|
|
@@ -642,9 +704,9 @@ void UPS_PowerMonitor(void)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @brief Мониторинг температуры
|
|
|
+ * @brief Мониторинг температуры по верхней границе
|
|
|
*/
|
|
|
-void UPS_TemperatureMonitor(void)
|
|
|
+void UPS_TemperatureHighRangeMonitor(void)
|
|
|
{
|
|
|
float temperature;
|
|
|
static uint8_t stateCurrent = HYST_IDLE;
|
|
@@ -652,7 +714,7 @@ void UPS_TemperatureMonitor(void)
|
|
|
temperature = UPS.Temp;
|
|
|
|
|
|
/* Отслеживается переход через верхнюю границу */
|
|
|
- if (temperature > UPS_TEMPERATURE)
|
|
|
+ if (temperature > sSettings.sAlarmManager.Temprature_range.high)
|
|
|
{
|
|
|
flCriticalAlarm = true;
|
|
|
UPS.Alarm = (UPS.Alarm & 0x0d) | (1 << 1);
|
|
@@ -661,23 +723,65 @@ void UPS_TemperatureMonitor(void)
|
|
|
stateCurrent = HYST_UP;
|
|
|
|
|
|
|
|
|
- log_event_data(LOG_ALARM_TEMP, "Авария");
|
|
|
+ log_event_data(LOG_ALARM_HIGH_TEMP, "Авария");
|
|
|
// Отправка трапа о завышении
|
|
|
- SNMP_SendUserTrap(BATTERY_TEMPERATURE_ALARM);
|
|
|
+ SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_ALARM);
|
|
|
flUpdateLog = true;
|
|
|
}
|
|
|
}
|
|
|
/* Отслеживается нормализация */
|
|
|
- else if (temperature < (UPS_TEMPERATURE - UPS_TEMPERATURE_HIST))
|
|
|
+ else if (temperature < (sSettings.sAlarmManager.Temprature_range.high - sSettings.sAlarmManager.Temprature_range.hyst))
|
|
|
{
|
|
|
UPS.Alarm = (UPS.Alarm & 0x0d);
|
|
|
if (stateCurrent == HYST_UP)
|
|
|
{
|
|
|
stateCurrent = HYST_IDLE;
|
|
|
|
|
|
- log_event_data(LOG_ALARM_TEMP, "Норма");
|
|
|
+ log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
|
|
|
// Отправка трапа о нормализации
|
|
|
- SNMP_SendUserTrap(BATTERY_TEMPERATURE_NORM);
|
|
|
+ SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Мониторинг температуры по нижней границе
|
|
|
+ */
|
|
|
+void UPS_TemperatureLowRangeMonitor(void)
|
|
|
+{
|
|
|
+ float temperature;
|
|
|
+ static uint8_t stateCurrent = HYST_IDLE;
|
|
|
+
|
|
|
+ temperature = UPS.Temp;
|
|
|
+
|
|
|
+ /* Отслеживается переход через нипжнюю границу */
|
|
|
+ if (temperature < sSettings.sAlarmManager.Temprature_range.low)
|
|
|
+ {
|
|
|
+ flCriticalAlarm = true;
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0x0d) | (1 << 1);
|
|
|
+ if (stateCurrent == HYST_IDLE)
|
|
|
+ {
|
|
|
+ stateCurrent = HYST_DOWN;
|
|
|
+
|
|
|
+
|
|
|
+ log_event_data(LOG_ALARM_LOW_TEMP, "Авария");
|
|
|
+ // Отправка трапа о занижении
|
|
|
+ SNMP_SendUserTrap(BATTERY_LOW_TEMPERATURE_ALARM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* Отслеживается нормализация */
|
|
|
+ else if (temperature > (sSettings.sAlarmManager.Temprature_range.low + sSettings.sAlarmManager.Temprature_range.hyst))
|
|
|
+ {
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0x0d);
|
|
|
+ if (stateCurrent == HYST_DOWN)
|
|
|
+ {
|
|
|
+ stateCurrent = HYST_IDLE;
|
|
|
+
|
|
|
+ log_event_data(LOG_ALARM_LOW_TEMP, "Норма");
|
|
|
+ // Отправка трапа о нормализации
|
|
|
+ SNMP_SendUserTrap(BATTERY_LOW_TEMPERATURE_NORM);
|
|
|
flUpdateLog = true;
|
|
|
}
|
|
|
}
|