Просмотр исходного кода

1、修改三相进单相出通道检测界面输出方式;
2、增加超限动作设置

liyuezong лет назад: 2
Родитель
Сommit
cbf53bedfa

+ 98 - 38
pro/src/app.c

@@ -56,7 +56,7 @@ void* power_thread(void* arg)
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
     dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower);       // 查询日志最大点
     dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
-    _globalDeviceManager->_global_alarmLanguage=create_hash_table(22);
+    _globalDeviceManager->_global_alarmLanguage=create_hash_table(25);
     InitHashTable(_globalDeviceManager->_global_alarmLanguage);
     unsigned int samp_time = _globalDeviceManager->_global_device_info->product_samp_time;
     unsigned int usleepTime = samp_time*1000;
@@ -250,35 +250,35 @@ void* power_thread(void* arg)
                     }
                     
                     //判断阈值状态
-                    if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up&&_globalPowerWarningInfo.w_voltage_up)
+                    if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up=_globalPowerWarningInfo.w_voltage_up;
                         /*高电压 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_UP);
+                       if (_globalPowerWarningInfo.w_voltage_up) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_UP);       
                     }
-                    if (_globalPowerWarningInfo.w_voltage_down!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down&&_globalPowerWarningInfo.w_voltage_down)
+                    if (_globalPowerWarningInfo.w_voltage_down!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down=_globalPowerWarningInfo.w_voltage_down;
                         /*低电压 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_DOWN);
+                       if(_globalPowerWarningInfo.w_voltage_down) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_DOWN);
                     }
-                    if (_globalPowerWarningInfo.w_current!=_globalPowerMangerTemp->_PowerWarninginfo.w_current&&_globalPowerWarningInfo.w_current)
+                    if (_globalPowerWarningInfo.w_current!=_globalPowerMangerTemp->_PowerWarninginfo.w_current)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_current=_globalPowerWarningInfo.w_current;
                         /*高电流 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_A_UP);
+                       if(_globalPowerWarningInfo.w_current) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_A_UP);
                     }
-                    if (_globalPowerWarningInfo.w_power!=_globalPowerMangerTemp->_PowerWarninginfo.w_power&&_globalPowerWarningInfo.w_power)
+                    if (_globalPowerWarningInfo.w_power!=_globalPowerMangerTemp->_PowerWarninginfo.w_power)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_power=_globalPowerWarningInfo.w_power;
                         /*高功率 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_W_UP);
+                       if(_globalPowerWarningInfo.w_power) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_W_UP);
                     }
-                    if (_globalPowerWarningInfo.w_consumption!=_globalPowerMangerTemp->_PowerWarninginfo.w_consumption&&_globalPowerWarningInfo.w_consumption)
+                    if (_globalPowerWarningInfo.w_consumption!=_globalPowerMangerTemp->_PowerWarninginfo.w_consumption)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_consumption=_globalPowerWarningInfo.w_consumption;
                         /*高耗电 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
+                        if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
                     //动作
                     if (__globalDeviceManage._global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
@@ -462,12 +462,37 @@ void* power_thread(void* arg)
                         }
                     }
                     //插入数据库
-                     if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up&&_globalPowerWarningInfo.w_voltage_up)
+                     if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up=_globalPowerWarningInfo.w_voltage_up;
                         /*未知故障 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,-1);
+                       if(_globalPowerWarningInfo.w_voltage_up) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_UP);
                     }
+                    if (_globalPowerWarningInfo.w_voltage_down!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down)
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down=_globalPowerWarningInfo.w_voltage_down;
+                        /*低电压 */
+                       if(_globalPowerWarningInfo.w_voltage_down) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_DOWN);
+                    }
+                    if (_globalPowerWarningInfo.w_current!=_globalPowerMangerTemp->_PowerWarninginfo.w_current)
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_current=_globalPowerWarningInfo.w_current;
+                        /*高电流 */
+                        if(_globalPowerWarningInfo.w_current)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_A_UP);
+                    }
+                    if (_globalPowerWarningInfo.w_power!=_globalPowerMangerTemp->_PowerWarninginfo.w_power)
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_power=_globalPowerWarningInfo.w_power;
+                        /*高功率 */
+                        if(_globalPowerWarningInfo.w_power)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_W_UP);
+                    }
+                    if (_globalPowerWarningInfo.w_consumption!=_globalPowerMangerTemp->_PowerWarninginfo.w_consumption)
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_consumption=_globalPowerWarningInfo.w_consumption;
+                        /*高耗电 */
+                        if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
+                    }
+
                     //else
                    //log_i("%s ch%d insert data ok status:%d.\n",_globalPowerInfo.samp_time,_globalPowerMangerTemp->product_ch_id,_globalPowerInfo.product_status);
                     //判断阈值状态
@@ -550,41 +575,41 @@ void* power_thread(void* arg)
                             }
                         }
                         // 判断阈值状态
-                        if (_globalTACWarningInfo.w_voltage_up != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_voltage_up && _globalTACWarningInfo.w_voltage_up)
+                        if (_globalTACWarningInfo.w_voltage_up != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_voltage_up )
                         {
                             _pTreeACPowerMangerTemp->_PowerWarninginfo.w_voltage_up = _globalTACWarningInfo.w_voltage_up;
                             /*高电压 */
-                            dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_V_UP);
+                           if( _globalTACWarningInfo.w_voltage_up) dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_V_UP);
                         }
