Sfoglia il codice sorgente

1、添加总体电源状态阈值、告警及动作防护功能;
2、添加单个控制板总输入电源状态阈值及动作规则(此功能暂时只添加,但是屏蔽了没开放)

liyuezong 1 anno fa
parent
commit
54db686a9b
4 ha cambiato i file con 236 aggiunte e 154 eliminazioni
  1. 76 10
      pro/src/app.c
  2. 24 61
      pro/src/sqlite_handle.c
  3. 110 55
      pro/src/switch_ctrl.c
  4. 26 28
      pro/src/switch_ctrl.h

+ 76 - 10
pro/src/app.c

@@ -1094,12 +1094,12 @@ static void* power_thread(void* arg)
         sprintf(_globalTotalPowerInfo.samp_time,"%04d-%02d-%02d %02d:%02d:%02d.%03ld",
         t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec,tv.tv_usec/1000);
         //更新总电源信息
-        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_AC 
-        || __globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_DC)
-        {
+      //  if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_AC 
+     //   || __globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_DC)
+       // {
             _globalDeviceManager->_globalPowerManger._PowerInfo = _globalTotalPowerInfo._power_info;
-        }
-        //插入数据库
+        //}
+        //总电源信息插入数据库
         if (SaveDBFlag)
         {
             if (dev_insert_power_info(_globalDeviceManager->db, &_globalTotalPowerInfo, &lastIndex) != 0)
@@ -1107,12 +1107,78 @@ static void* power_thread(void* arg)
                 log_d("ch%d insert data error.\n", _globalTotalPowerInfo.product_ch_id);
             }
         }
-        lock_s_release(LOCK_ID_POWER_UPDATE);
-  
-        //判断阈值状态
+        //判断总电源超限状态及动作防护
+        {
+            bool nTotalVup = _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_up;
+            bool nTotalVdown = _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_down;
+            bool nTotalAup = _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_current;
+            bool nTotalPower = _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_power;
+            bool nTotalConsumption = _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_consumption;
+
+            if (_globalTotalPowerInfo._power_info.voltage >= _globalDeviceManager->_globalPowerManger.global_over_manager.product_vol_upper_threshold &&
+                abs(_globalDeviceManager->_globalPowerManger.global_over_manager.product_vol_upper_threshold) >= 0.05)
+            {
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_up = true;
+            }
+            else
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_up = false;
+
+            if (_globalTotalPowerInfo._power_info.voltage <= _globalDeviceManager->_globalPowerManger.global_over_manager.product_vol_lower_threshold &&
+                abs(_globalDeviceManager->_globalPowerManger.global_over_manager.product_vol_lower_threshold) >= 0.05)
+            {
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_down = true;
+            }
+            else
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_down = false;
+
+            if (_globalTotalPowerInfo._power_info.current >= _globalDeviceManager->_globalPowerManger.global_over_manager.product_cur_upper_threshold &&
+                abs(_globalDeviceManager->_globalPowerManger.global_over_manager.product_cur_upper_threshold) >= 0.05)
+            {
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_current = true;
+            }
+            else
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_current = false;
 
-        //动作
+            if (_globalTotalPowerInfo._power_info.power >= _globalDeviceManager->_globalPowerManger.global_over_manager.product_pwr_upper_threshold &&
+                abs(_globalDeviceManager->_globalPowerManger.global_over_manager.product_pwr_upper_threshold) >= 0.05)
+            {
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_power = true;
+            }
+            else
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_power = false;
 
+            if (_globalTotalPowerInfo._power_info.consumption >= _globalDeviceManager->_globalPowerManger.global_over_manager.product_pwrcon_upper_threshold &&
+                abs(_globalDeviceManager->_globalPowerManger.global_over_manager.product_pwrcon_upper_threshold) >= 0.05)
+            {
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_consumption = true;
+            }
+            else
+                _globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_consumption = false;
+
+            // 报警信息及动作
+            if (_globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_up && !nTotalVup)
+            {
+                dev_Alarm_send_message(_globalDeviceManager,  &_globalDeviceManager->_globalPowerManger, WARNING_V_UP);
+            }
+            if (_globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_voltage_down && !nTotalVdown)
+            {
+                dev_Alarm_send_message(_globalDeviceManager,  &_globalDeviceManager->_globalPowerManger, WARNING_V_DOWN);
+            }
+            if (_globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_current && !nTotalAup)
+            {
+                dev_Alarm_send_message(_globalDeviceManager, &_globalDeviceManager->_globalPowerManger, WARNING_A_UP);
+            }
+            if (_globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_power && !nTotalPower)
+            {
+                dev_Alarm_send_message(_globalDeviceManager,  &_globalDeviceManager->_globalPowerManger, WARNING_W_UP);
+            }
+            if (_globalDeviceManager->_globalPowerManger._PowerWarninginfo.w_consumption && !nTotalConsumption)
+            {
+                dev_Alarm_send_message(_globalDeviceManager,  &_globalDeviceManager->_globalPowerManger, WARNING_P_UP);
+            }
+        }
+        lock_s_release(LOCK_ID_POWER_UPDATE);
+  
         //1ms
         usleep(5*1000);  
         //延时
