guohui пре 2 година
родитељ
комит
beda9de8d4
3 измењених фајлова са 133 додато и 89 уклоњено
  1. 74 15
      pro/src/appweb_handle.c
  2. 52 74
      pro/src/cascade.c
  3. 7 0
      pro/src/cascade.h

+ 74 - 15
pro/src/appweb_handle.c

@@ -480,6 +480,7 @@ static void overallStatusMonitoring(void* conn)
 {
     int ret = -1 ;
     cJSON *cjson;
+    cmd_data_t cmd;
     _Over_All_Sts_Monitor _over_all_sts_monitor;
     _OverBackStsInfo _over_back_sts_info;       //设备总体状态信息
     _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
@@ -514,17 +515,12 @@ static void overallStatusMonitoring(void* conn)
 
         cur_dev_addr = _over_all_sts_monitor.product_id;
         if(cur_dev_addr>0) {
-
-            cmd_data_t cmd;
             cmd.cmd = CASCADE_CMD_QUERY_CH;
             cmd.obj = OBJ_OVERALL;
             cascade_request(&cmd);
 
             ack_str = ctrl_sts_ack_to_json();
-            http_reply(conn, 200, ack_str);
-            cJSON_Delete(cjson);
-            cJSON_free(ack_str);
-            return;
+            goto quit;
         }
 
         //参数转换json
@@ -588,6 +584,17 @@ static void overallStatusMonitoring(void* conn)
         //总开
         int nSendAddr=0;
         char buff[256];
+
+        if(cur_dev_addr>0) {
+            cmd.cmd = CASCADE_CMD_OPEN;
+            cmd.obj = OBJ_OVERALL;
+            cascade_request(&cmd);
+
+            ack_str = ctrl_sts_ack_to_json();
+            goto quit;
+        }
+
+
         GlobalPowerManger* _globalPowerMangerTemp = NULL ;
         list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
         {
@@ -608,6 +615,16 @@ static void overallStatusMonitoring(void* conn)
     else if(strcmp(_over_all_sts_monitor.type,"close")==0)
     {
         log_i("over all request:close");
+
+        if(cur_dev_addr>0) {
+            cmd.cmd = CASCADE_CMD_CLOSE;
+            cmd.obj = OBJ_OVERALL;
+            cascade_request(&cmd);
+
+            ack_str = ctrl_sts_ack_to_json();
+            goto quit;
+        }
+
         //总关
         int nSendAddr=0;
         char buff[256];
@@ -886,10 +903,10 @@ static void overallStatusMonitoring(void* conn)
     }
     #endif
     #endif
-    
+
+quit:
     cJSON_Delete(cjson);
     http_reply(conn, 200, ack_str);
-
     cJSON_free((void*)ack_str);
 }
 
@@ -899,6 +916,7 @@ static void channelStatusMonitoring(void* conn)
 {
     int ret = -1 ;
     cJSON *cjson;
+    cmd_data_t cmd;
     _OverChnPwrRequest _over_chn_pwr_request;
     _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
     char* rx_body_buf = NULL;
@@ -949,15 +967,14 @@ static void channelStatusMonitoring(void* conn)
 
         cur_dev_addr = _over_chn_pwr_request.product_id;
         if(cur_dev_addr>0) {
-            cmd_data_t cmd;
             cmd.cmd = CASCADE_CMD_QUERY_CH;
-            cmd.obj = OBJ_CHANNEL;
+            cmd.obj = OBJ_OVERALL;
             cmd.chId = _over_chn_pwr_request.productChId;
             cascade_request(&cmd);
 
             ack_str = ctrl_sts_ack_to_json();
             http_reply(conn, 200, ack_str);
-            cJSON_free((void *)ack_str);
+            cJSON_free(ack_str);
             return;
         }
 
@@ -1082,10 +1099,18 @@ static void channelStatusMonitoring(void* conn)
         * todo:添加控制
         */
        
+       if(cur_dev_addr>0) {
+            cmd.cmd = CASCADE_CMD_OPEN;
+            cmd.obj = OBJ_CHANNEL;
+            cmd.chId = _over_chn_pwr_request.productChId;
+            cascade_request(&cmd);
+
+            ack_str = ctrl_sts_ack_to_json();
+            goto quit;
+       }
        
         log_d("channel id:%d",_over_chn_pwr_request.productChId);
 
-
         // product_chn_id = strtol(_over_chn_pwr_request.productChId,NULL,10);
         // log_d("productChId:%d",product_chn_id);
         
@@ -1125,6 +1150,17 @@ static void channelStatusMonitoring(void* conn)
         */
         char buff[256];
         int product_chn_id = 0 ;
+
+        if(cur_dev_addr>0) {
+            cmd.cmd = CASCADE_CMD_CLOSE;
+            cmd.obj = OBJ_CHANNEL;
+            cmd.chId = _over_chn_pwr_request.productChId;
+            cascade_request(&cmd);
+
+            ack_str = ctrl_sts_ack_to_json();
+            goto quit;
+        }
+
         // product_chn_id = strtol(_over_chn_pwr_request.productChId,NULL,10);
         // log_d("productChId:%d",product_chn_id);
         product_chn_id = _over_chn_pwr_request.productChId;
@@ -1159,7 +1195,18 @@ static void channelStatusMonitoring(void* conn)
     else if(strcmp(_over_chn_pwr_request.type,"save")==0)//负载
     {
         log_i("channel status request:save");
-        log_d(rx_body_buf);
+
+        if(cur_dev_addr>0) {
+            cmd.cmd = CASCADE_CMD_SAVE;
+            cmd.obj = OBJ_CHANNEL;
+            cmd.chId = _over_chn_pwr_request.productChId;
+            cascade_request(&cmd);
+
+            ack_str = ctrl_sts_ack_to_json();
+            goto quit;
+        }
+
+
         GlobalPowerManger *_globalPowerMangerTemp = NULL;
         list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
         {
@@ -1332,7 +1379,7 @@ static void channelStatusMonitoring(void* conn)
     else if(strcmp(_over_chn_pwr_request.type,"listHdlTotalQuery")==0)    
     {
         #if DBUG_INFO
-                log_i("over all request: listHdlTotalQuery\n");
+            log_i("over all request: listHdlTotalQuery\n");
         #endif
 
         int product_chn_id = 0 ;
@@ -1362,6 +1409,17 @@ static void channelStatusMonitoring(void* conn)
     else if(strcmp(_over_chn_pwr_request.type,"threeTypeSave")==0)
     {
         GlobalPowerManger *_globalPowerMangerTemp = NULL;
+
+        if(cur_dev_addr>0) {
+            cmd.cmd = CASCADE_CMD_SAVE3;
+            cmd.obj = OBJ_CHANNEL;
+            cmd.chId = _over_chn_pwr_request.productChId;
+            cascade_request(&cmd);
+
+            goto quit;
+        }
+
+
         list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
         {
             if (_over_chn_pwr_request.productChId == _globalPowerMangerTemp->product_ch_id)
@@ -1407,7 +1465,8 @@ static void channelStatusMonitoring(void* conn)
         }
     }
     #endif
-    
+
+quit:
     cJSON_Delete(cjson);
     http_reply(conn, 200, ack_str);
     cJSON_free((void*)ack_str);

+ 52 - 74
pro/src/cascade.c

@@ -43,6 +43,8 @@ typedef struct {
     board_info_t        info;
     _OverChnPwrAckInfo  chInfo;
     _OverAllPwrAckInfo  allInfo;
+
+    power_info_t        pwrInfo;
 }cascade_handle_t;
 
 int cur_dev_addr=1;
@@ -131,14 +133,20 @@ static int slave_get_info(cascade_handle_t *cas)
 
     return 0;
 }
-static int slave_get_ch_info(cascade_handle_t *cas)
+static int slave_get_all_data(cascade_handle_t *cas)
 {
+    GlobalDeviceManager *dm=get_dm();
+    GlobalPowerManger *tmp=NULL;
+
+    cas->pwrInfo.cnt=0;
+    list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
+    {
+        if(tmp) {
+            cas->pwrInfo.info[cas->pwrInfo.cnt] = tmp->_PowerInfo;
+            cas->pwrInfo.cnt++;
+        }
+    }
 
-    return 0;
-}
-static int slave_get_all_info(cascade_handle_t *cas)
-{
-    
     return 0;
 }
 
@@ -372,6 +380,7 @@ static int mb_receive(cascade_handle_t *cas)
                     int i,t=0;
                     char buff[80];
                     board_info_t *info=&cas->info;
+
                     for(i=0; i<info->cnt; i++) {
                         if(info->board[i].addr>0) {
                             t = g_switch_set_all_ctrl(&get_dm()->_globalRelaySampManger, info->board[i].type, info->board[i].addr, (cas->cmd.cmd==CASCADE_CMD_OPEN)?1:0);
@@ -394,7 +403,9 @@ static int mb_receive(cascade_handle_t *cas)
                 case CASCADE_CMD_SAVE:
                 case CASCADE_CMD_SAVE3:
                 {
-
+                    if(cas->cmd.obj==OBJ_CHANNEL) {
+                        //dev_update_power_manage_genera_info(get_dm()->db, get_dm()->_global_device_info->product_id, _globalPowerMangerTemp->product_ch_id, _globalPowerMangerTemp);
+                    }
                 }
                 break;
 
@@ -413,23 +424,9 @@ static int mb_receive(cascade_handle_t *cas)
             switch(cas->cmd.cmd) {
                 case CASCADE_CMD_QUERY_CH:
                 {
-                    if(cas->cmd.obj==OBJ_CHANNEL) {
-                        //
-                    }
-                    else if(cas->cmd.obj==OBJ_OVERALL){
-                        #if 0
-                        cas->allInfo._total_voltage.ydata[0] = 1.1f;
-                        cas->allInfo._total_voltage.ydata[1] = 1.2f;
-                        cas->allInfo._total_voltage.ydata[2] = 1.3f;
-                        cas->allInfo._total_voltage.ydata[3] = 1.4f;
-
-                        cas->allInfo._total_consumption.ydata[0] = 2.1f;
-                        cas->allInfo._total_consumption.ydata[1] = 2.2f;
-                        cas->allInfo._total_consumption.ydata[2] = 2.3f;
-                        cas->allInfo._total_consumption.ydata[3] = 2.4f;
-                        #endif
-
-                        memcpy(cas->map->tab_registers+h.reg, ((char*)&cas->allInfo)+sendlen, h.regcnt*2);
+                    if(cas->cmd.obj==OBJ_OVERALL){
+                        slave_get_all_data(cas);
+                        memcpy(cas->map->tab_registers+h.reg, ((char*)&cas->pwrInfo.info)+sendlen, h.regcnt*2);
                     }
                     else {
                         return -1;
@@ -437,47 +434,13 @@ static int mb_receive(cascade_handle_t *cas)
                 }
                 break;
 
-                case CASCADE_CMD_QUERY_VOL:
-                {
-
-                }
-                break;
-
-                case CASCADE_CMD_QUERY_CUR:
-                {
-
-                }
-                break;
-
-                case CASCADE_CMD_QUERY_PWR:
-                {
-
-                }
-                break;
-
-                case CASCADE_CMD_QUERY_PWRQ:
-                {
-
-                }
-                break;
-
-                case CASCADE_CMD_QUERY_HIS:
-                {
-
-                }
-                break;
-
-                case CASCADE_CMD_QUERY_TOTAL:
-                {
-
-                }
-                break;
-
-                case CASCADE_CMD_QUERY_TOTAL_PWR:
-                {
-
-                }
-                break;
+                case CASCADE_CMD_QUERY_VOL:break;
+                case CASCADE_CMD_QUERY_CUR:break;
+                case CASCADE_CMD_QUERY_PWR:break;
+                case CASCADE_CMD_QUERY_PWRQ:break;
+                case CASCADE_CMD_QUERY_HIS:break;
+                case CASCADE_CMD_QUERY_TOTAL:break;
+                case CASCADE_CMD_QUERY_TOTAL_PWR:break;
             }
 
             r = _mb_reply(cas, buff, r, cas->map);
@@ -622,8 +585,26 @@ static int power_all_update(cascade_handle_t *cas)
     GlobalDeviceManager *dm2=get_dm2();
     _OverAllPwrAckInfo *info=&cas->allInfo;
 
+    if (dm2->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_Tree || 
+        dm2->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One)
+        {
+            dev_search_latest_t_ac_power_statistic_info(0, 0, info);
+            dev_search_latest_t_ac_power_statistic_info(0, 1, info);
+            dev_search_latest_t_ac_power_statistic_info(0, 2, info);
+        }
+        else
+        {
+            GlobalPowerInfo pwrInfo;
+            dev_search_latest_power_info(dm2->db, dm2->_global_device_info->product_id, 0, &pwrInfo);
+            info->voltage = pwrInfo._power_info.voltage ; 
+            info->current = pwrInfo._power_info.current ;
+            info->power =  pwrInfo._power_info.power ;
+            info->freq =  pwrInfo._power_info.freq ;
+            info->consumption =  pwrInfo._power_info.consumption ;
+            info->factor = pwrInfo._power_info.factor ;
+        }
     
-    return -1;
+    return 0;
 }
 
 static void print_sensor(char *s, sensor_data_t *ss)
@@ -773,18 +754,14 @@ static int master_query(cascade_handle_t *cas)
 
     wdata.dlen = sizeof(*cmd);
     wdata.data = (uint8_t*)cmd;
-
+    
     switch(cmd->cmd) {
 
         case CASCADE_CMD_QUERY_CH:
         {
-            if(cmd->obj==OBJ_CHANNEL) {
-                rdata.dlen = sizeof(chInfo);
-                rdata.data = (uint8_t*)&chInfo;
-            }
-            else if(cmd->obj==OBJ_OVERALL) {
-                rdata.dlen = sizeof(allInfo);
-                rdata.data = (uint8_t*)&allInfo;
+            if(cmd->obj==OBJ_OVERALL) {
+                rdata.dlen = sizeof(PowerInfo)*cas->info.cnt;
+                rdata.data = (uint8_t*)&cas->pwrInfo.info;
             }
             else {
                 return -1;
@@ -984,6 +961,7 @@ int cascade_init(void)
     slave_init(cas);
     
     cas->scanAddr = 1;
+    cas->pwrInfo.info = malloc(128*sizeof(PowerInfo));
     cas->map = modbus_mapping_new(0,0,MAX_READ_REGS,MAX_WRITE_REGS);
 
     set_modbus(cas, get_mb());

+ 7 - 0
pro/src/cascade.h

@@ -104,6 +104,13 @@ typedef struct {
     uint8_t         cnt;
 }board_info_t;
 
+
+typedef struct {
+    uint8_t        cnt;
+    PowerInfo      *info;
+}power_info_t;
+
+
 typedef struct {
     uint8_t         cmd;
     uint8_t         obj;