Преглед изворни кода

添加总控制板数量、表盘电压、电流、功率最大值配置

guohui пре 1 година
родитељ
комит
a54adc6d77
11 измењених фајлова са 247 додато и 114 уклоњено
  1. BIN
      cust_data/db/pdu_dat.db
  2. BIN
      cust_data/db/pdu_dat_itk.db
  3. 2 15
      pro/config/cfg.h
  4. 67 59
      pro/src/app.c
  5. 7 4
      pro/src/appweb_handle.c
  6. 11 2
      pro/src/common.h
  7. 7 0
      pro/src/dflt.c
  8. 19 15
      pro/src/json_handle.c
  9. 106 1
      pro/src/paras.c
  10. 27 18
      pro/src/switch_ctrl.c
  11. 1 0
      pro/src/switch_ctrl.h

BIN
cust_data/db/pdu_dat.db


BIN
cust_data/db/pdu_dat_itk.db


+ 2 - 15
pro/config/cfg.h

@@ -21,9 +21,9 @@
 //#define PRJ_ANDERSON_AC_I3_O3
 //#define PRJ_HYPERTEC_AC_I3_O1
 //#define PRJ_SG_I3_O3
-//#define PRJ_TEST
+#define PRJ_TEST
 //#define PRJ_TEST_AC_I1_O1
-#define PRJ_TEST_AC_I3_O1
+//#define PRJ_TEST_AC_I3_O1
 
 
 #define USE_MAIL
@@ -33,14 +33,12 @@
 #define MQTT_SERVER_BUILTIN
 
 
-
 #if (defined PRJ_XIAN_AC_I1_O1_P4) || (defined PRJ_XIAN_AC_I1_O1_P8)  //GOM037
     #define LANGUAGE                            0           //chinese
     #define SMPLE_TIME                          30          //ms
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define PHASE_GROUP                         8
 
     #ifdef PRJ_XIAN_AC_I1_O1_P4
@@ -59,7 +57,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 
@@ -76,7 +73,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
     
@@ -93,7 +89,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define USE_LOGO_LITECH
 
     #ifdef PRJ_LITECH_AC_I1_O1
@@ -113,7 +108,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       24
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 
@@ -124,7 +118,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       24
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 
@@ -139,7 +132,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define PHASE_GROUP                         6
     #define CHANNEL_DELAY                       6
     
@@ -152,7 +144,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define PHASE_GROUP                         6
     #define CHANNEL_DELAY                       6
 
@@ -163,7 +154,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       16
     #define PHASE_GROUP                         6
     #define CHANNEL_DELAY                       6
 
@@ -174,7 +164,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       24//24//4
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 
@@ -185,7 +174,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       24//24//4
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 
@@ -196,7 +184,6 @@
     #define SAVE_TIME                           60000       //ms
     #define CASCADE_CNT                         0
 
-    #define MAX_CHN_COUNT                       24//24//4
     #define PHASE_GROUP                         8
     #define CHANNEL_DELAY                       8
 

+ 67 - 59
pro/src/app.c

