Sfoglia il codice sorgente

添加更新记录,修改固件时间接口

guohui 1 anno fa
parent
commit
3beebfdc55

+ 0 - 87
cust_data/ChangesLog.txt

@@ -1,87 +0,0 @@
-Changes Between V0.1.1 and V0.1.0
-
-New and improved:
-Full compatibility with VS2017 and VS2019
-Full C++ Standards compliance and support for compiling with /permissive- flag
-Full support for strict const-qualification conformance (/Zc:strictStrings)
-New classes: CRegProperty and CRegPropertyImpl<> for properties stored in registry
-New class: CSimpleFileDialog - fixed common dialog that does not use OFN_ENABLEHOOK
-Added support for MFC Dynamic Dialog Layout resource format
-App Wizard:
-
-Added support for VS2017 and VS2019
-Removed options for manifest (always there) and Unicode (always on)
-Added option for WinXP support
-Added support for _NO_AUTOMATIC_NAMESPACE
-
-
-Fixes and enhancements:
-
-General:
-
-Added AtlGetStringPtr() function - get a pointer to read-only resource string
-Changed CMessageLoop::IsIdleMessage() to be virtual, so it can be overridden in a derived class
-Added DECLARE_FRAME_WND_CLASS2(), DECLARE_FRAME_WND_CLASS_EX2(), and DECLARE_FRAME_WND_SUPERCLASS2() for templated classes, and used DECLARE_FRAME_WND_CLASS2() for CFrameWindowImplBase
-CMemDlgTemplateT: Added new window traits for dialog controls to avoid painting problems with WS_CLIPCHILDREN and WS_CLIPSIBLINGS
-CWindowEx: Added methods for Dialog-only messages
-Fix for #315 WTL::RunTimeHelper::IsWin7 works incorrectly on Windows 10 if versionhelpers.h is not used
-Fix for bug #300 Error in CZoomScrollWindowImpl with setting SetZoomMode(ZOOMMODE_IN)
-Fix for bug #298 InitDialogBaseUnits takes LOGFONT by value
-Fix for CResource::LoadEx() - wrong order for parameters to ::FindResourceEx()
-Fix for warning C4555: expression has no effect when using BEGIN_MSG_MAP_EX and BEGIN_DDX_MAP
-Fix for bug #266 Icon loading for hi-dpi environments
-Fix for bug #319 atlprint.h: Incorrect offsets in DEVNAMES struct
-Samples: Updated for WTL10, renamed project files to indicate VS version, code and file cleanup
-
-
-Controls:
-
-Added CListViewCtrl::SelectAllItems()
-Improved CListViewCtrl::SelectItem() to call SetSelectionMark() and remove selection
-Added another variant of CListViewCtrl::Scroll()
-Fix for bug #321 Missing HTREEITEM parameter to TreeView GetNextSelected() methods
-Added CEdit methods for new Edit messages added in Windows 10.0.17763
-CRichEditCtrl: Added GetTypographyOptions() and SetTypographyOptions() that were missing
-Added CString variant of CMultiPaneStatusBarCtrlImpl::GetPaneText()
-Fix for bug #268 CImageListManaged throws ATL assert when using attach or operator =
-
-
-Splitter:
-
-CSplitterImpl: Increased m_nPropMax to handle super-high resolutions
-CSplitterWindowImpl: Added new 'flat' splitter bar drawing style
-Used DECLARE_WND_CLASS_EX2() for CSplitterWindowT
-
-
-TabView:
-
-Added support for auto scroll when dragging tabs to reposition them
-Extended drag area to the whole client area of CTabViewImpl
-Added hover close buttons to tabs
-SetActivePage() - set focus only if main window is active
-OnTabContextMenu() to pass the correct tab item to OnContextMenu()
-CTabViewImpl: Uses ShowWindow() with TRUE/FALSE instead of SW_SHOW/SW_HIDE
-
-
-Ribbon:
-
-Fix for bug #317 SpinnerCtrlImpl - Failed to update string properties
-Don't use function pointers to templated functions
-Cracked Handlers:
-
-Added MSG_WM_NCMOUSEHOVER() and MSG_WM_NCMOUSELEAVE()
-Added MSG_WM_GESTURE, MSG_WM_GESTURENOTIFY, MSG_WM_DPICHANGED, MSG_WM_APPCOMMAND
-Fix for bug #322 atlcrack.h: Incorrect signature in comment for MSG_WM_MDIACTIVATE
-Fix for bug #302 MSG_WM_WTSSESSION_CHANGE should crack lParam as session Id
-Fix for bug #284 MSG_WM_XBUTTONDOWN inconsistent with MSDN
-Fix for bug #286 MSG_WM_KEYDOWN cracks wParam as TCHAR, should be a virtual key
-
-
-Clang specific fixes:
-
-Use C++-style instead of C-style struct initialization
-Remove superfluous semicolons
-Add comment for implicit fallthrough in switch statements
-
-
-

