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

1增加了重置单个通道的功能
2增加了批量阈值功能

chenyuanjie лет назад: 2
Родитель
Сommit
af6690d5bc
5 измененных файлов с 290 добавлено и 6 удалено
  1. 254 4
      pro/src/appweb_handle.c
  2. 9 0
      pro/src/json_handle.c
  3. 2 0
      pro/src/json_handle.h
  4. 22 0
      pro/src/switch_ctrl.c
  5. 3 2
      pro/src/switch_ctrl.h

+ 254 - 4
pro/src/appweb_handle.c

@@ -1771,7 +1771,40 @@ static void channelStatusMonitoring(void* conn)
             }
         }
     }
-
+    else  if (strcmp(_over_chn_pwr_request.type, "batteryReset") == 0) // 耗电量复位
+    {
+        GlobalPowerManger *_globalPowerMangerTemp = NULL;
+        char *pCHlist;
+        char *pCHListSave;
+        pCHlist = strtok_r(_over_chn_pwr_request.strProductChIds, ",", &pCHListSave);
+        // 其他版本功能
+        while (pCHlist != NULL)
+        {
+            
+            int g_pwr_ch_id = atoi(pCHlist);
+            _globalPowerMangerTemp=NULL;
+            list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
+            {
+                if (_over_chn_pwr_request.productChId == g_pwr_ch_id)
+                {
+                    break;
+                }
+            }
+            if (_globalPowerMangerTemp != NULL)
+            {
+                GlobalTreeACManager *_globalTACManager = NULL;
+                list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
+                {
+                    
+                    if (g_switch_set_t_ac_phchn_reset(&__globalDeviceManage._globalRelaySampManger,_globalTACManager->product_saddr,_globalTACManager->product_ch_addr)<0)
+                    {
+                        log_e("Error: phchn_reset");
+                    }
+                }
+            }
+            pCHlist = strtok_r(NULL, ",", &pCHListSave);
+        }
+    }
 quit:
     cJSON_Delete(cjson);
     http_reply(conn, 200, ack_str);
@@ -2334,6 +2367,205 @@ static void sensorStatusMonitoring(void* conn)
     cJSON_free((void*)ack_str);
 }
 
