Przeglądaj źródła

1、通道检测与自动检测合并一个函数调用;
2、表头传感器报警关闭指定通道的功能未添加;
3、三相阈值设置只发了一个相位给控制板,应按照每相都下发阈值;
4、表头增加下发控制板超限后报警/关闭通道设置

chenyuanjie 2 lat temu
rodzic
commit
385b7ea0ac

+ 69 - 33
pro/src/app.c

@@ -148,6 +148,16 @@ void* power_thread(void* arg)
                                                     _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo,
                                                     _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerWarninginfo);
                 }
+                ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
+                                                         _globalDeviceManager->_all_ctrl_board[i].product_saddr,
+                                                         _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger.product_MissingPH);
+                if (ret < 0)
+                {
+                    usleep(usleepTime);
+                    ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
+                                                             _globalDeviceManager->_all_ctrl_board[i].product_saddr,
+                                                             _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger.product_MissingPH);
+                }
             }            
             //usleep(usleepTime);
         }
@@ -615,12 +625,7 @@ void* power_thread(void* arg)
                             /*高耗电 */
                             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 )
-                        {
-                            _pTreeACPowerMangerTemp->_PowerWarninginfo.w_phase_loss = _globalTACWarningInfo.w_phase_loss;
-                            /*缺项 */
-                            if( _globalTACWarningInfo.w_phase_loss)dev_Alarm_T_AC_message(_globalDeviceManager, _pTreeACPowerMangerTemp, ENABLE_TAC_STIME);
-                        }
+
                     }
 
                     _globalTotalPowerInfo._power_info.voltage = _globalPowerInfo._power_info.voltage ;
@@ -710,6 +715,29 @@ void* power_thread(void* arg)
                         /*高耗电 */
                         if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
+                    int nMissPH[3]={0};
+                    memcpy(nMissPH,_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH,sizeof(nMissPH));                    
+                    if (_globalTACWarningInfo.w_phase_lossA != nMissPH[0])
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossA = nMissPH[0];
+                        /*缺项 */
+                        if (_globalTACWarningInfo.w_phase_lossA)
+                            dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 0);
+                    }
+                    if (_globalTACWarningInfo.w_phase_lossB != nMissPH[1])
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossB = nMissPH[1];
+                        /*缺项 */
+                        if (_globalTACWarningInfo.w_phase_lossB)
+                            dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 1);
+                    }
+                    if (_globalTACWarningInfo.w_phase_lossC != nMissPH[2])
+                    {
+                        _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossC = nMissPH[2];
+                        /*缺项 */
+                        if (_globalTACWarningInfo.w_phase_lossC)
+                            dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 2);
+                    }
                     /*
                     GlobalOverManager overmanager;
                     memset(&overmanager, 0, sizeof(overmanager));
@@ -962,6 +990,7 @@ void AlarmCtrlChn(int nChID, int nCtrl)
 {
     char buff[256];
     int ret = 0;
+    log_d("AlarmCtrlChn:%d,nCtrl=%d",nChID,nCtrl);
     GlobalPowerManger *_globalPowerMangerTemp = NULL;
     list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
     {
@@ -993,6 +1022,7 @@ void AlarmCtrlAll(int nCtrl)
         //总关
         int nSendAddr=0;
         char buff[256];
+        log_d("AlarmCtrlAll:Ctrl=%d",nCtrl);
         GlobalPowerManger* _globalPowerMangerTemp = NULL ;
         list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
         {
@@ -1035,7 +1065,7 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
         pSave = &_globalSensorMangerTemp->warning_status.sensor_val1_upper;
         pValData = &_globalSensorMangerTemp->Cur_sensor_info.val1;
         nCtrlType = &_globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl;
-        nCtrlValue = &_globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para;
+        nCtrlValue = _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para;
         break;
     case SENSOR_VAL1_LOWER:
         penable = &_globalSensorMangerTemp->over_manager->sensor_val1_lower_enabled;
@@ -1043,7 +1073,7 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
         pSave = &_globalSensorMangerTemp->warning_status.sensor_val1_lower;
         pValData = &_globalSensorMangerTemp->Cur_sensor_info.val1;
         nCtrlType = &_globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl;
-        nCtrlValue = &_globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para;
+        nCtrlValue = _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para;
         break;
     case SENSOR_VAL2_UPPER:
         penable = &_globalSensorMangerTemp->over_manager->sensor_val2_upper_enabled;
@@ -1051,7 +1081,7 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
         pSave = &_globalSensorMangerTemp->warning_status.sensor_val2_upper;
         pValData = &_globalSensorMangerTemp->Cur_sensor_info.val2;
         nCtrlType = &_globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl;
-        nCtrlValue = &_globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para;
+        nCtrlValue = _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para;
         break;
     case SENSOR_VAL2_LOWER:
         penable = &_globalSensorMangerTemp->over_manager->sensor_val2_lower_enabled;
@@ -1059,7 +1089,7 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
         pSave = &_globalSensorMangerTemp->warning_status.sensor_val2_lower;
         pValData = &_globalSensorMangerTemp->Cur_sensor_info.val2;
         nCtrlType = &_globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl;
-        nCtrlValue = &_globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para;
+        nCtrlValue = _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para;
         break;
 
     default:
@@ -1076,11 +1106,21 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
             if (!*pSave)
             {
                 *pSave = true;
+                log_d("Sensor_Alarm CtrlType=%d,value=%d",*nCtrlType,*nCtrlValue);
                 dev_sensor_Alarm_send_message(&__globalDeviceManage, _globalSensorMangerTemp, nAlarmType);
                 if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
                 {
-                    AlarmCtrlChn(*nCtrlValue,0);
-                }else if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
+                    char *pCHlist;
+                    char *pCHListSave;
+                    pCHlist = strtok_r(nCtrlValue, ",", &pCHListSave);
+                    // 其他版本功能
+                    while (pCHlist != NULL)
+                    {
+                        AlarmCtrlChn(atoi(pCHlist),0);
+                        pCHlist = strtok_r(NULL, ",", &pCHListSave);
+                    }                    
+                }
+                else if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
                 {
                     AlarmCtrlAll(0);
                 }
@@ -1098,10 +1138,19 @@ void sensor_alarm(GlobalSensorManger *_globalSensorMangerTemp, int nAlarmType)
             if (!*pSave)
             {
                 *pSave = true;
+                log_d("Sensor_Alarm CtrlType=%d,value=%d",*nCtrlType,*nCtrlValue);
                 dev_sensor_Alarm_send_message(&__globalDeviceManage, _globalSensorMangerTemp, nAlarmType);
                 if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
                 {
-                    AlarmCtrlChn(*nCtrlValue, 0);
+                    char *pCHlist;
+                    char *pCHListSave;
+                    pCHlist = strtok_r(nCtrlValue, ",", &pCHListSave);
+                    // 其他版本功能
+                    while (pCHlist != NULL)
+                    {
+                        AlarmCtrlChn(atoi(pCHlist), 0);
+                        pCHlist = strtok_r(NULL, ",", &pCHListSave);
+                    }
                 }else if (*nCtrlType == ALARM_CTRL_CLOSE_CH)
                 {
                     AlarmCtrlAll(0);
@@ -1784,6 +1833,8 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     char strLog[200]={"MODBUS"};
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],strLog);
     log_d("GCPDU init begin!");
+    ResetChmData(0);
+/*
     memset(&_globalDeviceManager->_all_ctrl_board, 0, sizeof(_globalDeviceManager->_all_ctrl_board));
     for (size_t i = 1; i < MAX_CHN_COUNT; i++)
     {
@@ -1863,12 +1914,6 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                                 log_e("address %d chn %d data inserted error.\n",i,chn);
                                 return 0;
                             }
-                            /*
-                            else
-                            {
-                                log_i("chn %d data inserted ok.\n",(i-1)*AC_SINGLE_S_CUR_CHN_NUM+j+1);
-                            }
-                            */
                         }
                         if ( _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
                         {
@@ -2009,12 +2054,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                                 log_e("address %d chn %d data inserted error.\n",i,chn);
                                 return 0;
                             }
-                            /*
-                            else
-                            {
-                                log_i("chn %d data inserted ok.\n",(i-1)*AC_SINGLE_S_CUR_CHN_NUM+j+1);
-                            }
-                            */
+
                         }
                         _globalPowerMangerTemp->product_saddr = i ;
                         //添加到队尾