+ 10 - 0
cust_data/changes.txt

@@ -0,0 +1,10 @@
+V0.0.2
+
+New and improved:
+1. Add NTP time sync
+2. Add Changes log in firmware upgrade page
+3. Add power data manual export in web and auto export in smtp mail
+
+Fixes and enhancements:
+1. Increase the data quantity in power history query, upper limit 7 days
+2. Fix the not working bug in Overall Status History/Device History/Power Chart

+ 10 - 0
cust_data/changes_list.txt

@@ -0,0 +1,10 @@
+V0.0.2
+
+New and improved:
+1. Add NTP time sync
+2. Add Changes log in firmware upgrade page
+3. Add power data manual export in web and auto export in smtp mail
+
+Fixes and enhancements:
+1. Increase the data quantity in power history query, upper limit 7 days
+2. Fix the not working bug in Overall Status History/Device History/Power Chart

+ 1 - 1
pro/config/cfg.h

@@ -2,7 +2,7 @@
 #define __CONFIG_Hx__
 
 
-#define VERSION                                 "V0.0.1"
+#define VERSION                                 "V0.0.2"
 #define PROD_ID                                 0
 #define PROD_TYPE                               1
 

+ 55 - 55
pro/src/app.c

@@ -125,7 +125,7 @@ static int upgrade_proc(char *path, Modbus_Manger *mm)
     //broad upgrade file
     upgrade_send(mm, 1, fbuf.buf, fbuf.dlen);
     for(i=0; i<dm->brdMax; i++) {
-        if(dm->pPowerBoard[i].product_saddr==0) {
+        if(dm->pCtrlBoard[i].product_saddr==0) {
             continue;
         }
 
@@ -241,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 < ptotal->brdMax; i++)
+        for (size_t i = 0; i <= _globalDeviceManager->brdMax; i++)
         {
-            if (_globalDeviceManager->pPowerBoard[i].product_saddr == 0)
+            if (_globalDeviceManager->pCtrlBoard[i].product_saddr == 0)
             {
                 continue;
             }
             ret=g_switch_get_all_out_info(&_globalDeviceManager->_globalRelaySampManger,
-                                        _globalDeviceManager->pPowerBoard[i].product_type,
-                                        _globalDeviceManager->pPowerBoard[i].product_saddr,
-                                        _globalDeviceManager->pPowerBoard[i].product_number,
-                                        _globalDeviceManager->pPowerBoard[i]._PowerInfo,
-                                            _globalDeviceManager->pPowerBoard[i]._PowerWarninginfo);
+                                        _globalDeviceManager->pCtrlBoard[i].product_type,
+                                        _globalDeviceManager->pCtrlBoard[i].product_saddr,
+                                        _globalDeviceManager->pCtrlBoard[i].product_number,
+                                        _globalDeviceManager->pCtrlBoard[i]._PowerInfo,
+                                            _globalDeviceManager->pCtrlBoard[i]._PowerWarninginfo);
             if (ret<0)
             {
                 usleep(usleepTime);
                 ret = g_switch_get_all_out_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                _globalDeviceManager->pPowerBoard[i].product_type,
-                                                _globalDeviceManager->pPowerBoard[i].product_saddr,
-                                                _globalDeviceManager->pPowerBoard[i].product_number,
-                                                _globalDeviceManager->pPowerBoard[i]._PowerInfo,
-                                                _globalDeviceManager->pPowerBoard[i]._PowerWarninginfo);
+                                                _globalDeviceManager->pCtrlBoard[i].product_type,
+                                                _globalDeviceManager->pCtrlBoard[i].product_saddr,
+                                                _globalDeviceManager->pCtrlBoard[i].product_number,
+                                                _globalDeviceManager->pCtrlBoard[i]._PowerInfo,
+                                                _globalDeviceManager->pCtrlBoard[i]._PowerWarninginfo);
             }
             // 输入总信息(三相)(后续应同步所有类型)
