Przeglądaj źródła

web推送添加完毕,编译通过

guohui 2 lat temu
rodzic
commit
06a674c8f3

+ 4 - 5
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/app.c

@@ -705,7 +705,7 @@ void* ntp_thread(void *arg)
             if (globalNTPclient ==NULL)
             if (globalNTPclient ==NULL)
             {
             {
                 log_e("Failed to Connect the NTP server.");  
                 log_e("Failed to Connect the NTP server.");  
-                sleep(300);
+                sleep(600);
                 continue;
                 continue;
             }
             }
             
             
@@ -713,7 +713,7 @@ void* ntp_thread(void *arg)
             if (getCurrentTimeFromNTP(globalNTPclient, &current_time) < 0)
             if (getCurrentTimeFromNTP(globalNTPclient, &current_time) < 0)
             {  
             {  
                 log_e("Failed to get time from NTP server.");  
                 log_e("Failed to get time from NTP server.");  
-                sleep(300);
+                sleep(600);
                 continue;
                 continue;
             }
             }
             time_t t = time(NULL);
             time_t t = time(NULL);
@@ -724,7 +724,7 @@ void* ntp_thread(void *arg)
         }
         }
         end_t = time(NULL);
         end_t = time(NULL);
 
 
-        sleep(300);//三分钟同步一次
+        sleep(600);//十分钟同步一次
     }
     }
     destroyNTPClient(globalNTPclient);
     destroyNTPClient(globalNTPclient);
 
 
@@ -1639,13 +1639,12 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     sys_start_thread(THREAD_ID_NTP, ntp_thread, NULL);
     sys_start_thread(THREAD_ID_NTP, ntp_thread, NULL);
 #endif
 #endif
     sys_start_thread(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager);
     sys_start_thread(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager);
-
-    //cascade_init();
     
     
     //初始化webapp
     //初始化webapp
     websocket_init();
     websocket_init();
     appweb_init();
     appweb_init();
 
 
+    cascade_init();
     //通知upgd,app已经运行起来
     //通知upgd,app已经运行起来
     //upg_init();
     //upg_init();
     
     

+ 60 - 72
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/appweb_handle.c

@@ -7,16 +7,12 @@
 #include "switch_ctrl.h"
 #include "switch_ctrl.h"
 #include "sys.h"
 #include "sys.h"
 #include "cfg.h"
 #include "cfg.h"
+#include "cascade.h"
 
 
 
 
 #define WEB_DEBUG 1
 #define WEB_DEBUG 1
 
 
 
 
-static _User_Log _user_log ;
-static pthread_t wetThreadId;
-
-
-
 typedef void (*http_fn_t)(void *arg);
 typedef void (*http_fn_t)(void *arg);
 
 
 
 
