Ver código fonte

1、添加直流功率和耗电量超上限报警,修改报警信息读取bug;
2、添加直流超限仅报警/动作配置;
2、完善单相超限仅报警/动作配置。

liyuezong 2 anos atrás
pai
commit
478aa71666
3 arquivos alterados com 80 adições e 7 exclusões
  1. 0 2
      pro/src/app.c
  2. 71 5
      pro/src/switch_ctrl.c
  3. 9 0
      pro/src/switch_ctrl.h

+ 0 - 2
pro/src/app.c

@@ -505,7 +505,6 @@ void* power_thread(void* arg)
                         }
                     }
                     
-                #ifndef PRJ_INSPUR
                     //插入数据库
                      if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up)
                     {
@@ -537,7 +536,6 @@ void* power_thread(void* arg)
                         /*高耗电 */
                         if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
-                #endif
 
                     //else
                    //log_i("%s ch%d insert data ok status:%d.\n",_globalPowerInfo.samp_time,_globalPowerMangerTemp->product_ch_id,_globalPowerInfo.product_status);

+ 71 - 5
pro/src/switch_ctrl.c

@@ -1044,6 +1044,7 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
                 sts |= ENABLE_W_UP;
             if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_enable == 1)
                 sts |= ENABLE_P_UP;
+            ret = g_switch_set_ac_alarm_ctrl(manger, saddr, (chn - 1), _global_over_manager);
             return g_switch_set_ac_single_s_chn_ctrl(manger, saddr, (chn - 1), sts);
         }
         break;
@@ -1057,6 +1058,10 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
             ret = g_switch_set_dcpdu_max_vol_threshold(manger, saddr, (chn - 1), _global_over_manager);
             ret = g_switch_set_dcpdu_min_vol_threshold(manger, saddr, (chn - 1), _global_over_manager);
             ret = g_switch_set_dcpdu_max_cur_threshold(manger, saddr, (chn - 1), _global_over_manager);
+            ret =g_switch_set_dcpdu_max_power_threshold(manger, saddr, (chn - 1), _global_over_manager);
+            ret =g_switch_set_dcpdu_max_pwrcon_threshold(manger, saddr, (chn - 1), _global_over_manager);
+
+            ret = g_switch_set_dcpdu_alarm_ctrl(manger, saddr, (chn - 1), _global_over_manager);
             return ret;
         }
         break;
@@ -1320,18 +1325,22 @@ int g_switch_get_dcpdu_all_out_info(void* manger,int saddr,int nNumb,PowerInfo*
         status_temp = (data_temp[1] << 16) + data_temp[0];
         _power[i].status = (status_temp >> i) & 0x1;
     }
-    // 获取故障状态
-    offset = _SWITCH_DCPDU_STS_ERROR;
+    // 获取报警状态
+    offset = _SWITCH_DCPDU_WARNING;
     memset(data_temp, 0, sizeof(data_temp));
-    ret = g_modbus_read_x_reg(manger, saddr, offset, 2, data_temp);
+    ret = g_modbus_read_x_reg(manger, saddr, offset, 16, data_temp);
     if (ret < 0)
     {
         return ret;
     }
     for (size_t i = 0; i < nNumb; i++)
     {
-        status_temp = (data_temp[1] << 16) + data_temp[0];
-        _warning[i].w_voltage_up = (status_temp >> i) & 0x1;
+        int Index = i * 2;
+        _warning[i].w_voltage_up = data_temp[0 + Index] & BIT_00;
+        _warning[i].w_voltage_down = data_temp[0 + Index] & BIT_01;
+        _warning[i].w_current = data_temp[0 + Index] & BIT_02;
+        _warning[i].w_power = data_temp[0 + Index] & BIT_03;
+        _warning[i].w_consumption = data_temp[0 + Index] & BIT_04;
     }
     return 0;
 }
@@ -1598,6 +1607,37 @@ int g_switch_set_dcpdu_min_cur_threshold(void* manger,int saddr,char chn,GlobalO
 
     return g_modbus_write_x_reg(manger,saddr,offset,2, data_temp);
 }
+int g_switch_set_dcpdu_max_power_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager)
+{
+    unsigned int offset = 0;   
+    unsigned short data_temp[4];
+    memset(data_temp,0,sizeof(data_temp));
+    unsigned int value = 0;
+    
+    offset = _SWITCH_DCPDU_MAX_POWER_THRESHOLD + chn;
+    value = _global_over_manager->product_pwr_upper_threshold * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    
+
+    return g_modbus_write_x_reg(manger,saddr,offset,2, data_temp);
+}
+int g_switch_set_dcpdu_max_pwrcon_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager)
+{
+    unsigned int offset = 0;   
+    unsigned short data_temp[4];
+    memset(data_temp,0,sizeof(data_temp));
+    unsigned int value = 0;
+    
+    offset = _SWITCH_DCPDU_MAX_POWERCON_THRESHOLD + chn;
+    value = _global_over_manager->product_pwrcon_upper_threshold * 1000;
+    data_temp[0] = value & 0XFFFF;
+    data_temp[1] = (value >> 16) & 0xFFFF;
+    
+
+    return g_modbus_write_x_reg(manger,saddr,offset,2, data_temp);
+}
+
 
 
 int g_switch_set_dcpdu_reset(void* manger,int saddr)
@@ -1905,6 +1945,32 @@ int g_switch_set_t_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManag
     if(_global_over_manager->product_pwrcon_over_upper_threshold_ctrl==1)nStatus|=BIT_04;  
     return g_modbus_write_reg(manger,saddr,offset,nStatus);
 }