@@ -111,10 +111,9 @@ static int upgrade_check(Modbus_Manger *mm, uint16_t addr)
 
 static int upgrade_proc(char *path, Modbus_Manger *mm)
 {
-    int i,j,r,maxCh=2;//MAX_CHN_COUNT;
+    int i,j,r;
     buf_t fbuf;
     GlobalDeviceManager *dm=&__globalDeviceManage;
-    GlobalPowerCtrlBoard *pboard=dm->_all_ctrl_board;
 
     #define RETRY_MAX  3
 
@@ -125,8 +124,8 @@ static int upgrade_proc(char *path, Modbus_Manger *mm)
     
     //broad upgrade file
     upgrade_send(mm, 1, fbuf.buf, fbuf.dlen);
-    for(i=0; i<maxCh; i++) {
-        if(pboard[i].product_saddr==0) {
+    for(i=0; i<dm->brdMax; i++) {
+        if(dm->pPowerBoard[i].product_saddr==0) {
             continue;
         }
 
@@ -200,6 +199,8 @@ static void* power_thread(void* arg)
     thread_handle_t *h=(thread_handle_t*)arg;
     GlobalDeviceManager* _globalDeviceManager = (GlobalDeviceManager*)h->arg;
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
+    PowerTotal_t *ptotal=&_globalDeviceManager->_globalDevInfo.ptotal;
+
     dev_search_last_Index(_globalDeviceManager->db, &lastIndex, tabPower);       // 查询日志最大点
     dev_search_last_Index(_globalDeviceManager->db, &lastIndex3, tabPower3);      // 查询日志最大点
     InitHashTable(_globalDeviceManager);
@@ -240,53 +241,53 @@ static void* power_thread(void* arg)
 #if (1)
         memset(&_globalTotalPowerInfo, 0, sizeof(GlobalPowerInfo));
         memset(&_globalPowerWarningInfo, 0, sizeof(PowerWarningInfo));
-        for (size_t i = 0; i < MAX_CHN_COUNT; i++)
+        for (size_t i = 0; i < ptotal->brdMax; i++)
         {
-            if (_globalDeviceManager->_all_ctrl_board[i].product_saddr == 0)
+            if (_globalDeviceManager->pPowerBoard[i].product_saddr == 0)
             {
                 continue;
             }
             ret=g_switch_get_all_out_info(&_globalDeviceManager->_globalRelaySampManger,
-                                        _globalDeviceManager->_all_ctrl_board[i].product_type,
-                                        _globalDeviceManager->_all_ctrl_board[i].product_saddr,
-                                        _globalDeviceManager->_all_ctrl_board[i].product_number,
-                                        _globalDeviceManager->_all_ctrl_board[i]._PowerInfo,
-                                            _globalDeviceManager->_all_ctrl_board[i]._PowerWarninginfo);
+                                        _globalDeviceManager->pPowerBoard[i].product_type,
+                                        _globalDeviceManager->pPowerBoard[i].product_saddr,
+                                        _globalDeviceManager->pPowerBoard[i].product_number,
+                                        _globalDeviceManager->pPowerBoard[i]._PowerInfo,
+                                            _globalDeviceManager->pPowerBoard[i]._PowerWarninginfo);
             if (ret<0)
             {
                 usleep(usleepTime);
                 ret = g_switch_get_all_out_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                _globalDeviceManager->_all_ctrl_board[i].product_type,
-                                                _globalDeviceManager->_all_ctrl_board[i].product_saddr,
-                                                _globalDeviceManager->_all_ctrl_board[i].product_number,
-                                                _globalDeviceManager->_all_ctrl_board[i]._PowerInfo,
-                                                _globalDeviceManager->_all_ctrl_board[i]._PowerWarninginfo);
+                                                _globalDeviceManager->pPowerBoard[i].product_type,
+                                                _globalDeviceManager->pPowerBoard[i].product_saddr,
+                                                _globalDeviceManager->pPowerBoard[i].product_number,
+                                                _globalDeviceManager->pPowerBoard[i]._PowerInfo,
+                                                _globalDeviceManager->pPowerBoard[i]._PowerWarninginfo);
             }
             // 输入总信息(三相)(后续应同步所有类型)
-            if (_globalDeviceManager->_all_ctrl_board[i].product_saddr != 0 && _globalDeviceManager->_all_ctrl_board[i].product_type == TREE_AC_TYPE)
+            if (_globalDeviceManager->pPowerBoard[i].product_saddr != 0 && _globalDeviceManager->pPowerBoard[i].product_type == TREE_AC_TYPE)
             {
                 usleep(usleepTime);
                 ret = g_switch_get_t_ac_in_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                _globalDeviceManager->_all_ctrl_board[i].product_saddr, // saadr
-                                                _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo,
-                                                _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerWarninginfo);
+                                                _globalDeviceManager->pPowerBoard[i].product_saddr, // saadr
+                                                _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo,
+                                                _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerWarninginfo);
                 if (ret < 0)
                 {
                     usleep(usleepTime);
                     ret = g_switch_get_t_ac_in_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                    _globalDeviceManager->_all_ctrl_board[i].product_saddr, // saadr
-                                                    _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo,
-                                                    _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerWarninginfo);
+                                                    _globalDeviceManager->pPowerBoard[i].product_saddr, // saadr
+                                                    _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo,
+                                                    _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerWarninginfo);
                 }
                 ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
-                                                         _globalDeviceManager->_all_ctrl_board[i].product_saddr,
-                                                         _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger.product_MissingPH);
+                                                         _globalDeviceManager->pPowerBoard[i].product_saddr,
+                                                         _globalDeviceManager->pPowerBoard[i]._globalPowerInManger.product_MissingPH);
                 if (ret < 0)
                 {
                     usleep(usleepTime);
                     ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
-                                                             _globalDeviceManager->_all_ctrl_board[i].product_saddr,
-                                                             _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger.product_MissingPH);
+                                                             _globalDeviceManager->pPowerBoard[i].product_saddr,
+                                                             _globalDeviceManager->pPowerBoard[i]._globalPowerInManger.product_MissingPH);
                 }
             }            
             //usleep(usleepTime);
@@ -314,7 +315,7 @@ static void* power_thread(void* arg)
         {
             //获取通道类型
 
-            if (!(_globalPowerMangerTemp->product_saddr < MAX_CHN_COUNT && _globalPowerMangerTemp->product_saddr > 0))
+            if (!(_globalPowerMangerTemp->product_saddr < ptotal->brdMax && _globalPowerMangerTemp->product_saddr > 0))
             {
             	continue;
             }
@@ -324,7 +325,7 @@ static void* power_thread(void* arg)
             }
             //log_d("ch%d cpy address:%d,chraddr:%d.\n",_globalPowerMangerTemp->product_ch_id,_globalPowerMangerTemp->product_saddr,_globalPowerMangerTemp->product_ch_addr);
             memcpy(&_globalPowerInfo._power_info,
-            &_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerInfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
+            &_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._PowerInfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
             sizeof(PowerInfo));
             if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
                 _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
