Kaynağa Gözat

[BT-6710]correct ups monitor

balbekova 5 yıl önce
ebeveyn
işleme
9220e8379e

+ 23 - 15
config/board_bt6710.h

@@ -152,7 +152,7 @@ XSETTING( TEMP_COTROL_t, sTempControl[MAX_T_SENSORS], SETTINGS_SetTempControlDef
   XJSON_PARAMS_TAG("bat_rem_cap",        GetBatCapacityStr) \
   XJSON_PARAMS_TAG("inner_temp",         GetInternalTempStr) \
   XJSON_PARAMS_TAG("bat_time_left",      GetRuntimeStr) \
-  XJSON_PARAMS_TAG("case_temp",          GetInternalTempStr) \
+  XJSON_PARAMS_TAG("case_temp",          GetTempCaseStr) \
   XJSON_PARAMS_TAG("di1",                GetDIN0StatusStr) \
   XJSON_PARAMS_TAG("di_name1",           GetDIN0NameStr) \
   XJSON_PARAMS_TAG("di2",                GetDIN1StatusStr) \
@@ -171,12 +171,16 @@ XSETTING( TEMP_COTROL_t, sTempControl[MAX_T_SENSORS], SETTINGS_SetTempControlDef
   XTRAP(DI1_ALARM,                         6,      true,      GetDIN1StatusStr) \
   XTRAP(BATTERY_HIGH_TEMPERATURE_NORM,     10,     true,      GetInternalTempStr) \
   XTRAP(BATTERY_HIGH_TEMPERATURE_ALARM,    10,     true,      GetInternalTempStr) \
+  XTRAP(BATTERY_LOW_TEMPERATURE_NORM,      10,     true,      GetInternalTempStr) \
+  XTRAP(BATTERY_LOW_TEMPERATURE_ALARM,     10,     true,      GetInternalTempStr) \
   XTRAP(LINE_ALARM,                        12,     true,      GetInputVoltageStr) \
   XTRAP(LINE_NORM,                         12,     true,      GetInputVoltageStr) \
   XTRAP(LOW_BAT_ALARM,                     15,     true,      GetBatCapacityStr) \
   XTRAP(LOW_BAT_NORM,                      15,     true,      GetBatCapacityStr) \
-  XTRAP(CABINET_HIGH_TEMPERATURE_NORM,     9,      true,      GetInternalTempStr) \
-  XTRAP(CABINET_HIGH_TEMPERATURE_ALARM,    9,      true,      GetInternalTempStr) \
+  XTRAP(CABINET_HIGH_TEMPERATURE_NORM,     9,      true,      GetTempCaseStr) \
+  XTRAP(CABINET_HIGH_TEMPERATURE_ALARM,    9,      true,      GetTempCaseStr) \
+  XTRAP(CABINET_LOW_TEMPERATURE_NORM,      9,      true,      GetTempCaseStr) \
+  XTRAP(CABINET_LOW_TEMPERATURE_ALARM,     9,      true,      GetTempCaseStr) \
   XTRAP(CONNECT_MONITOR_ALARM,             17,     true,      GetConnectMonitorStr) \
   XTRAP(CONNECT_MONITOR_NORM,              17,     true,      GetConnectMonitorStr) \
   XTRAP(BATTERY_CONNECT_ALARM,             15,     true,      GetBatCapacityStr) \
@@ -194,18 +198,20 @@ typedef enum
   DI1_ALARM,
   BATTERY_HIGH_TEMPERATURE_NORM,
   BATTERY_HIGH_TEMPERATURE_ALARM,
+  BATTERY_LOW_TEMPERATURE_NORM,
+  BATTERY_LOW_TEMPERATURE_ALARM,
   LINE_ALARM,
   LINE_NORM,
   LOW_BAT_ALARM,
   LOW_BAT_NORM,
   CABINET_HIGH_TEMPERATURE_NORM,
   CABINET_HIGH_TEMPERATURE_ALARM,
+  CABINET_LOW_TEMPERATURE_NORM,
+  CABINET_LOW_TEMPERATURE_ALARM,
   CONNECT_MONITOR_ALARM,
   CONNECT_MONITOR_NORM,
   BATTERY_CONNECT_ALARM,
   BATTERY_CONNECT_NORM,
-  BATTERY_LOW_TEMPERATURE_NORM,
-  BATTERY_LOW_TEMPERATURE_ALARM,
   ALL_TRAPS
 } TRAP_LIST_t;
 
@@ -247,16 +253,18 @@ typedef enum {
 #define DIN_MONITOR
 
 #define MONITOR_TABLE \
-  XMONITOR(UPS_TestFinishMonitor,           UPS.Present) \
-  XMONITOR(UPS_LineFailMonitor,             UPS.Present) \
-  XMONITOR(UPS_VACoutputLowRangeMonitor,    UPS.Present) \
-  XMONITOR(UPS_VACoutputHighRangeMonitor,   UPS.Present) \
-  XMONITOR(UPS_LowBatMonitor,               UPS.Present) \
-  XMONITOR(UPS_TemperatureHighRangeMonitor, UPS.Present) \
-  XMONITOR(UPS_TemperatureLowRangeMonitor,  UPS.Present) \
-  XMONITOR(UPS_BatteryConnectMonitor,       UPS.Present) \
-  XMONITOR(UPS_ConnectMonitor,              1) \
-  XMONITOR(UPS_DI0Monitor,                  1) \
+  XMONITOR(UPS_TestFinishMonitor,               UPS.Present) \
+  XMONITOR(UPS_LineFailMonitor,                 UPS.Present) \
+  XMONITOR(UPS_VACoutputLowRangeMonitor,        UPS.Present) \
+  XMONITOR(UPS_VACoutputHighRangeMonitor,       UPS.Present) \
+  XMONITOR(UPS_LowBatMonitor,                   UPS.Present) \
+  XMONITOR(UPS_TemperatureHighRangeMonitor,     UPS.Present) \
+  XMONITOR(UPS_TemperatureLowRangeMonitor,      UPS.Present) \
+  XMONITOR(Cabinet_TemperatureHighRangeMonitor, UPS.Present) \
+  XMONITOR(Cabinet_TemperatureLowRangeMonitor,  UPS.Present) \
+  XMONITOR(UPS_BatteryConnectMonitor,           UPS.Present) \
+  XMONITOR(UPS_ConnectMonitor,                  1) \
+  XMONITOR(UPS_DI0Monitor,                      1) \
 
 #define T_SENSOR_TABLE \
   XTSENSOR(T_SENSOR_1,     WDATA1,      DALLAS_SENSOR_1_USART) \

+ 36 - 12
docs/bt6710/BT6710.MIB

@@ -237,66 +237,90 @@ IMPORTS
      STATUS               current
      DESCRIPTION ""
      ::= { traps 10 }
+
+    batteryTemperatureLowNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 11 }
+
+    batteryTemperatureLowAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 12 }
 	 
      lineAlarm  NOTIFICATION-TYPE
      OBJECTS              { inVoltVAC }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 11 }