@@ -2082,12 +2122,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
                                 log_e("address %d chn %d data inserted error.\n",i,chn);
                                 return 0;
                             }
-                            /*
-                            else
-                            {
-                                log_i("chn %d data inserted ok.\n",(i-1)*AC_SINGLE_S_CUR_CHN_NUM+j+1);
-                            }
-                            */
+
                         }
                         _globalPowerMangerTemp->product_saddr = i ;
                         _globalPowerMangerTemp->product_ch_type = type;
@@ -2358,7 +2393,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         }
     }
 
-#if 1
+
     sprintf(strLog,"%s$|$通道",language_alarm_Init_Success[0]);
     char number[10];
     sprintf(number,"%d",chn-1);
@@ -2366,7 +2401,8 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     //获取数据库中的定时数据
     ret=dev_get_power_ds(_globalDeviceManager->db,&_globalDeviceManager->_globalPowerManger,NULL);
 
-    
+*/    
+#if 1
     //初始化传感器列表
     INIT_LIST_HEAD(&_globalDeviceManager->_globalSensorManger.list);
     INIT_LIST_HEAD(&_globalDeviceManager->g_new_global_breaker.list);

+ 26 - 5
pro/src/appweb_handle.c

@@ -2569,11 +2569,28 @@ static void alarmProtect(void *conn)
             _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)
+            {
+                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);
+        }
 
-        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));
@@ -2623,6 +2640,7 @@ static void alarmProtect(void *conn)
                 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;
+                    if(_alarm_request_info._sensor_info.thresholdUpperChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdUpperChanel);
                 }
                 else
                     _globalSensorMangerSaveTemp->over_manager->sensor_val1_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
@@ -2630,6 +2648,7 @@ static void alarmProtect(void *conn)
                 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;