@@ -53,19 +49,19 @@ typedef struct {
 static web_handle_t webHandle;
 static web_handle_t webHandle;
 
 
 
 
-static char* g_product_board_cpu[2] = {
+static char* g_product_board_cpu[] = {
     "xxx",
     "xxx",
     "T113"
     "T113"
 };
 };
 
 
-static char* g_product_type_str[4] = {
+static char* g_product_type_str[] = {
     "SmartPdu(DC)",
     "SmartPdu(DC)",
     "SmartPdu(AC)",
     "SmartPdu(AC)",
     "SmartPdu(Tree_AC_Tree)",
     "SmartPdu(Tree_AC_Tree)",
     "SmartPdu(Tree_AC_One)",
     "SmartPdu(Tree_AC_One)",
 };
 };
 
 
-static char* g_product_pwr_type_str[5] = {
+static char* g_product_pwr_type_str[] = {
     "xxx",
     "xxx",
     "直流",
     "直流",
     "交流单相",
     "交流单相",
@@ -222,8 +218,6 @@ static void *web_thread(void *arg)
 void* update_thread(void* arg)
 void* update_thread(void* arg)
 {
 {
     thread_handle_t *h=(thread_handle_t*)arg;
     thread_handle_t *h=(thread_handle_t*)arg;
-    GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
-    unsigned int samp_time = _globalDeviceManager->_global_device_info->product_samp_time;
     GlobalSensorManger* _globalSensorMangerTemp;
     GlobalSensorManger* _globalSensorMangerTemp;
     int ret = 0 ;
     int ret = 0 ;
     GlobalSensorInfo _globalSensorInfo;
     GlobalSensorInfo _globalSensorInfo;
@@ -235,59 +229,74 @@ void* update_thread(void* arg)
      GlobalPowerInfo _powerInfo;
      GlobalPowerInfo _powerInfo;
     GlobalPowerManger* _globalPowerMangerTemp = NULL ;
     GlobalPowerManger* _globalPowerMangerTemp = NULL ;
     _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
     _OverAllPwrAckInfo _over_all_pwr_back_info; //设备电源信息
+    GlobalDeviceManager* gdm= &__globalDeviceManage;
+    GlobalDeviceManager* gdm2=&__globalDeviceManage2;
 	
 	
     //采集线程
     //采集线程
     while (h->quit==0)
     while (h->quit==0)
     {
     {
-        if(_globalDeviceManager->ws_isok==1)
+        if(gdm->ws_isok==1)
         {
         {
             //推送总体信息
             //推送总体信息
-            if(__globalDeviceManage.view_page==1)
+            if(gdm->view_page==1)
             {
             {
-                
-
                 pthread_mutex_lock(&WSlock);  
                 pthread_mutex_lock(&WSlock);  
-                if(__globalDeviceManage._global_device_info->product_pwr_type==SmartPDU_Tree_AC_Tree||__globalDeviceManage._global_device_info->product_pwr_type==SmartPDU_Tree_AC_One)
+                if(gdm->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_Tree ||
+                   gdm->_global_device_info->product_pwr_type==SmartPDU_Tree_AC_One)
                 {
                 {
                     //三相
                     //三相
                     _OverAllPwrAckInfo _over_all_pwr_back_info;
                     _OverAllPwrAckInfo _over_all_pwr_back_info;
-                    dev_search_latest_t_ac_power_statistic_info(0, __globalDeviceManage.nTreeACLshow, &_over_all_pwr_back_info);
+                    dev_search_latest_t_ac_power_statistic_info(0, gdm->nTreeACLshow, &_over_all_pwr_back_info);
                     ack_str = over_all_pwr_monitor_to_json(&_over_all_pwr_back_info);
                     ack_str = over_all_pwr_monitor_to_json(&_over_all_pwr_back_info);
-                    mg_ws_send(_globalDeviceManager->ws_client, ack_str, strlen(ack_str), WEBSOCKET_OP_TEXT);
+                    mg_ws_send(gdm->ws_client, ack_str, strlen(ack_str), WEBSOCKET_OP_TEXT);
                     cJSON_free((void*)ack_str);
                     cJSON_free((void*)ack_str);
                 }
                 }
                 else
                 else
                 {
                 {
-                    dev_search_latest_power_statistic_info(&__globalDeviceManage);
+                    if(cur_dev_addr==0) {
+                        dev_search_latest_power_statistic_info(gdm);
+                    }
+                    else {
+                        gdm2->ws_client = gdm->ws_client;
+                        dev_search_latest_power_statistic_info(gdm2);
+                    }
                 }                
                 }                
                 pthread_mutex_unlock(&WSlock);  
                 pthread_mutex_unlock(&WSlock);  
             }
             }
             //推送通道信息
             //推送通道信息
-            else if(__globalDeviceManage.view_page==2)
+            else if(gdm->view_page==2)
             {
             {
                 _OverChnPwrAckInfo _over_chn_pwr_back_info;
                 _OverChnPwrAckInfo _over_chn_pwr_back_info;
                 INIT_LIST_HEAD(&_over_chn_pwr_back_info.list);
                 INIT_LIST_HEAD(&_over_chn_pwr_back_info.list);
 
 
-                dev_search_latest_power_All_info(&__globalDeviceManage,&_over_chn_pwr_back_info);
+                GlobalDeviceManager *pgdm=NULL;
+                if(cur_dev_addr==0) {
+                    pgdm = gdm;
+                }
+                else {
+                    gdm2->ws_client = gdm->ws_client;
+                    pgdm = gdm2;
+                }
+
+                dev_search_latest_power_All_info(&pgdm,&_over_chn_pwr_back_info);
                 upgrade_msg = ws_chn_status_ack_to_json(1,&_over_chn_pwr_back_info);
                 upgrade_msg = ws_chn_status_ack_to_json(1,&_over_chn_pwr_back_info);
 
 
-                //struct mg_connection* WStemp = _globalDeviceManager->ws_client;
+                //struct mg_connection* WStemp = pgdm->ws_client;
                 //while (WStemp != NULL)
                 //while (WStemp != NULL)
                // {
                // {
-                  //  mg_ws_send(_globalDeviceManager->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
+                  //  mg_ws_send(pgdm->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
                  //   WStemp = WStemp->next;
                  //   WStemp = WStemp->next;
                // }
                // }
                 pthread_mutex_lock(&WSlock); 
                 pthread_mutex_lock(&WSlock); 
-                if (_globalDeviceManager->ws_client!=NULL)
+                if (pgdm->ws_client!=NULL)
                 {
                 {
-                    mg_ws_send(_globalDeviceManager->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
+                    mg_ws_send(pgdm->ws_client, upgrade_msg, strlen(upgrade_msg), WEBSOCKET_OP_TEXT);
                 }
                 }
                 pthread_mutex_unlock(&WSlock); 
                 pthread_mutex_unlock(&WSlock); 
                 //释放资源,一定要记得释放json字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                 //释放资源,一定要记得释放json字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                 cJSON_free((void*)upgrade_msg);
                 cJSON_free((void*)upgrade_msg);
                 //释放资源,一定要记得释放json字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                 //释放资源,一定要记得释放json字符串!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-                _OverChnPwrAckInfo* node;
-                _OverChnPwrAckInfo* next;
+                _OverChnPwrAckInfo *node,*next;
                 list_for_each_entry_safe(node, next, &_over_chn_pwr_back_info.list, list)
                 list_for_each_entry_safe(node, next, &_over_chn_pwr_back_info.list, list)
                 {
                 {
                     list_del(&node->list);
                     list_del(&node->list);
@@ -478,6 +487,15 @@ static void getUserRouters(void* conn)
     cJSON_free((void*)ack_str);
     cJSON_free((void*)ack_str);
 }
 }
 
 
+static int get_addr(char *name)
+{
+    int r,addr=-1;
+    r = sscanf(name, "SmartPDU %d", &addr);
+    if(r<1) {
+        return 0;
+    }
+    return addr;
+}
 /// @brief 设备总体信息
 /// @brief 设备总体信息
 /// @param stream 
 /// @param stream 
 static void overallStatusMonitoring(void* conn)
 static void overallStatusMonitoring(void* conn)
@@ -506,44 +524,14 @@ static void overallStatusMonitoring(void* conn)
         http_reply(conn, 400, NULL);
         http_reply(conn, 400, NULL);
         return ;        
         return ;        
     }
     }
+    
+    int addr = get_addr(_over_all_sts_monitor.product_name);
+    if(addr>0) {
+        cur_dev_addr = addr;
+        return;
+    }
 
 
     #if(1)
     #if(1)
-    // //设备总体信息
-    // if(strcmp(_over_all_sts_monitor.type,"listInfoQuery")==0)
-    // {
-    //     unsigned int totalMemSize = 0 ;
-    //     char mem_buf[16]={0};
-    //     char disk_buf[32]={0};
-    //     //参数转换json
-    //     //log_i("over all request:listInfoQuery");
-    //     #if(1)
-    //     _over_back_sts_info.product_name = __globalDeviceManage._global_device_info->product_name;
-    //     _over_back_sts_info.product_number = __globalDeviceManage._global_device_info->product_number;
-    //     _over_back_sts_info.product_id = __globalDeviceManage._global_device_info->product_id;
-    //     _over_back_sts_info.product_type = g_product_type_str[__globalDeviceManage._global_device_info->product_type];
-    //     _over_back_sts_info.productPwrType = g_product_pwr_type_str[__globalDeviceManage._global_device_info->product_pwr_type];
-    //     _over_back_sts_info.productVersion = __globalDeviceManage._global_device_info->product_version;
-    //     _over_back_sts_info.productConsumption = g_product_board_cpu[__globalDeviceManage._global_device_info->product_type];
-    //     //内存
-    //     if(getTotalMemorySize(&totalMemSize)!=0)
-    //     {
-    //         log_d("get total memory size error.");
-    //     }
-    //     sprintf(mem_buf,"%dMB",totalMemSize/1024/1024);
-    //     _over_back_sts_info.productMemory = mem_buf;
-    //     //磁盘使用率
-    //     char t[20] = "";
-    //     char *disk_occupy_used = t;
-    //     get_disk_occupy(&disk_occupy_used);
-    //     sprintf(disk_buf,"%s%%",disk_occupy_used);
-    //     _over_back_sts_info.occupancyRate = disk_buf;
-    //     //IP
-    //     _over_back_sts_info.productAddr = getLocalIpAddress("eth0");
-    //     //级联设备数
-    //     _over_back_sts_info.productCount = __globalDeviceManage._global_device_info->product_count;
-    //     ack_str = over_all_monitor_to_json(&_over_back_sts_info);
-    //     #endif
-    // }
     //总电压电流信息
     //总电压电流信息
     // else if(strcmp(_over_all_sts_monitor.type,"listQuery")==0)
     // else if(strcmp(_over_all_sts_monitor.type,"listQuery")==0)
     if(strcmp(_over_all_sts_monitor.type,"listQuery")==0)
     if(strcmp(_over_all_sts_monitor.type,"listQuery")==0)
@@ -941,6 +929,13 @@ static void channelStatusMonitoring(void* conn)
         http_reply(conn, 400, NULL);
         http_reply(conn, 400, NULL);
         return ;        
         return ;        
     }
     }
+
+    int addr = get_addr(_over_chn_pwr_request.product_name);
+    if(addr>0) {
+        cur_dev_addr = addr;
+        return;
+    }
+
     #if(1)
     #if(1)
     //查询
     //查询
     if(strcmp(_over_chn_pwr_request.type,"listQuery")==0||strcmp(_over_chn_pwr_request.type,"resetChannel")==0)
     if(strcmp(_over_chn_pwr_request.type,"listQuery")==0||strcmp(_over_chn_pwr_request.type,"resetChannel")==0)
@@ -2437,10 +2432,10 @@ static void communicationManagement(void *conn)
         info->product_modbus_addr = atoi(reqInfo._rs_info.addr);
         info->product_modbus_addr = atoi(reqInfo._rs_info.addr);
         
         
         ///////////////////////////////////////////////////////////////////////////////
         ///////////////////////////////////////////////////////////////////////////////
-        extern int cascade_init(GlobalDeviceManager *m);
-        r = cascade_init(&__globalDeviceManage);
+        r = cascade_set_modbus(info);
         if(r==0) {
         if(r==0) {
             paras_save();
             paras_save();
+            dev_update_device_modus_info(__globalDeviceManage.db,devInfo);
         }
         }
         
         
         ack_str = ctrl_sts_ack_to_json();
         ack_str = ctrl_sts_ack_to_json();
@@ -3280,14 +3275,7 @@ static void equipmentMintenance(void *conn)
     //查询设备列表
     //查询设备列表
     if(strcmp(_Over_equipment_mintenance.type,"listSbRestartQuery")==0)
     if(strcmp(_Over_equipment_mintenance.type,"listSbRestartQuery")==0)
     {
     {
-         _over_back_sts_info.product_name = __globalDeviceManage._global_device_info->product_name;
-         _over_back_sts_info.product_number = __globalDeviceManage._global_device_info->product_number;
-         _over_back_sts_info.product_id = __globalDeviceManage._global_device_info->product_id;
-         _over_back_sts_info.product_type = g_product_type_str[__globalDeviceManage._global_device_info->product_type];
-         _over_back_sts_info.product_type_id=__globalDeviceManage._global_device_info->product_pwr_type;
-         _over_back_sts_info.product_status = __globalDeviceManage._global_device_info ->product_status;
-        
-         ack_str = over_product_list_info_to_json(&_over_back_sts_info);
+         ack_str = over_product_list_info_to_json(&__globalDeviceManage, &_over_back_sts_info);
     }
     }
     else if(strcmp(_Over_equipment_mintenance.type,"listShfwQuery")==0)
     else if(strcmp(_Over_equipment_mintenance.type,"listShfwQuery")==0)
     {
     {

+ 343 - 94
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/cascade.c

@@ -2,21 +2,25 @@
 #include "common.h"
 #include "common.h"
 #include "xlist.h"
 #include "xlist.h"
 #include "elog.h"
 #include "elog.h"
+#include "paras.h"
 #include "modbus-rtu.h"
 #include "modbus-rtu.h"
+#include "cfg.h"
 #include "sys.h"
 #include "sys.h"
-
+#include "paras.h"
 
 
 #if 0
 #if 0
-#define LOGD   log_d
-#define LOGE   log_e
+#define LOGD            log_d
+#define LOGE            log_e
 #else
 #else
-#define LOGD   printf
-#define LOGE   printf
+#define LOGD            printf
+#define LOGE            printf
 #endif
 #endif
 
 
+#define ERR_MAX         5
+#define CASCADE_MAX     2
+//#define CASCADE_MAX     99
 
 
-#define ERR_MAX                 5
-#define CASCADE_MAX             247
+#define MB_MAX_LEN      250
 
 
 
 
 typedef struct {
 typedef struct {
@@ -25,22 +29,120 @@ typedef struct {
 }slave_t;
 }slave_t;
 
 
 typedef struct {
 typedef struct {
-    Modbus_Manger       m;  //级联modbus口
+    
     handle_t            l;
     handle_t            l;
     int                 inited;
     int                 inited;
+    pthread_mutex_t     mutex;
     
     
+    modbus_t            *mb;
     modbus_mapping_t    *map;
     modbus_mapping_t    *map;
     uint8_t             query[MODBUS_RTU_MAX_ADU_LENGTH];
     uint8_t             query[MODBUS_RTU_MAX_ADU_LENGTH];
+
+    int                 addr;   //self addr
+    int                 saddr;  //current slave addr
 }cascade_handle_t;
 }cascade_handle_t;
 
 
-static cascade_handle_t casHandle={0}; 
+int cur_dev_addr=0;
+static cascade_handle_t casHandle={.inited=0}; 
 
 
-static inline GlobalDeviceManager *get_dm(void)
+
+static inline GlobalDeviceManager* get_dm(void)
 {
 {
     return &__globalDeviceManage;
     return &__globalDeviceManage;
 }
 }
+static inline GlobalDeviceManager* get_dm2(void)
+{
+    return &__globalDeviceManage2;
+}
+static inline GlobalDeviceInfo *get_dev(void)
+{
+    return &paras_get()->dev;
+}
+static int mbus_init(cascade_handle_t *cas, char *path, int mode, int addr, uint32_t baud)
+{
+    int r;
+
+    cas->mb = modbus_new_rtu(path, baud, 'N', 8, 1);
+    if(cas->mb == NULL)
+        return -1;
+
+    r = modbus_connect(cas->mb);
+    if (r!=0) {
+        LOGD("____modbus_connect failed, %s\n", modbus_strerror(errno));
+        return -1;
+    }
+
+    r = modbus_rtu_set_serial_mode(cas->mb, MODBUS_RTU_RS485);
+    if (r != 0){
+        LOGD("____modbus_rtu_set_serial_mode failed, %s\n", modbus_strerror(errno));
+        //return -1;
+    }
+
+    r = modbus_rtu_set_rts(cas->mb, MODBUS_RTU_RTS_NONE);
+    if (r != 0) {
+        LOGD("____modbus_rtu_set_rts failed, %s\n", modbus_strerror(errno));
+        return -1;
+    }
+    r = modbus_set_error_recovery(cas->mb, MODBUS_ERROR_RECOVERY_PROTOCOL);
+    
+    //设置超时时间
+    modbus_set_response_timeout(cas->mb, 1, 5000);
+    modbus_set_byte_timeout(cas->mb, 0, 50000);
+
+    cas->addr = addr;
+    if(addr>0) {   //slave mode
+        modbus_set_slave(cas->mb, addr);
+    }
+
+    r = pthread_mutex_init(&cas->mutex, NULL);
+    if (r) {
+        LOGD("____pthread_mutex_init failed\n");
+        return -1;
+    }
+
+    return 0;
+}
+static int mbus_deinit(cascade_handle_t *cas)
+{
+    modbus_close(cas->mb);
+    modbus_free(cas->mb);
+    return 0;
+}
+static int mbus_read(cascade_handle_t *cas, int addr, int reg, uint16_t *data, int cnt)
+{
+    int r=0;
+
+    pthread_mutex_lock(&cas->mutex);
+    modbus_set_slave(cas->mb, addr);
+    r = modbus_read_registers(cas->mb, reg, cnt, data);
+    pthread_mutex_unlock(&cas->mutex);
+
+    return r ;
+}
+
+
+
+static void print_data(uint8_t *data, int len)
+{
+    int i;
+    for(i=0; i<len; i++) {
+        LOGD("0x%02x, ", data[i]);
+    }
+    LOGD("\n");
+}
+static int mbus_receive(cascade_handle_t *cas)
+{
+    int r=0;
+
+    pthread_mutex_lock(&cas->mutex);
+    r = modbus_receive(cas->mb, cas->query);
+    pthread_mutex_unlock(&cas->mutex);
+
+    return r;
+}
 
 
-static int iterator_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
+/////////////////////////////////////////////////////////////////////////
+static int find_addr_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
 {
 {
     slave_t *s1 = (slave_t*)node->buf;
     slave_t *s1 = (slave_t*)node->buf;
     slave_t *s2 = (slave_t*)xd->buf;
     slave_t *s2 = (slave_t*)xd->buf;
@@ -51,97 +153,188 @@ static int iterator_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act
     }
     }
     return 0;
     return 0;
 }
 }
-
-static int in_list(cascade_handle_t *cas, int addr)
+static int find_addr(cascade_handle_t *cas, int addr)
 {
 {
     int r=0;
     int r=0;
     slave_t sl={addr,0};
     slave_t sl={addr,0};
-    node_t nod={0, &sl,sizeof(sl),sizeof(sl)};
+    node_t nod={0,&sl,sizeof(sl),sizeof(sl)};
 
 
-    r = xlist_iterator(cas->l, &nod, iterator_fn, NULL);
+    r = xlist_iterator(cas->l, &nod, find_addr_fn, NULL);
     if(r<0) r=0;
     if(r<0) r=0;
     
     
     return r;
     return r;
 }
 }
 
 
+
 static int cascade_scan(cascade_handle_t *cas)
 static int cascade_scan(cascade_handle_t *cas)
 {
 {
     int i,r=0 ;
     int i,r=0 ;
-    slave_t slav;
     uint16_t tmp[100];
     uint16_t tmp[100];
 
 
     for(i=1; i<=CASCADE_MAX; i++) {
     for(i=1; i<=CASCADE_MAX; i++) {
-        if(!in_list(cas, i)) {
-            r = g_modbus_read_reg(&cas->m, i, CASCADE_REG_SCAN, tmp);;
-            if(r==0) {
-                slav.addr = i; slav.err = 0;
+        if(find_addr(cas, i)) {
+            //LOGD("___slave 0x%02x is in the list\n", i);
+            continue;
+        }
+
+        r = mbus_read(cas, i, 6000, tmp, 10);
+        if(r>0) {
+            LOGD("____ scan addr:%d, %d  0x%04x, 0x%04x\n", i, r, tmp[0], tmp[1]);
+            //xlist_append(cas->l, 0, &i, sizeof(i));
+        }
+        else {
+            LOGD("____ scan fail, %s\n", modbus_strerror(errno));
 
 
-                xlist_append(cas->l, 0, &slav, sizeof(slav));
-            }
         }
         }
     }
     }
-    //LOGD("___cascade scan, slave num: %d\n", xlist_size(cas->l));
-        
+    //print_slave(cas);
+      
     return 0;
     return 0;
 }
 }
-static int master_query(cascade_handle_t *cas)
+
+
+
+static void power_init(void)
 {
 {
-    int i,r,sz;
-    list_node_t *ln;
-    uint16_t tmp[100];
+    int nGroups=18,chn=1;
+    GlobalDeviceManager *dm2=get_dm2();
 
 
-    sz = xlist_size(cas->l);
-    for(i=0; i<sz; i++) {
-        r = xlist_take_node(cas->l, &ln, 0);
-        if(r==0) {
-            slave_t *sl=(slave_t*)ln->data.buf;
-            r = g_modbus_read_reg(&cas->m, sl->addr, CASCADE_REG_POWER, tmp);
-            if(r==0) {
-                sl->err = 0;
-            }
-            else {
-                sl->err++;
-            }
-
-            if(sl->err>=ERR_MAX) {      //错误次数超限后,从设备列表删除
-                xlist_back_node(cas->l, ln);
-            }
-            else {
-                xlist_append_node(cas->l, ln);
-            }
-        }
-    }
+    dm2->_global_device_info = (GlobalDeviceInfo*)malloc(sizeof(GlobalDeviceInfo));
+    
+    dm2->_global_device_info->product_pwr_type = SmartPDU_AC;
+    dm2->_global_device_info->product_id = 1;
+    sprintf(dm2->_global_device_info->product_name, "SmartPDU_AC");
+    strcpy(dm2->_global_device_info->product_number, "11");
+    strcpy(dm2->_global_device_info->product_status, "");
+    
+    //dm->_globalPowerManger.list;
+    INIT_LIST_HEAD(&dm2->_globalPowerManger.list);
+
+    GlobalPowerManger* pm = (GlobalPowerManger*)malloc(sizeof(GlobalPowerManger));
+    memset(pm, 0, sizeof(GlobalPowerManger));
+    pm->product_id = dm2->_global_device_info->product_id;
+    pm->product_saddr = 0;
+    pm->product_ch_id = 1;
+    pm->product_ch_addr = 0;
+    sprintf(pm->product_ch_name,"CH%d",pm->product_ch_id);
+    pm->product_ch_type = AC_SINGLE_S_TYPE;
+    pm->product_ch_status = 0;
+
+    pm->product_ch_start_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
+    pm->product_ch_stop_delay = 1000 * (chn%nGroups!=0?chn%nGroups:nGroups);
+ 
+    list_add_tail(&pm->list,&dm2->_globalPowerManger.list);
+}
+
+static int power_get(cascade_handle_t *cas, int addr, PowerInfo *pwr)
+{
+    uint32_t offset = 0;
+    uint32_t value = 0 ;
+    uint16_t temp[100];
+    sensor_data_t sdat;
+
+    int cnt = 10;
+    offset = 6000;
+    
+    //
+    mbus_read(cas, addr, offset, temp, cnt);
+    
+
+    //
+    value = (temp[1] << 16) + temp[0];
+    //dm->
+
+    //reserved
+    value = (temp[3] << 16) + temp[2];
+    
+    
+    value = (temp[5] << 16) + temp[4];
+    pwr->voltage = value / 1000.0;
+    
+    //
+    value = (temp[7] << 16) + temp[6];
+    pwr->current = value / 1000.0;
+    
+    //
+    value = (temp[9] << 16) + temp[8];
+    pwr->power = value / 1000.0;
+
+    //
+    value = (temp[11] << 16) + temp[10];
+    pwr->consumption = value / 1000.0;
+
+    //
+    value = (temp[13] << 16) + temp[12];
+    pwr->factor = value/1000.0;
+
+    //
+    value = (temp[15] << 16) + temp[14];
+
+    value = (temp[17] << 16) + temp[16];
+    //ss->sensor_type = 1;
+    //ss->
+
+    //
+    value = (temp[19] << 16) + temp[18];
+    pwr->status = value;
+
+#if 0
+    LOGD("___ voltage: %f, current: %f, power: %f, consum: %d, factor: %f, status: %d\n", pwr->voltage, pwr->voltage, pwr->current, pwr->power, pwr->consumption, pwr->factor, pwr->status);
+    LOGD("___ devtype: %d, addr: %d, voltage: %f, current: %f, power: %f, consum: %d, factor: %f, power_status: %d, sensor_status: %d\n", 
+        sdat.deveice_type, sdat.slave_addr, sdat.voltage, sdat.voltage, sdat.current, sdat.power, sdat.consumption, sdat.factor, sdat.power_status, sdat.sensor_status);
+#endif
 
 
+    return 0;
 }
 }
-static int slave_rceive(cascade_handle_t *cas)
+
+
+static int master_request(cascade_handle_t *cas)
 {
 {
-    int r;
-    uint8_t tmp[300];
+    GlobalPowerManger *tmp=NULL;
 
 
-    r = g_modbus_receive(&cas->m, cas->query);
-    if (r > 0) {
-        r = g_modbus_reply(&cas->m, tmp, sizeof(tmp), cas->map);
+    list_for_each_entry(tmp, &get_dm2()->_globalPowerManger.list, list)
+    {
+        tmp->product_saddr=cas->addr;
+        break;
     }
     }
 
 
-    return r;
+    if(tmp) {
+        LOGD("___ master request %d\n", cas->addr);
+        power_get(cas, cas->addr, &tmp->_PowerInfo);
+    }
 }
 }
 
 
+static int slave_receive(cascade_handle_t *cas)
+{
+    int i,r=0,rc;
+    uint8_t *query=cas->query;
+    modbus_mapping_t *map=cas->map;
+    ModbusInfo_t *info=&get_dev()->_gmodbus_info;
+
+    //rc = mbus_receive(cas, &h);
+    if (rc>0) {
 
 
+        
+    }
+
+    return r;
+}
 
 
 static void* cascade_thread(void *arg)
 static void* cascade_thread(void *arg)
 {
 {
     int r;
     int r;
     thread_handle_t *h=(thread_handle_t*)arg;
     thread_handle_t *h=(thread_handle_t*)arg;
-    cascade_handle_t *cas=&casHandle;
-    ModbusInfo_t *info=&get_dm()->_global_device_info->_gmodbus_info;
+    cascade_handle_t *cas=(cascade_handle_t*)h->arg;
+    ModbusInfo_t *info=&get_dev()->_gmodbus_info;
     
     
+    LOGD("__ cascade %s\n", info->product_modbus_type?"slave":"master");
     while(h->quit==0) {
     while(h->quit==0) {
-        
-        if(info->product_modbus_type==0) {      //主模式
-            r = master_query(cas);
+        if(info->product_modbus_type==0) {      //主模
+            //r = master_request(cas);
+            sleep(1);
         }
         }
-        else {                                  //从模式,等待主设备发起数据请求
-            r = slave_rceive(cas);
+        else {                                  //从模式,等待主设备发起数据请�?
+            //r = slave_rceive(cas);
         }  
         }  
     }
     }
     modbus_mapping_free(cas->map);
     modbus_mapping_free(cas->map);
@@ -151,44 +344,34 @@ static void* cascade_thread(void *arg)
 static void* scan_thread(void *arg)
 static void* scan_thread(void *arg)
 {
 {
     int r;
     int r;
-    cascade_handle_t *cas=&casHandle;
-    ModbusInfo_t *info=&get_dm()->_global_device_info->_gmodbus_info;
+    thread_handle_t *h=(thread_handle_t*)arg;
+    cascade_handle_t *cas=(cascade_handle_t*)h->arg;
+    ModbusInfo_t *info=&get_dev()->_gmodbus_info;
     
     
-    while(1) {
+    while(h->quit==0) {
         if(info->product_modbus_type==0) {  //master
         if(info->product_modbus_type==0) {  //master
             r = cascade_scan(cas);
             r = cascade_scan(cas);
         }
         }
-        sleep(5);
+        sleep(1);
     }
     }
 
 
     pthread_exit(NULL);
     pthread_exit(NULL);
 }
 }
-
-
-int mbus_init(void)
+static int set_modbus(cascade_handle_t *cas, ModbusInfo_t *info)
 {
 {
     int r;
     int r;
-    cascade_handle_t *cas=&casHandle;
-    ModbusInfo_t *info=&get_dm()->_global_device_info->_gmodbus_info;
 
 
     if(cas->inited) {
     if(cas->inited) {
-        g_modbus_deinit(&cas->m);
+        mbus_deinit(cas);
     }
     }
-
     cas->inited = 0;
     cas->inited = 0;
-    r = g_modbus_init(&cas->m,
-                        CASCADE_MODBUS_PORT,
-                        info->product_modbus_baud,
-                        info->product_modbus_type,
-                        (info->product_modbus_type==0)?0:info->product_modbus_addr,
-                        "cascade");
+    r = mbus_init(cas, CASCADE_MODBUS_PORT, info->product_modbus_type,
+                  (info->product_modbus_type==0)?0:info->product_modbus_addr,
+                  info->product_modbus_baud);
     if(r!=0) {
     if(r!=0) {
         LOGE("cascade modbus init error.\n");
         LOGE("cascade modbus init error.\n");
         return -1;
         return -1;
     }
     }
-    if(info->product_modbus_type) { //if slave, set slave address
-        g_modbus_set_slave(&cas->m, info->product_modbus_addr);
-    }
     cas->inited = 1;
     cas->inited = 1;
 
 
     return 0;
     return 0;
@@ -198,42 +381,108 @@ int mbus_init(void)
 
 
 int cascade_init(void)
 int cascade_init(void)
 {
 {
-    int i,r=0;
+    int r=0,addr=0;
     list_cfg_t lc;
     list_cfg_t lc;
     cascade_handle_t *cas=&casHandle;
     cascade_handle_t *cas=&casHandle;
+    ModbusInfo_t *info=&get_dm()->_global_device_info->_gmodbus_info;
     
     
+    paras_load();
+    power_init();
+
     lc.log = 0;
     lc.log = 0;
     lc.max = 100;
     lc.max = 100;
     lc.mode = LIST_FULL_FIFO;
     lc.mode = LIST_FULL_FIFO;
     cas->l = xlist_init(&lc);
     cas->l = xlist_init(&lc);
-    cas->map = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0);
-
-    mbus_init();
-
-    sys_start_thread(THREAD_ID_CASCADE, cascade_thread, NULL);
-    sys_start_thread(THREAD_ID_SCAN, scan_thread, NULL);
+    xlist_append(cas->l, 0, &addr, sizeof(addr));
+    
+    cas->map = modbus_mapping_new(
+        MODBUS_MAX_READ_BITS,
+        MODBUS_MAX_WRITE_BITS,
+        MAX_READ_REGS, 
+        MAX_WRITE_REGS
+    );
+    set_modbus(cas, info);
+
+    //cas->addr = 1;
+    sys_start_thread(THREAD_ID_CASCADE, cascade_thread, cas);
+    sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
+
+    //while(1) sleep(10);
         
         
     return 0;
     return 0;
 }
 }
 
 
 
 
-int cascade_reinit(void)
+int cascade_set_modbus(ModbusInfo_t *info)
 {
 {
-    return mbus_init();
+    cascade_handle_t *cas=&casHandle;
+
+    if(!info || info->product_modbus_type>1 || info->product_modbus_addr>100) {
+        return -1;
+    }
+
+    return set_modbus(cas, info);
 }
 }
 
 
 
 
-int cascade_get(int addr, int type, void* data)
+ static int dlist_fn(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
 {
 {
+    slave_t *s=(slave_t*)xd->buf;
+    dev_list_t *dl=(dev_list_t*)arg;
+
+    dl->addr[dl->cnt++] = s->addr;
     return 0;
     return 0;
 }
 }
+int cascade_get_dlist(dev_list_t *dl)
+{
+    int *p=NULL;
+    cascade_handle_t *cas=&casHandle;
+    int sz=xlist_size(cas->l);
+
+    if(!dl) {
+        return -1;
+    }
+
+    p = (int*)malloc(sizeof(int)*(sz+1));
+    if(!p) {
+        return -1;
+    }
 
 
+    dl->addr = p;
+    dl->addr[0] = 0;
+    dl->cnt = 1;
+    xlist_iterator(cas->l, NULL, dlist_fn, dl);
 
 
-int cascade_set(int addr, int type, void* data)
+    return 0;
+}
+int cascade_free_dlist(dev_list_t *dl)
 {
 {
+    if(!dl) {
+        return -1;
+    }
+
+    free(dl->addr);
     return 0;
     return 0;
 }
 }
 
 
+static int device_id=-1;
+ 
+int cascade_request(int addr)
+{
+    int r=-1;
+    cascade_handle_t *cas=&casHandle;
+
+    if(addr==0) {
+        return -1;
+    }
+
+    cas->saddr = addr;
+    r = master_request(cas);
+
+    return r;
+}
+
+
 
 
 
 
 
 

+ 29 - 29
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/cascade.h

@@ -1,46 +1,46 @@
 #ifndef __CASCADE_Hx__
 #ifndef __CASCADE_Hx__
 #define __CASCADE_Hx__
 #define __CASCADE_Hx__
 
 
+#include <stdint.h>
 
 
-#define CASCADE_REG_SCAN        0x1000
-#define CASCADE_REG_POWER       0x1001
-#define CASCADE_REG_SENSOR      0x1002
-
-enum {
-    TYPE_PWR_CHN=0,
-    TYPE_PWR_TOTAL,
-    
-    TYPE_CFG_IMPORT,
-    TYPE_CFG_EXPORT,
-    
-    TYPE_SYS_REBOOT,
-    TYPE_SYS_UPGRADE,
-    TYPE_SYS_FACTORY,
-    
-    TYPE_SYS_INFO,
-};
-
-#if 0
-typedef struct {
-    
+#define MAX_READ_REGS                   100
+#define MAX_WRITE_REGS                  100
 
 
-}factory_data_t;
-typedef struct {
-    
 
 
-}config_data_t;
 typedef struct {
 typedef struct {
-    
-
-}device_data_t;
-#endif
+    int *addr;
+    int cnt;
+}dev_list_t;
 
 
+typedef struct {
+    uint16_t deveice_type;          //设备类型
+    uint16_t slave_addr;            //设备地址
+    uint32_t voltage;               //当前电压
+    uint32_t current;               //当前电流
+    uint32_t power;                 //当前功率
+    uint32_t consumption;           //耗电量
+    uint32_t freq;                  //频率
+    uint32_t factor;                //功率因素
+    uint32_t temprature;            //温度值
+    uint32_t humidity;              //湿度值
+    uint32_t warning;               //告警
+    uint16_t power_status;          //供电状态
+    uint16_t sensor_status;         //传感器状态
+
+    //uint32_t Warinfo;
+    //uint16_t sersor_type;
+}sensor_data_t;
+
+extern int cur_dev_addr;
 
 
 int cascade_init(void);
 int cascade_init(void);
 int cascade_reinit(void);
 int cascade_reinit(void);
 int cascade_get(int addr, int type, void* data);
 int cascade_get(int addr, int type, void* data);
 int cascade_set(int addr, int type, void* data);
 int cascade_set(int addr, int type, void* data);
 
 
+int cascade_get_dlist(dev_list_t *dl);
+int cascade_free_dlist(dev_list_t *dl);
+
 #endif
 #endif
 
 
 
 

+ 44 - 3
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/common.c

@@ -24,9 +24,9 @@ void printf_global_device_info(GlobalDeviceInfo* _globalDeviceInfo)
     log_d("product_samp_time:%d ", _globalDeviceInfo->product_samp_time);
     log_d("product_samp_time:%d ", _globalDeviceInfo->product_samp_time);
     log_d("product_save_time:%d ", _globalDeviceInfo->product_save_time);   
     log_d("product_save_time:%d ", _globalDeviceInfo->product_save_time);   
 
 
-    log_d("product_modbus_type:%d ", _globalDeviceInfo->_modbus_info.product_modbus_type);
-    log_d("product_modbus_baud:%d ", _globalDeviceInfo->_modbus_info.product_modbus_baud);
-    log_d("product_modbus_addr:%d ", _globalDeviceInfo->_modbus_info.product_modbus_addr);
+    log_d("product_modbus_type:%d ", _globalDeviceInfo->_gmodbus_info.product_modbus_type);
+    log_d("product_modbus_baud:%d ", _globalDeviceInfo->_gmodbus_info.product_modbus_baud);
+    log_d("product_modbus_addr:%d ", _globalDeviceInfo->_gmodbus_info.product_modbus_addr);
     log_d("product_relay_port:%s ",  _globalDeviceInfo->_modbus_info.product_relay_ctrl_port);
     log_d("product_relay_port:%s ",  _globalDeviceInfo->_modbus_info.product_relay_ctrl_port);
     log_d("******************************** ");
     log_d("******************************** ");
 }
 }
@@ -172,6 +172,47 @@ char* getLocalIpAddress(char* dev)
 
 
     return inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);
     return inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);
 }
 }
+// 获取MAC地址的函数  
+char* get_mac_address(const char *iface_name) 
+{  
+    int fd;  
+    struct ifreq ifr;  
+    unsigned char *mac; 
+    char mac_str[18];
+    snprintf(mac_str, sizeof(mac_str), "%02d:%02d:%02d:%02d:%02d:%02d",  
+             0, 0,0, 0, 0, 0);  
+
+    // 创建一个socket  
+    if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {  
+        perror("socket error");  
+        return strdup(mac_str);
+    }  
+  
+    // 设置接口名称  
+    strncpy(ifr.ifr_name, iface_name, IFNAMSIZ - 1);  
+  
+    // 获取MAC地址  
+    if (ioctl(fd, SIOCGIFHWADDR, &ifr) == -1) {  
+        perror("ioctl error");  
+        close(fd);  
+        return strdup(mac_str);   
+    }  
+      // ifr.ifr_hwaddr.sa_data是一个包含硬件地址的字节数组  
+    mac = (unsigned char *)ifr.ifr_hwaddr.sa_data; 
+    // 将MAC地址转换为字符串格式  
+    snprintf(mac_str, sizeof(mac_str), "%02X:%02X:%02X:%02X:%02X:%02X",  
+             mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);  
+  
+    // 关闭socket  
+    close(fd);  
+  
+    // 成功返回0  
+    return strdup(mac_str);  
+}
+
+
+
+
 
 
 /// @brief 获取磁盘使用率
 /// @brief 获取磁盘使用率
 /// @param reused 
 /// @param reused 

+ 3 - 2
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/common.h

@@ -47,7 +47,7 @@
 
 
 //表头级联接口
 //表头级联接口
 #define CASCADE_MODBUS_PORT     "/dev/ttyAS4"
 #define CASCADE_MODBUS_PORT     "/dev/ttyAS4"
-#define CASCADE_MODBUS_BAUD     115200
+#define CASCADE_MODBUS_BAUD     9600
 
 
 #define AC_SINGLE_S_CUR_CHN_NUM 8
 #define AC_SINGLE_S_CUR_CHN_NUM 8
 #define AC_SINGLE_B_CUR_CHN_NUM 4
 #define AC_SINGLE_B_CUR_CHN_NUM 4
@@ -597,6 +597,7 @@ typedef struct
     GlobalPowerCtrlBoard _all_ctrl_board[16]; //所有控制板
     GlobalPowerCtrlBoard _all_ctrl_board[16]; //所有控制板
 }GlobalDeviceManager;
 }GlobalDeviceManager;
 GlobalDeviceManager __globalDeviceManage;
 GlobalDeviceManager __globalDeviceManage;
+GlobalDeviceManager __globalDeviceManage2;
 
 
 NTPClient* globalNTPclient;
 NTPClient* globalNTPclient;
 bool bStopNTPthread;
 bool bStopNTPthread;
@@ -608,7 +609,6 @@ _User_Log _GlobalUserLoginInfo;//全局用户登录信息
 UserInfo _GlobalUserInfoNew;////最近登录的信息
 UserInfo _GlobalUserInfoNew;////最近登录的信息
 char _GlobalUserToken[64];////最近登录的信息
 char _GlobalUserToken[64];////最近登录的信息
 
 
-
 void initLogger(void);
 void initLogger(void);
 
 
 //打印设备信息结构
 //打印设备信息结构
@@ -623,6 +623,7 @@ void printf_power_info(GlobalPowerInfo* _globalPowerInfo);
 
 
 int getTotalMemorySize(unsigned int* totalSize);
 int getTotalMemorySize(unsigned int* totalSize);
 char* getLocalIpAddress(char* dev);
 char* getLocalIpAddress(char* dev);
+char* get_mac_address(const char *iface_name) ;
 void get_disk_occupy(char ** reused);
 void get_disk_occupy(char ** reused);
 int set_local_timeandzone(struct tm* t, int zone);
 int set_local_timeandzone(struct tm* t, int zone);
 char* getUserNamebyToken(char* Token);
 char* getUserNamebyToken(char* Token);

+ 2 - 2
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/dflt.c

@@ -21,7 +21,7 @@ AllParasInfo DFLT_PARAS={
             .product_modbus_type = 0,                    //modbus模式,0: master     1: slave
             .product_modbus_type = 0,                    //modbus模式,0: master     1: slave
             .product_modbus_baud = 115200,
             .product_modbus_baud = 115200,
             .product_modbus_addr = 1,
             .product_modbus_addr = 1,
-            .product_relay_ctrl_port = "/dev/ttyAS2",    //继电器modbus控制端口路径
+            .product_relay_ctrl_port = "/dev/ttyAS5",    //继电器modbus控制端口路径
         },
         },
         
         
         ._network_info = {
         ._network_info = {
@@ -37,7 +37,7 @@ AllParasInfo DFLT_PARAS={
             .product_modbus_type = 0,                   //modbus模式,0: master     1: slave
             .product_modbus_type = 0,                   //modbus模式,0: master     1: slave
             .product_modbus_baud = 115200,
             .product_modbus_baud = 115200,
             .product_modbus_addr = 1,
             .product_modbus_addr = 1,
-            .product_relay_ctrl_port = "/dev/ttyAS5",   //表头级联串口对应路径
+            .product_relay_ctrl_port = "/dev/ttyAS4",   //表头级联串口对应路径
         },
         },
     },
     },
 
 

+ 89 - 71
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/json_handle.c

@@ -5,6 +5,7 @@
 #include "common.h"
 #include "common.h"
 #include "list.h"
 #include "list.h"
 #include "language_common.h"
 #include "language_common.h"
+#include "cascade.h"
 
 
 #define TOTAL_COUNT 60 //计数长度
 #define TOTAL_COUNT 60 //计数长度
 
 
@@ -165,6 +166,18 @@ char* user_routers_info_to_json(void)
     //data区
     //data区
     cJSON* data_array = cJSON_CreateArray();
     cJSON* data_array = cJSON_CreateArray();
 
 
+    bool MenuCut = false;
+
+    if (__globalDeviceManage._global_device_info!=NULL)
+    {
+        //暂定是IP表头裁剪web端
+        if (2 == __globalDeviceManage._global_device_info->product_type)
+        {
+           MenuCut = true;
+        }
+    }
+    
+
     //第一块
     //第一块
     cJSON* data_filed = cJSON_CreateObject(); 
     cJSON* data_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(data_filed,"name","System");
     cJSON_AddStringToObject(data_filed,"name","System");
@@ -182,6 +195,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddItemToObject(data_filed, "meta", meta_data_filed);
     cJSON_AddItemToObject(data_filed, "meta", meta_data_filed);
     //children
     //children
     cJSON* children_data_array = cJSON_CreateArray();
     cJSON* children_data_array = cJSON_CreateArray();
+
     cJSON* children_data_filed = cJSON_CreateObject(); 
     cJSON* children_data_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children_data_filed,"name","User");    
     cJSON_AddStringToObject(children_data_filed,"name","User");    
     cJSON_AddStringToObject(children_data_filed,"path","user");  
     cJSON_AddStringToObject(children_data_filed,"path","user");  
@@ -205,7 +219,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children_meta1_data_filed,"noCache",false); 
     cJSON_AddBoolToObject(children_meta1_data_filed,"noCache",false); 
     cJSON_AddStringToObject(children_meta1_data_filed,"link","");    
     cJSON_AddStringToObject(children_meta1_data_filed,"link","");    
     cJSON_AddItemToObject(children1_data_filed, "meta", children_meta1_data_filed);
     cJSON_AddItemToObject(children1_data_filed, "meta", children_meta1_data_filed);
-    cJSON_AddItemToObject(children_data_array, "meta", children1_data_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children_data_array, "meta", children1_data_filed);
     cJSON* children2_data_filed = cJSON_CreateObject(); 
     cJSON* children2_data_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children2_data_filed,"name","Menu");    
     cJSON_AddStringToObject(children2_data_filed,"name","Menu");    
     cJSON_AddStringToObject(children2_data_filed,"path","menu");  
     cJSON_AddStringToObject(children2_data_filed,"path","menu");  