-            if (_globalDeviceManager->pPowerBoard[i].product_saddr != 0 && _globalDeviceManager->pPowerBoard[i].product_type == TREE_AC_TYPE)
+            if (_globalDeviceManager->pCtrlBoard[i].product_saddr != 0 && _globalDeviceManager->pCtrlBoard[i].product_type == TREE_AC_TYPE)
             {
                 usleep(usleepTime);
                 ret = g_switch_get_t_ac_in_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                _globalDeviceManager->pPowerBoard[i].product_saddr, // saadr
-                                                _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo,
-                                                _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerWarninginfo);
+                                                _globalDeviceManager->pCtrlBoard[i].product_saddr, // saadr
+                                                _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo,
+                                                _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerWarninginfo);
                 if (ret < 0)
                 {
                     usleep(usleepTime);
                     ret = g_switch_get_t_ac_in_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                    _globalDeviceManager->pPowerBoard[i].product_saddr, // saadr
-                                                    _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo,
-                                                    _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerWarninginfo);
+                                                    _globalDeviceManager->pCtrlBoard[i].product_saddr, // saadr
+                                                    _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo,
+                                                    _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerWarninginfo);
                 }
                 ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
-                                                         _globalDeviceManager->pPowerBoard[i].product_saddr,
-                                                         _globalDeviceManager->pPowerBoard[i]._globalPowerInManger.product_MissingPH);
+                                                         _globalDeviceManager->pCtrlBoard[i].product_saddr,
+                                                         _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger.product_MissingPH);
                 if (ret < 0)
                 {
                     usleep(usleepTime);
                     ret = g_switch_set_t_ac_alarm_missing_ph(&_globalDeviceManager->_globalRelaySampManger,
-                                                             _globalDeviceManager->pPowerBoard[i].product_saddr,
-                                                             _globalDeviceManager->pPowerBoard[i]._globalPowerInManger.product_MissingPH);
+                                                             _globalDeviceManager->pCtrlBoard[i].product_saddr,
+                                                             _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger.product_MissingPH);
                 }
             }            
             //usleep(usleepTime);
@@ -325,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->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._PowerInfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
+            &_globalDeviceManager->pCtrlBoard[(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)
@@ -345,7 +345,7 @@ static void* power_thread(void* arg)
             }
             
             memcpy(&_globalPowerWarningInfo,
-            &_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
+            &_globalDeviceManager->pCtrlBoard[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
             sizeof(PowerWarningInfo));
             switch (_globalPowerMangerTemp->product_ch_type)
             {
@@ -439,8 +439,8 @@ static void* power_thread(void* arg)
                             {
                                 continue;
                             }
-                            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));
+                            memcpy(&_pTreeACPowerMangerTemp->_PowerInfo, &_globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerInfo));
+                            memcpy(&_pTreeACPowerMangerTemp->_PowerWarninginfo, &_globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1], sizeof(PowerWarningInfo));
                             gettimeofday(&tv, NULL);
                             // t = localtime(&tv.tv_sec);
                             // 计算总三项总数据
@@ -680,11 +680,11 @@ static void* power_thread(void* arg)
                         {
                             continue;
                         }                        
-                        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));
+                        memcpy(&_pTreeACPowerMangerTemp->_PowerInfo,&_globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerInfo[_pTreeACPowerMangerTemp->product_ch_addr - 1],sizeof(PowerInfo)); 
+                        memcpy(&_globalTACWarningInfo,&_globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._PowerWarninginfo[_pTreeACPowerMangerTemp->product_ch_addr - 1],sizeof(PowerWarningInfo));
                         gettimeofday(&tv, NULL);
                         // t = localtime(&tv.tv_sec);
