|
@@ -864,22 +864,53 @@ void UPS_LowBatMonitor(void)
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static uint8_t UPS_LoadRangeAlarm(void)
|
|
|
|
+{
|
|
|
|
+#ifdef LOAD_MONITOR
|
|
|
|
+ uint8_t flag = 0;
|
|
|
|
+ static uint8_t stateCurrent = HYST_IDLE;
|
|
|
|
+ float load = UPS.Load;
|
|
|
|
+
|
|
|
|
+ /* Отслеживается переход через верхнюю границу */
|
|
|
|
+ if (load > sSettings.sAlarmManager.load_range.high)
|
|
|
|
+ {
|
|
|
|
+ if (stateCurrent == HYST_IDLE) {
|
|
|
|
+ stateCurrent = HYST_UP;
|
|
|
|
+ flag = 1;
|
|
|
|
+ }
|
|
|
|
+ } else if (load < (sSettings.sAlarmManager.load_range.high - sSettings.sAlarmManager.load_range.hyst))
|
|
|
|
+ {
|
|
|
|
+ if (stateCurrent == HYST_UP)
|
|
|
|
+ {
|
|
|
|
+ stateCurrent = HYST_IDLE;
|
|
|
|
+ flag = 0;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (stateCurrent == HYST_UP) {
|
|
|
|
+ flag = 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return flag;
|
|
|
|
+#endif
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @brief Мониторинг нагрузки
|
|
* @brief Мониторинг нагрузки
|
|
*/
|
|
*/
|
|
void UPS_PowerMonitor(void)
|
|
void UPS_PowerMonitor(void)
|
|
{
|
|
{
|
|
#ifdef LOAD_MONITOR
|
|
#ifdef LOAD_MONITOR
|
|
- float load;
|
|
|
|
- static uint8_t stateCurrent = HYST_IDLE;
|
|
|
|
-
|
|
|
|
- load = UPS.Load;
|
|
|
|
|
|
+ uint8_t powerStatusCurrent;
|
|
|
|
+ static uint8_t powerStatusOld = 0;
|
|
|
|
|
|
- /* Отслеживается переход через верхнюю границу */
|
|
|
|
- if (load > sSettings.sAlarmManager.load_range.high)
|
|
|
|
|
|
+ powerStatusCurrent = ((UPS.warn_status >> 4) & 0x01);
|
|
|
|
+ powerStatusCurrent |= UPS_LoadRangeAlarm();
|
|
|
|
+
|
|
|
|
+ if (powerStatusCurrent)
|
|
{
|
|
{
|
|
UPS.Alarm = (UPS.Alarm & 0xfffffffe) | (1 << 0);
|
|
UPS.Alarm = (UPS.Alarm & 0xfffffffe) | (1 << 0);
|
|
- if (stateCurrent == HYST_IDLE)
|
|
|
|
|
|
+ if (powerStatusCurrent != powerStatusOld)
|
|
{
|
|
{
|
|
#ifdef LED_RED_MINOR
|
|
#ifdef LED_RED_MINOR
|
|
LED_On(LED_RED_MINOR);
|
|
LED_On(LED_RED_MINOR);
|
|
@@ -887,37 +918,35 @@ void UPS_PowerMonitor(void)
|
|
#ifdef LED_GREEN_MINOR
|
|
#ifdef LED_GREEN_MINOR
|
|
LED_On(LED_GREEN_MINOR);
|
|
LED_On(LED_GREEN_MINOR);
|
|
#endif
|
|
#endif
|
|
- stateCurrent = HYST_UP;
|
|
|
|
|
|
|
|
log_event_data(LOG_ALARM_POWER, "Авария");
|
|
log_event_data(LOG_ALARM_POWER, "Авария");
|
|
// Отправка трапа о завышении
|
|
// Отправка трапа о завышении
|
|
SNMP_SendUserTrap(POWER_ALARM);
|
|
SNMP_SendUserTrap(POWER_ALARM);
|
|
- syslog(SYSLOG_ERROR, "Авария нагрузки (%d%%)", load);
|
|
|
|
|
|
+ syslog(SYSLOG_ERROR, "Авария нагрузки (%d%%)", UPS.Load);
|
|
flUpdateLog = true;
|
|
flUpdateLog = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* Отслеживается нормализация */
|
|
/* Отслеживается нормализация */
|
|
- else if (load < (sSettings.sAlarmManager.load_range.high - sSettings.sAlarmManager.load_range.hyst))
|
|
|
|
- {
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfffffffe);
|
|
|
|
- if (stateCurrent == HYST_UP)
|
|
|
|
- {
|
|
|
|
|
|
+ else {
|
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffe);
|
|
|
|
+ if (powerStatusCurrent != powerStatusOld)
|
|
|
|
+ {
|
|
#ifdef LED_RED_MINOR
|
|
#ifdef LED_RED_MINOR
|
|
- LED_Off(LED_RED_MINOR);
|
|
|
|
|
|
+ LED_Off(LED_RED_MINOR);
|
|
#endif
|
|
#endif
|
|
#ifdef LED_GREEN_MINOR
|
|
#ifdef LED_GREEN_MINOR
|
|
- LED_Off(LED_GREEN_MINOR);
|
|
|
|
-#endif
|
|
|
|
- stateCurrent = HYST_IDLE;
|
|
|
|
-
|
|
|
|
- log_event_data(LOG_ALARM_POWER, "Норма");
|
|
|
|
- // Отправка трапа о нормализации
|
|
|
|
- SNMP_SendUserTrap(POWER_NORM);
|
|
|
|
- syslog(SYSLOG_NOTICE, "Авария нагрузки нормализовалась (%d%%)", load);
|
|
|
|
- flUpdateLog = true;
|
|
|
|
- }
|
|
|
|
|
|
+ LED_Off(LED_GREEN_MINOR);
|
|
|
|
+#endif
|
|
|
|
+ log_event_data(LOG_ALARM_POWER, "Норма");
|
|
|
|
+ // Отправка трапа о нормализации
|
|
|
|
+ SNMP_SendUserTrap(POWER_NORM);
|
|
|
|
+ syslog(SYSLOG_NOTICE, "Авария нагрузки нормализовалась (%d%%)", UPS.Load);
|
|
|
|
+ flUpdateLog = true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ powerStatusOld = powerStatusCurrent;
|
|
|
|
+
|
|
if (UPS.Alarm & 0x00000001) {
|
|
if (UPS.Alarm & 0x00000001) {
|
|
flCriticalAlarm = true;
|
|
flCriticalAlarm = true;
|
|
flLedAlarm = true;
|
|
flLedAlarm = true;
|
|
@@ -994,55 +1023,73 @@ void sensorTemperatureMonitor(void)
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#ifdef TEMP_AKB_MONITOR
|
|
#ifdef TEMP_AKB_MONITOR
|
|
-/**
|
|
|
|
- * @brief Мониторинг температуры по верхней границе
|
|
|
|
- */
|
|
|
|
-void UPS_TemperatureHighRangeMonitor(void)
|
|
|
|
|
|
+
|
|
|
|
+static uint8_t UPS_TempHighRangeAlarm(void)
|
|
{
|
|
{
|
|
|
|
+ uint8_t flag = 0;
|
|
float temperature;
|
|
float temperature;
|
|
static uint8_t stateCurrent = HYST_IDLE;
|
|
static uint8_t stateCurrent = HYST_IDLE;
|
|
|
|
|
|
GetInternalTempInt(&temperature);
|
|
GetInternalTempInt(&temperature);
|
|
|
|
|
|
if(temperature == 85) {
|
|
if(temperature == 85) {
|
|
- UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
|
|
|
|
if (stateCurrent == HYST_UP) {
|
|
if (stateCurrent == HYST_UP) {
|
|
stateCurrent = HYST_IDLE;
|
|
stateCurrent = HYST_IDLE;
|
|
- log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
|
|
|
|
- // Отправка трапа о нормализации
|
|
|
|
- SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
|
|
|
|
- syslog(SYSLOG_NOTICE, "Температура в норме (%0.1f C)", temperature);
|
|
|
|
- flUpdateLog = true;
|
|
|
|
- }
|
|
|
|
- return;
|
|
|
|
- } else {
|
|
|
|
- if (stateCurrent == HYST_IDLE) {
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfffffffd);
|
|
|
|
|
|
+ flag = 0;
|
|
}
|
|
}
|
|
|
|
+ return flag;
|
|
}
|
|
}
|
|
|
|
|
|
/* Отслеживается переход через верхнюю границу */
|
|
/* Отслеживается переход через верхнюю границу */
|
|
if (temperature > sSettings.sAlarmManager.Temprature_range.high)
|
|
if (temperature > sSettings.sAlarmManager.Temprature_range.high)
|
|
{
|
|
{
|
|
- if (stateCurrent == HYST_IDLE)
|
|
|
|
- {
|
|
|
|
- stateCurrent = HYST_UP;
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
|
|
|
|
|
|
+ if (stateCurrent == HYST_IDLE) {
|
|
|
|
+ stateCurrent = HYST_UP;
|
|
|
|
+ flag = 1;
|
|
|
|
+ }
|
|
|
|
+ } else if (temperature < (sSettings.sAlarmManager.Temprature_range.high - sSettings.sAlarmManager.Temprature_range.hyst))
|
|
|
|
+ {
|
|
|
|
+ if (stateCurrent == HYST_UP)
|
|
|
|
+ {
|
|
|
|
+ stateCurrent = HYST_IDLE;
|
|
|
|
+ flag = 0;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if (stateCurrent == HYST_UP) {
|
|
|
|
+ flag = 1;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return flag;
|
|
|
|
+}
|
|
|
|
+/**
|
|
|
|
+ * @brief Мониторинг температуры по верхней границе
|
|
|
|
+ */
|
|
|
|
+void UPS_TemperatureHighRangeMonitor(void)
|
|
|
|
+{
|
|
|
|
+ float temperature;
|
|
|
|
+ uint8_t tempStatusCurrent;
|
|
|
|
+ static uint8_t tempStatusOld = 0;
|
|
|
|
+
|
|
|
|
+ GetInternalTempInt(&temperature);
|
|
|
|
|
|
- log_event_data(LOG_ALARM_HIGH_TEMP, "Авария");
|
|
|
|
- // Отправка трапа о завышении
|
|
|
|
- SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_ALARM);
|
|
|
|
- syslog(SYSLOG_ERROR, "Высокая температура (%0.1f C)", temperature);
|
|
|
|
- flUpdateLog = true;
|
|
|
|
- }
|
|
|
|
|
|
+ tempStatusCurrent = ((UPS.warn_status >> 5) & 0x01);
|
|
|
|
+ tempStatusCurrent |= UPS_TempHighRangeAlarm();
|
|
|
|
+
|
|
|
|
+ if (tempStatusCurrent)
|
|
|
|
+ {
|
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
|
|
|
|
+ if (tempStatusCurrent != tempStatusOld) {
|
|
|
|
+ log_event_data(LOG_ALARM_HIGH_TEMP, "Авария");
|
|
|
|
+ // Отправка трапа о завышении
|
|
|
|
+ SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_ALARM);
|
|
|
|
+ syslog(SYSLOG_ERROR, "Высокая температура (%0.1f C)", temperature);
|
|
|
|
+ flUpdateLog = true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
/* Отслеживается нормализация */
|
|
/* Отслеживается нормализация */
|
|
- else if (temperature < (sSettings.sAlarmManager.Temprature_range.high - sSettings.sAlarmManager.Temprature_range.hyst))
|
|
|
|
- {
|
|
|
|
- if (stateCurrent == HYST_UP)
|
|
|
|
- {
|
|
|
|
- stateCurrent = HYST_IDLE;
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfffffffd);
|
|
|
|
|
|
+ else {
|
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffd);
|
|
|
|
+ if (tempStatusCurrent != tempStatusOld) {
|
|
log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
|
|
log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
|
|
// Отправка трапа о нормализации
|
|
// Отправка трапа о нормализации
|
|
SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
|
|
SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
|
|
@@ -1050,6 +1097,7 @@ void UPS_TemperatureHighRangeMonitor(void)
|
|
flUpdateLog = true;
|
|
flUpdateLog = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ tempStatusOld = tempStatusCurrent;
|
|
if (UPS.Alarm & 0x00000002) {
|
|
if (UPS.Alarm & 0x00000002) {
|
|
flCriticalAlarm = true;
|
|
flCriticalAlarm = true;
|
|
flLedAlarm = true;
|
|
flLedAlarm = true;
|