@@ -217,7 +231,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children_meta2_data_filed,"noCache",false); 
     cJSON_AddBoolToObject(children_meta2_data_filed,"noCache",false); 
     cJSON_AddStringToObject(children_meta2_data_filed,"link","");    
     cJSON_AddStringToObject(children_meta2_data_filed,"link","");    
     cJSON_AddItemToObject(children2_data_filed, "meta", children_meta2_data_filed);
     cJSON_AddItemToObject(children2_data_filed, "meta", children_meta2_data_filed);
-    cJSON_AddItemToObject(children_data_array, "meta", children2_data_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children_data_array, "meta", children2_data_filed);
     cJSON_AddItemToObject(data_filed, "children", children_data_array);  
     cJSON_AddItemToObject(data_filed, "children", children_data_array);  
     cJSON_AddItemToObject(data_array, "data", data_filed);
     cJSON_AddItemToObject(data_array, "data", data_filed);
 
 
@@ -273,7 +287,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children1_meta1_data3_filed,"noCache",false); 
     cJSON_AddBoolToObject(children1_meta1_data3_filed,"noCache",false); 
     cJSON_AddStringToObject(children1_meta1_data3_filed,"link","");    
     cJSON_AddStringToObject(children1_meta1_data3_filed,"link","");    
     cJSON_AddItemToObject(children1_data3_filed, "meta", children1_meta1_data3_filed);
     cJSON_AddItemToObject(children1_data3_filed, "meta", children1_meta1_data3_filed);