+                    if(_alarm_request_info._sensor_info.thresholdDownChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdDownChanel);
                 }
                 else
                     _globalSensorMangerSaveTemp->over_manager->sensor_val1_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
@@ -2644,6 +2663,7 @@ static void alarmProtect(void *conn)
                 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;
+                    if(_alarm_request_info._sensor_info.thresholdUpperChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdUpperChanel);
                 }
                 else
                     _globalSensorMangerSaveTemp->over_manager->sensor_val2_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
@@ -2651,6 +2671,7 @@ static void alarmProtect(void *conn)
                 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;
+                    if(_alarm_request_info._sensor_info.thresholdDownChanel)strcpy(_globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl_para,_alarm_request_info._sensor_info.thresholdDownChanel);
                 }
                 else
                     _globalSensorMangerSaveTemp->over_manager->sensor_val2_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
@@ -4391,7 +4412,7 @@ static void equipmentMintenance(void *conn)
 
         //__globalDeviceManage._ReloadChm_flag=true;
         pthread_mutex_lock(&__globalDeviceManage._power_update);
-        ResetChmData();
+        ResetChmData(1);
         pthread_mutex_unlock(&__globalDeviceManage._power_update);
         //__globalDeviceManage._ReloadChm_flag=false;
     }

+ 16 - 13
pro/src/common.h

@@ -170,13 +170,13 @@ enum ENABLE_BIT_CTRL
 /// @brief 使能位三项
 enum ENABLE_TreeAC_CTRL
 {
-    ENABLE_TAC_V_UP     = 1,
-    ENABLE_TAC_V_DOWN   = 2,
-    ENABLE_TAC_A_UP     = 4,
-    ENABLE_TAC_W_UP     = 8,
-    ENABLE_TAC_P_UP     = 16,
-    ENABLE_TAC_STIME    = 32,
-    ENABLE_TAC_ETIME    = 64,
+    ENABLE_TAC_V_UP     = BIT_01,
+    ENABLE_TAC_V_DOWN   = BIT_02,
+    ENABLE_TAC_A_UP     = BIT_03,
+    ENABLE_TAC_W_UP     = BIT_04,
+    ENABLE_TAC_P_UP     = BIT_05,
+    ENABLE_TAC_STIME    = BIT_06,
+    ENABLE_TAC_ETIME    = BIT_07,
 };
 /// @brief 报警位
 enum WARNING_BIT_CTRL
@@ -392,7 +392,9 @@ typedef struct
     bool           w_current                                     ;//电流上限报警
     bool           w_power                                       ;//功率
     bool           w_consumption                                 ;//耗电量
-    bool           w_phase_loss                                  ;//缺相报警              
+    bool w_phase_lossA;                                           // 缺相报警
+    bool w_phase_lossB;                                           // 缺相报警
+    bool w_phase_lossC;                                           // 缺相报警
 }PowerWarningInfo;
 
 //三项数据
@@ -448,7 +450,8 @@ typedef struct
     GlobalOverManager*  global_over_manager                        ;//超限管理
     PowerInfo           _PowerInfo[3];                              //存储最新的数据(兼容三项输入)
     PowerWarningInfo    _PowerWarninginfo[3];                       //存储报警数据(兼容三项输入)    
-    time_t              product_log_time;                           //存储最新时间                                        
+    time_t              product_log_time;                           //存储最新时间 
+    int                 product_MissingPH[3];                       //缺相报警                                       
 }GlobalPowerInManger;
 
 //电源控制板计数
@@ -531,19 +534,19 @@ typedef struct
     bool                sensor_val1_upper_enabled ;//
     float               sensor_val1_upper_threshold;
     char                sensor_val1_upper_threshold_ctrl;
-    char                sensor_val1_upper_threshold_ctrl_para;
+    char                sensor_val1_upper_threshold_ctrl_para[512];
     bool                sensor_val1_lower_enabled ;//
     float               sensor_val1_lower_threshold;
     char                sensor_val1_lower_threshold_ctrl;
-    char                sensor_val1_lower_threshold_ctrl_para;
+    char                sensor_val1_lower_threshold_ctrl_para[512];
     bool                sensor_val2_upper_enabled ;//
     float               sensor_val2_upper_threshold;
     char                sensor_val2_upper_threshold_ctrl;
-    char                sensor_val2_upper_threshold_ctrl_para;
+    char                sensor_val2_upper_threshold_ctrl_para[512];
     bool                sensor_val2_lower_enabled ;//
     float               sensor_val2_lower_threshold;
     char                sensor_val2_lower_threshold_ctrl;
-    char                sensor_val2_lower_threshold_ctrl_para;
+    char                sensor_val2_lower_threshold_ctrl_para[512];
 }GlobalSensorOverManage;
 
 //传感器报警状态表

+ 9 - 0
pro/src/json_handle.c

@@ -3440,6 +3440,9 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             }
             else
                 cJSON_AddStringToObject(data_filed, "thresholdDownAction", Alarmtemp);
+            
+            cJSON_AddStringToObject(data_filed, "thresholdUpperChanel", _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para);
+            cJSON_AddStringToObject(data_filed, "thresholdDownChanel",  _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para);
             cJSON_AddItemToObject(data_root_array, "data", data_filed);
             data_filed = cJSON_CreateObject();
             sprintf(temp, "%d", _globalSensorMangerTemp->sensor_status);