-                         _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;
+                         _globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq=_globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq> _pTreeACPowerMangerTemp->_PowerInfo.freq?_globalDeviceManager->pCtrlBoard[_pTreeACPowerMangerTemp->product_saddr]._globalPowerInManger._PowerInfo[k].freq:_pTreeACPowerMangerTemp->_PowerInfo.freq;
                         //计算总三项总数据
                         _globalPowerInfo._power_info.voltage = _pTreeACPowerMangerTemp->_PowerInfo.voltage;
                         _globalPowerInfo._power_info.current += _pTreeACPowerMangerTemp->_PowerInfo.current;
@@ -866,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->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH,sizeof(nMissPH));   
-                    nMissPH=_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[0];
+                    //memcpy(nMissPH,_globalDeviceManager->pCtrlBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH,sizeof(nMissPH));   
+                    nMissPH=_globalDeviceManager->pCtrlBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[0];
                     if (_globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossA!= (bool)nMissPH)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossA = (bool)nMissPH;
@@ -877,7 +877,7 @@ static void* power_thread(void* arg)
                             dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 0);
                     }
                     _globalPowerWarningInfo.w_phase_lossA=nMissPH;                        
-                    nMissPH=_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[1];
+                    nMissPH=_globalDeviceManager->pCtrlBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[1];
                     if (_globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossB != (bool)nMissPH)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossB = (bool)nMissPH;
@@ -886,7 +886,7 @@ static void* power_thread(void* arg)
                             dev_Alarm_send_message(_globalDeviceManager, _globalPowerMangerTemp, 1);
                     }
                     _globalPowerWarningInfo.w_phase_lossB=nMissPH;                        
-                    nMissPH=_globalDeviceManager->pPowerBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[2];
+                    nMissPH=_globalDeviceManager->pCtrlBoard[(int)_globalPowerMangerTemp->product_saddr]._globalPowerInManger.product_MissingPH[2];
                     if (_globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossC != (bool)nMissPH)
                     {
                         _globalPowerMangerTemp->_PowerWarninginfo.w_phase_lossC = (bool)nMissPH;
@@ -990,24 +990,24 @@ static void* power_thread(void* arg)
                 memset(&_pTreeACPowerMangerTemp->_PowerInfo, 0, sizeof(_globalPowerInfo._power_info));
                 for (size_t i = 0; i < ptotal->brdMax; i++)
                 {
-                    if (_globalDeviceManager->pPowerBoard[i].product_saddr == 0 || _globalDeviceManager->pPowerBoard[i].product_type != TREE_AC_TYPE)
+                    if (_globalDeviceManager->pCtrlBoard[i].product_saddr == 0 || _globalDeviceManager->pCtrlBoard[i].product_type != TREE_AC_TYPE)
                     {
                         continue;
                     }
                     // 如果存在电压则置位如果都没有电压则保持0
-                    if (_globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage != 0)
+                    if (_globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage != 0)
                     {
-                        _pTreeACPowerMangerTemp->_PowerInfo.voltage = _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage;
+                        _pTreeACPowerMangerTemp->_PowerInfo.voltage = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].voltage;
                     }
-                    _pTreeACPowerMangerTemp->_PowerInfo.current += _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].current;
-                    _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->pPowerBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
+                    _pTreeACPowerMangerTemp->_PowerInfo.current += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].current;
+                    _pTreeACPowerMangerTemp->_PowerInfo.power += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].power;
                    // if (_globalTotalPowerInfo._power_info.freq != 0)
                   //  {
                      //   _pTreeACPowerMangerTemp->_PowerInfo.freq = _globalTotalPowerInfo._power_info.freq;
                    // }