@@ -344,7 +345,7 @@ static void* power_thread(void* arg)
             }
             
             memcpy(&_globalPowerWarningInfo,
-            &_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
+            &_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
             sizeof(PowerWarningInfo));
             switch (_globalPowerMangerTemp->product_ch_type)
             {
@@ -438,8 +439,8 @@ static void* power_thread(void* arg)
                             {
                                 continue;
                             }
-                            memcpy(&_pTreeACPowerMangerTemp->_PowerInfo, &_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerInfo));
-                            memcpy(&_pTreeACPowerMangerTemp->_PowerWarninginfo, &_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerWarningInfo));
+                            memcpy(&_pTreeACPowerMangerTemp->_PowerInfo, &_globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerInfo));
+                            memcpy(&_pTreeACPowerMangerTemp->_PowerWarninginfo, &_globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerWarningInfo));
                             gettimeofday(&tv, NULL);
                             // t = localtime(&tv.tv_sec);
                             // 计算总三项总数据
@@ -679,11 +680,11 @@ static void* power_thread(void* arg)
                         {
                             continue;
                         }                        
-                        memcpy(&_pTreeACPowerMangerTemp->_PowerInfo,&_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1],sizeof(PowerInfo)); 
-                        memcpy(&_globalTACWarningInfo,&_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1],sizeof(PowerWarningInfo));
+                        memcpy(&_pTreeACPowerMangerTemp->_PowerInfo,&_globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1],sizeof(PowerInfo)); 
+                        memcpy(&_globalTACWarningInfo,&_globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1],sizeof(PowerWarningInfo));
                         gettimeofday(&tv, NULL);
                         // t = localtime(&tv.tv_sec);
-                         _globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq=_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq> _pTreeACPowerMangerTemp->_PowerInfo.freq?_globalDeviceManager->_all_ctrl_board[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq:_pTreeACPowerMangerTemp->_PowerInfo.freq;
+                         _globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq=_globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq> _pTreeACPowerMangerTemp->_PowerInfo.freq?_globalDeviceManager->pPowerBoard[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq:_pTreeACPowerMangerTemp->_PowerInfo.freq;
                         //计算总三项总数据
                         _globalPowerInfo._power_info.voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage;
                         _globalPowerInfo._power_info.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
@@ -865,8 +866,8 @@ static void* power_thread(void* arg)
                         if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
                     bool nMissPH=0;
-                    //memcpy(nMissPH,_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH,sizeof(nMissPH));   
-                    nMissPH=_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[0];
+                    //memcpy(nMissPH,_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH,sizeof(nMissPH));   
+                    nMissPH=_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[0];
                     if (_globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossA!= (bool)nMissPH)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossA = (bool)nMissPH;
@@ -876,7 +877,7 @@ static void* power_thread(void* arg)
                             dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 0);
                     }
                     _globalPowerWarningInfo.w_phase_lossA=nMissPH;                        
-                    nMissPH=_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[1];
+                    nMissPH=_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[1];
                     if (_globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossB != (bool)nMissPH)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossB = (bool)nMissPH;
@@ -885,7 +886,7 @@ static void* power_thread(void* arg)
                             dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 1);
                     }
                     _globalPowerWarningInfo.w_phase_lossB=nMissPH;                        
-                    nMissPH=_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[2];
+                    nMissPH=_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[2];
                     if (_globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossC != (bool)nMissPH)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossC = (bool)nMissPH;
@@ -987,26 +988,26 @@ static void* power_thread(void* arg)
                 }
                 memset(&_globalDeviceManager->_globalPowerManger._PowerInfo, 0, sizeof(PowerInfo));      
                 memset(&_pTreeACPowerMangerTemp->_PowerInfo, 0, sizeof(_globalPowerInfo._power_info));
-                for (size_t i = 0; i < MAX_CHN_COUNT; i++)
+                for (size_t i = 0; i < ptotal->brdMax; i++)
                 {
-                    if (_globalDeviceManager->_all_ctrl_board[i].product_saddr == 0 || _globalDeviceManager->_all_ctrl_board[i].product_type != TREE_AC_TYPE)
+                    if (_globalDeviceManager->pPowerBoard[i].product_saddr == 0 || _globalDeviceManager->pPowerBoard[i].product_type != TREE_AC_TYPE)
                     {
                         continue;
                     }
                     // 如果存在电压则置位如果都没有电压则保持0
-                    if (_globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage != 0)
+                    if (_globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage != 0)
                     {
-                        _pTreeACPowerMangerTemp->_PowerInfo.voltage = _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage;
+                        _pTreeACPowerMangerTemp->_PowerInfo.voltage = _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage;
                     }
-                    _pTreeACPowerMangerTemp->_PowerInfo.current += _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].current;
-                    _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
+                    _pTreeACPowerMangerTemp->_PowerInfo.current += _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].current;
+                    _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
                    // if (_globalTotalPowerInfo._power_info.freq != 0)
                   //  {
                      //   _pTreeACPowerMangerTemp->_PowerInfo.freq = _globalTotalPowerInfo._power_info.freq;
                    // }