@@ -4076,7 +4079,13 @@ cJSON* json_to_alarm_manage(const char* str,_AlarmRequestInfo* _alarm_request_in
     if(cjson_thresholdUpperAction!=NULL)
         _alarm_request_info->_sensor_info.thresholdUpperAction = cjson_thresholdUpperAction->valuestring ;
 
+    cJSON *cjson_thresholdDownChanel = cJSON_GetObjectItem(cjson, "thresholdDownChanel");
+    if (cjson_thresholdDownChanel != NULL)
+        _alarm_request_info->_sensor_info.thresholdDownChanel = cjson_thresholdDownChanel->valuestring;
 
+    cJSON *cjson_thresholdUpperChanel = cJSON_GetObjectItem(cjson, "thresholdUpperChanel");
+    if (cjson_thresholdUpperChanel != NULL)
+        _alarm_request_info->_sensor_info.thresholdUpperChanel = cjson_thresholdUpperChanel->valuestring;
 
     return cjson;
 }

+ 2 - 1
pro/src/json_handle.h

@@ -310,7 +310,8 @@ typedef struct
     char* thresholdUpperValue;
     char *thresholdDownAction;
     char *thresholdUpperAction;
-
+    char *thresholdUpperChanel;
+    char *thresholdDownChanel;
 }_Sensor_AlarmRequestInfo;
 
 

+ 43 - 23
pro/src/sqlite_handle.c

@@ -1462,7 +1462,7 @@ int dev_insert_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_ch_
 /// @param product_id 
 /// @param _globalPowerManger 
 /// @return 