-                     _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;
+                     _pTreeACPowerMangerTemp->_PowerInfo.freq =  _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].freq> _pTreeACPowerMangerTemp->_PowerInfo.freq? _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].freq: _pTreeACPowerMangerTemp->_PowerInfo.freq;
+                    _pTreeACPowerMangerTemp->_PowerInfo.consumption += _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].consumption;
+                    _pTreeACPowerMangerTemp->_PowerInfo.factor = _globalDeviceManager->pCtrlBoard[i]._globalPowerInManger._PowerInfo[nTreeACType].factor;
                 }
                 if (_globalDeviceManager->triphasic_mmap)
                 {
@@ -1418,20 +1418,20 @@ static void* breaker_thread(void *arg)
             {
                 for (size_t i = 0; i <= _globalDeviceManager->brdMax; i++)
                 {
-                    if (_globalDeviceManager->pPowerBoard[i].product_saddr != temp->breaker_gather_addr)
+                    if (_globalDeviceManager->pCtrlBoard[i].product_saddr != temp->breaker_gather_addr)
                     {
                         continue;
                     }
                     ret = g_switch_get_breaker_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                    _globalDeviceManager->pPowerBoard[i].product_type,
-                                                    _globalDeviceManager->pPowerBoard[i].product_saddr,
+                                                    _globalDeviceManager->pCtrlBoard[i].product_type,
+                                                    _globalDeviceManager->pCtrlBoard[i].product_saddr,
                                                     temp);
                     if (ret < 0)
                     {
                         usleep(usleepTime);
                         ret = g_switch_get_breaker_info(&_globalDeviceManager->_globalRelaySampManger,
-                                                        _globalDeviceManager->pPowerBoard[i].product_type,
-                                                        _globalDeviceManager->pPowerBoard[i].product_saddr,
+                                                        _globalDeviceManager->pCtrlBoard[i].product_type,
+                                                        _globalDeviceManager->pCtrlBoard[i].product_saddr,
                                                         temp);
                     }
                     break;
@@ -1730,7 +1730,7 @@ static void* shm_thread(void *arg)
                         // GlobalPowerInfo _globalPowerInfo;
                         // memset(&_globalPowerInfo._power_info, 0, sizeof(PowerInfo));
                         // memcpy(&_globalPowerInfo._power_info,
-                        //        &_globalDeviceManager->pPowerBoard[0]._PowerInfo[0],
+                        //        &_globalDeviceManager->pCtrlBoard[0]._PowerInfo[0],
                         //        sizeof(PowerInfo));
                         _globalDeviceManager->g_shm_Data->fV = _globalPowerMangerTemp->_PowerInfo.voltage;
                         _globalDeviceManager->g_shm_Data->fA = _globalPowerMangerTemp->_PowerInfo.current;
@@ -2004,9 +2004,9 @@ 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);
+    _globalDeviceManager->pCtrlBoard = malloc(sizeof(GlobalPowerCtrlBoard)*(_globalDeviceManager->brdMax+1));
+    if(!_globalDeviceManager->pCtrlBoard) {
+        log_e("pCtrlBoard malloc failed, brdMax: %d\n", _globalDeviceManager->brdMax);
         return -1 ;
     }
     g_switch_init(_globalDeviceManager->brdMax);
@@ -2100,9 +2100,9 @@ int app_init(void)
     {
         __globalDeviceManage.nTreeACLshow=0;
         _globalDeviceManager->useSlaveCount++;
-        _globalDeviceManager->pPowerBoard[0].product_saddr = 0;
-        _globalDeviceManager->pPowerBoard[0].product_number = -1;
-        _globalDeviceManager->pPowerBoard[0].product_type = -1;
+        _globalDeviceManager->pCtrlBoard[0].product_saddr = 0;
+        _globalDeviceManager->pCtrlBoard[0].product_number = -1;
+        _globalDeviceManager->pCtrlBoard[0].product_type = -1;
         
         // 填充三相表
         for (size_t TreeACindex = 0; TreeACindex < 3; TreeACindex++)

+ 6 - 3
pro/src/appweb_handle.c

@@ -5530,11 +5530,11 @@ static void equipmentMintenance(void *conn)
 
         for (size_t i = 0; i < ptotal->brdMax; i++)
         {
-            if (dm->pPowerBoard[i].product_saddr <= 0)
+            if (dm->pCtrlBoard[i].product_saddr <= 0)
             {
                 continue;
             }
-            g_switch_get_all_reset(&dm->_globalRelaySampManger,dm->pPowerBoard[i].product_type,__globalDeviceManage.pPowerBoard[i].product_saddr);
+            g_switch_get_all_reset(&dm->_globalRelaySampManger,dm->pCtrlBoard[i].product_type,__globalDeviceManage.pCtrlBoard[i].product_saddr);
         }
         sys_set_factory();
     }
@@ -5596,6 +5596,9 @@ static void equipmentMintenance(void *conn)
           log_i("Database SQLite VACCUM!\n");
           ack_str=ctrl_sts_ack_to_json();
     }