-                     _pTreeACPowerMangerTemp->_PowerInfo.freq =  _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].freq> _pTreeACPowerMangerTemp->_PowerInfo.freq? _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].freq: _pTreeACPowerMangerTemp->_PowerInfo.freq;
-                    _pTreeACPowerMangerTemp->_PowerInfo.consumption += _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].consumption;
-                    _pTreeACPowerMangerTemp->_PowerInfo.factor = _globalDeviceManager->_all_ctrl_board[i]._globalPowerInManger._PowerInfo[nTreeACType].factor;
+                     _pTreeACPowerMangerTemp->_PowerInfo.freq =  _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].freq> _pTreeACPowerMangerTemp->_PowerInfo.freq? _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].freq: _pTreeACPowerMangerTemp->_PowerInfo.freq;
+                    _pTreeACPowerMangerTemp->_PowerInfo.consumption += _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].consumption;
+                    _pTreeACPowerMangerTemp->_PowerInfo.factor = _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor;
                 }
                 if (_globalDeviceManager->triphasic_mmap)
                 {
@@ -1413,24 +1414,24 @@ static void* breaker_thread(void *arg)
                 }
             }
 
-            if (temp->breaker_gather_addr>0&&temp->breaker_gather_addr<=MAX_CHN_COUNT)
+            if (temp->breaker_gather_addr>0&&temp->breaker_gather_addr<=_globalDeviceManager->brdMax)
             {
-                for (size_t i = 0; i < MAX_CHN_COUNT; i++)
+                for (size_t i = 0; i <= _globalDeviceManager->brdMax; i++)
                 {
-                    if (_globalDeviceManager->_all_ctrl_board[i].product_saddr != temp->breaker_gather_addr)
+                    if (_globalDeviceManager->pPowerBoard[i].product_saddr != temp->breaker_gather_addr)
                     {
                         continue;
                     }
                     ret = g_switch_get_breaker_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                    _globalDeviceManager->_all_ctrl_board[i].product_type,
-                                                    _globalDeviceManager->_all_ctrl_board[i].product_saddr,
+                                                    _globalDeviceManager->pPowerBoard[i].product_type,
+                                                    _globalDeviceManager->pPowerBoard[i].product_saddr,
                                                     temp);
                     if (ret < 0)
                     {
                         usleep(usleepTime);
                         ret = g_switch_get_breaker_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                        _globalDeviceManager->_all_ctrl_board[i].product_type,
-                                                        _globalDeviceManager->_all_ctrl_board[i].product_saddr,
+                                                        _globalDeviceManager->pPowerBoard[i].product_type,
+                                                        _globalDeviceManager->pPowerBoard[i].product_saddr,
                                                         temp);
                     }
                     break;
@@ -1729,7 +1730,7 @@ static void* shm_thread(void *arg)
                         // GlobalPowerInfo _globalPowerInfo;
                         // memset(&_globalPowerInfo._power_info, 0, sizeof(PowerInfo));
                         // memcpy(&_globalPowerInfo._power_info,
-                        //        &_globalDeviceManager->_all_ctrl_board[0]._PowerInfo[0],
+                        //        &_globalDeviceManager->pPowerBoard[0]._PowerInfo[0],
                         //        sizeof(PowerInfo));
                         _globalDeviceManager->g_shm_Data->fV = _globalPowerMangerTemp->_PowerInfo.voltage;
                         _globalDeviceManager->g_shm_Data->fA = _globalPowerMangerTemp->_PowerInfo.current;
@@ -2002,6 +2003,13 @@ int app_init(void)
 
     //使用的通道
     _globalDeviceManager->useSlaveCount = 0 ;
+    _globalDeviceManager->brdMax = _globalDeviceManager->_globalDevInfo.ptotal.brdMax;
+    _globalDeviceManager->pPowerBoard = malloc(sizeof(GlobalPowerCtrlBoard)*_globalDeviceManager->brdMax);
+    if(!_globalDeviceManager->pPowerBoard) {
+        log_e("pPowerBoard malloc failed, brdMax: %d\n", _globalDeviceManager->brdMax);
+        return -1 ;
+    }
+    g_switch_init(_globalDeviceManager->brdMax);
     
     //链接数据库获取配置信息
     sys_get_path(path, DATABASE_NAME);