-int dev_get_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,int product_ph_id,GlobalTreeACManager* _globalPowerChnManger)
+int dev_get_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,int product_ph_type,GlobalTreeACManager* _globalPowerChnManger)
 {
     int res = 0 ;
     int rowIndex = 1 ;
@@ -1472,7 +1472,7 @@ int dev_get_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_addr,i
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char* err_msg=NULL;
     char select_sql[1024] = {0};
-    sprintf(select_sql,"SELECT* FROM Table_PhasePowerManage WHERE product_id=%d AND product_ch_addr_id=%d and product_ch_addr_ch_id=%d;",product_id,product_addr,product_ch_id);
+    sprintf(select_sql,"SELECT* FROM Table_PhasePowerManage WHERE product_id=%d AND product_ch_addr_id=%d and product_ph_order=%d;",product_id,product_addr,product_ph_type);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -1555,16 +1555,16 @@ int dev_update_t_ac_power_manage_info(sqlite3 *db,GlobalTreeACManager* _globalPo
     int nrow = 0;               //满足条件的记录数目
     int ncolumn = 0;            //每条记录包含的字段数据
     char** pResult = NULL;  //用来指向sql执行结果的指针
-    char* err_msg=NULL;    
-    sprintf(select_sql,"UPDATE Table_PhasePowerManage SET product_ph_outputType=%d,product_ph_outputStatus=%d,product_ph_order=%d,product_ch_id_belong=%d,product_ch_addr_id=%d,product_ch_addr_ch_id=%d where product_ph_id=%d",
-                    _globalPowerChnInfo->product_ph_outputType,
-                    _globalPowerChnInfo->product_ph_outputStatus,
-                    _globalPowerChnInfo->product_ph_type,
-                    _globalPowerChnInfo->product_ch_id,       
-                    _globalPowerChnInfo->product_saddr,
-                    _globalPowerChnInfo->product_ch_addr,
-                    _globalPowerChnInfo->product_ph_id
-                    );
+    char* err_msg=NULL;
+    sprintf(select_sql, "UPDATE Table_PhasePowerManage SET product_ph_outputType=%d,product_ph_outputStatus=%d,product_ch_id_belong=%d,product_ph_id=%d where product_ch_addr_id=%d and product_ch_addr_ch_id=%d and product_ph_order=%d",
+            _globalPowerChnInfo->product_ph_outputType,
+            _globalPowerChnInfo->product_ph_outputStatus,
+            _globalPowerChnInfo->product_ch_id,
+            _globalPowerChnInfo->product_ph_id,
+            _globalPowerChnInfo->product_saddr,
+            _globalPowerChnInfo->product_ch_addr,
+            _globalPowerChnInfo->product_ph_type
+            );
     printf("UPDATE_sql:%s\n",select_sql);
     res = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
@@ -1973,23 +1973,28 @@ int dev_get_sensor_manage_info(sqlite3 *db,int product_id,GlobalSensorManger* _g
         }
         _globalSensorMangerTemp->sensor_status = 1;//atoi(pResult[i*ncolumn+8]);
         _globalSensorMangerTemp->sensor_val_count = atoi(pResult[i*ncolumn+9]);
-        //记录超限信息
+        // 记录超限信息
+        memset(_globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para, 0 ,sizeof(char)*512);
+        memset(_globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para, 0 ,sizeof(char)*512);
+        memset(_globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para, 0 ,sizeof(char)*512);
+        memset(_globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para, 0 ,sizeof(char)*512);
+
         _globalSensorMangerTemp->over_manager->sensor_val1_upper_enabled = atoi(pResult[i*ncolumn+10]);
         _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold = atof(pResult[i*ncolumn+11]);
         _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl = atoi(pResult[i*ncolumn+12]);
-        _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para = atoi(pResult[i*ncolumn+13]);
+        if(pResult[i*ncolumn+13])strcpy(_globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold_ctrl_para ,pResult[i*ncolumn+13]);
         _globalSensorMangerTemp->over_manager->sensor_val1_lower_enabled = atoi(pResult[i*ncolumn+14]);
         _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold = atof(pResult[i*ncolumn+15]);
         _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl = atoi(pResult[i*ncolumn+16]);
-        _globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para = atoi(pResult[i*ncolumn+17]);
+        if(pResult[i*ncolumn+17])strcpy(_globalSensorMangerTemp->over_manager->sensor_val1_lower_threshold_ctrl_para , pResult[i*ncolumn+17]);
         _globalSensorMangerTemp->over_manager->sensor_val2_upper_enabled = atoi(pResult[i*ncolumn+18]);
         _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold = atof(pResult[i*ncolumn+19]);
         _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl = atoi(pResult[i*ncolumn+20]);
-        _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para = atoi(pResult[i*ncolumn+21]);
+        if(pResult[i*ncolumn+21])strcpy(_globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold_ctrl_para , pResult[i*ncolumn+21]);
         _globalSensorMangerTemp->over_manager->sensor_val2_lower_enabled = atoi(pResult[i*ncolumn+22]);
         _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold = atof(pResult[i*ncolumn+23]);
         _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl = atoi(pResult[i*ncolumn+24]);
-        _globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para = atoi(pResult[i*ncolumn+25]);
+        if(pResult[i*ncolumn+25])strcpy(_globalSensorMangerTemp->over_manager->sensor_val2_lower_threshold_ctrl_para , pResult[i*ncolumn+25]);
         //尾部插入
         list_add_tail(&_globalSensorMangerTemp->list, &_globalSensorManger->list);
     }
@@ -2288,24 +2293,24 @@ int dev_update_sensor_over_manage(sqlite3 *db,int product_id,int sensor_id,Globa
     int ncolumn = 0;            //每条记录包含的字段数据
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char* err_msg=NULL;
-    char select_sql[2000] = {0};
+    char select_sql[3000] = {0};
     sprintf(select_sql, "UPDATE Table_SensorManage SET \
     sensor_val1_u_enable=%d,\
     sensor_val1_u_threshold=%0.2f,\
     sensor_val1_over_u_threshold_ctrl=%d,\
-    sensor_val1_over_u_threshold_ctrl_para=%d,\
+    sensor_val1_over_u_threshold_ctrl_para='%s',\
     sensor_val1_l_enable=%d,\
     sensor_val1_l_threshold=%0.2f,\
     sensor_val1_over_l_threshold_ctrl=%d,\
-    sensor_val1_over_l_threshold_ctrl_para=%d,\
+    sensor_val1_over_l_threshold_ctrl_para='%s',\
     sensor_val2_u_enable=%d,\
     sensor_val2_u_threshold=%0.2f,\
     sensor_val2_over_u_threshold_ctrl=%d,\
-    sensor_val2_over_u_threshold_ctrl_para=%d,\
+    sensor_val2_over_u_threshold_ctrl_para='%s',\
     sensor_val2_l_enable=%d,\
     sensor_val2_l_threshold=%0.2f,\
     sensor_val2_over_l_threshold_ctrl=%d,\
-    sensor_val2_over_l_threshold_ctrl_para=%d\
+    sensor_val2_over_l_threshold_ctrl_para='%s'\
      WHERE product_id=%d AND sensor_id=%d;",
             _globalSensorManger->over_manager->sensor_val1_upper_enabled,
             _globalSensorManger->over_manager->sensor_val1_upper_threshold,
@@ -3325,7 +3330,22 @@ int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerMa
         get_message_CtrlType(__globalPowerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl,CtrlData);
         sprintf(AlarmText,"$通道$|%s |$%s$|$%s$| %s",__globalPowerTemp->product_ch_name,language_alarm_P[languagesID],language_alarm_Up[languagesID],CtrlData);
     }
-        break;
+    break;
+    case 0:
+    {
+        sprintf(AlarmText, "$通道$|%d |$%s$", __globalPowerTemp->product_ch_id, language_alarm_phaseA_lose[languagesID]);
+    }
+    break;
+    case 1:
+    {
+        sprintf(AlarmText, "$通道$|%d |$%s$", __globalPowerTemp->product_ch_id, language_alarm_phaseB_lose[languagesID]);
+    }
+    break;
+    case 2:
+    {
+        sprintf(AlarmText, "$通道$|%d |$%s$", __globalPowerTemp->product_ch_id, language_alarm_phaseC_lose[languagesID]);
+    }
+    break;
     default:
         sprintf(AlarmText,"$通道$|%s |$%s$",__globalPowerTemp->product_ch_name,language_alarm_NULL_ERROR[languagesID]);
         break;

+ 1 - 1
pro/src/sqlite_handle.h

@@ -46,7 +46,7 @@ int dev_insert_power_manage_info(sqlite3 *db,int product_id,int product_ch_id,Gl
 int dev_get_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,GlobalPowerManger* _globalPowerChnManger);
 int dev_get_power_manage_info_by_ID(sqlite3 *db,int product_id,int product_addr,int product_ch_id,GlobalPowerManger* _globalPowerChnManger);
 
-int dev_get_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,int product_ph_id,GlobalTreeACManager* _globalPowerChnManger);
+int dev_get_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_addr,int product_ch_id,int product_ph_type,GlobalTreeACManager* _globalPowerChnManger);
 int dev_insert_t_ac_power_manage_info(sqlite3 *db,int product_id,int product_ch_id,GlobalTreeACManager* _globalPowerChnManger);
 int dev_insert_t_ac_power_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo,int* nIndex,char* pTimeData);
 int dev_update_t_ac_power_manage_info(sqlite3 *db,GlobalTreeACManager* _globalPowerChnInfo);

