|
@@ -77,50 +77,54 @@ void UPS_DI0Monitor(void)
|
|
|
{
|
|
|
#ifdef DIN_MONITOR
|
|
|
static bool isValueRecv = false;
|
|
|
- static uint8_t DI0OldState = 0;
|
|
|
+ static uint8_t DI0OldState[INPUTS_TOTAL_COUNT];
|
|
|
uint8_t DI0StateCurrent;
|
|
|
|
|
|
- DI0StateCurrent = get_state_din_outs(DIN1) ^ sSettings.sDINs[0].din_type_act;
|
|
|
+ for(uint8_t i = 0; i < INPUTS_TOTAL_COUNT; i ++) {
|
|
|
+ DI0StateCurrent = get_state_din_outs((DIN1+i)) ^ sSettings.sDINs[i].din_type_act;
|
|
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xef) | (DI0StateCurrent << 4);
|
|
|
+ UPS.Alarm = (UPS.Alarm & ~(1 << (4 + i))) | (DI0StateCurrent << (4 + i));
|
|
|
|
|
|
- if (!isValueRecv) {
|
|
|
- isValueRecv = true;
|
|
|
- DI0OldState = DI0StateCurrent;
|
|
|
- if (DI0StateCurrent){
|
|
|
- log_event_data(LOG_ALARM_DIO, "Авария");
|
|
|
- SNMP_SendUserTrap(DI0_ALARM);
|
|
|
- flUpdateLog = true;
|
|
|
- }
|
|
|
- else{
|
|
|
- log_event_data(LOG_ALARM_DIO, "Норма");
|
|
|
- SNMP_SendUserTrap(DI0_NORM);
|
|
|
- flUpdateLog = true;
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- /*if (DI0StateCurrent)
|
|
|
- flCriticalAlarm = true;*/
|
|
|
+ if (!isValueRecv) {
|
|
|
+ DI0OldState[i] = DI0StateCurrent;
|
|
|
+ if (DI0StateCurrent){
|
|
|
+ log_event_data((LOG_ALARM_DIO + i), "Авария");
|
|
|
+ SNMP_SendUserTrap(DI0_ALARM + 2*i);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ log_event_data((LOG_ALARM_DIO + i), "Норма");
|
|
|
+ SNMP_SendUserTrap(DI0_NORM + 2*i);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ if (i == (INPUTS_TOTAL_COUNT - 1)) {
|
|
|
+ isValueRecv = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- // Значение параметра изменилось
|
|
|
- if (DI0StateCurrent != DI0OldState)
|
|
|
- {
|
|
|
+ /*if (DI0StateCurrent)
|
|
|
+ flCriticalAlarm = true;*/
|
|
|
|
|
|
- if (!DI0StateCurrent){
|
|
|
- log_event_data(LOG_ALARM_DIO, "Норма");
|
|
|
- SNMP_SendUserTrap(DI0_NORM);
|
|
|
- flUpdateLog = true;
|
|
|
- }
|
|
|
- else{
|
|
|
- log_event_data(LOG_ALARM_DIO, "Авария");
|
|
|
- SNMP_SendUserTrap(DI0_ALARM);
|
|
|
- flUpdateLog = true;
|
|
|
- }
|
|
|
+ // Значение параметра изменилось
|
|
|
+ if (DI0StateCurrent != DI0OldState[i])
|
|
|
+ {
|
|
|
+ if (!DI0StateCurrent){
|
|
|
+ log_event_data((LOG_ALARM_DIO + i), "Норма");
|
|
|
+ SNMP_SendUserTrap((DI0_NORM + 2*i));
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ log_event_data((LOG_ALARM_DIO + i), "Авария");
|
|
|
+ SNMP_SendUserTrap(DI0_ALARM + 2*i);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- DI0OldState = DI0StateCurrent;
|
|
|
+ DI0OldState[i] = DI0StateCurrent;
|
|
|
+ }
|
|
|
#endif
|
|
|
}
|
|
|
#endif
|
|
@@ -491,7 +495,7 @@ void UPS_VACoutputLowRangeMonitor(void)
|
|
|
{
|
|
|
if (stateCurrentVACoutput == HYST_DOWN)
|
|
|
{
|
|
|
- UPS.Alarm &= 0x7f;
|
|
|
+ UPS.Alarm &= 0xffffff7f;
|
|
|
stateCurrentVACoutput = HYST_IDLE;
|
|
|
#if defined HARDWARE_BT6707
|
|
|
relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
|
|
@@ -556,7 +560,7 @@ void UPS_VACoutputHighRangeMonitor(void)
|
|
|
else if (VACoutputCurrent < (sSettings.sAlarmManager.ac_output_range.high - sSettings.sAlarmManager.ac_output_range.hyst))
|
|
|
{
|
|
|
if (stateCurrentVACoutput == HYST_UP) {
|
|
|
- UPS.Alarm &= 0x7f;
|
|
|
+ UPS.Alarm &= 0xffffff7f;
|
|
|
stateCurrentVACoutput = HYST_IDLE;
|
|
|
#if defined HARDWARE_BT6707
|
|
|
relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
|
|
@@ -689,7 +693,7 @@ void UPS_PowerMonitor(void)
|
|
|
if (load > sSettings.sAlarmManager.load_range.high)
|
|
|
{
|
|
|
flCriticalAlarm = true;
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfe) | (1 << 0);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffe) | (1 << 0);
|
|
|
if (stateCurrent == HYST_IDLE)
|
|
|
{
|
|
|
#ifdef LED_RED_MINOR
|
|
@@ -709,7 +713,7 @@ void UPS_PowerMonitor(void)
|
|
|
/* Отслеживается нормализация */
|
|
|
else if (load < (sSettings.sAlarmManager.load_range.high - sSettings.sAlarmManager.load_range.hyst))
|
|
|
{
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfe);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffe);
|
|
|
if (stateCurrent == HYST_UP)
|
|
|
{
|
|
|
#ifdef LED_RED_MINOR
|
|
@@ -744,7 +748,7 @@ void UPS_TemperatureHighRangeMonitor(void)
|
|
|
if (temperature > sSettings.sAlarmManager.Temprature_range.high)
|
|
|
{
|
|
|
flCriticalAlarm = true;
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfd) | (1 << 1);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
|
|
|
if (stateCurrent == HYST_IDLE)
|
|
|
{
|
|
|
stateCurrent = HYST_UP;
|
|
@@ -759,7 +763,7 @@ void UPS_TemperatureHighRangeMonitor(void)
|
|
|
/* Отслеживается нормализация */
|
|
|
else if (temperature < (sSettings.sAlarmManager.Temprature_range.high - sSettings.sAlarmManager.Temprature_range.hyst))
|
|
|
{
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfd);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffd);
|
|
|
if (stateCurrent == HYST_UP)
|
|
|
{
|
|
|
stateCurrent = HYST_IDLE;
|
|
@@ -786,7 +790,7 @@ void UPS_TemperatureLowRangeMonitor(void)
|
|
|
if (temperature < sSettings.sAlarmManager.Temprature_range.low)
|
|
|
{
|
|
|
flCriticalAlarm = true;
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xdf) | (1 << 5);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffd) | (1 << 1);
|
|
|
if (stateCurrent == HYST_IDLE)
|
|
|
{
|
|
|
stateCurrent = HYST_DOWN;
|
|
@@ -801,7 +805,7 @@ void UPS_TemperatureLowRangeMonitor(void)
|
|
|
/* Отслеживается нормализация */
|
|
|
else if (temperature > (sSettings.sAlarmManager.Temprature_range.low + sSettings.sAlarmManager.Temprature_range.hyst))
|
|
|
{
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xdf);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffd);
|
|
|
if (stateCurrent == HYST_DOWN)
|
|
|
{
|
|
|
stateCurrent = HYST_IDLE;
|
|
@@ -815,6 +819,92 @@ void UPS_TemperatureLowRangeMonitor(void)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#ifdef TEMP_CABINET_MONITOR
|
|
|
+/**
|
|
|
+ * @brief Мониторинг температуры шкафа по верхней границе
|
|
|
+ */
|
|
|
+void Cabinet_TemperatureHighRangeMonitor(void)
|
|
|
+{
|
|
|
+ float temperature;
|
|
|
+ static uint8_t stateCurrent = HYST_IDLE;
|
|
|
+
|
|
|
+ temperature = UPS.Temp;
|
|
|
+
|
|
|
+ /* Отслеживается переход через верхнюю границу */
|
|
|
+ if (temperature > sSettings.sAlarmManager.Temprature_cabinet_range.high)
|
|
|
+ {
|
|
|
+ flCriticalAlarm = true;
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffdffff) | (1 << 8);
|
|
|
+ if (stateCurrent == HYST_IDLE)
|
|
|
+ {
|
|
|
+ stateCurrent = HYST_UP;
|
|
|
+
|
|
|
+
|
|
|
+ log_event_data(LOG_ALARM_HIGH_CABINET_TEMP, "Авария");
|
|
|
+ // Отправка трапа о завышении
|
|
|
+ SNMP_SendUserTrap(CABINET_HIGH_TEMPERATURE_ALARM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* Отслеживается нормализация */
|
|
|
+ else if (temperature < (sSettings.sAlarmManager.Temprature_cabinet_range.high - sSettings.sAlarmManager.Temprature_cabinet_range.hyst))
|
|
|
+ {
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffdffff);
|
|
|
+ if (stateCurrent == HYST_UP)
|
|
|
+ {
|
|
|
+ stateCurrent = HYST_IDLE;
|
|
|
+
|
|
|
+ log_event_data(LOG_ALARM_HIGH_CABINET_TEMP, "Норма");
|
|
|
+ // Отправка трапа о нормализации
|
|
|
+ SNMP_SendUserTrap(CABINET_HIGH_TEMPERATURE_NORM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief Мониторинг температуры шкафа по нижней границе
|
|
|
+ */
|
|
|
+void Cabinet_TemperatureLowRangeMonitor(void)
|
|
|
+{
|
|
|
+ float temperature;
|
|
|
+ static uint8_t stateCurrent = HYST_IDLE;
|
|
|
+
|
|
|
+ temperature = UPS.Temp;
|
|
|
+
|
|
|
+ /* Отслеживается переход через нипжнюю границу */
|
|
|
+ if (temperature < sSettings.sAlarmManager.Temprature_cabinet_range.low)
|
|
|
+ {
|
|
|
+ flCriticalAlarm = true;
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffdffff) | (1 << 8);
|
|
|
+ if (stateCurrent == HYST_IDLE)
|
|
|
+ {
|
|
|
+ stateCurrent = HYST_DOWN;
|
|
|
+
|
|
|
+
|
|
|
+ log_event_data(LOG_ALARM_LOW_CABINET_TEMP, "Авария");
|
|
|
+ // Отправка трапа о занижении
|
|
|
+ SNMP_SendUserTrap(CABINET_LOW_TEMPERATURE_ALARM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /* Отслеживается нормализация */
|
|
|
+ else if (temperature > (sSettings.sAlarmManager.Temprature_cabinet_range.low + sSettings.sAlarmManager.Temprature_cabinet_range.hyst))
|
|
|
+ {
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffdffff);
|
|
|
+ if (stateCurrent == HYST_DOWN)
|
|
|
+ {
|
|
|
+ stateCurrent = HYST_IDLE;
|
|
|
+
|
|
|
+ log_event_data(LOG_ALARM_LOW_CABINET_TEMP, "Норма");
|
|
|
+ // Отправка трапа о нормализации
|
|
|
+ SNMP_SendUserTrap(CABINET_LOW_TEMPERATURE_NORM);
|
|
|
+ flUpdateLog = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
/**
|
|
|
* @brief Мониторинг параметра upsParams.connect
|
|
|
*/
|
|
@@ -827,7 +917,7 @@ void UPS_ConnectMonitor(void)
|
|
|
|
|
|
connectCurrent = UPS.Present;
|
|
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xfb) | ((connectCurrent^1) << 2);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffffb) | ((connectCurrent^1) << 2);
|
|
|
|
|
|
if (!isValueRecv) {
|
|
|
isValueRecv = true;
|
|
@@ -891,7 +981,7 @@ void UPS_BatteryConnectMonitor(void)
|
|
|
AKBconnectCurrent = 0;
|
|
|
}
|
|
|
|
|
|
- UPS.Alarm = (UPS.Alarm & 0xf7) | (AKBconnectCurrent << 3);
|
|
|
+ UPS.Alarm = (UPS.Alarm & 0xfffffff7) | (AKBconnectCurrent << 3);
|
|
|
|
|
|
if (!isValueRecv) {
|
|
|
isValueRecv = true;
|
|
@@ -986,7 +1076,7 @@ void AKB_Change_Monitor(void)
|
|
|
flCriticalAlarm = true;
|
|
|
}
|
|
|
else {
|
|
|
- UPS.Alarm &= 0xbf;
|
|
|
+ UPS.Alarm &= 0xffffffbf;
|
|
|
curr_status_change_akb = 0;
|
|
|
}
|
|
|
|