@@ -1846,7 +1912,7 @@ static void* ntp_thread(void *arg)
     {
         if (pntp->mode > 0)
         {
-            printf("___ntp_sync_flag: %d, interval: %d\n",  ntp_sync_flag, abs(time1-time2));
+            //printf("___ntp_sync_flag: %d, interval: %d\n",  ntp_sync_flag, abs(time1-time2));
             if (ntp_sync_flag || (abs(time1 - time2) >= NTP_INTERVAL_TIME))
             {
                 if(pc==NULL) {

+ 24 - 61
pro/src/sqlite_handle.c

@@ -3960,72 +3960,35 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
     // if(_globalSNMPManager.trapmode==1)snmp_alarm_register(1,SA_REPEAT,send_pduPowerAlarm_trap,(void *)&pAlarmTrapinfo);
     
     
-    /*
+    //只管理总体电源阈值超限动作防护
     int ret = -1 ;
     int nchID = __globalPowerTemp->product_ch_id;
-    if (__globalPowerTemp->global_over_manager)
+    if ( nchID==0)
     {
-        switch (_AlarmType)
-        {
-        case WARNING_V_UP:
-        {
-            if (__globalPowerTemp->global_over_manager.product_vol_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
-            {
-                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
-                                                __globalPowerTemp->product_saddr,
-                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
-                                                0, false);
-            }
-        }
-        break;
-        case WARNING_V_DOWN:
-        {
-            if (__globalPowerTemp->global_over_manager.product_vol_over_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
-            {
-                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
-                                                __globalPowerTemp->product_saddr,
-                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
-                                                0, false);
-            }
-        }
-        break;
-        case WARNING_A_UP:
+        if ((_AlarmType==WARNING_V_UP && __globalPowerTemp->global_over_manager.product_vol_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        || (_AlarmType==WARNING_V_DOWN && __globalPowerTemp->global_over_manager.product_vol_over_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        ||  (_AlarmType==WARNING_A_UP && __globalPowerTemp->global_over_manager.product_cur_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        || (_AlarmType==WARNING_W_UP && __globalPowerTemp->global_over_manager.product_pwr_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        || (_AlarmType==WARNING_P_UP && __globalPowerTemp->global_over_manager.product_pwrcon_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH) )
         {
-            if (__globalPowerTemp->global_over_manager.product_cur_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
-            {
-                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
-                                                __globalPowerTemp->product_saddr,
-                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
-                                                0, false);
-            }
-        }
-        break;
-        case WARNING_W_UP:
-        {
-            if (__globalPowerTemp->global_over_manager.product_pwr_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
-            {
-                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
-                                                __globalPowerTemp->product_saddr,
-                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
-                                                0, false);
-            }
-        }
-        break;
-        case WARNING_P_UP:
-        {
-            if (__globalPowerTemp->global_over_manager.product_pwrcon_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
-            {
-                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
-                                                __globalPowerTemp->product_saddr,
-                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
-                                                0, false);
-            }
-        }
-        break;
-        default:
-            break;
+                // 总关
+                int nSendAddr = 0;
+                char buff[256];
+                GlobalPowerManger *_globalPowerMangerTemp = NULL;
+                list_for_each_entry(_globalPowerMangerTemp, &globalDeviceManger->_globalPowerManger.list, list)
+                {
+                    if (_globalPowerMangerTemp == NULL)
+                        break;
+                    if (_globalPowerMangerTemp->product_saddr == nSendAddr)
+                        continue;
+                    nSendAddr = _globalPowerMangerTemp->product_saddr;
+                    log_i("Close All address Start");
+                    int rec = g_switch_set_all_ctrl(&globalDeviceManger->_globalRelaySampManger, _globalPowerMangerTemp->product_ch_type, _globalPowerMangerTemp->product_saddr, 0);
+                    if (rec < 0)
+                        log_i("Close All address:%d rec:%d:%s", nSendAddr, rec, modbus_strerror(errno));
+                }
         }
-    }*/
+    }
     
     return 0;
 }

+ 110 - 55
pro/src/switch_ctrl.c

@@ -421,8 +421,11 @@ int g_switch_set_dc_stop_time_delay(void* manger,int saddr,unsigned int time)
 int g_switch_set_ac_single_s_chn_ctrl(void* manger,int saddr,unsigned char chn,unsigned short sts)
 {
     unsigned int offset = 0;
-    if(chn>=8)
-        return -1;  
+    if (chn >= 8)
+        return -1;
+    if (chn == -1)
+        return 1;
+
     offset = _SWITCH_AC_SINGLE_S_CHN_STS+chn;    
     return g_modbus_write_reg(manger,saddr,offset,sts);
 }
@@ -542,7 +545,11 @@ int g_switch_set_ac_single_threshold(void* manger,int saddr,char chn,GlobalOverM
     data_buf[14] = data_temp;
     data_buf[15] = data_temp>>16;
 
-    offset = _SWITCH_AC_SINGLE_S_Threshold+chn*16;
+    if(chn==-1)
+    {
+        offset = _SWITCH_AC_TOTAL_Threshold;
+    }
+    else  offset = _SWITCH_AC_SINGLE_S_Threshold+chn*16;
 
     int ret= g_modbus_write_x_reg(manger,saddr,offset,16,data_buf);
 
@@ -1031,18 +1038,17 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
     int ret =0;   
     int sts=_globalPowerMangerTemp->_PowerInfo.status;
     GlobalOverManager* _global_over_manager=&_globalPowerMangerTemp->global_over_manager;
-    if (chn == 0)
+
+    //--chn为0时,屏蔽,因web前端暂时不支持单个控制板的总输入阈值设置 liyuezong 24.11.13
+    if (chn == 0)return ret;
+
+    //每个通道状态阈值及动作设置 chn为0时为设置总体阈值及动作
+    switch (ntype)
     {
-        ret = g_switch_set_t_ac_in_threshold(manger, 1, _global_over_manager);
-    }
-    else
+    case AC_SINGLE_S_TYPE:
+    case AC_SINGLE_B_TYPE:
     {
-        switch (ntype)
-        {
-        case AC_SINGLE_S_TYPE:
-        case AC_SINGLE_B_TYPE:
-        {
-            ret = g_switch_set_ac_single_threshold(manger, saddr, (chn - 1), _global_over_manager);
+        ret = g_switch_set_ac_single_threshold(manger, saddr, (chn - 1), _global_over_manager);
             if (_global_over_manager->product_vol_upper_enable == 1)
                 sts |= ENABLE_V_UP;
             if (_global_over_manager->product_vol_lower_enable == 1)
@@ -1053,28 +1059,40 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
                 sts |= ENABLE_W_UP;
             if (_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;
-        case DC_OUT_TYPE:
-        {
-            // return g_switch_set_dc_ctrl();
-        }
-        break;
-        case DCPDU_TYPE:
-        {
-            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_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;
+    case DC_OUT_TYPE:
+    {
+        // return g_switch_set_dc_ctrl();
+    }
+    break;
+    case DCPDU_TYPE:
+    {
+        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);
+        ret = g_switch_set_dcpdu_alarm_ctrl(manger, saddr, (chn - 1), _global_over_manager);
+        return ret;
+    }
+    break;
+    case TREE_AC_TYPE:
+    {
+        if (chn == 0)
+        {
+            ret = g_switch_set_t_ac_in_threshold(manger, saddr, _global_over_manager);
+            ret = g_switch_set_t_ac_alarm_ctrl(manger, saddr, (chn - 1), _global_over_manager);
+            if (ret < 0)
+            {
+                log_e("Threshold AlarmCtrl Set Error=%s", modbus_strerror(errno));
+            }
             return ret;
         }
-        break;
-        case TREE_AC_TYPE:
+        else
         {
             ret = g_switch_set_t_ac_max_vol_threshold(manger, saddr, (chn - 1), _global_over_manager);
             if (ret < 0)
@@ -1119,21 +1137,24 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
             if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
             {
                 return g_switch_set_t_ac_phchn_ctrl(manger, saddr, (chn - 1), sts);
-            }else{
+            }
+            else
+            {
                 return g_switch_set_t_ac_chn_ctrl(manger, saddr, (chn - 1), sts);
             }
-            
+
             return ret;
         }
+    }
+    break;
+    case AC_MULTI_S_TYPE:
+    case AC_MULTI_B_TYPE:
+    case DC_IN_TYPE:
+    default:
+        return 1;
         break;
-        case AC_MULTI_S_TYPE:
-        case AC_MULTI_B_TYPE:
-        case DC_IN_TYPE:
-        default:
-            return 1;
-            break;
-        }
     }
+
     return 1;
 }
 int g_switch_get_all_out_info(void* manger,int ntype,int saddr,int nNumb,PowerInfo* _power,PowerWarningInfo* _warning)
@@ -1560,7 +1581,11 @@ int g_switch_set_dcpdu_max_vol_threshold(void* manger,int saddr,char chn,GlobalO
     memset(data_temp,0,sizeof(data_temp));
     unsigned int value = 0;
     
-    offset = _SWITCH_DCPDU_MAX_VOL_THRESHOLD + chn;
+    if (chn==-1)
+    {
+        offset = _SWITCH_DCPDU_MAX_TOTAL_VOL_THRESHOLD;
+    }
+    else  offset = _SWITCH_DCPDU_MAX_VOL_THRESHOLD + chn;
     value = _global_over_manager->product_vol_upper_threshold * 1000;
     data_temp[0] = value & 0XFFFF;
     data_temp[1] = (value >> 16) & 0xFFFF;
@@ -1576,7 +1601,11 @@ int g_switch_set_dcpdu_min_vol_threshold(void* manger,int saddr,char chn,GlobalO
     memset(data_temp,0,sizeof(data_temp));
     unsigned int value = 0;
    
-    offset = _SWITCH_DCPDU_MIN_VOL_THRESHOLD + chn;
+    if (chn==-1)
+    {
+        offset = _SWITCH_DCPDU_MIN_TOTAL_VOL_THRESHOLD;
+    }
+    else offset = _SWITCH_DCPDU_MIN_VOL_THRESHOLD + chn;
     value = _global_over_manager->product_vol_lower_threshold * 1000;
     data_temp[0] = value & 0XFFFF;
     data_temp[1] = (value >> 16) & 0xFFFF;
@@ -1591,13 +1620,17 @@ int g_switch_set_dcpdu_max_cur_threshold(void* manger,int saddr,char chn,GlobalO
     unsigned short data_temp[4];
     memset(data_temp,0,sizeof(data_temp));
     unsigned int value = 0;
-    
-    offset = _SWITCH_DCPDU_MAX_CUR_THRESHOLD + chn;
+
+    if (chn == -1)
+    {
+        offset = _SWITCH_DCPDU_MAX_TOTAL_CUR_THRESHOLD;
+    }
+    else
+        offset = _SWITCH_DCPDU_MAX_CUR_THRESHOLD + chn;
     value = _global_over_manager->product_cur_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);
 }
 
@@ -1622,13 +1655,17 @@ int g_switch_set_dcpdu_max_power_threshold(void* manger,int saddr,char chn,Globa
     unsigned short data_temp[4];
     memset(data_temp,0,sizeof(data_temp));
     unsigned int value = 0;
-    
-    offset = _SWITCH_DCPDU_MAX_POWER_THRESHOLD + chn;
+
+    if (chn == -1)
+    {
+        offset = _SWITCH_DCPDU_MAX_TOTAL_POWER_THRESHOLD;
+    }
+    else
+        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)
@@ -1637,13 +1674,17 @@ int g_switch_set_dcpdu_max_pwrcon_threshold(void* manger,int saddr,char chn,Glob
     unsigned short data_temp[4];
     memset(data_temp,0,sizeof(data_temp));
     unsigned int value = 0;
-    
-    offset = _SWITCH_DCPDU_MAX_POWERCON_THRESHOLD + chn;
+
+    if (chn == -1)
+    {
+        offset = _SWITCH_DCPDU_MAX_TOTAL_POWERCON_THRESHOLD;
+    }
+    else
+        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);
 }
 
@@ -1964,7 +2005,12 @@ int g_switch_set_t_ac_max_pwrcon_threshold(void* manger,int saddr,char chn,Globa
 int g_switch_set_t_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager)
 {
     unsigned int offset = 0;
-    offset = _SWITCH_T_AC_ALARM_CTRL+chn;
+    if (chn == -1)
+    {
+        offset = _SWITCH_T_AC_ALARM_TOTAL_CTRL;
+    }
+    else
+        offset = _SWITCH_T_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;
@@ -1977,7 +2023,11 @@ int g_switch_set_t_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManag
 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;
+    if (chn==-1)
+    {
+        offset = _SWITCH_AC_ALARM_TOTAL_CTRL;
+    }
+    else 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;
@@ -1990,7 +2040,12 @@ int g_switch_set_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager
 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;
+    if (chn == -1)
+    {
+        offset = _SWITCH_DCPDU_ALARM_TOTAL_CTRL;
+    }
+    else
+        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;

+ 26 - 28
pro/src/switch_ctrl.h

@@ -21,41 +21,33 @@ enum MODBUS_MODE
 #define _SWITCH_AC_SINGLE_S_STS_INFO   0x1071 //单相小电流继电器开关状态,共8路继电器
 #define _SWITCH_AC_SINGLE_B_CUR_INFO   0x1015 //单相大电流继电器信息,共4路继电器
 #define _SWITCH_AC_SINGLE_B_STS_INFO   0x1083 //单相大电流继电器开关状态,共4路继电器
-#define _SWITCH_DC_OUT_INFO   0x104F        //直流继电器电路控制板信息,采集一路输出
-#define _SWITCH_DC_STS_INFO   0x1097        //直流继电器电路控制板开关状态,采集一路输出
-#define _SWITCH_DC_IN_INFO      0x105F      //直流总电流电压采集控制板,采集设备输入电压和输入电流
-
 #define _SWITCH_AC_BREAKER_INFO 0x10D6        //单相控制板开关检测信息
-
+#define _SWITCH_AC_TOTAL_ALATRM 0x10E0       //单相控制板总体报警信息 2024.11.12
 #define _SWITCH_AC_SINGLE_S_START_DELAY_TIME 0x1194        //单相小电流继电器板开启延时
 #define _SWITCH_AC_SINGLE_S_STOP_DELAY_TIME 0x11A6         //单相小电流继电器板关闭延时
-
 #define _SWITCH_AC_SINGLE_B_START_DELAY_TIME 0x11B8        //单相大电流继电器板开启延时
 #define _SWITCH_AC_SINGLE_B_STOP_DELAY_TIME 0x11C6         //单相大电流继电器板关闭延时
-
-
-#define _SWITCH_DC_START_DELAY_TIME 0x11D4 //直流继电器控制板开启延时
-#define _SWITCH_DC_STOP_DELAY_TIME 0x11DF  //直流继电器控制板关闭延时
-
 #define _SWITCH_AC_SINGLE_S_CHN_STS 0x11EA  //设置单相小电流通道开关状态
 #define _SWITCH_AC_SINGLE_B_CHN_STS 0x11FC  //设置单相大电流通道开关状态
-#define _SWITCH_DC_STS              0x120A   //设置直流继电器开关状态
-
-
-
-#define _SWITCH_AC_SINGLE_S_Threshold   0x1215  //设置单相小电流通道超限报警
-#define _SWITCH_AC_SINGLE_B_Threshold   0x129F  //设置单相大电流通道超限报警X
-#define _SWITCH_DC_Threshold            0x12E9  //设置直流继电器超限报警X
-
+#define _SWITCH_AC_SINGLE_S_Threshold   0x1215  //设置单相小电流通道超限报警阈值
+#define _SWITCH_AC_SINGLE_B_Threshold   0x129F  //设置单相大电流通道超限报警阈值X
 #define _SWITCH_AC_SINGLE_S_KB_VAL  0x1203  //设置单相小电流通道K、B值
 #define _SWITCH_AC_SINGLE_B_KB_VAL  0x124D  //设置单相大电流通道K、B值
-
 #define _SWITCH_AC_RESET_CONSUMPTION    0x1400          //重置单相耗电量
-
-#define _SWITCH_DC_KB_VAL  0x136D  //设置直流通道K、B值
 #define _SWITCH_AC_ALARM_CTRL            0x13EC          //超限动作
+#define _SWITCH_AC_TOTAL_Threshold            0x1450          //设置单相总超限报警阈值 2024.11.12
+#define _SWITCH_AC_ALARM_TOTAL_CTRL            0x1482          //总体超限动作   2024.11.12       
 
+#define _SWITCH_DC_STS              0x120A   //设置直流继电器开关状态
+#define _SWITCH_DC_Threshold            0x12E9  //设置直流继电器超限报警X
+#define _SWITCH_DC_KB_VAL  0x136D  //设置直流通道K、B值
+#define _SWITCH_DC_START_DELAY_TIME 0x11D4 //直流继电器控制板开启延时
+#define _SWITCH_DC_STOP_DELAY_TIME 0x11DF  //直流继电器控制板关闭延时
+#define _SWITCH_DC_OUT_INFO   0x104F        //直流继电器电路控制板信息,采集一路输出
+#define _SWITCH_DC_STS_INFO   0x1097        //直流继电器电路控制板开关状态,采集一路输出
+#define _SWITCH_DC_IN_INFO      0x105F      //直流总电流电压采集控制板,采集设备输入电压和输入电流
 #define _SWITCH_DCPDU_TYPE_CHN_INFO         0x1770          //获取直流PDU类型通道
+#define _SWITCH_DCPDU_TOTAL_ALARM              0x1776          //直流PDU总报警信息 2024.11.12
 #define _SWITCH_DCPDU_OUT_INFO              0x177A          //直流PDU输出
 #define _SWITCH_DCPDU_STS_INFO              0x17E2          //直流PDU开关状
 #define _SWITCH_DCPDU_WARNING              0x179A          //直流PDU报警信息
@@ -74,18 +66,26 @@ enum MODBUS_MODE
 #define _SWITCH_DCPDU_ALARM_CTRL            0x182E          //超限动作
 #define _SWITCH_DCPDU_RESET_CONSUMPTION   	0x1838         //重置直流耗电量
 
+#define _SWITCH_DCPDU_MAX_TOTAL_VOL_THRESHOLD     0x184C          //max total voltage threshold 2024.11.12
+#define _SWITCH_DCPDU_MIN_TOTAL_VOL_THRESHOLD     0x184D          //min total voltage threshold 2024.11.12
+#define _SWITCH_DCPDU_MAX_TOTAL_CUR_THRESHOLD     0x184E          //max total current threshold 2024.11.12
+#define _SWITCH_DCPDU_MAX_TOTAL_POWER_THRESHOLD     0x184F          //max total power threshold 2024.11.12
+#define _SWITCH_DCPDU_MAX_TOTAL_POWERCON_THRESHOLD     0x1850          //max total powercon threshold 2024.11.12
+#define _SWITCH_DCPDU_ALARM_TOTAL_CTRL            0x1856          //总体超限动作   2024.11.12       
+
 #define _SWITCH_T_AC_TYPE_CHN_INFO         0x1770          //获取三项类型通道
 #define _SWITCH_T_AC_IN_INFO               0x1771          //三项交流输入
 #define _SWITCH_T_AC_OUT_INFO              0x177D          //三项交流输出
 #define _SWITCH_T_AC_OUT_ENABLE            0x182E          //三项交流输出按通道开关状态及控制使能
 #define _SWITCH_T_AC_NF_STATUS             0x1837          //三项交流零线断路器状态
-#define _SWITCH_T_AC_CH_OUT_ENABLE         0x183A          //三项交流延时时间
+#define _SWITCH_T_AC_CH_OUT_ENABLE         0x183A          //三项交流输出按插头开关状态及控制使
 #define _SWITCH_T_AC_IN_ENABLE             0x182D          //三项交流输入超限使能
 #define _SWITCH_T_AC_OUT_ERROR             0x17DE          //三项交流输出故障状态
+#define _SWITCH_T_AC_IN_TOTAL_ERROR              0x17CA          //三项交流总输入故障状态 2024.11.12 
 #define _SWITCH_T_AC_IN_ERROR              0x17DD          //三项交流输入故障状态
 #define _SWITCH_T_AC_START_DELAY_TIME      0x1840          //三项交流延时
 #define _SWITCH_T_AC_STOP_DELAY_TIME       0x184C          //三项交流延时
-#define _SWITCH_T_AC_SINGLE_IN_Threshold   0x17EA          //设置三项交流输入超限报警
+#define _SWITCH_T_AC_SINGLE_IN_Threshold   0x17EA          //设置三项交流输入超限报警 
 #define _SWITCH_T_AC_SINGLE_OUT_Threshold  0x17EF          //设置三项交流输出超限报警
 #define _SWITCH_T_AC_ALL_OPEN_INFO         0x182B          //ALL OPEN直流PDU开关状
 #define _SWITCH_T_AC_ALL_CLOSE_INFO        0x182C          //ALL OPEN直流PDU开关状
@@ -94,16 +94,14 @@ enum MODBUS_MODE
 #define _SWITCH_T_AC_MAX_CUR_THRESHOLD     0x1807          //max current threshold
 #define _SWITCH_T_AC_MAX_PWR_THRESHOLD     0x1813          //max POWER threshold
 #define _SWITCH_T_AC_MAX_PWRCON_THRESHOLD  0x181F          //max PWRCON threshold
-
 #define _SWITCH_T_AC_ALARM_MISSING_PH      0x1856          //缺相报警
+#define _SWITCH_T_AC_ALARM_TOTAL_CTRL            0x185F          //总体超限动作 2024.11.12 
 #define _SWITCH_T_AC_ALARM_CTRL            0x1860          //超限动作
-
-
 #define _SWITCH_T_AC_RESET_CONSUMPTION_PH  0x189C          //重置PH耗电量
 #define _SWITCH_T_AC_RESET_CONSUMPTION     0x18A5          //重置all耗电量
-
 #define _SWITCH_T_AC_BREAKER_INFO 0x17D4        //三相控制板开关检测信息
 
+
 int g_switch_init(int addr_max);
 int g_switch_get_type(void* manger,int saddr, int* type,int* chn,int nPowerType);