+ 150 - 35
pro/src/switch_ctrl.c

@@ -1065,18 +1065,21 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
             {
                 log_e("Threshold Set Error=%s", modbus_strerror(errno));
             }
-
-                if (_globalPowerMangerTemp->global_over_manager->product_vol_upper_enable == 1)
-                    sts |= ENABLE_TAC_V_UP;
-                if (_globalPowerMangerTemp->global_over_manager->product_vol_lower_enable == 1)
-                    sts |= ENABLE_TAC_V_DOWN;
-                if (_globalPowerMangerTemp->global_over_manager->product_cur_upper_enable == 1)
-                    sts |= ENABLE_TAC_A_UP;
-                if (_globalPowerMangerTemp->global_over_manager->product_pwr_upper_enable == 1)
-                    sts |= ENABLE_TAC_W_UP;
-                if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_enable == 1)
-                    sts |= ENABLE_TAC_P_UP;
-            
+            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));
+            }
+            if (_globalPowerMangerTemp->global_over_manager->product_vol_upper_enable == 1)
+                sts |= ENABLE_TAC_V_UP;
+            if (_globalPowerMangerTemp->global_over_manager->product_vol_lower_enable == 1)
+                sts |= ENABLE_TAC_V_DOWN;
+            if (_globalPowerMangerTemp->global_over_manager->product_cur_upper_enable == 1)
+                sts |= ENABLE_TAC_A_UP;
+            if (_globalPowerMangerTemp->global_over_manager->product_pwr_upper_enable == 1)
+                sts |= ENABLE_TAC_W_UP;
+            if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_enable == 1)
+                sts |= ENABLE_TAC_P_UP;
             if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
             {
                 return g_switch_set_t_ac_phchn_ctrl(manger, saddr, (chn - 1), sts);
@@ -1832,7 +1835,56 @@ int g_switch_set_t_ac_max_pwrcon_threshold(void* manger,int saddr,char chn,Globa
     data_temp[1] = (value >> 16) & 0xFFFF; 
     return g_modbus_write_x_reg(manger,saddr,offset,2, data_temp);
 }
-
+//报警控制方式
+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;
+    int nStatus = 0;
+    if(_global_over_manager->product_vol_over_upper_threshold_ctrl==1)nStatus|=BIT_00;
+    if(_global_over_manager->product_vol_over_lower_threshold_ctrl==1)nStatus|=BIT_01;
+    if(_global_over_manager->product_cur_over_upper_threshold_ctrl==1)nStatus|=BIT_02;
+    if(_global_over_manager->product_pwr_over_upper_threshold_ctrl==1)nStatus|=BIT_03;
+    if(_global_over_manager->product_pwrcon_over_upper_threshold_ctrl==1)nStatus|=BIT_04;  
+    return g_modbus_write_reg(manger,saddr,offset,nStatus);
+}
+/**
+ * @brief 设置 AC 告警丢失相位
+ *
+ * 通过给定的管理器对象,设置 AC 告警丢失相位的状态。
+ *
+ * @param manger 管理器对象指针
+ * @param saddr 地址
+ * @param MissStatus 丢失相位状态指针
+ *
+ * @return 返回操作结果,成功返回 0,失败返回非零值
+ */
+int g_switch_set_t_ac_alarm_missing_ph(void* manger,int saddr,int* MissStatus)
+{
+    unsigned int offset = 0;
+    unsigned int value = 0;
+    unsigned short data_temp[6] = {0};
+    unsigned int status_temp = 0;
+    int ret = 0;
+    offset = _SWITCH_T_AC_ALARM_MISSING_PH;
+    // 读取4个寄存器
+    // 读取寄存器
+    memset(data_temp, 0, sizeof(data_temp));
+    //一次读4个
+    ret = g_modbus_read_x_reg(manger, saddr, offset, 6, data_temp);
+    if (ret < 0)
+    {
+        log_w("g_switch_get_t_dcpdu_info:addrs:%d OffSet:%d Ret=%d:%s", saddr, offset, ret, modbus_strerror(errno));
+        // log_d("threshold_Addr:%d OffSet:%d Ret=%d",saddr,offset,ret);
+        return ret;
+    }
+    for(int i = 0; i < 3; i++)
+    {
+        value = (data_temp[i * 2  + 1] << 16) + data_temp[i * 2];
+        MissStatus[i] = value;
+    }
+    return 0;
+}
 int g_switch_set_t_ac_start_time_delay(void* manger,int saddr,int ch, unsigned int time)
 {
     unsigned int offset = 0;
@@ -1983,7 +2035,7 @@ int g_switch_get_t_ac_in_info(void* manger,int saddr,PowerInfo* _power,PowerWarn
         _warning[i].w_current         = data_temp[0] & (BIT_06<<i);
         _warning[i].w_power           = data_temp[1] & (BIT_00<<i);
         _warning[i].w_consumption     = data_temp[1] & (BIT_03<<i);
-        _warning[i].w_phase_loss      = data_temp[1] & (BIT_06<<i);
+        //_warning[i].w_phase_loss      = data_temp[1] & (BIT_06<<i);
     }    
     return 0;
 }