+     ::= { traps 13 }
 
     lineNorm  NOTIFICATION-TYPE
      OBJECTS              { inVoltVAC }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 12 } 
+     ::= { traps 14 } 
 
      lowBatAlarm  NOTIFICATION-TYPE
      OBJECTS              { batCap }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 13 }
+     ::= { traps 15 }
 
      lowBatNorm  NOTIFICATION-TYPE
      OBJECTS              { batCap }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 14 }
+     ::= { traps 16 }
 	 
-     doorTempAlarm  NOTIFICATION-TYPE
+     doorTempHighAlarm  NOTIFICATION-TYPE
      OBJECTS              { caseTemp }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 15 }
+     ::= { traps 17 }
 
-    doorTempNorm  NOTIFICATION-TYPE
+    doorTempHighNorm  NOTIFICATION-TYPE
      OBJECTS              { caseTemp }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 16 }
+     ::= { traps 18 }
+
+    doorTempLowAlarm  NOTIFICATION-TYPE
+     OBJECTS              { caseTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 19 }
+
+    doorTempLowNorm  NOTIFICATION-TYPE
+     OBJECTS              { caseTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 20 }
 
 	ConnectMonitorAlarm  NOTIFICATION-TYPE
      OBJECTS              { connectMonitor }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 17 }
+     ::= { traps 21 }
 	 
      connectMonitorNorm  NOTIFICATION-TYPE
      OBJECTS              { connectMonitor }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 18 }
+     ::= { traps 22 }
      
      batteryConnectAlarm  NOTIFICATION-TYPE
      OBJECTS              { batCap }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 19 }
+     ::= { traps 23 }
 
     batteryConnectNorm  NOTIFICATION-TYPE
      OBJECTS              { batCap }
      STATUS               current
      DESCRIPTION ""
-     ::= { traps 20 }	
+     ::= { traps 24 }	
 	
 END
 

+ 1 - 1
modules/MegaTec/megatec.h

@@ -52,8 +52,8 @@ typedef struct{
 	uint8_t SOC;
 	uint16_t work_time;
 	uint32_t akb_work_time;
+	uint32_t Alarm;
 	uint8_t Status;
-	uint8_t Alarm;
 	char model[16];
 	char vertion[18];
 	char serial[15];

+ 137 - 47
modules/monitor/ups_monitor.c

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

+ 14 - 1
modules/monitor/ups_monitor.h

@@ -89,7 +89,20 @@ void UPS_TemperatureHighRangeMonitor(void);
   * @brief  Мониторинг температуры по нижней границе
   */
 void UPS_TemperatureLowRangeMonitor(void);
-#endif    
+#endif
+
+#ifdef TEMP_CABINET_MONITOR
+/**
+  * @brief  Мониторинг температуры шкафа по верхней границе
+  */
+void Cabinet_TemperatureHighRangeMonitor(void);
+
+/**
+  * @brief  Мониторинг температуры шкафа по нижней границе
+  */
+void Cabinet_TemperatureLowRangeMonitor(void);
+#endif
+
 /**
   * @brief  Мониторинг параметра upsParams.connect
   */