+/**
+ * @brief 设置通道报警阈值
+ *
+ * 根据给定的通道ID,设置报警请求的通道阈值。
+ *
+ * @param _alarm_request_info 报警请求信息指针
+ * @param nChID 通道ID
+ *
+ * @return 指向设置后的通道阈值字符串的指针
+ */
+char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
+{
+        int ret = -1 ;
+    char *ack_str = NULL;
+    GlobalPowerManger *_globalPowerMangerSaveTemp;
+    // int g_pwr_ch_id = atoi(_alarm_request_info->_pwr_info.productChId);
+    int g_pwr_ch_id = nChID;
+    if (g_pwr_ch_id == 0)
+    {
+        _globalPowerMangerSaveTemp = &__globalDeviceManage._globalPowerManger;
+    }
+    else
+    {
+        list_for_each_entry(_globalPowerMangerSaveTemp, &__globalDeviceManage._globalPowerManger.list, list)
+        {
+            // ID相等 记录信息
+            if (_globalPowerMangerSaveTemp->product_ch_id == nChID)
+            {
+                break;
+            }
+        }
+    }
+
+    // 更新参数
+    if (_alarm_request_info->_pwr_info.voltageUpperValue)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold = atof(_alarm_request_info->_pwr_info.voltageUpperValue);
+    }
+    if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold != 0)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 1;
+    }
+    else
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 0;
+    }
+
+    if (_alarm_request_info->_pwr_info.voltageDownValue)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold = atof(_alarm_request_info->_pwr_info.voltageDownValue);
+    }
+    if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold != 0)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 1;
+    }
+    else
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 0;
+    }
+
+    if (_alarm_request_info->_pwr_info.currentUpperValue)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold = atof(_alarm_request_info->_pwr_info.currentUpperValue);
+    }
+
+    if (_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold != 0)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 1;
+    }
+    else
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 0;
+    }
+
+    if (_alarm_request_info->_pwr_info.powerUpperValue)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold = atof(_alarm_request_info->_pwr_info.powerUpperValue);
+    }
+    if (_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold != 0)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 1;
+    }
+    else
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 0;
+    }
+
+    if (_alarm_request_info->_pwr_info.alarmContentUpperValue)
+    {
+        _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold = atof(_alarm_request_info->_pwr_info.alarmContentUpperValue);
+    }
+    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;
+
+    if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+    {
+
+        GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
+        list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
+        {
+            memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
+            ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
+                                                    _globalPowerMangerSaveTemp->product_ch_type,
+                                                    _pTreeACPowerMangerTemp->product_saddr,
+                                                    _pTreeACPowerMangerTemp->product_ch_addr,
+                                                    _globalPowerMangerSaveTemp);
+        }
+    }
+    else
+    {
+        ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
+                                                _globalPowerMangerSaveTemp->product_ch_type,
+                                                _globalPowerMangerSaveTemp->product_saddr,
+                                                _globalPowerMangerSaveTemp->product_ch_addr,
+                                                _globalPowerMangerSaveTemp);
+    }
+
+    if (ret < 0)
+    {
+        log_e("power threshold update error.ret:%d,%s", ret, modbus_strerror(errno));
+        /* code */
+    }
+    if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+    {
+        // 写入数据库
+        ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
+                                                __globalDeviceManage._globalDevInfo.product_id,
+                                                _globalPowerMangerSaveTemp->product_ch_id,
+                                                _globalPowerMangerSaveTemp);
+        if (ret != 0)
+            log_e("power threshold update error.");
+        GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
+        list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
+        {
+            memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
+            ret = dev_update_t_ac_power_manage_over_info(__globalDeviceManage.db, _pTreeACPowerMangerTemp);
+        }
+    }
+    else
+    {
+        // 写入数据库
+        ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
+                                                __globalDeviceManage._globalDevInfo.product_id,
+                                                _globalPowerMangerSaveTemp->product_ch_id,
+                                                _globalPowerMangerSaveTemp);
+        if (ret != 0)
+            log_e("power threshold update error.");
+    }
+    // 返回数据
+    ack_str = ctrl_sts_ack_to_json();
+    return ack_str;
+}
+
 /// @brief 告警保护
 /// @param stream 
 static void alarmProtect(void *conn)
@@ -2472,9 +2704,11 @@ static void alarmProtect(void *conn)
         }
         
         //拿到参数保存
-        GlobalPowerManger* _globalPowerMangerSaveTemp ;
+        //GlobalPowerManger* _globalPowerMangerSaveTemp ;
         // int g_pwr_ch_id = atoi(_alarm_request_info._pwr_info.productChId);
         int g_pwr_ch_id = _alarm_request_info._pwr_info.productChId;
+        ack_str=setThresholdToCh(&_alarm_request_info,g_pwr_ch_id);
+        /*
         if (g_pwr_ch_id ==0)
         {
            _globalPowerMangerSaveTemp=&__globalDeviceManage._globalPowerManger;
@@ -2595,7 +2829,6 @@ static void alarmProtect(void *conn)
         if (ret<0)
         {
             log_e("power threshold update error.ret:%d,%s",ret,modbus_strerror(errno));
-            /* code */
         }
         if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
         {
@@ -2624,7 +2857,24 @@ static void alarmProtect(void *conn)
                 log_e("power threshold update error.");
         }
         //返回数据