-    cJSON_AddItemToObject(children1_data_array, "children", children1_data3_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children1_data_array, "children", children1_data3_filed);
     cJSON_AddItemToObject(data1_filed, "children", children1_data_array);
     cJSON_AddItemToObject(data1_filed, "children", children1_data_array);
     cJSON_AddItemToObject(data_array, "data", data1_filed);
     cJSON_AddItemToObject(data_array, "data", data1_filed);
 
 
@@ -316,7 +330,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children2_meta2_data2_filed,"noCache",false); 
     cJSON_AddBoolToObject(children2_meta2_data2_filed,"noCache",false); 
     cJSON_AddStringToObject(children2_meta2_data2_filed,"link","");    
     cJSON_AddStringToObject(children2_meta2_data2_filed,"link","");    
     cJSON_AddItemToObject(children2_data2_filed, "meta", children2_meta2_data2_filed);
     cJSON_AddItemToObject(children2_data2_filed, "meta", children2_meta2_data2_filed);
-    cJSON_AddItemToObject(children2_data_array, "children", children2_data2_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children2_data_array, "children", children2_data2_filed);
     cJSON_AddItemToObject(data2_filed, "children", children2_data_array);
     cJSON_AddItemToObject(data2_filed, "children", children2_data_array);
     cJSON_AddItemToObject(data_array, "data", data2_filed);
     cJSON_AddItemToObject(data_array, "data", data2_filed);
 
 