+
+int g_switch_set_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager)
+{
+    unsigned int offset = 0;
+    offset = _SWITCH_AC_ALARM_CTRL+chn;
+    int nStatus = 0;
+    if(_global_over_manager->product_vol_over_upper_threshold_ctrl==1)nStatus|=BIT_01;
+    if(_global_over_manager->product_vol_over_lower_threshold_ctrl==1)nStatus|=BIT_02;
+    if(_global_over_manager->product_cur_over_upper_threshold_ctrl==1)nStatus|=BIT_00;
+    if(_global_over_manager->product_pwr_over_upper_threshold_ctrl==1)nStatus|=BIT_03;
+    if(_global_over_manager->product_pwrcon_over_upper_threshold_ctrl==1)nStatus|=BIT_04;  
+    return g_modbus_write_reg(manger,saddr,offset,nStatus);
+}
+
+int g_switch_set_dcpdu_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager)
+{
+    unsigned int offset = 0;
+    offset = _SWITCH_DCPDU_ALARM_CTRL+chn;
+    int nStatus = 0;
+    if(_global_over_manager->product_vol_over_upper_threshold_ctrl==1)nStatus|=BIT_01;
+    if(_global_over_manager->product_vol_over_lower_threshold_ctrl==1)nStatus|=BIT_02;
+    if(_global_over_manager->product_cur_over_upper_threshold_ctrl==1)nStatus|=BIT_00;
+    if(_global_over_manager->product_pwr_over_upper_threshold_ctrl==1)nStatus|=BIT_03;
+    if(_global_over_manager->product_pwrcon_over_upper_threshold_ctrl==1)nStatus|=BIT_04;  
+    return g_modbus_write_reg(manger,saddr,offset,nStatus);
+}
 /**
  * @brief 设置 AC 告警丢失相位
  *

+ 9 - 0
pro/src/switch_ctrl.h

@@ -50,10 +50,12 @@ enum MODBUS_MODE
 #define _SWITCH_AC_SINGLE_S_KB_VAL  0x1203  //设置单相小电流通道K、B值
 #define _SWITCH_AC_SINGLE_B_KB_VAL  0x124D  //设置单相大电流通道K、B值
 #define _SWITCH_DC_KB_VAL  0x136D  //设置直流通道K、B值
+#define _SWITCH_AC_ALARM_CTRL            0x13EC          //超限动作
 
 #define _SWITCH_DCPDU_TYPE_CHN_INFO         0x1770          //获取直流PDU类型通道
 #define _SWITCH_DCPDU_OUT_INFO              0x177A          //直流PDU输出
 #define _SWITCH_DCPDU_STS_INFO              0x17E2          //直流PDU开关状
+#define _SWITCH_DCPDU_WARNING              0x179A          //直流PDU报警信息
 #define _SWITCH_DCPDU_STS_ERROR             0x17E4          //直流PDU故障状态
 #define _SWITCH_DCPDU_IN_INFO               0x1772          //直流PDU采集输入电压与输入电
 #define _SWITCH_DCPDU_START_DELAY_TIME      0x17E6          //直流PDU延时
@@ -62,8 +64,11 @@ enum MODBUS_MODE
 #define _SWITCH_DCPDU_MIN_VOL_THRESHOLD     0x17B2          //min voltage threshold
 #define _SWITCH_DCPDU_MAX_CUR_THRESHOLD     0x17C2          //max current threshold
 #define _SWITCH_DCPDU_MIN_CUR_THRESHOLD     0x17D2          //max current threshold
+#define _SWITCH_DCPDU_MAX_POWER_THRESHOLD     0x1810          //max power threshold
+#define _SWITCH_DCPDU_MAX_POWERCON_THRESHOLD     0x181A          //max powercon threshold
 #define _SWITCH_DCPDU_ALL_OPEN_INFO         0x1806          //ALL OPEN直流PDU开关状
 #define _SWITCH_DCPDU_ALL_CLOSE_INFO        0x1807          //ALL OPEN直流PDU开关状
+#define _SWITCH_DCPDU_ALARM_CTRL            0x182E          //超限动作
 
 #define _SWITCH_T_AC_TYPE_CHN_INFO         0x1770          //获取三项类型通道
 #define _SWITCH_T_AC_IN_INFO               0x1771          //三项交流输入
@@ -105,6 +110,7 @@ int g_switch_set_ac_single_s_ctrl(void* manger,int saddr,unsigned short* sts,int
 int g_switch_set_ac_single_s_chn_ctrl(void* manger,int saddr,unsigned char chn,unsigned short sts);
 int g_switch_set_ac_single_s_kb_val(void* manger,int saddr,unsigned char chn,SwitchKbVal* _kb_val);
 int g_switch_set_ac_single_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
+int g_switch_set_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
 int g_switch_set_ac_reset(void* manger,int saddr);
 
 int g_switch_set_ac_single_b_start_time_delay(void* manger,int saddr,unsigned char chn,unsigned int time);
@@ -140,6 +146,9 @@ int g_switch_set_dcpdu_max_vol_threshold(void* manger,int saddr,char chn,GlobalO
 int g_switch_set_dcpdu_min_vol_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
 int g_switch_set_dcpdu_max_cur_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
 int g_switch_set_dcpdu_min_cur_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
+int g_switch_set_dcpdu_max_power_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
+int g_switch_set_dcpdu_max_pwrcon_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
+int g_switch_set_dcpdu_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
 int g_switch_set_dcpdu_reset(void* manger,int saddr);
 //----------------------------------------------------------------
 int g_switch_get_t_ac_in_info(void* manger,int saddr,PowerInfo* _power,PowerWarningInfo* _warning);