+    else if (strcmp(_Over_equipment_mintenance.type,"listRtHisQuery") == 0) {
+        ack_str = upgrade_to_json();
+    }
 
     cJSON_Delete(cjson);
     http_reply(conn, 200, ack_str);
@@ -5672,7 +5675,7 @@ static int webSetCallback(void)
     httpAddCallback("/pdu/serviceManagement", serviceManagement);//服务管理
     httpAddCallback("/pdu/serviceManagementUpload", serviceManagementUpload);//服务管理
     httpAddCallback("/pdu/system", systemManagent);//用户管理
-    httpAddCallback("/pdu/equipmentMintenance", equipmentMintenance);//设备重启 
+    httpAddCallback("/pdu/equipmentMintenance", equipmentMintenance);//设备维护 
     httpAddCallback("/pdu/equipmentMintenanceUpload", equipmentMintenanceUpload); //固件升级
     httpAddCallback("/pdu/equipmentMintenanceExport", equipmentMintenanceExport);
     

+ 23 - 0
pro/src/common.c

@@ -553,6 +553,29 @@ char* getUserNamebyToken(char* Token)
 }
 
 
+typedef struct {
+    uint16_t     year;
+    uint8_t      mon;
+    uint8_t      day;
+    uint8_t      hour;
+    uint8_t      min;
+    uint8_t      sec;
+}datetime_t;
+int get_bldtime(char *buf, int len)
+{
+    char mon[10]={0};
+    datetime_t dt;
+    char *mon2[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
+
+    sscanf(__DATE__, "%s %hhu %hu", mon,&dt.day,&dt.year);
+    sscanf(__TIME__, "%hhu:%hhu:%hhu", &dt.hour,&dt.min,&dt.sec);
+    for(int i=0;i<12;i++) {
+        if(strcmp(mon, mon2[i])==0) {
+            dt.mon = i+1; break;
+        }
+    }
+    return snprintf(buf,len,"%04hu/%02hhu/%02hhu %02hhu:%02hhu:%02hhu",dt.year,dt.mon,dt.day,dt.hour,dt.min,dt.sec);
+}
 
 
 int is_process_running(const char *process_name)

+ 3 - 1
pro/src/common.h

@@ -40,6 +40,7 @@
 #define SNMP_MIB_NAME       "pduMIB"
 #define INI_FILE_NAME       "smartPDU.ini"
 #define INI_FILE_BAK_NAME   "smartPDU_bak.ini"
+#define CHANGES_NAME        "changes.txt"
 
 //高配表头串口定义-----------------------------------------------
 //控制板通信串口
@@ -1039,7 +1040,7 @@ typedef struct
     pthread_t           snmp_agent_thread;//SNMP代理线程
     bool                _ReloadChm_flag; //重新加载端口数据
     int                  brdMax;
-    GlobalPowerCtrlBoard *pPowerBoard; //所有控制板
+    GlobalPowerCtrlBoard *pCtrlBoard; //所有控制板
     LowConf*            _RS485LowConfData;//485Data
       //传感器
     struct modbus_slave_read_reg g_modebus_read;
@@ -1097,6 +1098,7 @@ time_t mktime0(void);
 time_t mktime2(struct tm *t, int zone);
 int get_time_str(char *s, int len, time_t t);
 int get_time_str2(char *s, int len, time_t t);
+int get_bldtime(char *buf, int len);
 void print_time(char *s, struct tm *tm);
 void print_utc(char *s, time_t t);
 

+ 44 - 3
pro/src/json_handle.c

@@ -1346,7 +1346,7 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
 
                         cJSON_AddStringToObject(data_filed, "productName", temp);
 
-                         sprintf(temp, "%d", dl.slave[i].addr);
+                        sprintf(temp, "%d", dl.slave[i].addr);
                         cJSON_AddStringToObject(data_filed, "productId", temp);
                         //cJSON_AddNumberToObject(data_filed, "productId", dl.slave[i].addr);
 
@@ -1355,15 +1355,18 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
                         cJSON_AddStringToObject(data_filed, "productModel", _over_back_sts_info->product_type);
 
                         if(dl.slave[i].addr==0) {
-                            cJSON_AddStringToObject(data_filed, "productVersion", _over_back_sts_info->productVersion);
+                            cJSON_AddStringToObject(data_filed, "productVersion", VERSION);
                             cJSON_AddStringToObject(data_filed, "systemTime", _over_back_sts_info->product_sysTime);
+
+                            get_bldtime(temp, sizeof(temp));
+                            cJSON_AddStringToObject(data_filed, "firmwareDate", temp);
                             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);
                         }
                         else {
                             cJSON_AddStringToObject(data_filed, "productVersion", "");
-                            cJSON_AddStringToObject(data_filed, "systemTime", "");
+                            cJSON_AddStringToObject(data_filed, "firmwareDate", "");
                             cJSON_AddStringToObject(data_filed, "runTime", "");
                             cJSON_AddStringToObject(data_filed, "IPadress", "");
                             cJSON_AddStringToObject(data_filed, "MACadress", "");
@@ -1410,6 +1413,44 @@ char* over_product_list_info_to_json(GlobalDeviceManager *dm, _OverBackStsInfo*
     return str;
 }
 
+char* upgrade_to_json(void)
+{
+    char* str = NULL;
+    char *p,temp[200];
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+
+    // 创建 JSON 对象
+    cJSON* root = cJSON_CreateObject(); 
+    // 添加基本键值对
+    cJSON_AddNumberToObject(root, "code", 200);       
+    cJSON* array = cJSON_CreateArray();
+    cJSON* data_field = cJSON_CreateObject();
+
+    sprintf(temp,"%d",dm->_globalDevInfo.product.id);
+    cJSON_AddStringToObject(data_field,"productId",temp);
+    cJSON_AddStringToObject(data_field,"productVersion",VERSION);
+
+    get_bldtime(temp, sizeof(temp));
+    cJSON_AddStringToObject(data_field,"versionDate",temp);
+    
+    sys_get_path(temp, CHANGES_NAME);
+    p = file_load2(temp);
+    if(p) {
+        cJSON_AddStringToObject(data_field,"updateContent", p);
+        free(p);
+    }
+
+    cJSON_AddItemToArray(array, data_field);
+    cJSON_AddItemToObject(root, "data", array);
+
+    cJSON_AddStringToObject(root, "msg", language_Operation_Tips_Success[__globalDeviceManage._globalDevInfo.product.language]);    
+    //转换
+    str = cJSON_Print(root);    
+    //释放资源
+    cJSON_Delete(root);
+    return str;
+}
+
 char* vendor_info_to_json(GlobalDeviceInfo *dev)
 {
     char* str = NULL;

+ 1 - 0
pro/src/json_handle.h

@@ -653,5 +653,6 @@ char* over_breaker_product_list_info_to_json(GlobalDeviceManager *dm,_OverBackBr
 char* over_all_breaker_chn_info_to_json(_OverBreakerChnInfo* _over_all_breaker_back_info,int nWSType);
 char* over_all_breaker_switch_info_to_json(_OverBreakerSwitchInfo* _over_all_breaker_switch_info,int nWSType);
 char *breaker_status_ack_to_json(GlobalDeviceManager *gm,int slave);
+char* upgrade_to_json(void);
 #endif
 

+ 12 - 12
pro/src/switch_ctrl.c

@@ -556,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.pPowerBoard[saddr]._PowerInfo;
+    PowerInfo *pPowerInfo = __globalDeviceManage.pCtrlBoard[saddr]._PowerInfo;
     if (pPowerInfo != NULL)
     {
         memset(data_temp1, 0, sizeof(data_temp1));
-        for (size_t i = 0; i < __globalDeviceManage.pPowerBoard[saddr].product_number; i++)
+        for (size_t i = 0; i < __globalDeviceManage.pCtrlBoard[saddr].product_number; i++)
         {
             data_temp1[i] = pPowerInfo[i].status;
         }
-        ret = g_modbus_write_x_reg(manger, saddr, offset, __globalDeviceManage.pPowerBoard[saddr].product_number, data_temp1);
+        ret = g_modbus_write_x_reg(manger, saddr, offset, __globalDeviceManage.pCtrlBoard[saddr].product_number, data_temp1);
         if (ret < 0)
         {
             return ret;
@@ -2239,14 +2239,14 @@ int g_switch_set_t_ac_reset(void* manger,int saddr)
     {
         return ret;        
     }
-    if (__globalDeviceManage.pPowerBoard[saddr].product_saddr<=0)
+    if (__globalDeviceManage.pCtrlBoard[saddr].product_saddr<=0)
     {
         return -1;
     }    
-    PowerInfo* pPowerInfo= __globalDeviceManage.pPowerBoard[saddr]._PowerInfo;
+    PowerInfo* pPowerInfo= __globalDeviceManage.pCtrlBoard[saddr]._PowerInfo;
     if (pPowerInfo!=NULL)
     {
-        for (size_t i = 0; i < __globalDeviceManage.pPowerBoard[saddr].product_number; i++)
+        for (size_t i = 0; i < __globalDeviceManage.pCtrlBoard[saddr].product_number; i++)
         {
             memset(data_temp1, 0, sizeof(data_temp1));
             offset = _SWITCH_T_AC_OUT_ENABLE + i;
@@ -2557,9 +2557,9 @@ int ResetChmData(int nCtrlType)
         if (ret == 0)
         {
             _globalDeviceManager->useSlaveCount ++ ;
-            _globalDeviceManager->pPowerBoard[i].product_saddr = i;
-            _globalDeviceManager->pPowerBoard[i].product_number = nMaxChn;
-            _globalDeviceManager->pPowerBoard[i].product_type = type;
+            _globalDeviceManager->pCtrlBoard[i].product_saddr = i;
+            _globalDeviceManager->pCtrlBoard[i].product_number = nMaxChn;
+            _globalDeviceManager->pCtrlBoard[i].product_type = type;
             switch (type)
             {
             case AC_SINGLE_S_TYPE: // AC单相小电流 8路继电器
@@ -3127,9 +3127,9 @@ int ResetChmData(int nCtrlType)
             }
         }else
         {
-            _globalDeviceManager->pPowerBoard[i].product_saddr = 0;
-            _globalDeviceManager->pPowerBoard[i].product_number = 0;
-            _globalDeviceManager->pPowerBoard[i].product_type = 0;
+            _globalDeviceManager->pCtrlBoard[i].product_saddr = 0;
+            _globalDeviceManager->pCtrlBoard[i].product_number = 0;
+            _globalDeviceManager->pCtrlBoard[i].product_type = 0;
         }
     }
     char strLog[200]={"MODBUS"};

+ 3 - 2
pub

@@ -16,8 +16,8 @@
 #PRJS="PRJ_RELEASE_AC_I3_O3"
 #PRJS="PRJ_STSC_I3_O3"
 #PRJS="PRJ_SG_I3_O3"
-#PRJS="PRJ_TEST"
-PRJS="PRJ_TEST_AC_I1_O1"
+PRJS="PRJ_TEST"
+#PRJS="PRJ_TEST_AC_I1_O1"
 #PRJS="PRJ_TEST_AC_I3_O1"
 
 #PRJS="PRJ_USASL_AC_I3_O1 PRJ_USASL_AC_I3_O3"
@@ -66,6 +66,7 @@ function do_copy()
     mkdir -p $curdir/output/t113i/root/run/app/cert
 
     cp -f $custdir/cert/server.* $curdir/output/t113i/root/run/app/cert/
+    cp -f $custdir/changes.txt  $curdir/output/t113i/root/run/app/
     cp -f $custdir/db/pdu_dat.db $curdir/output/t113i/root/run/app/pdu_dat.db
     
     if [ "$1" = "PRJ_XIAN_AC_I1_O1_P4" ]; then