@@ -525,7 +539,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_meta4_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children6_meta4_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta4_data1_filed,"link","");    
     cJSON_AddStringToObject(children6_meta4_data1_filed,"link","");    
     cJSON_AddItemToObject(children6_data4_filed, "meta", children6_meta4_data1_filed);
     cJSON_AddItemToObject(children6_data4_filed, "meta", children6_meta4_data1_filed);
-    cJSON_AddItemToObject(children6_data_array, "children", children6_data4_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children6_data_array, "children", children6_data4_filed);
     cJSON* children6_data5_filed = cJSON_CreateObject(); 
     cJSON* children6_data5_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children6_data5_filed,"name","Ntpsz");    
     cJSON_AddStringToObject(children6_data5_filed,"name","Ntpsz");    
     cJSON_AddStringToObject(children6_data5_filed,"path","ntpsz");  
     cJSON_AddStringToObject(children6_data5_filed,"path","ntpsz");  
@@ -549,7 +563,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_meta6_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children6_meta6_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta6_data1_filed,"link","");    
     cJSON_AddStringToObject(children6_meta6_data1_filed,"link","");    
     cJSON_AddItemToObject(children6_data6_filed, "meta", children6_meta6_data1_filed);
     cJSON_AddItemToObject(children6_data6_filed, "meta", children6_meta6_data1_filed);
-    cJSON_AddItemToObject(children6_data_array, "children", children6_data6_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children6_data_array, "children", children6_data6_filed);
     cJSON* children6_data7_filed = cJSON_CreateObject(); 
     cJSON* children6_data7_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children6_data7_filed,"name","Sxsz");    
     cJSON_AddStringToObject(children6_data7_filed,"name","Sxsz");    
     cJSON_AddStringToObject(children6_data7_filed,"path","sxsz");  
     cJSON_AddStringToObject(children6_data7_filed,"path","sxsz");  
@@ -561,7 +575,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_meta7_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children6_meta7_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta7_data1_filed,"link","");    
     cJSON_AddStringToObject(children6_meta7_data1_filed,"link","");    
     cJSON_AddItemToObject(children6_data7_filed, "meta", children6_meta7_data1_filed);
     cJSON_AddItemToObject(children6_data7_filed, "meta", children6_meta7_data1_filed);
-    cJSON_AddItemToObject(children6_data_array, "children", children6_data7_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children6_data_array, "children", children6_data7_filed);
     cJSON* children6_data8_filed = cJSON_CreateObject(); 
     cJSON* children6_data8_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children6_data8_filed,"name","Fzsz");    
     cJSON_AddStringToObject(children6_data8_filed,"name","Fzsz");    
     cJSON_AddStringToObject(children6_data8_filed,"path","fzsz");  
     cJSON_AddStringToObject(children6_data8_filed,"path","fzsz");  
@@ -573,7 +587,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_meta8_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children6_meta8_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta8_data1_filed,"link","");    
     cJSON_AddStringToObject(children6_meta8_data1_filed,"link","");    
     cJSON_AddItemToObject(children6_data8_filed, "meta", children6_meta8_data1_filed);
     cJSON_AddItemToObject(children6_data8_filed, "meta", children6_meta8_data1_filed);
-    cJSON_AddItemToObject(children6_data_array, "children", children6_data8_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children6_data_array, "children", children6_data8_filed);
 
 
 
 
     cJSON_AddItemToObject(data6_filed, "children", children6_data_array);
     cJSON_AddItemToObject(data6_filed, "children", children6_data_array);
@@ -619,7 +633,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_meta2_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children7_meta2_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta2_data1_filed,"link","");    
     cJSON_AddStringToObject(children7_meta2_data1_filed,"link","");    
     cJSON_AddItemToObject(children7_data2_filed, "meta", children7_meta2_data1_filed);
     cJSON_AddItemToObject(children7_data2_filed, "meta", children7_meta2_data1_filed);
-    cJSON_AddItemToObject(children7_data_array, "children", children7_data2_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children7_data_array, "children", children7_data2_filed);
     cJSON* children7_data3_filed = cJSON_CreateObject(); 
     cJSON* children7_data3_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children7_data3_filed,"name","Hhccsz");    
     cJSON_AddStringToObject(children7_data3_filed,"name","Hhccsz");    
     cJSON_AddStringToObject(children7_data3_filed,"path","hhccsz");  
     cJSON_AddStringToObject(children7_data3_filed,"path","hhccsz");  
@@ -643,7 +657,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_meta4_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children7_meta4_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta4_data1_filed,"link","");    
     cJSON_AddStringToObject(children7_meta4_data1_filed,"link","");    
     cJSON_AddItemToObject(children7_data4_filed, "meta", children7_meta4_data1_filed);
     cJSON_AddItemToObject(children7_data4_filed, "meta", children7_meta4_data1_filed);
-    cJSON_AddItemToObject(children7_data_array, "children", children7_data4_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children7_data_array, "children", children7_data4_filed);
     cJSON* children7_data5_filed = cJSON_CreateObject(); 
     cJSON* children7_data5_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children7_data5_filed,"name","Shfw");    
     cJSON_AddStringToObject(children7_data5_filed,"name","Shfw");    
     cJSON_AddStringToObject(children7_data5_filed,"path","shfw");  
     cJSON_AddStringToObject(children7_data5_filed,"path","shfw");  
@@ -655,7 +669,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_meta5_data1_filed,"noCache",false); 
     cJSON_AddBoolToObject(children7_meta5_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta5_data1_filed,"link","");    
     cJSON_AddStringToObject(children7_meta5_data1_filed,"link","");    
     cJSON_AddItemToObject(children7_data5_filed, "meta", children7_meta5_data1_filed);
     cJSON_AddItemToObject(children7_data5_filed, "meta", children7_meta5_data1_filed);
-    cJSON_AddItemToObject(children7_data_array, "children", children7_data5_filed);
+    if(!MenuCut)cJSON_AddItemToObject(children7_data_array, "children", children7_data5_filed);
     cJSON* children7_data6_filed = cJSON_CreateObject(); 
     cJSON* children7_data6_filed = cJSON_CreateObject(); 
     cJSON_AddStringToObject(children7_data6_filed,"name","Gysb");    
     cJSON_AddStringToObject(children7_data6_filed,"name","Gysb");    
     cJSON_AddStringToObject(children7_data6_filed,"path","gysb");  
     cJSON_AddStringToObject(children7_data6_filed,"path","gysb");  