@@ -2092,9 +2100,9 @@ int app_init(void)
     {
         __globalDeviceManage.nTreeACLshow=0;
         _globalDeviceManager->useSlaveCount++;
-        _globalDeviceManager->_all_ctrl_board[0].product_saddr = 0;
-        _globalDeviceManager->_all_ctrl_board[0].product_number = -1;
-        _globalDeviceManager->_all_ctrl_board[0].product_type = -1;
+        _globalDeviceManager->pPowerBoard[0].product_saddr = 0;
+        _globalDeviceManager->pPowerBoard[0].product_number = -1;
+        _globalDeviceManager->pPowerBoard[0].product_type = -1;
         
         // 填充三相表
         for (size_t TreeACindex = 0; TreeACindex < 3; TreeACindex++)

+ 7 - 4
pro/src/appweb_handle.c

@@ -5521,17 +5521,20 @@ static void equipmentMintenance(void *conn)
     else if(strcmp(_Over_equipment_mintenance.type,"restoreFactorySettings")==0) {  //restore to factory
 
         char temp[100];
+        GlobalDeviceManager *dm=&__globalDeviceManage;
+        PowerTotal_t *ptotal=&dm->_globalDevInfo.ptotal;
+
         //sprintf(temp, "$系统$|$恢复出厂设置$");
         sprintf(temp, "System Reset!");
-        dev_insert_alarm_ctrl(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product.id, ALARM_TYPE_OPRATION, temp);
+        dev_insert_alarm_ctrl(dm->db, dm->_globalDevInfo.product.id, ALARM_TYPE_OPRATION, temp);
 
-        for (size_t i = 0; i < MAX_CHN_COUNT; i++)
+        for (size_t i = 0; i < ptotal->brdMax; i++)
         {
-            if (__globalDeviceManage._all_ctrl_board[i].product_saddr <= 0)
+            if (dm->pPowerBoard[i].product_saddr <= 0)
             {
                 continue;
             }
-            g_switch_get_all_reset(&__globalDeviceManage._globalRelaySampManger,__globalDeviceManage._all_ctrl_board[i].product_type,__globalDeviceManage._all_ctrl_board[i].product_saddr);
+            g_switch_get_all_reset(&dm->_globalRelaySampManger,dm->pPowerBoard[i].product_type,__globalDeviceManage.pPowerBoard[i].product_saddr);
         }
         sys_set_factory();
     }

+ 11 - 2
pro/src/common.h

@@ -292,15 +292,23 @@ typedef struct {
     uint16_t    ch_delay;               //通道延时
 }ProductInfo_t;
 
+typedef struct
+{
+    int         voltage;
+    int         current;
+    int         power;
+    int         brdMax;
+}PowerTotal_t;
+
 typedef struct
 {
     ModbusInfo_t    relay;              //继电器控制端口
     NetworkInfo_t   network;            //网络信息
     ModbusInfo_t    cascade;            //级联端口  
     ProductInfo_t   product;            //产品信息
+    PowerTotal_t    ptotal;
 }GlobalDeviceInfo;
 ///////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////////
 //自定义共享内存类
 typedef struct
 {
@@ -1030,7 +1038,8 @@ typedef struct
     int                 nTreeACLshow; //三项总数据显示L1=0,L2=1,L3=2
     pthread_t           snmp_agent_thread;//SNMP代理线程
     bool                _ReloadChm_flag; //重新加载端口数据
-    GlobalPowerCtrlBoard _all_ctrl_board[MAX_CHN_COUNT]; //所有控制板
+    int                  brdMax;
+    GlobalPowerCtrlBoard *pPowerBoard; //所有控制板
     LowConf*            _RS485LowConfData;//485Data
       //传感器
     struct modbus_slave_read_reg g_modebus_read;

+ 7 - 0
pro/src/dflt.c

@@ -44,6 +44,13 @@ GlobalDeviceInfo DFLT_PARAS={
             .baudrate = 115200,
             .path = "/dev/ttyAS5",                      //表头级联串口对应路径
         },
+
+        .ptotal = {
+            .voltage = 500,
+            .current = 100,
+            .power = 100,
+            .brdMax = 24,
+        },
 };
 
 

+ 19 - 15
pro/src/json_handle.c

@@ -1731,6 +1731,7 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
 {
     char* str = NULL;
     char temp[64] = {0};
+    GlobalDeviceManager *dm=&__globalDeviceManage;
 
     // 创建 JSON 对象  
     cJSON* root = cJSON_CreateObject();   
@@ -1759,19 +1760,19 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L1->voltage);
     cJSON_AddStringToObject(data_filed,"productVoltage",temp);
 
-    sprintf(temp,"%d",AC_MAX_VOLTAGE_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.voltage);
     cJSON_AddStringToObject(data_filed,"productVoltageMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L1->current);
     cJSON_AddStringToObject(data_filed,"productCurrent",temp);
 
-    sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.current);
     cJSON_AddStringToObject(data_filed,"productCurrentMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L1->power/1000);
     cJSON_AddStringToObject(data_filed,"productPower",temp);
 
-    sprintf(temp,"%d",AC_MAX_POWER_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.power);
     cJSON_AddStringToObject(data_filed,"productPowerMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L1->freq);
@@ -1803,19 +1804,19 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L2->voltage);
     cJSON_AddStringToObject(data_filed1,"productVoltage",temp);
 
-    sprintf(temp,"%d",AC_MAX_VOLTAGE_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.voltage);
     cJSON_AddStringToObject(data_filed1,"productVoltageMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L2->current);
     cJSON_AddStringToObject(data_filed1,"productCurrent",temp);
 
-    sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.current);
     cJSON_AddStringToObject(data_filed1,"productCurrentMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L2->power/1000);
     cJSON_AddStringToObject(data_filed1,"productPower",temp);
 
-    sprintf(temp,"%d",AC_MAX_POWER_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.power);
     cJSON_AddStringToObject(data_filed1,"productPowerMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L2->freq);
@@ -1847,19 +1848,19 @@ char* over_all_pwr_monitor_Tree_AC_to_json(_OverAllPwrAckInfo* _over_all_pwr_bac
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L3->voltage);
     cJSON_AddStringToObject(data_filed2,"productVoltage",temp);
 
-    sprintf(temp,"%d",AC_MAX_VOLTAGE_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.voltage);
     cJSON_AddStringToObject(data_filed2,"productVoltageMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L3->current);
     cJSON_AddStringToObject(data_filed2,"productCurrent",temp);
 
-    sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.current);
     cJSON_AddStringToObject(data_filed2,"productCurrentMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L3->power/1000);
     cJSON_AddStringToObject(data_filed2,"productPower",temp);
 
-    sprintf(temp,"%d",AC_MAX_POWER_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.power);
     cJSON_AddStringToObject(data_filed2,"productPowerMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info_L3->freq);
@@ -1902,6 +1903,8 @@ char* over_all_pwr_monitor_to_json(int phaseType,_OverAllPwrAckInfo* _over_all_p
 {
     char* str = NULL;
     char temp[32] = {0};
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
     // 添加基本键值对
@@ -1938,19 +1941,19 @@ char* over_all_pwr_monitor_to_json(int phaseType,_OverAllPwrAckInfo* _over_all_p
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->voltage);
     cJSON_AddStringToObject(data_filed,"productVoltage",temp);
 
-    sprintf(temp,"%d",AC_MAX_VOLTAGE_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.voltage);
     cJSON_AddStringToObject(data_filed,"productVoltageMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->current);
     cJSON_AddStringToObject(data_filed,"productCurrent",temp);
 
-    sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.current);
     cJSON_AddStringToObject(data_filed,"productCurrentMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->power/1000.0);
     cJSON_AddStringToObject(data_filed,"productPower",temp);
 
-    sprintf(temp,"%d",AC_MAX_POWER_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.power);
     cJSON_AddStringToObject(data_filed,"productPowerMaximum",temp);
 
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->freq);
@@ -3811,6 +3814,7 @@ char* ws_over_status_ack_to_json(int type,_OverAllPwrAckInfo* _over_all_pwr_back
 {
     char* str = NULL;
     char temp[32] = {0};
+    GlobalDeviceManager *dm=&__globalDeviceManage;
 
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
@@ -3834,15 +3838,15 @@ char* ws_over_status_ack_to_json(int type,_OverAllPwrAckInfo* _over_all_pwr_back
     cJSON_AddStringToObject(data_filed,"productId",temp);
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->voltage);
     cJSON_AddStringToObject(data_filed,"productVoltage",temp);
-    sprintf(temp,"%d",AC_MAX_VOLTAGE_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.voltage);
     cJSON_AddStringToObject(data_filed,"productVoltageMaximum",temp);
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->current);
     cJSON_AddStringToObject(data_filed,"productCurrent",temp);
-    sprintf(temp,"%d",AC_MAX_CURRENT_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.current);
     cJSON_AddStringToObject(data_filed,"productCurrentMaximum",temp);
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->power/1000);
     cJSON_AddStringToObject(data_filed,"productPower",temp);
-    sprintf(temp,"%d",AC_MAX_POWER_VAL);
+    sprintf(temp,"%d",dm->_globalDevInfo.ptotal.power);
     cJSON_AddStringToObject(data_filed,"productPowerMaximum",temp);
     sprintf(temp,"%0.3f",_over_all_pwr_back_info->freq);
     cJSON_AddStringToObject(data_filed,"productPowerFreq",temp);

+ 106 - 1
pro/src/paras.c

@@ -338,6 +338,97 @@ static int ini_rw_modbus(dictionary *dic, int rw, GlobalDeviceInfo *info)
 
     return 0;
 }
+
+static int ini_rw_ptotal(dictionary *dic, int rw, PowerTotal_t *ptotal)
+{
+    int r=-1;
+    char temp[100];
+    char *token=NULL;
+
+    if(rw==INI_WRITE) {
+        if(ptotal->voltage<=0 || ptotal->current<=0 || ptotal->power<=0 || ptotal->brdMax<=0) {
+            LOGE("___ set ptotal, paras is invalid\n");
+            return -1; 
+        }
+    }
+
+    token = "ptotal:voltage";
+    if(rw==INI_READ) {
+        r = iniparser_getint(dic, token, -1);
+        if(r==-1) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1; 
+        }
+        ptotal->voltage = r;
+    }
+    else {
+        sprintf(temp, "%d", ptotal->voltage);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+    token = "ptotal:current";
+    if(rw==INI_READ) {
+        r = iniparser_getint(dic, token, -1);
+        if(r==-1) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1; 
+        }
+        ptotal->current = r;
+    }
+    else {
+        sprintf(temp, "%d", ptotal->current);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+    token = "ptotal:power";
+    if(rw==INI_READ) {
+        r = iniparser_getint(dic, token, -1);
+        if(r==-1) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1; 
+        }
+        ptotal->power = r;
+    }
+    else {
+        sprintf(temp, "%d", ptotal->power);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+    token = "ptotal:brdMax";
+    if(rw==INI_READ) {
+        r = iniparser_getint(dic, token, -1);
+        if(r==-1) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1; 
+        }
+        ptotal->brdMax = r;
+    }
+    else {
+        sprintf(temp, "%d", ptotal->brdMax);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
+
 static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
 {
     int r=-1;
@@ -362,6 +453,13 @@ static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
         return NULL;
     }
 
+    r = ini_rw_ptotal(dic, INI_READ, &info->ptotal);
+    if(r) {
+        LOGE("___ini_r_modbus failed\n");
+        iniparser_freedict(dic);
+        return NULL;
+    }
+
     return dic;
 }
 static int ini_check(char *path)
@@ -401,13 +499,20 @@ static int ini_reset(paras_handle_t *h)
     fprintf(fp, "savetime    = \"%d\"\n", info->product.save_time);
     fprintf(fp, "ph_group    = \"%d\"\n", info->product.ph_group);
     fprintf(fp, "ch_delay    = \"%d\"\n", info->product.ch_delay);
-
     fprintf(fp, "\n");
 
     fprintf(fp, "[modbus]\n");
     fprintf(fp, "mode        = \"%d\"\n", info->cascade.mode);
     fprintf(fp, "address     = \"%d\"\n", info->cascade.addr);
     fprintf(fp, "baudrate    = \"%d\"\n", info->cascade.baudrate);
+    fprintf(fp, "\n");
+
+    fprintf(fp, "[ptotal]\n");
+    fprintf(fp, "voltage     = \"%d\"\n", info->ptotal.voltage);
+    fprintf(fp, "current     = \"%d\"\n", info->ptotal.current);
+    fprintf(fp, "power       = \"%d\"\n", info->ptotal.power);
+    fprintf(fp, "brdMax      = \"%d\"\n", info->ptotal.brdMax);
+    fprintf(fp, "\n");
 
     fclose(fp);
 

+ 27 - 18
pro/src/switch_ctrl.c

@@ -5,6 +5,15 @@
 #include "breaker_detection.h"
 #include "cfg.h"
 
+
+static int switch_addr_max=255;
+int g_switch_init(int addr_max)
+{
+    switch_addr_max = addr_max;
+    return 0;
+}
+
+
 /// @brief 获取继电器板类型以及通道
 /// @param manger 
 /// @param saddr 
@@ -547,15 +556,15 @@ int g_switch_set_ac_reset(void *manger, int saddr)
     unsigned int offset = 0;
     int ret = 0;
     offset = _SWITCH_AC_SINGLE_S_CHN_STS;
-    PowerInfo *pPowerInfo = __globalDeviceManage._all_ctrl_board[saddr]._PowerInfo;
+    PowerInfo *pPowerInfo = __globalDeviceManage.pPowerBoard[saddr]._PowerInfo;
     if (pPowerInfo != NULL)
     {
         memset(data_temp1, 0, sizeof(data_temp1));
-        for (size_t i = 0; i < __globalDeviceManage._all_ctrl_board[saddr].product_number; i++)
+        for (size_t i = 0; i < __globalDeviceManage.pPowerBoard[saddr].product_number; i++)
         {
             data_temp1[i] = pPowerInfo[i].status;
         }
-        ret = g_modbus_write_x_reg(manger, saddr, offset, __globalDeviceManage._all_ctrl_board[saddr].product_number, data_temp1);
+        ret = g_modbus_write_x_reg(manger, saddr, offset, __globalDeviceManage.pPowerBoard[saddr].product_number, data_temp1);
         if (ret < 0)
         {
             return ret;
@@ -1645,7 +1654,7 @@ int g_switch_set_dcpdu_reset(void* manger,int saddr)
 
 int g_switch_set_dcpdu_chn_reset(void* manger,int saddr,int nChn)
 {
-    if (saddr <= 0 || saddr >= MAX_CHN_COUNT)
+    if (saddr <= 0 || saddr > switch_addr_max)
     {
         return -1;
     }
@@ -2136,7 +2145,7 @@ int g_switch_set_t_ac_ctrl(void* manger,int saddr,unsigned short* sts)
 //重置通道状态
 int g_switch_set_t_ac_phchn_reset(void *manger, int saddr, int nChn)
 {
-    if (saddr <= 0 || saddr >= MAX_CHN_COUNT)
+    if (saddr <= 0 || saddr > switch_addr_max)
     {
         return -1;
     }
@@ -2157,7 +2166,7 @@ int g_switch_set_t_ac_phchn_reset(void *manger, int saddr, int nChn)
 
 int g_switch_set_t_ac_chn_reset(void *manger, int saddr, int nChn)
 {
-    if (saddr <= 0 || saddr >= MAX_CHN_COUNT)
+    if (saddr <= 0 || saddr > switch_addr_max)
     {
         return -1;
     }
@@ -2181,7 +2190,7 @@ int g_switch_set_t_ac_chn_reset(void *manger, int saddr, int nChn)
 //重设板子信息
 int g_switch_set_t_ac_reset(void* manger,int saddr)
 {
-    if (saddr <= 0 || saddr >= MAX_CHN_COUNT)
+    if (saddr <= 0 || saddr > switch_addr_max)
     {
         return -1;
     }
@@ -2230,14 +2239,14 @@ int g_switch_set_t_ac_reset(void* manger,int saddr)
     {
         return ret;        
     }
-    if (__globalDeviceManage._all_ctrl_board[saddr].product_saddr<=0)
+    if (__globalDeviceManage.pPowerBoard[saddr].product_saddr<=0)
     {
         return -1;
     }    
-    PowerInfo* pPowerInfo= __globalDeviceManage._all_ctrl_board[saddr]._PowerInfo;
+    PowerInfo* pPowerInfo= __globalDeviceManage.pPowerBoard[saddr]._PowerInfo;
     if (pPowerInfo!=NULL)
     {
-        for (size_t i = 0; i < __globalDeviceManage._all_ctrl_board[saddr].product_number; i++)
+        for (size_t i = 0; i < __globalDeviceManage.pPowerBoard[saddr].product_number; i++)
         {
             memset(data_temp1, 0, sizeof(data_temp1));
             offset = _SWITCH_T_AC_OUT_ENABLE + i;
@@ -2528,12 +2537,12 @@ int ResetChmData(int nCtrlType)
     int type = 0;
     int nTac_chn=3;
     GlobalDeviceManager* _globalDeviceManager=&__globalDeviceManage;    
-    __globalDeviceManage.useSlaveCount = 0;
     ProductInfo_t *prod=&_globalDeviceManager->_globalDevInfo.product;
     int nGroups=prod->ch_delay;
+    __globalDeviceManage.useSlaveCount = 0;
 
     power_clear(&_globalDeviceManager->_globalPowerManger);
-    for (size_t i = 0; i < MAX_CHN_COUNT; i++)
+    for (size_t i = 0; i <= switch_addr_max; i++)
     {
         type = 0;
         int nMaxChn = 0;
@@ -2548,9 +2557,9 @@ int ResetChmData(int nCtrlType)
         if (ret == 0)
         {
             _globalDeviceManager->useSlaveCount ++ ;
-            _globalDeviceManager->_all_ctrl_board[i].product_saddr = i;
-            _globalDeviceManager->_all_ctrl_board[i].product_number = nMaxChn;
-            _globalDeviceManager->_all_ctrl_board[i].product_type = type;
+            _globalDeviceManager->pPowerBoard[i].product_saddr = i;
+            _globalDeviceManager->pPowerBoard[i].product_number = nMaxChn;
+            _globalDeviceManager->pPowerBoard[i].product_type = type;
             switch (type)
             {
             case AC_SINGLE_S_TYPE: // AC单相小电流 8路继电器
@@ -3118,9 +3127,9 @@ int ResetChmData(int nCtrlType)
             }
         }else
         {
-            _globalDeviceManager->_all_ctrl_board[i].product_saddr = 0;
-            _globalDeviceManager->_all_ctrl_board[i].product_number = 0;
-            _globalDeviceManager->_all_ctrl_board[i].product_type = 0;
+            _globalDeviceManager->pPowerBoard[i].product_saddr = 0;
+            _globalDeviceManager->pPowerBoard[i].product_number = 0;
+            _globalDeviceManager->pPowerBoard[i].product_type = 0;
         }
     }
     char strLog[200]={"MODBUS"};

+ 1 - 0
pro/src/switch_ctrl.h

@@ -104,6 +104,7 @@ enum MODBUS_MODE
 
 #define _SWITCH_T_AC_BREAKER_INFO 0x17D4        //三相控制板开关检测信息
 
+int g_switch_init(int addr_max);
 int g_switch_get_type(void* manger,int saddr, int* type,int* chn,int nPowerType);
 
 int g_switch_get_ac_single_s_cur_info(void* manger,int saddr,unsigned char chn,PowerInfo* _power,PowerWarningInfo* _warning);