@@ -2186,7 +2238,16 @@ int power_clear(GlobalPowerManger *globalPowerManager)
     return 0;
 }
 
-int ResetChmData()
+/**
+ * @brief 重新加载电源管理对象
+ *
+ * 清除指定的全局电源管理器对象,并重新加载相关资源。
+ *
+ * @param nCtrlType 0:全新设备,1:刷新设备
+ *
+ * @return 返回值表示操作是否成功,成功返回0,失败返回非0值
+ */
+int ResetChmData(int nCtrlType)
 {
     // 搜索子地址
     int ret = 0;
@@ -2297,7 +2358,7 @@ int ResetChmData()
                             ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
                                                                  _globalDeviceManager->_globalDevInfo.product_id, i,
                                                                  j + 1, // 1*8+j
-                                                                 nTac_chn,
+                                                                 indexT,
                                                                  _globalTACManager);
                             _globalTACManager->product_ch_addr = j + 1;
                             // 未查询到信息 则插入
@@ -2310,7 +2371,7 @@ int ResetChmData()
                                 _globalTACManager->product_ph_id = nTac_chn;
                                 _globalTACManager->product_ph_type = indexT;
                                 _globalTACManager->product_ph_outputType = 2; // 1三相2单相
-                                if (indexT == ((nTac_chn-3)/(8*3)+3)%3)
+                                if (indexT == ((nTac_chn-3)/(PHASE_GROUP_CNT*3)+3)%3)
                                 {
                                     _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
                                 }
@@ -2331,6 +2392,24 @@ int ResetChmData()
                             // 绑定到三项通道
                             _globalTACManager->product_saddr = i;
                             _globalTACManager->product_ph_type = indexT;
+                            if (nCtrlType)
+                            {
+                                _globalTACManager->product_ph_id = nTac_chn;
+                                _globalTACManager->product_saddr = i;
+                                _globalTACManager->product_ph_type = indexT;
+                                if (indexT == ((nTac_chn - 3) / (PHASE_GROUP_CNT * 3) + 3) % 3)
+                                {
+                                    _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
+                                }
+                                else
+                                {
+                                    _globalTACManager->product_ph_outputStatus = 2; // 1输出2不输出
+                                }
+                                if (dev_update_t_ac_power_manage_info(__globalDeviceManage.db, _globalTACManager) != 0)
+                                {
+                                    log_e("update pwr general data err.");
+                                }
+                            }
                             if (_globalPowerMangerTemp)
                             {
                                 list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
@@ -2338,11 +2417,14 @@ int ResetChmData()
                             nTac_chn += 1;
                         }
                     }
-                    _globalPowerMangerTemp->product_ch_id = chn;    
-                    sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                    if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                    if (nCtrlType)
                     {
-                        log_e("update pwr general data err.");
+                        _globalPowerMangerTemp->product_ch_id = chn;
+                        sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
+                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                        {
+                            log_e("update pwr general data err.");
+                        }
                     }
                     // 添加到队尾
                     list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
@@ -2473,11 +2555,14 @@ int ResetChmData()
                     }
                     _globalPowerMangerTemp->product_saddr = i;
                     _globalPowerMangerTemp->product_ch_type = type;
-                    _globalPowerMangerTemp->product_ch_id = chn;
-                    sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                    if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                    if (nCtrlType)
                     {
-                        log_e("update pwr general data err.");
+                        _globalPowerMangerTemp->product_ch_id = chn;
+                        sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
+                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                        {
+                            log_e("update pwr general data err.");
+                        }
                     }
                     // 添加到队尾
                     list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
@@ -2541,11 +2626,14 @@ int ResetChmData()
                         }
                         _globalPowerMangerTemp->product_saddr = i;
                         _globalPowerMangerTemp->product_ch_type = type;
-                        _globalPowerMangerTemp->product_ch_id = chn;
-                        sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                        if (nCtrlType)
                         {
-                            log_e("update pwr general data err.");
+                            _globalPowerMangerTemp->product_ch_id = chn;
+                            sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
+                            if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                            {
+                                log_e("update pwr general data err.");
+                            }
                         }
                         // 添加到队尾
                         list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