-                        if (_globalTACWarningInfo.w_voltage_down != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_voltage_down && _globalTACWarningInfo.w_voltage_down)
+                        if (_globalTACWarningInfo.w_voltage_down != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_voltage_down )
                         {
                             _pTreeACPowerMangerTemp->_PowerWarninginfo.w_voltage_down = _globalTACWarningInfo.w_voltage_down;
                             /*低电压 */
-                            dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_V_DOWN);
+                            if( _globalTACWarningInfo.w_voltage_down)dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_V_DOWN);
                         }
-                        if (_globalTACWarningInfo.w_current != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_current && _globalTACWarningInfo.w_current)
+                        if (_globalTACWarningInfo.w_current != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_current )
                         {
                             _pTreeACPowerMangerTemp->_PowerWarninginfo.w_current = _globalTACWarningInfo.w_current;
                             /*高电流 */
-                            dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_A_UP);
+                            if( _globalTACWarningInfo.w_current)dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_A_UP);
                         }
-                        if (_globalTACWarningInfo.w_power != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_power && _globalTACWarningInfo.w_power)
+                        if (_globalTACWarningInfo.w_power != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_power )
                         {
                             _pTreeACPowerMangerTemp->_PowerWarninginfo.w_power = _globalTACWarningInfo.w_power;
                             /*高功率 */
-                            dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_W_UP);
+                            if( _globalTACWarningInfo.w_power)dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_W_UP);
                         }
-                        if (_globalTACWarningInfo.w_consumption != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_consumption && _globalTACWarningInfo.w_consumption)
+                        if (_globalTACWarningInfo.w_consumption != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_consumption)
                         {
                             _pTreeACPowerMangerTemp->_PowerWarninginfo.w_consumption = _globalTACWarningInfo.w_consumption;
                             /*高耗电 */
-                            dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_P_UP);
+                            if(_globalTACWarningInfo.w_consumption)dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_P_UP);
                         }
-                        if (_globalTACWarningInfo.w_phase_loss != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_phase_loss && _globalTACWarningInfo.w_phase_loss)
+                        if (_globalTACWarningInfo.w_phase_loss != _pTreeACPowerMangerTemp->_PowerWarninginfo.w_phase_loss )
                         {
                             _pTreeACPowerMangerTemp->_PowerWarninginfo.w_phase_loss = _globalTACWarningInfo.w_phase_loss;
                             /*缺项 */
-                            dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_STIME);
+                            if( _globalTACWarningInfo.w_phase_loss)dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_STIME);
                         }
                     }
 
@@ -644,35 +669,35 @@ void* power_thread(void* arg)
                         }
                     }
                     //判断阈值状态