-        ack_str = ctrl_sts_ack_to_json();
+        ack_str = ctrl_sts_ack_to_json();*/
+    }
+    else if (strcmp(_alarm_request_info.type, "batchSave") == 0) // 批量设置
+    {
+        if (!_alarm_request_info.user_token)
+        {
+            return;
+        }
+        char *pCHlist;
+        char *pCHListSave;
+        pCHlist = strtok_r(_alarm_request_info.strProductChIds, ",", &pCHListSave);
+        // 其他版本功能
+        while (pCHlist != NULL)
+        {
+            int g_pwr_ch_id = atoi(pCHlist);
+            ack_str = setThresholdToCh(&_alarm_request_info, g_pwr_ch_id);
+            pCHlist = strtok_r(NULL, ",", &pCHListSave);
+        }
     }
     else if(strcmp(_alarm_request_info.type,"sensorThresholdList")==0)//传感器阈值查询
     {

+ 9 - 0
pro/src/json_handle.c

@@ -1563,6 +1563,11 @@ cJSON* json_to_chn_pwr_status_monitor(const char* str,_OverChnPwrRequest* _over_
     {
         _over_chn_pwr_request->outputType = atoi(cjson_outputType->valuestring);
     }
+    cJSON* cjson_ProductChIds= cJSON_GetObjectItem(cjson,"productChIds");
+    if (cjson_ProductChIds)
+    {
+        _over_chn_pwr_request->strProductChIds = cjson_ProductChIds->valuestring;
+    }
     return cjson;
 }
 
@@ -4165,6 +4170,10 @@ cJSON* json_to_alarm_manage(const char* str,_AlarmRequestInfo* _alarm_request_in
     if (cjson_thresholdUpperChanel != NULL)
         _alarm_request_info->_sensor_info.thresholdUpperChanel = cjson_thresholdUpperChanel->valuestring;
 
+    cJSON *cjson_productChIds = cJSON_GetObjectItem(cjson, "productChIds");
+    if (cjson_productChIds != NULL)
+        _alarm_request_info->strProductChIds = cjson_productChIds->valuestring;
+
     return cjson;
 }
 

+ 2 - 0
pro/src/json_handle.h

@@ -155,6 +155,7 @@ typedef struct
     char* productPhOrder;
     int outputType;
     char* Zerotype;
+    char* strProductChIds;
 }_OverChnPwrRequest;
 
 /// @brief 总体电源返回信息
@@ -324,6 +325,7 @@ typedef struct
     int pagesize;
     _Power_AlarmRequestInfo _pwr_info;
     _Sensor_AlarmRequestInfo _sensor_info;
+    char* strProductChIds;
 }_AlarmRequestInfo;
 
 /// @brief 告警响应信息

+ 22 - 0
pro/src/switch_ctrl.c

@@ -2023,6 +2023,28 @@ int g_switch_set_t_ac_ctrl(void* manger,int saddr,unsigned short* sts)
     }    
     return g_modbus_write_x_reg(manger,saddr,offset, 2, data_temp);
 }
+//重置通道状态
+int g_switch_set_t_ac_phchn_reset(void *manger, int saddr, int nChn)
+{
+    if (saddr <= 0 || saddr >= MAX_CHN_COUNT)
+    {
+        return -1;
+    }
+    unsigned int offset = 0;
+    unsigned short data_temp[2];
+    int ret = 0;
+    // 重置耗电量
+    offset = _SWITCH_T_AC_RESET_CONSUMPTION_PH+nChn;
+    data_temp[0] = 1;
+    data_temp[1] = 1;
+    ret = g_modbus_write_x_reg(manger, saddr, offset, 2, data_temp);
+    if (ret < 0)
+    {
+        return ret;
+    }
+    return 0;
+}
+
 //重设板子信息
 int g_switch_set_t_ac_reset(void* manger,int saddr)
 {

+ 3 - 2
pro/src/switch_ctrl.h

@@ -87,7 +87,8 @@ enum MODBUS_MODE
 
 #define _SWITCH_T_AC_ALARM_MISSING_PH      0x1856          //缺相报警
 #define _SWITCH_T_AC_ALARM_CTRL            0x1860          //超限动作
-#define _SWITCH_T_AC_RESET_CONSUMPTION     0x18A5          //重置耗电量
+#define _SWITCH_T_AC_RESET_CONSUMPTION_PH  0x189C          //重置PH耗电量
+#define _SWITCH_T_AC_RESET_CONSUMPTION     0x18A5          //重置all耗电量
 
 int g_switch_get_type(void* manger,int saddr, int* type,int* chn,int nPowerType);
 
@@ -161,7 +162,7 @@ int g_switch_set_t_ac_chn_NF_ctrl(void* manger,int saddr,unsigned char chn,unsig
 int g_switch_set_t_ac_phchn_ctrl(void* manger,int saddr,unsigned char chn,unsigned short sts);
 int g_switch_set_t_ac_ctrl(void* manger,int saddr,unsigned short* sts);
 int g_switch_set_t_ac_reset(void* manger,int saddr);
-
+int g_switch_set_t_ac_phchn_reset(void* manger,int saddr,int nChn);
 
 //GPIO通道状态
 int g_switch_get_gpio_status(int ngpio,int* status);