@@ -2571,7 +2659,7 @@ int ResetChmData()
                             ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
                                                                  _globalDeviceManager->_globalDevInfo.product_id, i,
                                                                  j + 1, // 1*8+j
-                                                                 nTac_chn,
+                                                                 indexT,
                                                                  _globalTACManager);
                             _globalTACManager->product_ch_addr = j + 1;
                             // 未查询到信息 则插入
@@ -2605,6 +2693,16 @@ int ResetChmData()
                             // 绑定到三项通道
                             _globalTACManager->product_saddr = i;
                             _globalTACManager->product_ph_type = indexT;
+                            if (nCtrlType)
+                            {
+                                _globalTACManager->product_ph_id = nTac_chn;
+                                _globalTACManager->product_saddr = i;
+                                _globalTACManager->product_ph_type = indexT;
+                                if (dev_update_t_ac_power_manage_info(__globalDeviceManage.db, _globalTACManager) != 0)
+                                {
+                                    log_e("update pwr general data err.");
+                                }
+                            }
                             if (_globalPowerMangerTemp)
                             {
                                 list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
@@ -2664,11 +2762,14 @@ int ResetChmData()
                             }
                             _globalPowerMangerTemp->product_saddr = i;
                             _globalPowerMangerTemp->product_ch_type = type;
-                            _globalPowerMangerTemp->product_ch_id = chn;
-                            sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                            if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                            if (nCtrlType)
                             {
-                                log_e("update pwr general data err.");
+                                _globalPowerMangerTemp->product_ch_id = chn;
+                                sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
+                                if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                                {
+                                    log_e("update pwr general data err.");
+                                }
                             }
                             // 添加到队尾
                             list_add_tail(&_globalPowerMangerTemp->list, &_globalDeviceManager->_globalPowerManger.list);
@@ -2693,7 +2794,7 @@ int ResetChmData()
                         ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
                                                              _globalDeviceManager->_globalDevInfo.product_id, i,
                                                              j + 1, // 1*8+j
-                                                             nTac_chn,
+                                                             (j + 3) % 3,
                                                              _globalTACManager);
                         _globalTACManager->product_ch_addr = j + 1;
                         // 未查询到信息 则插入
@@ -2719,6 +2820,15 @@ int ResetChmData()
                         // 绑定到三项通道
                         _globalTACManager->product_saddr = i;
                         _globalTACManager->product_ph_type = (j + 3) % 3;
+                        if (nCtrlType)
+                        {
+                            _globalTACManager->product_ph_id = nTac_chn;
+                            _globalTACManager->product_saddr = i;
+                             if (dev_update_t_ac_power_manage_info(__globalDeviceManage.db, _globalTACManager) != 0)
+                            {
+                                log_e("update pwr general data err.");
+                            }
+                        }
                         if (_globalPowerMangerTemp)
                         {
                             list_add_tail(&_globalTACManager->list_Tree_AC, &_globalPowerMangerTemp->list_Tree_AC);
@@ -2735,6 +2845,11 @@ int ResetChmData()
             _globalDeviceManager->_all_ctrl_board[i].product_type = 0;
         }
     }
+    char strLog[200]={"MODBUS"};
+    sprintf(strLog,"%s$|$通道",language_alarm_Init_Success[0]);
+    char number[10];
+    sprintf(number,"%d",chn-1);
+    dev_Alarm_Run_message(_globalDeviceManager,strLog,number);
     dev_get_power_ds(_globalDeviceManager->db,&_globalDeviceManager->_globalPowerManger,NULL);
     return ret;
 }

+ 8 - 1
pro/src/switch_ctrl.h

@@ -85,6 +85,10 @@ enum MODBUS_MODE
 #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_CTRL            0x1860          //超限动作
+#define _SWITCH_T_AC_RESET_CONSUMPTION     0x189c          //重置耗电量
+
 int g_switch_get_type(void* manger,int saddr, int* type,int* chn,int nPowerType);
 
 int g_switch_get_ac_single_s_cur_info(void* manger,int saddr,unsigned char chn,PowerInfo* _power,PowerWarningInfo* _warning);
@@ -146,6 +150,9 @@ int g_switch_set_t_ac_min_vol_threshold(void* manger,int saddr,char chn,GlobalOv
 int g_switch_set_t_ac_max_cur_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
 int g_switch_set_t_ac_max_power_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
 int g_switch_set_t_ac_max_pwrcon_threshold(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
+int g_switch_set_t_ac_alarm_ctrl(void* manger,int saddr,char chn,GlobalOverManager* _global_over_manager);
+int g_switch_set_t_ac_alarm_missing_ph(void* manger,int saddr,int* MissStatus);
+
 int g_switch_set_t_ac_start_time_delay(void* manger,int saddr,int ch, unsigned int time);
 int g_switch_set_t_ac_stop_time_delay(void* manger,int saddr,int ch, unsigned int time);
 int g_switch_set_t_ac_chn_ctrl(void* manger,int saddr,unsigned char chn,unsigned short sts);
@@ -171,5 +178,5 @@ int g_switch_set_dc_time_delay(void* manger,int saddr,unsigned int time);
 
 
 //重新加载端口
-int ResetChmData();
+int ResetChmData(int nCtrlType);
 #endif