-                    if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up&&_globalPowerWarningInfo.w_voltage_up)
+                    if (_globalPowerWarningInfo.w_voltage_up!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_voltage_up=_globalPowerWarningInfo.w_voltage_up;
                         /*高电压 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_UP);
+                       if(_globalPowerWarningInfo.w_voltage_up) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_UP);
                     }
-                    if (_globalPowerWarningInfo.w_voltage_down!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down&&_globalPowerWarningInfo.w_voltage_down)
+                    if (_globalPowerWarningInfo.w_voltage_down!=_globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_voltage_down=_globalPowerWarningInfo.w_voltage_down;
                         /*低电压 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_DOWN);
+                       if(_globalPowerWarningInfo.w_voltage_down) dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_V_DOWN);
                     }
-                    if (_globalPowerWarningInfo.w_current!=_globalPowerMangerTemp->_PowerWarninginfo.w_current&&_globalPowerWarningInfo.w_current)
+                    if (_globalPowerWarningInfo.w_current!=_globalPowerMangerTemp->_PowerWarninginfo.w_current)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_current=_globalPowerWarningInfo.w_current;
                         /*高电流 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_A_UP);
+                        if(_globalPowerWarningInfo.w_current)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_A_UP);
                     }
-                    if (_globalPowerWarningInfo.w_power!=_globalPowerMangerTemp->_PowerWarninginfo.w_power&&_globalPowerWarningInfo.w_power)
+                    if (_globalPowerWarningInfo.w_power!=_globalPowerMangerTemp->_PowerWarninginfo.w_power)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_power=_globalPowerWarningInfo.w_power;
                         /*高功率 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_W_UP);
+                        if(_globalPowerWarningInfo.w_power)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_W_UP);
                     }
-                    if (_globalPowerWarningInfo.w_consumption!=_globalPowerMangerTemp->_PowerWarninginfo.w_consumption&&_globalPowerWarningInfo.w_consumption)
+                    if (_globalPowerWarningInfo.w_consumption!=_globalPowerMangerTemp->_PowerWarninginfo.w_consumption)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_consumption=_globalPowerWarningInfo.w_consumption;
                         /*高耗电 */
-                        dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
+                        if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
                     /*
                     GlobalOverManager overmanager;
@@ -1443,7 +1468,13 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         _globalDeviceManager->_globalPowerManger.product_ch_type = type;
         _globalDeviceManager->_globalPowerManger.product_ch_status = 0;
         _globalDeviceManager->_globalPowerManger.product_ch_start_delay = 1000;     
-        _globalDeviceManager->_globalPowerManger.product_ch_stop_delay = 1000;       
+        _globalDeviceManager->_globalPowerManger.product_ch_stop_delay = 1000;
+        _globalDeviceManager->_globalPowerManger.global_over_manager->product_cur_over_upper_threshold_ctrl =ALARM_CTRL_ALARM_ONLY;//默认超限只报警
+        _globalDeviceManager->_globalPowerManger.global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+        _globalDeviceManager->_globalPowerManger.global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+        _globalDeviceManager->_globalPowerManger.global_over_manager->product_vol_over_lower_threshold_ctrl= ALARM_CTRL_ALARM_ONLY;
+        _globalDeviceManager->_globalPowerManger.global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
         if(dev_insert_power_manage_info(_globalDeviceManager->db,
                                     _globalDeviceManager->_global_device_info->product_id,
                                     0,
@@ -1618,7 +1649,12 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
  
                             _globalPowerMangerTemp->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
                             _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
- 
+
+                            _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
+                            _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
 
                             if(dev_insert_power_manage_info(_globalDeviceManager->db,
                                                         _globalDeviceManager->_global_device_info->product_id,
@@ -1758,6 +1794,13 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                             _globalPowerMangerTemp->product_ch_status = 0;
                             _globalPowerMangerTemp->product_ch_start_delay = 1000;
                             _globalPowerMangerTemp->product_ch_stop_delay = 1000;
+
+                            _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
+                            _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
                             if(dev_insert_power_manage_info(_globalDeviceManager->db,
                                                         _globalDeviceManager->_global_device_info->product_id,
                                                         _globalPowerMangerTemp->product_ch_id,
@@ -1823,7 +1866,12 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
                             _globalPowerMangerTemp->product_ch_start_delay =1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
                             _globalPowerMangerTemp->product_ch_stop_delay =1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
-                        
+
+                            _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
+                            _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl =ALARM_CTRL_ALARM_ONLY;
+                            _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
 
                             if(dev_insert_power_manage_info(_globalDeviceManager->db,
                                                         _globalDeviceManager->_global_device_info->product_id,
@@ -1896,6 +1944,12 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                                 _globalPowerMangerTemp->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
                                 _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
 
+                                _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
+                                _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl =ALARM_CTRL_ALARM_ONLY;
+
                                 if (dev_insert_power_manage_info(_globalDeviceManager->db,
                                                                  _globalDeviceManager->_global_device_info->product_id,
                                                                  _globalPowerMangerTemp->product_ch_id,
@@ -2016,6 +2070,12 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                                     _globalPowerMangerTemp->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
                                     _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
 
+                                    _globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY; // 默认超限只报警
+                                    _globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                    _globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                    _globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                    _globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+                                    
                                     if (dev_insert_power_manage_info(_globalDeviceManager->db,
                                                                      _globalDeviceManager->_global_device_info->product_id,
                                                                      _globalPowerMangerTemp->product_ch_id,

+ 74 - 2
pro/src/appweb_handle.c

@@ -2058,7 +2058,48 @@ static void alarmProtect(void *conn)
         if (_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold!=0){_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
         }else{_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 0 ;} 
         //_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
-            
+
+        char Alarm_Ctrl_type[16];
+        memset(Alarm_Ctrl_type, 0, sizeof(Alarm_Ctrl_type));
+        sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
+
+        if (_alarm_request_info._pwr_info.currentUpperAction && strcmp(_alarm_request_info._pwr_info.currentUpperAction,Alarm_Ctrl_type) == 0)
+        {
+            _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+        }
+        else
+            _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+        if (_alarm_request_info._pwr_info.voltageUpperAction && strcmp(_alarm_request_info._pwr_info.voltageUpperAction, Alarm_Ctrl_type) == 0)
+        {
+            _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+        }
+        else
+            _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+        if (_alarm_request_info._pwr_info.voltageDownAction && strcmp(_alarm_request_info._pwr_info.voltageDownAction, Alarm_Ctrl_type) == 0)
+        {
+            _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+        }
+        else
+            _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+        if (_alarm_request_info._pwr_info.powerUpperAction && strcmp(_alarm_request_info._pwr_info.powerUpperAction, Alarm_Ctrl_type) == 0)
+        {
+            _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+        }
+        else
+            _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+        if (_alarm_request_info._pwr_info.alarmContentUpperAction && strcmp(_alarm_request_info._pwr_info.alarmContentUpperAction, Alarm_Ctrl_type) == 0)
+        {
+            _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+        }
+        else
+            _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+
+
         ret=g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerSaveTemp->product_ch_type
                                         ,_globalPowerMangerSaveTemp->product_saddr
                                         ,(_globalPowerMangerSaveTemp->product_ch_addr)
@@ -2094,7 +2135,10 @@ static void alarmProtect(void *conn)
             {
                 break;
             }
-        }  
+        }
+        char Alarm_Ctrl_type[16];
+        memset(Alarm_Ctrl_type, 0, sizeof(Alarm_Ctrl_type));
+        sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
         switch (_globalSensorMangerSaveTemp->sensor_type)
         {
         case SENSOR_TYPE_TEMPERATURE:
@@ -2104,6 +2148,21 @@ static void alarmProtect(void *conn)
                 _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold = atof(_alarm_request_info._sensor_info.thresholdDownValue);
                 _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_enabled = 1;
                 _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_enabled = 1;
+                
+                if (_alarm_request_info._sensor_info.thresholdUpperAction && strcmp(_alarm_request_info._sensor_info.thresholdUpperAction,Alarm_Ctrl_type) == 0)
+                {
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+                }
+                else
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+                if (_alarm_request_info._sensor_info.thresholdDownAction && strcmp(_alarm_request_info._sensor_info.thresholdDownAction, Alarm_Ctrl_type) == 0)
+                {
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+                }
+                else
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
             }
             else if (strcmp(_alarm_request_info._sensor_info.thresholdType, language_humidity[__globalDeviceManage._global_device_info->product_language]) == 0)
             {
@@ -2111,6 +2170,19 @@ static void alarmProtect(void *conn)
                 _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold = atof(_alarm_request_info._sensor_info.thresholdDownValue);
                 _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_enabled = 1;
                 _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_enabled = 1;
+                if (_alarm_request_info._sensor_info.thresholdUpperAction && strcmp(_alarm_request_info._sensor_info.thresholdUpperAction, Alarm_Ctrl_type) == 0)
+                {
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+                }
+                else
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
+
+                if (_alarm_request_info._sensor_info.thresholdDownAction && strcmp(_alarm_request_info._sensor_info.thresholdDownAction, Alarm_Ctrl_type) == 0)
+                {
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
+                }
+                else
+                    _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
             }
 
             break;

+ 9 - 0
pro/src/common.h

@@ -184,6 +184,15 @@ enum WARNING_BIT_CTRL
     WARNING_W_UP     = 256,
     WARNING_P_UP     = 1024,
 };
+
+/// @brief 报警动作
+enum ALARM_CTRL
+{
+    ALARM_CTRL_CLOSE_CH     = 1 ,
+    ALARM_CTRL_ALARM_ONLY     = 2 ,
+    ALARM_CTRL_CLOSE_ALLCH     = 3 ,
+};
+
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 //modbus信息管理

+ 158 - 172
pro/src/json_handle.c

@@ -2859,6 +2859,13 @@ char* alarm_power_threshold_to_json(GlobalPowerManger* _globalPowerManger)
     cJSON* data_root_array = cJSON_CreateArray();
 
     char temp[32] = {0};
+    char Closetemp[32] = {0};
+    char Alarmtemp[32] = {0};
+    sprintf(Closetemp, "%d", ALARM_CTRL_CLOSE_CH);
+    sprintf(Alarmtemp, "%d", ALARM_CTRL_ALARM_ONLY);
+    // language_alarm_ctrl_Alarm[__globalDeviceManage._global_device_info->product_language]
+    // language_alarm_ctrl_CloseCH[__globalDeviceManage._global_device_info->product_language]
+
     list_for_each_entry(_globalPowerMangerTemp, &_globalPowerManger->list, list)
     {
 
@@ -2880,6 +2887,41 @@ char* alarm_power_threshold_to_json(GlobalPowerManger* _globalPowerManger)
         sprintf(temp,"%0.2f",_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_threshold);
         cJSON_AddStringToObject(data_filed,"alarmContentUpperValue",temp);
 
+        if (_globalPowerMangerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "currentUpperAction",Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "currentUpperAction", Alarmtemp);
+
+        if (_globalPowerMangerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl ==ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "voltageUpperAction", Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "voltageUpperAction", Alarmtemp);
+
+        if (_globalPowerMangerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "voltageDownAction",Closetemp );
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "voltageDownAction", Alarmtemp);
+
+        if (_globalPowerMangerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "powerUpperAction", Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "powerUpperAction", Alarmtemp);
+
+        if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "alarmContentUpperAction", Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "alarmContentUpperAction", Alarmtemp);
+
         cJSON_AddItemToObject(data_root_array, "data", data_filed);       
     }
 
@@ -2898,6 +2940,43 @@ char* alarm_power_threshold_to_json(GlobalPowerManger* _globalPowerManger)
         cJSON_AddStringToObject(data_filed,"powerUpperValue",temp);
         sprintf(temp,"%0.2f",_globalPowerManger->global_over_manager->product_pwrcon_upper_threshold);
         cJSON_AddStringToObject(data_filed,"alarmContentUpperValue",temp);
+
+        if (_globalPowerManger->global_over_manager->product_cur_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "currentUpperAction",Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "currentUpperAction",Alarmtemp);
+
+        if (_globalPowerManger->global_over_manager->product_vol_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "voltageUpperAction", Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "voltageUpperAction", Alarmtemp);
+
+        if (_globalPowerManger->global_over_manager->product_vol_over_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "voltageDownAction", Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "voltageDownAction", Alarmtemp);
+
+        if (_globalPowerManger->global_over_manager->product_pwr_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "powerUpperAction", Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "powerUpperAction", Alarmtemp);
+
+        if (_globalPowerManger->global_over_manager->product_pwrcon_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+        {
+            cJSON_AddStringToObject(data_filed, "alarmContentUpperAction",Closetemp);
+        }
+        else
+            cJSON_AddStringToObject(data_filed, "alarmContentUpperAction", Alarmtemp);
+
+
         cJSON_AddItemToObject(data_root_array, "data", data_filed);   
 
     //添加汇总
@@ -2927,6 +3006,14 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
     //创建数据
     cJSON* data_root_array = cJSON_CreateArray();   
 
+    char Closetemp[32] = {0};
+    char Alarmtemp[32] = {0};
+    sprintf(Closetemp, "%d", ALARM_CTRL_CLOSE_CH);
+    sprintf(Alarmtemp, "%d", ALARM_CTRL_ALARM_ONLY);
+    // language_alarm_ctrl_Alarm[__globalDeviceManage._global_device_info->product_language]
+    // language_alarm_ctrl_CloseCH[__globalDeviceManage._global_device_info->product_language]
+
+
     //循环添加数据
     list_for_each_entry(_globalSensorMangerTemp, &_globalSensorManger->list, list)
     {
@@ -2945,6 +3032,18 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             cJSON_AddStringToObject(data_filed, "thresholdUpperValue", temp);
             sprintf(temp, "%0.2f", _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold);
             cJSON_AddStringToObject(data_filed, "thresholdDownValue", temp);
+            if (_globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                cJSON_AddStringToObject(data_filed, "thresholdUpperAction",Closetemp);
+            }
+            else
+                cJSON_AddStringToObject(data_filed, "thresholdUpperAction", Alarmtemp);
+            if (_globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                cJSON_AddStringToObject(data_filed, "thresholdDownAction", Closetemp);
+            }
+            else
+                cJSON_AddStringToObject(data_filed, "thresholdDownAction", Alarmtemp);
             cJSON_AddItemToObject(data_root_array, "data", data_filed);
             data_filed = cJSON_CreateObject();
             sprintf(temp, "%d", _globalSensorMangerTemp->sensor_status);
@@ -2958,6 +3057,18 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             cJSON_AddStringToObject(data_filed, "thresholdUpperValue", temp);
             sprintf(temp, "%0.2f", _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold);
             cJSON_AddStringToObject(data_filed, "thresholdDownValue", temp);
+            if (_globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                cJSON_AddStringToObject(data_filed, "thresholdUpperAction",Closetemp);
+            }
+            else
+                cJSON_AddStringToObject(data_filed, "thresholdUpperAction", Alarmtemp);
+            if (_globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                cJSON_AddStringToObject(data_filed, "thresholdDownAction", Closetemp);
+            }
+            else
+                cJSON_AddStringToObject(data_filed, "thresholdDownAction", Alarmtemp);
             cJSON_AddItemToObject(data_root_array, "data", data_filed);
             break;
         case SENSOR_TYPE_SMOKE:
@@ -2989,6 +3100,18 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             cJSON_AddStringToObject(data_filed, "thresholdUpperValue", temp);
             sprintf(temp, "%0.2f", _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold);
             cJSON_AddStringToObject(data_filed, "thresholdDownValue", temp);
+            if (_globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                cJSON_AddStringToObject(data_filed, "thresholdUpperAction", Closetemp);
+            }
+            else
+                cJSON_AddStringToObject(data_filed, "thresholdUpperAction",Alarmtemp);
+            if (_globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                cJSON_AddStringToObject(data_filed, "thresholdDownAction", Closetemp);
+            }
+            else
+                cJSON_AddStringToObject(data_filed, "thresholdDownAction", Alarmtemp);
             cJSON_AddItemToObject(data_root_array, "data", data_filed);
             break;
         }
@@ -3512,6 +3635,37 @@ cJSON* json_to_alarm_manage(const char* str,_AlarmRequestInfo* _alarm_request_in
     if(cjson_thresholdUpperValue!=NULL)
         _alarm_request_info->_sensor_info.thresholdUpperValue = cjson_thresholdUpperValue->valuestring ;
 
+
+    cJSON* cjson_currentUpperAction = cJSON_GetObjectItem(cjson,"currentUpperAction");
+    if(cjson_currentUpperAction!=NULL)
+        _alarm_request_info->_pwr_info.currentUpperAction = cjson_currentUpperAction->valuestring ;
+
+    cJSON* cjson_voltageUpperAction = cJSON_GetObjectItem(cjson,"voltageUpperAction");
+    if(cjson_voltageUpperAction!=NULL)
+        _alarm_request_info->_pwr_info.voltageUpperAction = cjson_voltageUpperAction->valuestring ;
+
+            cJSON* cjson_voltageDownAction = cJSON_GetObjectItem(cjson,"voltageDownAction");
+    if(cjson_voltageDownAction!=NULL)
+        _alarm_request_info->_pwr_info.voltageDownAction = cjson_voltageDownAction->valuestring ;
+
+            cJSON* cjson_powerUpperAction = cJSON_GetObjectItem(cjson,"powerUpperAction");
+    if(cjson_powerUpperAction!=NULL)
+        _alarm_request_info->_pwr_info.powerUpperAction = cjson_powerUpperAction->valuestring ;
+
+            cJSON* cjson_alarmContentUpperAction = cJSON_GetObjectItem(cjson,"alarmContentUpperAction");
+    if(cjson_alarmContentUpperAction!=NULL)
+        _alarm_request_info->_pwr_info.alarmContentUpperAction = cjson_alarmContentUpperAction->valuestring ;
+
+    cJSON* cjson_thresholdDownAction = cJSON_GetObjectItem(cjson,"thresholdDownAction");
+    if(cjson_thresholdDownAction!=NULL)
+        _alarm_request_info->_sensor_info.thresholdDownAction = cjson_thresholdDownAction->valuestring ;
+
+            cJSON* cjson_thresholdUpperAction= cJSON_GetObjectItem(cjson,"thresholdUpperAction");
+    if(cjson_thresholdUpperAction!=NULL)
+        _alarm_request_info->_sensor_info.thresholdUpperAction = cjson_thresholdUpperAction->valuestring ;
+
+
+
     return cjson;
 }
 
@@ -4249,179 +4403,7 @@ char* service_group_ack_to_json(GroupInfo* _globalgroupInfo)
     cJSON_Delete(root);
     return str;
 }
-/**
- * @brief 发送设备告警信息
- *
- * 根据指定的告警类型,构建告警信息并发送。
- *
- * @param __globalDeviceManger 全局设备管理器指针
- * @param __globalPowerTemp 全局电源管理器指针
- * @param _AlarmType 告警类型
- *
- * @return 返回值为0表示发送成功,非0表示发送失败
- */
-int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType)
-{
-    char AlarmText[256];
-    int languagesID=0;
-    struct tm* t ;
-    switch (_AlarmType)
-    {
-    case WARNING_V_UP:
-    {
-        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_V[languagesID],language_alarm_Up[languagesID]);
-    }
-        break;
-    case WARNING_V_DOWN:
-    {
-        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_V[languagesID],language_alarm_Down[languagesID]);
-    }
-        break;
-    case WARNING_A_UP:
-    {
-        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_A[languagesID],language_alarm_Up[languagesID]);
-    }        
-        break;
-    case WARNING_W_UP:
-    {
-        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_W[languagesID],language_alarm_Up[languagesID]);
-    }
-        break;
-    case WARNING_P_UP:
-    {
-        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_P[languagesID],language_alarm_Up[languagesID]);
-    }
-        break;
-    default:
-        sprintf(AlarmText,"$通道$|%s |$%s$",__globalPowerTemp->product_ch_name,language_alarm_NULL_ERROR[languagesID]);
-        break;
-    }
-    time_t now;
-    time(&now);
-    t = localtime(&now);
 