@@ -894,54 +908,16 @@ int json_to_switch_language(const char* str)
     return 0;
     return 0;
 }
 }
 
 
-/// @brief 返回监控总信息
-/// @param _over_back_sts_info 
-/// @return 
-char* over_all_monitor_to_json(_OverBackStsInfo* _over_back_sts_info)
-{
-    char* str = NULL;
-    // 创建 JSON 对象
-    cJSON* root = cJSON_CreateObject();   
-    // 添加基本键值对
-    cJSON_AddNumberToObject(root, "code", 200); 
-    //创建数据
-    cJSON* data_root_array = cJSON_CreateArray();
-    //添加第一条记录
-    cJSON* data_filed = cJSON_CreateObject();
-    cJSON_AddStringToObject(data_filed,"productName",_over_back_sts_info->product_name);
-    cJSON_AddStringToObject(data_filed,"productNumber",_over_back_sts_info->product_number);
-    cJSON_AddNumberToObject(data_filed,"productId",_over_back_sts_info->product_id);
-	char temp[32] = {0};
-    sprintf(temp,"%d",_over_back_sts_info->product_type_id);
-    cJSON_AddStringToObject(data_filed,"productType",temp);
-    //cJSON_AddNumberToObject(data_filed,"productType",_over_back_sts_info->product_type_id);
-    cJSON_AddStringToObject(data_filed,"productPwrType",_over_back_sts_info->productPwrType);
-    cJSON_AddStringToObject(data_filed,"productVersion",_over_back_sts_info->productVersion);
-    cJSON_AddStringToObject(data_filed,"productConsumption",_over_back_sts_info->productConsumption);
-    cJSON_AddStringToObject(data_filed,"productMemory",_over_back_sts_info->productMemory);
-    cJSON_AddStringToObject(data_filed,"occupancyRate",_over_back_sts_info->occupancyRate);
-    cJSON_AddStringToObject(data_filed,"productAddr",_over_back_sts_info->productAddr);
-    cJSON_AddNumberToObject(data_filed,"productCount",_over_back_sts_info->productCount);
-    cJSON_AddItemToObject(data_root_array, "data", data_filed);
-    //第二条记录
-    cJSON_AddItemToObject(root, "data", data_root_array);
-
-    //添加结果
-    cJSON_AddStringToObject(root, "msg", "操作成功");
-    //转换
-    str = cJSON_Print(root);    
-    //释放资源
-    cJSON_Delete(root);
-    return str;
-}
 
 
 /// @brief 返回设备列表
 /// @brief 返回设备列表
 /// @param _over_back_sts_info 
 /// @param _over_back_sts_info 
 /// @return 
 /// @return 
