Bläddra i källkod

add settings for UPS and change SOC count

balbekova 6 år sedan
förälder
incheckning
9ed556d09a
3 ändrade filer med 47 tillägg och 6 borttagningar
  1. 24 6
      modules/MegaTec/megatec.c
  2. 13 0
      modules/settings_api.c
  3. 10 0
      modules/settings_api.h

+ 24 - 6
modules/MegaTec/megatec.c

@@ -10,6 +10,7 @@
 #include "megatec.h"
 #include "log.h"
 #include "snmp_api.h"
+#include "settings_api.h"
 #ifdef PRINTF_STDLIB
 #include <stdio.h>
 #endif
@@ -20,7 +21,10 @@
 #include <string.h>
 #include <math.h>
 
-
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
 
 #define UPS_PDU_MAX_LEN 50
 
@@ -179,6 +183,7 @@ void ups_status_response(char *data)
 {
 	uint8_t i;
 	char value[10];
+	float tmp;
 	uint8_t len = 0;
 	DBG printf("ups_status_response: %s\r\n", data);
 	if(data[0] != '(')
@@ -199,8 +204,13 @@ void ups_status_response(char *data)
 
 	len = get_ups_param(data, " ", value);
 	data += (len + 1);
-	if(len > 0)
-		UPS.VAC_in = atof(value);
+	if(len > 0){
+		tmp  =atof(value);
+		if(tmp > 20)
+			UPS.VAC_in = tmp;
+		else
+			UPS.VAC_in = 0;
+	}
 
 	//TODO
 	len = get_ups_param(data, " ", value);
@@ -224,9 +234,17 @@ void ups_status_response(char *data)
 	//TODO
 	len = get_ups_param(data, " ", value);
 	data += (len + 1);
-	if(len > 0)
-		UPS.SOC = 100*((atof(value)) - 1.6)/0.7;
-
+	if(len > 0){
+		//UPS.SOC = round(100*(((atof(value))/6) - 1.85)/0.4166666667); // 1.85 - минимальное напряжение на ячейки АКБ; 2.266666667 - максимальное напряжение на ячейки АКБ; (2.266666667 - 1.85) = 0.4166666667
+		//UPS.SOC = round(100*((atof(value)) - 1.67)/0.58); // 1.667 - минимальное напряжение на ячейки АКБ; 2.267 - максимальное напряжение на ячейки АКБ; (2.267 - 1.667) = 0.6
+		tmp = atof(value);
+		if(tmp < 10){
+			UPS.SOC = round(100*(tmp - sSettings.UPS_Setting.Ucellmin)/(sSettings.UPS_Setting.Ucellmax - sSettings.UPS_Setting.Ucellmin));
+		}
+		else{
+			UPS.SOC = round(100*(tmp/6 - sSettings.UPS_Setting.Ucellmin)/(sSettings.UPS_Setting.Ucellmax - sSettings.UPS_Setting.Ucellmin));
+		}
+	}
 	len = get_ups_param(data, " ", value);
 	data += (len + 1);
 	if(len > 0)

+ 13 - 0
modules/settings_api.c

@@ -131,6 +131,15 @@ void SETTINGS_SetInfoDef(void)
   strcpy(sSettings.sInfo.comments, "");
 }  
 
+/**
+  * @brief  Настройки ИБП по умолчанию
+  */
+void SETTINGS_SetUPSSettingsDef(void)
+{
+  sSettings.UPS_Setting.Ucellmin = 1.67;
+  sSettings.UPS_Setting.Ucellmax = 2.27;
+}
+
 /**
   * @brief  Установить флаги по умолчанию
   */
@@ -268,6 +277,7 @@ void SETTINGS_SetDefault(void)
   SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetINOUTSDef();
+  SETTINGS_SetUPSSettingsDef();
 #ifdef HARDWARE_BT6702
   SETTINGS_SetRADIUSDef();
   SETTINGS_SetSSLcrtDef();
@@ -290,6 +300,7 @@ void SETTINGS_SetPartDefault(void)
   SETTINGS_SetBootParamsDef();
   SETTINGS_SetSnmpDef();
   SETTINGS_SetFlagsDef();
+  SETTINGS_SetUPSSettingsDef();
  // SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetINOUTSDef();
@@ -316,6 +327,7 @@ void SETTINGS_SetAllDefault(void)
   SETTINGS_SetFlagsDef();
   SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
+  SETTINGS_SetUPSSettingsDef();
   SETTINGS_SetINOUTSDef();
 #ifdef HARDWARE_BT6702
   SETTINGS_SetRADIUSDef();
@@ -347,6 +359,7 @@ void SETTINGS_SetDefaultDebug(void)
   //SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
   SETTINGS_SetINOUTSDef();
+  SETTINGS_SetUPSSettingsDef();
   //SETTINGS_SetInfoDef();
 #ifdef HARDWARE_BT6702
   SETTINGS_SetRADIUSDef();

+ 10 - 0
modules/settings_api.h

@@ -166,6 +166,15 @@ typedef enum
     DI_MAX_ACT
 } din_type_act_t;
 
+/**
+  * @brief  Настройки ИБП.
+  */
+typedef struct
+{
+	float Ucellmin;
+	float Ucellmax;
+} UPS_Setting_t;
+
 /**
   * @brief  Настройки входов/выходов.
   */
@@ -220,6 +229,7 @@ typedef struct
   AUTH_t		sAuth[MAX_WEB_USERS];
   SNTP_t        sSNTP;
   INOUTS_t		sInOuts;
+  UPS_Setting_t UPS_Setting;
 #ifdef HARDWARE_BT6702
   RADIUS_t		sRADIUS;
   //char			our_srv_crt[1205];