-    char buffer[80];
-    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,0,buffer,AlarmText);
-    return 0;
-}
-/**
- * @brief 发送 AC 设备告警信息
- *
- * 根据给定的告警类型,生成对应的告警文本,并将其插入到告警信息数据库中。
- *
- * @param __globalDeviceManger 全局设备管理器指针
- * @param __globalPowerTemp 全局 AC 管理器指针
- * @param _AlarmType 告警类型
- *
- * @return 返回值为 0 表示成功,其他值表示失败
- */
-int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType)
-{
-        char AlarmText[256];
-    int languagesID=0;
-    struct tm *t;
-    switch (_AlarmType)
-    {
-    case ENABLE_TAC_V_UP:
-    {
-        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_V[languagesID], language_alarm_Up[languagesID]);
-    }
-    break;
-    case ENABLE_TAC_V_DOWN:
-    {
-        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_V[languagesID], language_alarm_Down[languagesID]);
-    }
-    break;
-    case ENABLE_TAC_A_UP:
-    {
-        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_A[languagesID], language_alarm_Up[languagesID]);
-    }
-    break;
-    case ENABLE_TAC_W_UP:
-    {
-        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_W[languagesID], language_alarm_Up[languagesID]);
-    }
-    break;
-    case ENABLE_TAC_P_UP:
-    {
-        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_P[languagesID], language_alarm_Up[languagesID]);
-    }
-    break;
-    case ENABLE_TAC_STIME:
-    case ENABLE_TAC_ETIME:
-    default:
-        sprintf(AlarmText, "$通道$|%d%c |$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_NULL_ERROR[languagesID]);
-        break;
-    }
-    time_t now;
-    time(&now);
-    t = localtime(&now);
-
-    char buffer[80];
-    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,0,buffer,AlarmText);
-    return 0;
-}
-/**
- * @brief 发送传感器告警信息
- *
- * 根据给定的全局设备管理器、全局传感器管理器和告警类型,发送传感器告警信息。
- *
- * @param __globalDeviceManger 全局设备管理器指针
- * @param __globalPowerTemp 全局传感器管理器指针
- * @param _AlarmType 告警类型
- *
- * @return 成功返回0,失败返回-1
- */
-int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType)
-{
-    char AlarmText[256];
-    int languagesID=0;
-    struct tm* t ;
-    if (!__globalPowerTemp)
-    {
-        return -1;
-    }
-    
-    switch (__globalPowerTemp->sensor_type)
-    {
-    case SENSOR_TYPE_TEMPERATURE:
-    {
-        switch (_AlarmType)
-        {
-        case SENSOR_VAL1_UPPER:
-            sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
-            break;
-        case SENSOR_VAL1_LOWER:
-            sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
-            break;
-        case SENSOR_VAL2_UPPER:
-            sprintf(AlarmText, "%s |$湿度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
-            break;
-        case SENSOR_VAL2_LOWER:
-            sprintf(AlarmText, "%s |$湿度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
-            break;
-        default:
-            sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_NULL_ERROR[languagesID]);
-            break;
-        }
-    }
-        break;
-    default:
-        sprintf(AlarmText,"%s |$%s$",__globalPowerTemp->sensor_name,language_alarm_NULL_ERROR[languagesID]);
-        break;
-    }
-    
-    time_t now;
-    time(&now);
-    t = localtime(&now);
-
-    char buffer[80];
-    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,1,buffer,AlarmText);
-    return 0;
-}
 int GetRoleIDByUserName(char* _userName,UserInfo* __UserInfo_t)
 {
     int nRole = -1;
@@ -4716,4 +4698,8 @@ void InitHashTable(HashTable *table)
     insert_Newhash(table,(const char*)language_alarm_RS485_slave[0], language_alarm_RS485_slave, nMaxSize);
     insert_Newhash(table,(const char*)language_NTP_install[0], language_NTP_install, nMaxSize);
     //22
+    insert_Newhash(table,(const char*)language_alarm_ctrl_OpenCH[0],language_alarm_ctrl_OpenCH,nMaxSize);
+    insert_Newhash(table,(const char*)language_alarm_ctrl_CloseCH[0],language_alarm_ctrl_CloseCH,nMaxSize);
+    insert_Newhash(table,(const char*)language_alarm_ctrl_Alarm[0],language_alarm_ctrl_Alarm,nMaxSize);
+    //25
 }

