| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- #include <stdbool>
- /**
- * @brief Мониторинг бита LainFail
- */
- void UPS_LineFailMonitor(void)
- {
- static bool isValueRecv = false;
- static uint8_t lineFailOldState = 0;
- uint8_t lineFailCurrent;
- char log_string[50];
- uint8_t len;
- lineFailCurrent = ((UPS.Status >> 7) & 0x01);
- lineFailCurrent |= UPS_VACinputRangeAlarm();
- // Заходит в условие только 1 раз.
- if (!isValueRecv) {
- isValueRecv = true;
- lineFailOldState = lineFailCurrent;
- if (lineFailCurrent != 0) {
- memset(log_string, 0, sizeof(log_string));
- strcat(log_string, "Авария");
- len = strlen(log_string);
- sprintf(&log_string[len], " (%0.1f В)", UPS.VAC_in);
- log_event_data(LOG_ALARM_LINE, log_string);
- SNMP_SendUserTrap(LINE_ALARM);
- syslog(SYSLOG_ERROR, "Авария сети (%0.1f В)", UPS.VAC_in);
- flUpdateLog = true;
- }
- else {
- log_event_data(LOG_ALARM_LINE, "Норма");
- SNMP_SendUserTrap(LINE_NORM);
- syslog(SYSLOG_NOTICE, "Сеть в норме (%0.1f В)", UPS.VAC_in);
- flUpdateLog = true;
- }
- return;
- }
-
- if (lineFailCurrent != 0) {
- flCriticalAlarm = true;
- flLedAlarm = true;
- }
- // Значение параметра изменилось
- if (lineFailCurrent != lineFailOldState)
- {
- if (lineFailCurrent != 0) {
- memset(log_string, 0, sizeof(log_string));
- strcat(log_string, "Авария");
- len = strlen(log_string);
- sprintf(&log_string[len], " (%0.1f В)", UPS.VAC_in);
- log_event_data(LOG_ALARM_LINE, log_string);
- SNMP_SendUserTrap(LINE_ALARM);
- syslog(SYSLOG_ERROR, "Авария сети (%0.1f В)", UPS.VAC_in);
- flUpdateLog = true;
- }
- else {
- if (UPS.VAC_in == 0) {
- return;
- }
- log_event_data(LOG_ALARM_LINE, "Норма");
- SNMP_SendUserTrap(LINE_NORM);
- syslog(SYSLOG_NOTICE, "Сеть в норме (%0.1f В)", UPS.VAC_in);
- flUpdateLog = true;
- }
- }
- lineFailOldState = lineFailCurrent;
- }
- uint8_t UPS_VACinputRangeAlarm(void)
- {
- uint8_t flag = 0;
- static uint8_t stateCurrentVACinput_low = HYST_IDLE;
- static uint8_t stateCurrentVACinput_high = HYST_IDLE;
- float VACinputCurrent = UPS.VAC_in;
- static uint8_t cnt = 0;
-
- if (test_akb_flag) {
- if (UPS.VAC_in > 255) {
- test_akb_flag = false;
- cnt = 0;
- ups_metac_service_pdu(ups_cancel_test);
- log_event_data(LOG_TEST_UPS, "Ошибка");
- }
- else {
- if (cnt < 20){
- cnt++;
- }
- else {
- if (UPS.Mode == 'L') {
- test_akb_flag = false;
- }
- cnt = 0;
- }
- }
- }
- /* Отслеживается переход через нижнию границу */
- if (VACinputCurrent < sSettings.sAlarmManager.ac_input_range.low)
- {
- if (stateCurrentVACinput_low == HYST_IDLE || stateCurrentVACinput_low == HYST_DOWN) {
- stateCurrentVACinput_low = HYST_DOWN;
- flag |= (1 << 1);
- }
- }
- else if (VACinputCurrent > (sSettings.sAlarmManager.ac_input_range.low + sSettings.sAlarmManager.ac_input_range.hyst))
- {
- if (stateCurrentVACinput_low == HYST_DOWN)
- {
- stateCurrentVACinput_low = HYST_IDLE;
- flag &= 0xfd;
- }
- }
- else {
- if (stateCurrentVACinput_low == HYST_DOWN) {
- flag |= (1 << 1);
- }
- }
- /* Отслеживается переход через верхнюю границу */
- if (VACinputCurrent > sSettings.sAlarmManager.ac_input_range.high)
- {
- if (stateCurrentVACinput_high == HYST_IDLE || stateCurrentVACinput_high == HYST_UP) {
- stateCurrentVACinput_high = HYST_UP;
- flag |= (1 << 2);
- }
- }
- else if (VACinputCurrent < (sSettings.sAlarmManager.ac_input_range.high - sSettings.sAlarmManager.ac_input_range.hyst))
- {
- if (stateCurrentVACinput_high == HYST_UP)
- {
- stateCurrentVACinput_high = HYST_IDLE;
- flag &= 0xfb;
- }
- }
- else {
- if (stateCurrentVACinput_high == HYST_UP) {
- flag |= (1 << 2);
- }
- }
- return flag;
- }
|