-char* over_product_list_info_to_json(_OverBackStsInfo* _over_back_sts_info)
+char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo* _over_back_sts_info)
 {
 {
+    int i,r;
     char* str = NULL;
     char* str = NULL;
-    // char strcc[32];
+    dev_list_t dl;
+
     // 创建 JSON 对象
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
     cJSON* root = cJSON_CreateObject();   
     // 添加基本键值对
     // 添加基本键值对
@@ -951,21 +927,44 @@ char* over_product_list_info_to_json(_OverBackStsInfo* _over_back_sts_info)
     //添加第一条记录
     //添加第一条记录
     cJSON* data_filed = cJSON_CreateObject();
     cJSON* data_filed = cJSON_CreateObject();
 
 
-    cJSON_AddStringToObject(data_filed,"productName",_over_back_sts_info->product_name);
-    cJSON_AddNumberToObject(data_filed,"productId",_over_back_sts_info->product_id);
-
-    // sprintf(_over_back_sts_info->product_number,"cccc");
-    cJSON_AddStringToObject(data_filed,"productNumber",_over_back_sts_info->product_number);
-    // sprintf(strcc,"typeinfo");
-    //cJSON_AddNumberToObject(data_Type,"id",_over_back_sts_info->product_type_id);
-    //cJSON_AddStringToObject(data_Type,"name",_over_back_sts_info->product_type);
-    char temp[32] = {0};
-    sprintf(temp,"%d",_over_back_sts_info->product_type_id);
-    cJSON_AddStringToObject(data_filed,"productType",temp);
-
-    sprintf(_over_back_sts_info->product_status,"online");
-    cJSON_AddStringToObject(data_filed,"productStatus",_over_back_sts_info->product_status);
+    _over_back_sts_info->product_name = dm->_global_device_info->product_name;
+    _over_back_sts_info->product_number = dm->_global_device_info->product_number;
+    _over_back_sts_info->product_id = dm->_global_device_info->product_id;
+    //_over_back_sts_info->product_type = g_product_type_str[dm->_global_device_info->product_type];
+    _over_back_sts_info->product_type_id=dm->_global_device_info->product_pwr_type;
+    _over_back_sts_info->product_status = dm->_global_device_info ->product_status;
+
+    r = cascade_get_dlist(&dl);
+    if(r==0) {
+        char tmpname[100];
+        for(i=0; i<dl.cnt; i++) {
+            if(dl.addr[i]==0) {
+                sprintf(tmpname, "%s", _over_back_sts_info->product_name);
+            }
+            else
+            {
+                sprintf(tmpname, "%s %d", _over_back_sts_info->product_name, dl.addr[i]);
+            }
 
 
+            cJSON_AddStringToObject(data_filed, "productName", tmpname);
+            cJSON_AddNumberToObject(data_filed, "productId", _over_back_sts_info->product_id);
+            cJSON_AddStringToObject(data_filed, "productNumber", _over_back_sts_info->product_number);
+            cJSON_AddStringToObject(data_filed, "productCode", _over_back_sts_info->product_Code);
+            cJSON_AddStringToObject(data_filed, "productModel", _over_back_sts_info->product_type);
+            cJSON_AddStringToObject(data_filed, "productVersion", _over_back_sts_info->productVersion);
+            cJSON_AddStringToObject(data_filed, "systemTime", _over_back_sts_info->product_sysTime);
+            cJSON_AddStringToObject(data_filed, "runTime", _over_back_sts_info->product_runTime);
+            cJSON_AddStringToObject(data_filed, "IPadress", _over_back_sts_info->productAddr);
+            cJSON_AddStringToObject(data_filed, "MACadress", _over_back_sts_info->product_mac);
+            char temp0[8] = {0};
+            sprintf(temp0, "%d", _over_back_sts_info->product_RS485Addr);
+            cJSON_AddStringToObject(data_filed, "RSadress", temp0);
+            char temp1[16] = {0};
+            sprintf(temp1, "%d", _over_back_sts_info->product_type_id);
+            cJSON_AddStringToObject(data_filed, "productType", temp1);
+            cJSON_AddStringToObject(data_filed, "productStatus", _over_back_sts_info->product_status);
+        }
+    }
 
 
     cJSON_AddItemToObject(data_root_array, "data", data_filed);
     cJSON_AddItemToObject(data_root_array, "data", data_filed);
     //第二条记录
     //第二条记录
@@ -2479,16 +2478,34 @@ char* communication_net_ack_to_json(NetworkInfo_t* _networkInfo_t)
 /// @return 
 /// @return 
 char* communication_rs_ack_to_json(ModbusInfo_t* _modbusInfo_t)
 char* communication_rs_ack_to_json(ModbusInfo_t* _modbusInfo_t)
 {
 {
+    char temp[32] = {0};
     char* str = NULL;
     char* str = NULL;
     // 创建 JSON 对象
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
     cJSON* root = cJSON_CreateObject();   
     // 添加基本键值对
     // 添加基本键值对
     cJSON_AddNumberToObject(root, "code", 200); 
     cJSON_AddNumberToObject(root, "code", 200); 
+
     //创建数据
     //创建数据
+    memset(temp, 0, sizeof(temp));
     cJSON* data_root_array = cJSON_CreateObject();  
     cJSON* data_root_array = cJSON_CreateObject();  
-    cJSON_AddNumberToObject(root, "mode", _modbusInfo_t->product_modbus_type);   
-    cJSON_AddStringToObject(root, "sensorBaud", _modbusInfo_t->product_modbus_baud);  
-    cJSON_AddStringToObject(root, "slaveAddr", _modbusInfo_t->product_modbus_addr);  
+    if ( !_modbusInfo_t->product_modbus_type)
+    {
+        sprintf(temp,"主机");
+    }
+    else
+    {
+        sprintf(temp,"从机");
+    }
+    cJSON_AddStringToObject(data_root_array, "mode", temp);  
+
+    memset(temp, 0, sizeof(temp));
+    sprintf(temp,"%d",_modbusInfo_t->product_modbus_addr);
+    cJSON_AddStringToObject(data_root_array, "ipaddress", temp); 
+
+    memset(temp, 0, sizeof(temp));
+    sprintf(temp,"%d",_modbusInfo_t->product_modbus_baud);
+    cJSON_AddStringToObject(data_root_array, "sensorBaud", temp);  
+ 
     //添加汇总
     //添加汇总
     cJSON_AddItemToObject(root, "data", data_root_array);
     cJSON_AddItemToObject(root, "data", data_root_array);
     //添加结果
     //添加结果
@@ -2497,6 +2514,7 @@ char* communication_rs_ack_to_json(ModbusInfo_t* _modbusInfo_t)
     str = cJSON_Print(root);    
     str = cJSON_Print(root);    
     //释放资源
     //释放资源
     cJSON_Delete(root);
     cJSON_Delete(root);
+    return str;
 }
 }
 
 
 /// @brief 返回定时设置
 /// @brief 返回定时设置
@@ -2771,7 +2789,7 @@ int json_to_communication_manage(const char* str,_CommunicationManageRequestInfo
     { 
     { 
         cJSON* cjson_rs_mode = cJSON_GetObjectItem(cjson,"mode");
         cJSON* cjson_rs_mode = cJSON_GetObjectItem(cjson,"mode");
         cJSON* cjson_rs_baud = cJSON_GetObjectItem(cjson,"sensorBaud");  
         cJSON* cjson_rs_baud = cJSON_GetObjectItem(cjson,"sensorBaud");  
-        cJSON* cjson_rs_addr = cJSON_GetObjectItem(cjson,"sensorAddr");  
+        cJSON* cjson_rs_addr = cJSON_GetObjectItem(cjson,"ipaddress");  
         if(cjson_rs_mode!=NULL)
         if(cjson_rs_mode!=NULL)
             _communicationRequestInfo->_rs_info.mode = cjson_rs_mode->valuestring ;
             _communicationRequestInfo->_rs_info.mode = cjson_rs_mode->valuestring ;
         if(cjson_rs_baud!=NULL)
         if(cjson_rs_baud!=NULL)

+ 89 - 86
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/json_handle.h

@@ -10,36 +10,36 @@
 #include "common.h"
 #include "common.h"
 #include "cJSON.h"
 #include "cJSON.h"
 
 
-/// @brief 获取用户信息
+/// @brief 鑾峰彇鐢ㄦ埛淇℃伅
 typedef struct
 typedef struct
 {
 {
     char* user_token;
     char* user_token;
 }_Get_Info_Request;
 }_Get_Info_Request;
 
 
-/// @brief 电压、电流、功率、耗电量统计接口
+/// @brief 电压、电流、功率、耗电量统计接口
 typedef struct
 typedef struct
 {
 {
     float ydata[60];    //value
     float ydata[60];    //value
-    char  xAxis[60][32];//时间点
+    char  xAxis[60][32];//时间点
 }_Get_Total_Value;
 }_Get_Total_Value;
 
 
-/// @brief 系统总数信息
+/// @brief 绯荤粺鎬绘暟淇℃伅
 typedef struct
 typedef struct
 {
 {
-    int channel_total  ;//通道总数
-    int warn_total     ;//告警总数
-    int sensor_total   ;//传感器总数
-    int log_total      ;//运行日志总数
+    int channel_total  ;//閫氶亾鎬绘暟
+    int warn_total     ;//鍛婅�鎬绘暟
+    int sensor_total   ;//浼犳劅鍣ㄦ€绘暟
+    int log_total      ;//杩愯�鏃ュ織鎬绘暟
 }_Get_System_Total;
 }_Get_System_Total;
 
 
-//功率趋势接口
+//鍔熺巼瓒嬪娍鎺ュ彛
 typedef struct
 typedef struct
 {
 {
-    float  ydata[3][60]     ;//0:有功功率;1:无功功率;2:视在功率;
-    char   xAxis[60][32]    ;//时间点      
+    float  ydata[3][60]     ;//0锛氭湁鍔熷姛鐜囷紱1锛氭棤鍔熷姛鐜囷紱2锛氳�鍦ㄥ姛鐜囷紱
+    char   xAxis[60][32]    ;//时间点      
 }_Power_Trend_Info;
 }_Power_Trend_Info;
 
 
-/// @brief 总体设备信息
+/// @brief 鎬讳綋璁惧�淇℃伅
 typedef struct
 typedef struct
 {
 {
     char*   user_token;
     char*   user_token;
@@ -58,26 +58,30 @@ typedef struct
 
 
 
 
 
 
-/// @brief 总设备信息返回
+/// @brief 总设备信息返回
 typedef struct
 typedef struct
 {
 {
-    char* product_name;
-    char* product_number;
+    char *product_name;
     int product_id;
     int product_id;
-    char*  product_type;
+    char *product_number; 
+    char *product_Code;
+    char *product_type;
     int product_type_id;
     int product_type_id;
-    char*   product_status;
-    char* productPwrType;
-    char* productVersion;
-    char* productConsumption;
-    int productMemory; //内存
-    char* occupancyRate;//磁盘占用率
-    char* productAddr; //IP地址
-    char productCount; //级联设备数
-    _Get_System_Total  system_total;
+    char *productVersion; // 鍥轰欢鐗堟湰
+    char *product_status;
+    char *product_sysTime;
+    char *product_runTime;
+    char *productPwrType;
+    char *productAddr; // IP鍦板潃
+    char *product_mac;
+    int product_RS485Addr;
+    int productMemory;   // 鍐呭瓨
+    char *occupancyRate; // 磁盘占用率
+    char productCount;   // 级联设备数
+    _Get_System_Total system_total;
 }_OverBackStsInfo;
 }_OverBackStsInfo;
 
 
-/// @brief 电源总体监控请求信息
+/// @brief 鐢垫簮鎬讳綋鐩戞帶璇锋眰淇℃伅
 typedef struct 
 typedef struct 
 {
 {
     char* user_token;
     char* user_token;
@@ -87,7 +91,7 @@ typedef struct
 }_OverAllPwrRequest;
 }_OverAllPwrRequest;
 
 
 
 
-/// @brief 电源通道监控请求信息
+/// @brief 鐢垫簮閫氶亾鐩戞帶璇锋眰淇℃伅
 typedef struct 
 typedef struct 
 {
 {
     char* user_token;
     char* user_token;
@@ -106,7 +110,7 @@ typedef struct
     int outputType;
     int outputType;
 }_OverChnPwrRequest;
 }_OverChnPwrRequest;
 
 
-/// @brief 总体电源返回信息
+/// @brief 鎬讳綋鐢垫簮杩斿洖淇℃伅
 typedef struct
 typedef struct
 {
 {
     char*           product_name;
     char*           product_name;
@@ -115,60 +119,60 @@ typedef struct
     char*           productChName;
     char*           productChName;
     char            productChId;    
     char            productChId;    
     int             status;
     int             status;
-    float           voltage                                     ;//电压
-    float           current                                     ;//电流
-    float           power                                       ;//功率
-    float           freq                                        ;//频率
-    float           consumption                                 ;//耗电量
+    float           voltage                                     ;//鐢靛帇
+    float           current                                     ;//鐢垫祦
+    float           power                                       ;//鍔熺巼
+    float           freq                                        ;//棰戠巼
+    float           consumption                                 ;//耗电量
     float           factor                                      ;
     float           factor                                      ;
-    unsigned short      product_ch_start_delay                  ;//通道延时 
-    unsigned short      product_ch_stop_delay                   ;//通道延时 
-    int             product_type;                               //通道类型
-    int             product_phType;                             //三相类型
-    float           ph_voltage                                     ;//电压
-    float           ph_current                                     ;//电流
-    float           ph_power                                       ;//功率
-    float           ph_consumption                                 ;//耗电量  
-    int             ph_outputType   ;//输出类型
-    int             ph_outputStatus ;//输出状态-该通道是否输出  
+    unsigned short      product_ch_start_delay                  ;//閫氶亾寤舵椂 
+    unsigned short      product_ch_stop_delay                   ;//閫氶亾寤舵椂 
+    int             product_type;                               //閫氶亾绫诲瀷
+    int             product_phType;                             //涓夌浉绫诲瀷
+    float           ph_voltage                                     ;//鐢靛帇
+    float           ph_current                                     ;//鐢垫祦
+    float           ph_power                                       ;//鍔熺巼
+    float           ph_consumption                                 ;//耗电量  
+    int             ph_outputType   ;//杈撳嚭绫诲瀷
+    int             ph_outputStatus ;//输出状态-该通道是否输出  
     struct list_head   list;   
     struct list_head   list;   
 }_OverChnPwrAckInfo;
 }_OverChnPwrAckInfo;
 
 
-/// @brief 总体电源返回信息
+/// @brief 鎬讳綋鐢垫簮杩斿洖淇℃伅
 typedef struct
 typedef struct
 {
 {
     char*           product_name;
     char*           product_name;
     char*           product_number;   
     char*           product_number;   
     int             product_id;
     int             product_id;
-    float           voltage                                     ;//电压
-    float           current                                     ;//电流
-    float           power                                       ;//功率
-    float           freq                                        ;//频率
-    float           consumption                                 ;//耗电量
-    float           factor                                      ;//功率因素
-    _Get_Total_Value	_total_voltage							;//电压统计
-	_Get_Total_Value	_total_current							;//电流统计
-	_Get_Total_Value	_total_power							;//功率统计
-	_Get_Total_Value	_total_consumption						;//耗电量统计
-    _Power_Trend_Info   _Power_Trend_Info                       ;//有功、无功、视在功率统计
+    float           voltage                                     ;//鐢靛帇
+    float           current                                     ;//鐢垫祦
+    float           power                                       ;//鍔熺巼
+    float           freq                                        ;//棰戠巼
+    float           consumption                                 ;//耗电量
+    float           factor                                      ;//鍔熺巼鍥犵礌
+    _Get_Total_Value	_total_voltage							;//鐢靛帇缁熻�
+	_Get_Total_Value	_total_current							;//鐢垫祦缁熻�
+	_Get_Total_Value	_total_power							;//鍔熺巼缁熻�
+	_Get_Total_Value	_total_consumption						;//耗电量统计
+    _Power_Trend_Info   _Power_Trend_Info                       ;//有功、无功、视在功率统计
 }_OverAllPwrAckInfo;
 }_OverAllPwrAckInfo;
 
 
 
 
-/// @brief 传感器总体请求信息
+/// @brief 浼犳劅鍣ㄦ€讳綋璇锋眰淇℃伅
 typedef struct
 typedef struct
 {
 {
-    float  ydata[2][60]     ;//0:温度,1:湿度;
-    char   xAxis[60][32]    ;//时间点
+    float  ydata[2][60]     ;//0锛氭俯搴︼紝1锛氭箍搴︼紱
+    char   xAxis[60][32]    ;//时间点
 }_Sensor_Temp_Humi_Icon;
 }_Sensor_Temp_Humi_Icon;
 typedef struct
 typedef struct
 {
 {
-    float  ydata[60]        ;//气体值
-    char   xAxis[60][32]    ;//时间点
+    float  ydata[60]        ;//气体值
+    char   xAxis[60][32]    ;//时间点
 }_Sensor_Gas_Icon;
 }_Sensor_Gas_Icon;
 typedef struct
 typedef struct
 {
 {
-    float  ydata[2][60]     ;//0:气流,1:气压;
-    char   xAxis[60][32]    ;//时间点
+    float  ydata[2][60]     ;//0锛氭皵娴侊紝1锛氭皵鍘嬶紱
+    char   xAxis[60][32]    ;//时间点
 }_Sensor_Air_Press_Icon;
 }_Sensor_Air_Press_Icon;
 typedef struct
 typedef struct
 {
 {
@@ -193,7 +197,7 @@ typedef struct
 }_OverSensorRequest;
 }_OverSensorRequest;
 
 
 
 
-/// @brief 传感器应答状态
+/// @brief 传感器应答状态
 typedef struct
 typedef struct
 {
 {
     int    accessControlStatus;
     int    accessControlStatus;
@@ -219,7 +223,7 @@ typedef struct
     struct list_head list;
     struct list_head list;
 }_OverSensorBackInfo;
 }_OverSensorBackInfo;
 
 
-/// @brief 电源类阈值设置
+/// @brief 电源类阈值设置
 typedef struct 
 typedef struct 
 {
 {
     char* alarmContentUpperValue;
     char* alarmContentUpperValue;
@@ -236,7 +240,7 @@ typedef struct
     bool bUpdatevoltageUpperValue;
     bool bUpdatevoltageUpperValue;
 }_Power_AlarmRequestInfo;
 }_Power_AlarmRequestInfo;
 
 
-/// @brief 传感器类阈值设置
+/// @brief 传感器类阈值设置
 typedef struct 
 typedef struct 
 {
 {
     char* connectionStatus  ;
     char* connectionStatus  ;
@@ -248,7 +252,7 @@ typedef struct
 }_Sensor_AlarmRequestInfo;
 }_Sensor_AlarmRequestInfo;
 
 
 
 
-/// @brief 告警信息查询
+/// @brief 鍛婅�淇℃伅鏌ヨ�
 typedef struct
 typedef struct
 {
 {
     char* user_token;
     char* user_token;
@@ -259,7 +263,7 @@ typedef struct
     _Sensor_AlarmRequestInfo _sensor_info;
     _Sensor_AlarmRequestInfo _sensor_info;
 }_AlarmRequestInfo;
 }_AlarmRequestInfo;
 
 
-/// @brief 告警响应信息
+/// @brief 鍛婅�鍝嶅簲淇℃伅
 typedef struct
 typedef struct
 {
 {
     char alarmNumber[16];
     char alarmNumber[16];
@@ -272,7 +276,7 @@ typedef struct
 }_AlarmAckInfo;
 }_AlarmAckInfo;
 
 
 
 
-/// @brief SMPT服务信息
+/// @brief SMPT鏈嶅姟淇℃伅
 typedef struct 
 typedef struct 
 {
 {
     char*  mode;
     char*  mode;
@@ -284,7 +288,7 @@ typedef struct
     char* receiveAccount;
     char* receiveAccount;
 }_SMPT_ServerRequestInfo;
 }_SMPT_ServerRequestInfo;
 
 
-/// @brief SNMP信息
+/// @brief SNMP淇℃伅
 typedef struct
 typedef struct
 {
 {
     char*   mode;
     char*   mode;
@@ -293,14 +297,14 @@ typedef struct
     char*   trapmode;
     char*   trapmode;
 }_SNMP_ServerRequestInfo;
 }_SNMP_ServerRequestInfo;
 
 
-/// @brief SNMP TRAP信息
+/// @brief SNMP TRAP淇℃伅
 typedef struct
 typedef struct
 {
 {
     char* mode;
     char* mode;
     char* stType;
     char* stType;
 }_SNMPTRAP_ServerRequestInfo;
 }_SNMPTRAP_ServerRequestInfo;
 
 
-/// @brief NTP信息
+/// @brief NTP淇℃伅
 typedef struct 
 typedef struct 
 {
 {
     char*   mode;
     char*   mode;
@@ -313,7 +317,7 @@ typedef struct
 }_NTP_ServiceRequestInfo;
 }_NTP_ServiceRequestInfo;
 
 
 
 
-/// @brief 定时设置
+/// @brief 瀹氭椂璁剧疆
 typedef struct
 typedef struct
 {
 {
     char* productChName;
     char* productChName;
@@ -324,7 +328,7 @@ typedef struct
 }_DS_ServiceRequestInfo;
 }_DS_ServiceRequestInfo;
 
 
 
 
-/// @brief 时序设置
+/// @brief 鏃跺簭璁剧疆
 typedef struct
 typedef struct
 {
 {
     char* productId;
     char* productId;
@@ -336,7 +340,7 @@ typedef struct
     // char* closeInterval;
     // char* closeInterval;
 }_POSIX_ServiceRequestInfo;
 }_POSIX_ServiceRequestInfo;
 
 
-/// @brief 分组设置
+/// @brief 鍒嗙粍璁剧疆
 typedef struct
 typedef struct
 {
 {
     char* mode;
     char* mode;
@@ -347,7 +351,7 @@ typedef struct
 
 
 
 
 
 
-/// @brief 服务信息查询
+/// @brief 鏈嶅姟淇℃伅鏌ヨ�
 typedef struct
 typedef struct
 {
 {
     char* user_token;
     char* user_token;
@@ -362,7 +366,7 @@ typedef struct
 }_ServiceManageRequestInfo;
 }_ServiceManageRequestInfo;
 
 
 
 
-/// @brief 网络参数配置
+/// @brief 缃戠粶鍙傛暟閰嶇疆
 typedef struct
 typedef struct
 {
 {
     char* mode;
     char* mode;
@@ -373,7 +377,7 @@ typedef struct
     char* dns2;
     char* dns2;
 }_NET_CommunicationRequestInfo;
 }_NET_CommunicationRequestInfo;
 
 
-/// @brief  RS参数配置
+/// @brief  RS鍙傛暟閰嶇疆
 typedef struct 
 typedef struct 
 {
 {
     char* mode;
     char* mode;
@@ -382,7 +386,7 @@ typedef struct
 }_RS_CommunicationRequestInfo;
 }_RS_CommunicationRequestInfo;
 
 
 
 
-/// @brief 通信信息查询
+/// @brief 閫氫俊淇℃伅鏌ヨ�
 typedef struct
 typedef struct
 {
 {
     char* user_token;
     char* user_token;
@@ -393,7 +397,7 @@ typedef struct
 
 
 
 
 
 
-/// @brief日志信息查询
+/// @brief鏃ュ織淇℃伅鏌ヨ�
 typedef struct
 typedef struct
 {
 {
     char* user_token;
     char* user_token;
@@ -406,7 +410,7 @@ typedef struct
     char* openName;
     char* openName;
 }_LogInformationRequestInfo;
 }_LogInformationRequestInfo;
 
 
-/// @brief 日志应答类容
+/// @brief 鏃ュ織搴旂瓟绫诲�
 typedef struct
 typedef struct
 {
 {
     char* alarm_number;
     char* alarm_number;
@@ -417,7 +421,7 @@ typedef struct
     char alarmContent[64];
     char alarmContent[64];
 }_LogInformationAckInfo;
 }_LogInformationAckInfo;
 
 
-/// @brief 设备维护
+/// @brief 璁惧�缁存姢
 typedef struct
 typedef struct
 {
 {
     char*   user_token;
     char*   user_token;
@@ -427,7 +431,7 @@ typedef struct
     char*   product_number;
     char*   product_number;
 }_Equipment_Mintenance;
 }_Equipment_Mintenance;
 
 
- /// @brief 用户角色管理
+ /// @brief 鐢ㄦ埛瑙掕壊绠$悊
 typedef struct
 typedef struct
 {
 {
     char*   user_token;
     char*   user_token;
@@ -435,8 +439,8 @@ typedef struct
     char*   createTime;
     char*   createTime;
     int     userId; 
     int     userId; 
     char*   userName;
     char*   userName;
-    char*   nickName;//用途不明?
-    bool    delFlag;//用途不明?
+    char*   nickName;//鐢ㄩ€斾笉鏄庯紵
+    bool    delFlag;//鐢ㄩ€斾笉鏄庯紵
     int     roleId;
     int     roleId;
     char*   roleName;
     char*   roleName;
     char*   password;
     char*   password;
@@ -461,7 +465,6 @@ int json_to_system_config_info(void);
 
 
 
 
 int json_to_overall_status_monitor(const char* str,_Over_All_Sts_Monitor* _over_all_sts_monitor);
 int json_to_overall_status_monitor(const char* str,_Over_All_Sts_Monitor* _over_all_sts_monitor);
-char* over_all_monitor_to_json(_OverBackStsInfo* _over_back_sts_info);
 
 
 char* overall_power_history_to_json(GlobalPowerInfo* _globalPowerInfo,GlobalDeviceInfo* _globalDeviceInfo);
 char* overall_power_history_to_json(GlobalPowerInfo* _globalPowerInfo,GlobalDeviceInfo* _globalDeviceInfo);
 
 
@@ -469,7 +472,7 @@ char* over_channel_power_history_to_json(GlobalPowerInfo* _globalPowerInfo,Globa
 
 
 int json_to_overall_pwr_status_monitor(const char* str,_OverAllPwrRequest* _over_all_pwr_request);
 int json_to_overall_pwr_status_monitor(const char* str,_OverAllPwrRequest* _over_all_pwr_request);
 int json_to_over_equipment_mintenance(const char* str,_Equipment_Mintenance* _over_equipment_mintenance);
 int json_to_over_equipment_mintenance(const char* str,_Equipment_Mintenance* _over_equipment_mintenance);
-char* over_product_list_info_to_json(_OverBackStsInfo* _over_back_sts_info);
+char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo* _over_back_sts_info);
 char* over_all_pwr_monitor_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info);
 char* over_all_pwr_monitor_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info);
 char* over_all_total_info_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info, int total_type);
 char* over_all_total_info_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info, int total_type);
 void over_all_total_info_t_ac_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info,cJSON* dataJson,cJSON* AxisJson, int total_type);
 void over_all_total_info_t_ac_to_json(_OverAllPwrAckInfo* _over_all_pwr_back_info,cJSON* dataJson,cJSON* AxisJson, int total_type);

+ 16 - 11
04-软件设计及源码/03-核心板/V1.0/05.src/smart_pdu/src/sqlite_handle.c

@@ -108,11 +108,11 @@ int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
     _globalDeviceInfo->product_save_time = atoi(pResult[rowIndex*ncolumn+9]); 
     _globalDeviceInfo->product_save_time = atoi(pResult[rowIndex*ncolumn+9]); 
 
 
     //获取modbus主从模式
     //获取modbus主从模式
-    _globalDeviceInfo->_modbus_info.product_modbus_type = atoi(pResult[rowIndex*ncolumn+10]); 
+    _globalDeviceInfo->_gmodbus_info.product_modbus_type = atoi(pResult[rowIndex*ncolumn+10]); 
     //获取波特率
     //获取波特率
-    _globalDeviceInfo->_modbus_info.product_modbus_baud = atoi(pResult[rowIndex*ncolumn+11]);
+    _globalDeviceInfo->_gmodbus_info.product_modbus_baud = atoi(pResult[rowIndex*ncolumn+11]);
     //获取从Modbus地址信息
     //获取从Modbus地址信息
-    _globalDeviceInfo->_modbus_info.product_modbus_addr = atoi(pResult[rowIndex*ncolumn+12]); 
+    _globalDeviceInfo->_gmodbus_info.product_modbus_addr = atoi(pResult[rowIndex*ncolumn+12]); 
     //获取继电器控制端口号
     //获取继电器控制端口号
     strcpy(_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,pResult[rowIndex*ncolumn+13]);
     strcpy(_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,pResult[rowIndex*ncolumn+13]);
 
 
@@ -170,6 +170,10 @@ int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo
     paras_get()->dev = *_globalDeviceInfo;
     paras_get()->dev = *_globalDeviceInfo;
     return paras_save();
     return paras_save();
 #else
 #else
+    if (_globalDeviceInfo == NULL || db == NULL)
+    {
+        return -1;
+    }
     int res ;
     int res ;
     char select_sql[256] = {0};
     char select_sql[256] = {0};
     char *errorMsg = NULL;
     char *errorMsg = NULL;
@@ -178,11 +182,11 @@ int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char* err_msg=NULL;    
     char* err_msg=NULL;    
 
 
-    sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_type=%d,product_modbus_baud=%d,product_modbus_addr=%d,product_relay_ctrl_port='%s' WHERE product_id=%d;",
-        _globalDeviceInfo->_modbus_info.product_modbus_type,
-        _globalDeviceInfo->_modbus_info.product_modbus_baud,
-        _globalDeviceInfo->_modbus_info.product_modbus_addr,
-        _globalDeviceInfo->_modbus_info.product_relay_ctrl_port,
+    sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_type=%d,product_modbus_baud=%d,product_modbus_addr=%d WHERE product_id=%d;",
+        _globalDeviceInfo->_gmodbus_info.product_modbus_type,
+        _globalDeviceInfo->_gmodbus_info.product_modbus_baud,
+        _globalDeviceInfo->_gmodbus_info.product_modbus_addr,
+        //_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,//只改级联的串口配置,继电器采集和传感器采集端口不变
         _globalDeviceInfo->product_id);
         _globalDeviceInfo->product_id);
     res = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     res = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK)
     if(res != SQLITE_OK)
@@ -547,10 +551,11 @@ int dev_search_latest_power_statistic_info(GlobalDeviceManager* globalDeviceMang
     float faverageVoltage =0.0f,faverageFreq =0.0f,faverageFactor =0.0f;
     float faverageVoltage =0.0f,faverageFreq =0.0f,faverageFactor =0.0f;
     float fDiffVoltage =0.0f,fDiffFreq =0.0f,fDiffFactor =0.0f;
     float fDiffVoltage =0.0f,fDiffFreq =0.0f,fDiffFactor =0.0f;
     float fNowVoltage =0.0f,fNowFreq =0.0f,fNowFactor =0.0f;
     float fNowVoltage =0.0f,fNowFreq =0.0f,fNowFactor =0.0f;
+
     memset(&_over_all_pwr_back_info,0,sizeof(_OverAllPwrAckInfo));
     memset(&_over_all_pwr_back_info,0,sizeof(_OverAllPwrAckInfo));
-    _over_all_pwr_back_info.product_name = __globalDeviceManage._global_device_info->product_name;
-    _over_all_pwr_back_info.product_id = __globalDeviceManage._global_device_info->product_id;
-    _over_all_pwr_back_info.product_number = __globalDeviceManage._global_device_info->product_number;
+    _over_all_pwr_back_info.product_name = globalDeviceManger->_global_device_info->product_name;
+    _over_all_pwr_back_info.product_id = globalDeviceManger->_global_device_info->product_id;
+    _over_all_pwr_back_info.product_number = globalDeviceManger->_global_device_info->product_number;
     int nTempSum=0;
     int nTempSum=0;
     list_for_each_entry(_globalPowerMangerTemp, &globalDeviceManger->_globalPowerManger.list, list)
     list_for_each_entry(_globalPowerMangerTemp, &globalDeviceManger->_globalPowerManger.list, list)
     {
     {