+ 8 - 5
pro/src/json_handle.h

@@ -240,6 +240,11 @@ typedef struct
     bool bUpdatepowerUpperValue;
     bool bUpdatevoltageDownValue;
     bool bUpdatevoltageUpperValue;
+    char* currentUpperAction;
+    char* voltageUpperAction;
+    char*voltageDownAction;
+     char* powerUpperAction;
+     char* alarmContentUpperAction;
 }_Power_AlarmRequestInfo;
 
 /// @brief 传感器类阈值设置
@@ -252,6 +257,9 @@ typedef struct
     char* thresholdType;
     char* thresholdDownValue;
     char* thresholdUpperValue;
+    char *thresholdDownAction;
+    char *thresholdUpperAction;
+
 }_Sensor_AlarmRequestInfo;
 
 
@@ -536,11 +544,6 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
 
 int json_to_switch_language(const char* str);
 
-//============================================================================
-int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType);
-int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType);
-int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType);
-
 void InitHashTable(HashTable *table);
 
 

+ 25 - 2
pro/src/language_common.c

@@ -434,7 +434,7 @@ const char language_alarm_Down[LANGUAGE_TYPE][LANGUAGE_SIZE] =
 const char language_alarm_ctrl_Open[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
     "开启",
-    "OPEN ",
+    "OPEN",
     "Открыть",
     " "
 } ;
@@ -442,10 +442,33 @@ const char language_alarm_ctrl_Open[LANGUAGE_TYPE][LANGUAGE_SIZE] =
 const char language_alarm_ctrl_Close[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {
     "关闭",
-    "CLOSE ",
+    "CLOSE",
     "Закрыть",
     " "
 } ;
+const char language_alarm_ctrl_OpenCH[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "开启通道",
+    "Open channel  ",
+    "Открыть канал",
+    " "
+} ;
+
+const char language_alarm_ctrl_CloseCH[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "关闭通道",
+    "Close channel ",
+    "Закрыть канал",
+    " "
+} ;
+
+const char language_alarm_ctrl_Alarm[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
+{
+    "仅报警",
+    "Alarm only",
+    "Только напоминание",
+    " "
+} ;
 
 const char language_alarm_Ctrl_ALL[LANGUAGE_TYPE][LANGUAGE_SIZE] = 
 {

+ 6 - 0
pro/src/language_common.h

@@ -115,6 +115,12 @@ extern const char language_alarm_ctrl_Open[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_alarm_ctrl_Close[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
+extern const char language_alarm_ctrl_OpenCH[LANGUAGE_TYPE][LANGUAGE_SIZE];
+
+extern const char language_alarm_ctrl_CloseCH[LANGUAGE_TYPE][LANGUAGE_SIZE];
+
+extern const char language_alarm_ctrl_Alarm[LANGUAGE_TYPE][LANGUAGE_SIZE] ;
+
 extern const char language_alarm_Ctrl_ALL[LANGUAGE_TYPE][LANGUAGE_SIZE];
 
 extern const char language_alarm_connect_ERROR[LANGUAGE_TYPE][LANGUAGE_SIZE];

+ 245 - 1
pro/src/sqlite_handle.c

@@ -5,7 +5,7 @@
 #include "time.h"
 #include "paras.h"
 #include "cfg.h"
-
+#include "switch_ctrl.h"
 
 #define	TOTAL_COUNT	60//统计总数
 
@@ -455,6 +455,7 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
                     _overChnPwrBackInfoTemp->ph_current = 0.0;
                     _overChnPwrBackInfoTemp->ph_power = 0.0;
                     _overChnPwrBackInfoTemp->ph_consumption = 0.0;
+                    continue;
                 }
                 if (nStatus>=0)
                 {
@@ -2962,4 +2963,247 @@ int dev_delete_power_ds(sqlite3 *db,int product_id,int nChn,_PowerDSManage_t* _p
     }
     sqlite3_free_table(pResult);
     return 0;
+}
+
+/**
+ * @brief 发送设备告警信息
+ *
+ * 根据指定的告警类型,构建告警信息并发送。
+ *
+ * @param __globalDeviceManger 全局设备管理器指针
+ * @param __globalPowerTemp 全局电源管理器指针
+ * @param _AlarmType 告警类型
+ *
+ * @return 返回值为0表示发送成功,非0表示发送失败
+ */
+int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType)
+{
+    char AlarmText[256];
+    int languagesID=0;
+    struct tm* t ;
+    switch (_AlarmType)
+    {
+    case WARNING_V_UP:
+    {
+        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_V[languagesID],language_alarm_Up[languagesID]);
+    }
+        break;
+    case WARNING_V_DOWN:
+    {
+        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_V[languagesID],language_alarm_Down[languagesID]);
+    }
+        break;
+    case WARNING_A_UP:
+    {
+        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_A[languagesID],language_alarm_Up[languagesID]);
+    }        
+        break;
+    case WARNING_W_UP:
+    {
+        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_W[languagesID],language_alarm_Up[languagesID]);
+    }
+        break;
+    case WARNING_P_UP:
+    {
+        sprintf(AlarmText,"$通道$|%s |$%s$|$%s$",__globalPowerTemp->product_ch_name,language_alarm_P[languagesID],language_alarm_Up[languagesID]);
+    }
+        break;
+    default:
+        sprintf(AlarmText,"$通道$|%s |$%s$",__globalPowerTemp->product_ch_name,language_alarm_NULL_ERROR[languagesID]);
+        break;
+    }
+    time_t now;
+    time(&now);
+    t = localtime(&now);
+
+    char buffer[80];
+    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
+    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,0,buffer,AlarmText);
+
+    // 超限动作
+    
+    int ret = -1 ;
+    int nchID = __globalPowerTemp->product_ch_id;
+    if (__globalPowerTemp->global_over_manager)
+    {
+        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(&__globalDeviceManage._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(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                                                __globalPowerTemp->product_saddr,
+                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
+                                                0, false);
+            }
+        }
+        break;
+        case WARNING_A_UP:
+        {
+            if (__globalPowerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
+            {
+                ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._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(&__globalDeviceManage._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(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                                                __globalPowerTemp->product_saddr,
+                                                __globalPowerTemp->product_ch_addr, // 多版端口余8
+                                                0, false);
+            }
+        }
+        break;
+        default:
+            break;
+        }
+    }
+    
+    return 0;
+}
+/**
+ * @brief 发送 AC 设备告警信息
+ *
+ * 根据给定的告警类型,生成对应的告警文本,并将其插入到告警信息数据库中。
+ *
+ * @param __globalDeviceManger 全局设备管理器指针
+ * @param __globalPowerTemp 全局 AC 管理器指针
+ * @param _AlarmType 告警类型
+ *
+ * @return 返回值为 0 表示成功,其他值表示失败
+ */
+int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType)
+{
+        char AlarmText[256];
+    int languagesID=0;
+    struct tm *t;
+    switch (_AlarmType)
+    {
+    case ENABLE_TAC_V_UP:
+    {
+        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_V[languagesID], language_alarm_Up[languagesID]);
+    }
+    break;
+    case ENABLE_TAC_V_DOWN:
+    {
+        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_V[languagesID], language_alarm_Down[languagesID]);
+    }
+    break;
+    case ENABLE_TAC_A_UP:
+    {
+        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_A[languagesID], language_alarm_Up[languagesID]);
+    }
+    break;
+    case ENABLE_TAC_W_UP:
+    {
+        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_W[languagesID], language_alarm_Up[languagesID]);
+    }
+    break;
+    case ENABLE_TAC_P_UP:
+    {
+        sprintf(AlarmText, "$通道$|%d%c |$%s$|$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_P[languagesID], language_alarm_Up[languagesID]);
+    }
+    break;
+    case ENABLE_TAC_STIME:
+    case ENABLE_TAC_ETIME:
+    default:
+        sprintf(AlarmText, "$通道$|%d%c |$%s$", __globalPowerTemp->product_ch_id, 'A' + __globalPowerTemp->product_ph_type, language_alarm_NULL_ERROR[languagesID]);
+        break;
+    }
+    time_t now;
+    time(&now);
+    t = localtime(&now);
+
+    char buffer[80];
+    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
+    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,0,buffer,AlarmText);
+    return 0;
+}
+/**
+ * @brief 发送传感器告警信息
+ *
+ * 根据给定的全局设备管理器、全局传感器管理器和告警类型,发送传感器告警信息。
+ *
+ * @param __globalDeviceManger 全局设备管理器指针
+ * @param __globalPowerTemp 全局传感器管理器指针
+ * @param _AlarmType 告警类型
+ *
+ * @return 成功返回0,失败返回-1
+ */
+int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType)
+{
+    char AlarmText[256];
+    int languagesID=0;
+    struct tm* t ;
+    if (!__globalPowerTemp)
+    {
+        return -1;
+    }
+    
+    switch (__globalPowerTemp->sensor_type)
+    {
+    case SENSOR_TYPE_TEMPERATURE:
+    {
+        switch (_AlarmType)
+        {
+        case SENSOR_VAL1_UPPER:
+            sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            break;
+        case SENSOR_VAL1_LOWER:
+            sprintf(AlarmText, "%s |$温度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            break;
+        case SENSOR_VAL2_UPPER:
+            sprintf(AlarmText, "%s |$湿度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Up[languagesID]);
+            break;
+        case SENSOR_VAL2_LOWER:
+            sprintf(AlarmText, "%s |$湿度$|$%s$", __globalPowerTemp->sensor_name, language_alarm_Down[languagesID]);
+            break;
+        default:
+            sprintf(AlarmText, "%s |$%s$", __globalPowerTemp->sensor_name, language_alarm_NULL_ERROR[languagesID]);
+            break;
+        }
+    }
+        break;
+    default:
+        sprintf(AlarmText,"%s |$%s$",__globalPowerTemp->sensor_name,language_alarm_NULL_ERROR[languagesID]);
+        break;
+    }
+    
+    time_t now;
+    time(&now);
+    t = localtime(&now);
+
+    char buffer[80];
+    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
+    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,1,buffer,AlarmText);
+    return 0;
 }

+ 6 - 0
pro/src/sqlite_handle.h

@@ -125,4 +125,10 @@ int dev_get_power_ds(sqlite3 *db,GlobalPowerManger* _powerAll,char* dateSelect);
 int dev_update_power_ds(sqlite3 *db,int product_id,int nChn,_PowerDSManage_t* _powerDS);
 int dev_insert_power_ds(sqlite3 *db,int product_id,int nChn,_PowerDSManage_t* _powerDS);
 int dev_delete_power_ds(sqlite3 *db,int product_id,int nChn,_PowerDSManage_t* _powerDS);
+
+//报警信息处理
+int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType);
+int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType);
+int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType);
+
 #endif