⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 historydata.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			     nLocSum--;
				 continue; //跟打开文件失败同样处理
			 }
		  }
		 
         FILE *ftpA;
         float nLocAnaval;
         if ((ftpA=fopen(nFileName,"rb"))!=NULL) 
		 {  			
			time_t nTime;
            long nLen=sizeof(time_t)+sizeof(float);
			BOOL bInsteadFile=FALSE;
			fseek(ftpA,-nLen,2);
			fread(&nTime,sizeof(time_t),1,ftpA);
			while((nLocSum>0)||(nCount>=nSum))
			{              
			     nCurTime=nFindTime[nSum-nLocSum];
                 if (InTimeRange(nTime,nCurTime,nTimeInterval))
				 {
                    fread(&nLocAnaval,sizeof(float),1,ftpA);
			        nTempFloat+=nLocAnaval;
			        nPerRangePointCount++;
					if (fseek(ftpA,-(nLen*2),1))
					{
				  	  bInsteadFile=TRUE;
					  break;
					}
					if (fread(&nTime,sizeof(time_t),1,ftpA)!=1) break;
				 }
		         else
				 {  
			        if (nPerRangePointCount>0)
					{
				       *(pCurAnaval+nCount)=nTempFloat/nPerRangePointCount; 
				       *(pTime+nCount)=nFindTime[nSum-nLocSum];
				       nCount++;
					   nLocSum--;		
           	           if (nCount>=nSum) break;
					}
					else if (nTime<nCurTime)
					{
					  while(nTime<nCurTime) 
					  {
                         if (InTimeRange(nTime,nCurTime,nTimeInterval)) break;
					     nLocSum--;
						 if (nLocSum==0) break;
					     nCurTime=nFindTime[nSum-nLocSum];	 
					  }
					}
					else if (nTime>nCurTime)
					{
						while(nTime>nCurTime)
						{	
						   if (InTimeRange(nTime,nCurTime,nTimeInterval)) break;
                       	   if (fseek(ftpA,-(nLen+sizeof(time_t)),1))
						   {
				  	         bInsteadFile=TRUE;
					         break;
						   } 
						   fread(&nTime,sizeof(time_t),1,ftpA);
						}
						if (bInsteadFile) break;
					}
					nPerRangePointCount=0;
				    nTempFloat=0;  
				 };              
			}
			if (bInsteadFile) 
			{   
			      nLocTime=nTime;
			      if (nPerRangePointCount>0)
				  {
				    *(pCurAnaval+nCount)=nTempFloat/nPerRangePointCount; 
				    *(pTime+nCount)=nFindTime[nSum-nLocSum];
				    nCount++;	
				    nLocSum--;
				    nPerRangePointCount=0;
				    nTempFloat=0.0;
				  } 
			      nLocSum-=(nLocTime.GetHour()*3600+nLocTime.GetMinute()*60+nLocTime.GetSecond())/nTimeInterval;
			      nLocSum--;	  							 			 
			  }            
	       fclose(ftpA);
		 }
	     else  //打开文件失败
		 {            			  
 			  if (nPerRangePointCount>0)
			  {
				   *(pCurAnaval+nCount)=nTempFloat/nPerRangePointCount; 
				   *(pTime+nCount)=nFindTime[nSum-nLocSum];
				   nCount++;	
				   nLocSum--;
				   nPerRangePointCount=0;
				   nTempFloat=0.0;
			  } 
			  nLocTime=nFindTime[nSum-nLocSum];
			  nLocSum-=(nLocTime.GetHour()*3600+nLocTime.GetMinute()*60+nLocTime.GetSecond())/nTimeInterval;
			  nLocSum--;
		 }  	     
       }	 
  return nCount;
}

short CHistoryData::GetDataOrderTime(short nNo,long nTime, float *nAnaval)
{
  short nPos;
  CHistData *nHistData;
  time_t    *nCurTime;
  if (nNo>=m_nPointCount) return RESULT_ERROR;
  short nHistNum;
  nHistNum=m_nHistNum;
  float nPreAnaval,nNextAnaval;
  BOOL  nPreHaved,nNextHaved;
  nPreHaved=FALSE;
  nNextHaved=FALSE;
  short m_nTimer=3;
  for(int i=0;i<nHistNum;i++)
  { 
	short nCurPos=m_nHistPosBegin+i;
    nCurPos%=MAX_MEMORY_HISTNUM;
    nCurTime=m_pHistTime+nCurPos;
	if (*nCurTime==nTime)
	{   
	  nHistData=m_pHistData[nNo]+nCurPos;
      *nAnaval=nHistData->nCurAnaval;
	  break;
	}
	else if ((fabs(*nCurTime-nTime)<(m_nTimer/2.0))&&(*nCurTime<nTime))
	{
       nHistData=m_pHistData[nNo]+nCurPos;
       nPreAnaval=nHistData->nCurAnaval;
	   nPreHaved=TRUE;
	}
    else if ((fabs(*nCurTime-nTime)<(m_nTimer/2.0))&&(*nCurTime>nTime))
	{
       nHistData=m_pHistData[nNo]+nCurPos;
       nNextAnaval=nHistData->nCurAnaval;
	   nNextHaved=TRUE;
	}
  }
  if (i==nHistNum)
  {
	if ((nPreHaved)&&(nNextHaved)) *nAnaval=(nPreAnaval+nNextAnaval)/2;
	else if (nPreHaved)  *nAnaval=nPreAnaval;
	else if (nNextHaved) *nAnaval=nNextAnaval;
	else return RESULT_ERROR;
  }
  return RESULT_NORMAL;  
}

 

BOOL CHistoryData::InTimeRange(time_t nTime, time_t nCenterTime, short nRange)
{
  if (nRange%2==0)
  {
     if (nTime>=(nCenterTime-nRange/2)&&(nTime<=(nCenterTime+nRange/2-1)))
	 {
        return TRUE;
	 }
     else
	 {
	    return FALSE;
	 }
  }
  else
  {
     if (nTime>=(nCenterTime-nRange/2)&&(nTime<=(nCenterTime+nRange/2)))
	 {
        return TRUE;
	 }
     else
	 {
	    return FALSE;
	 }
  }   
}

short CHistoryData::GetCurHistData(short nNo, float *nCurAnaval, long *nTime)
{
  CHistData *nHistData;
  time_t    *nCurTime;
  if (nNo>=m_nPointCount) return RESULT_ERROR;
  short nHistNum;
  nHistNum=m_nHistNum;
  short nCurPos=(m_nHistPosBegin+nHistNum-1+MAX_MEMORY_HISTNUM)%MAX_MEMORY_HISTNUM;
  nHistData=m_pHistData[nNo]+nCurPos;
  nCurTime=m_pHistTime+nCurPos;
  *(nCurAnaval)=nHistData->nCurAnaval;
  *nTime=*nCurTime;
  return RESULT_NORMAL;  
}

void CHistoryData::GetName(short nNo, CString *nStr)
{
	CHistProperty *pHistProperty;
	if((nNo<0)||(nNo>=m_nPointCount)) return;
	Code_Name_Tab *code_name_tab;
    pHistProperty=m_pHistProperty+nNo;
    code_name_tab=code_name_tab1+pHistProperty->nFdcsNo*(MAX_CHNUM+1)+pHistProperty->nCh;
	nStr->Format("%s",code_name_tab->psName);
}

void CHistoryData::GetProjSignalUnit(short nNo, CString *nStr)
{
   	CHistProperty *pHistProperty;
	if((nNo<0)||(nNo>=m_nPointCount)) return;
    pHistProperty=m_pHistProperty+nNo;
    aps=aps1+pHistProperty->nFdcsNo*(MAX_CHNUM+1)+pHistProperty->nCh;
	nStr->Format("%s",aps->sysUnit);
}

void CHistoryData::DrawCurveMenu(CDC *pDC,CWnd *pWnd,CRect nRect, CButton *pButton,DWORD *pButtonID)
{
   CRect nRectButton;
   short nWidth=nRect.Width()/7;
   short nHeight=nRect.Height();
   pDC->SelectStockObject(NULL_PEN);
   CBrush *brush=new CBrush(RGB(200,200,200));
   CBrush *oldbrush=pDC->SelectObject(brush);
   pDC->Rectangle(&nRect);
   pDC->SelectObject(oldbrush);
   delete brush;
   if (pButton->GetSafeHwnd()!=NULL) return;
   nRectButton.SetRect(nWidth,nRect.top+3,2*nWidth,nRect.bottom-3);
   pButton->Create("实时曲线",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_BORDER,nRectButton,pWnd,*pButtonID);
   nRectButton.SetRect(3*nWidth,nRect.top+3,4*nWidth,nRect.bottom-3);
   (pButton+1)->Create("历史曲线",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_BORDER,nRectButton,pWnd,*(pButtonID+1));
   nRectButton.SetRect(5*nWidth,nRect.top+3,6*nWidth,nRect.bottom-3);
   (pButton+2)->Create("退出",BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE|WS_BORDER,nRectButton,pWnd,*(pButtonID+2));

}

void CHistoryData::GetAddChByCode(char *pCode,short *nAdd,short *nCh)
{
 BOOL bFind=FALSE;
 for(int i=0;i<(MAX_ADNUM+3);i++)
	 for(int j=0;j<(MAX_CHNUM+1);j++)
 {
    code_name_tab=code_name_tab1+i*(MAX_CHNUM+1)+j;
	if(strcmp(pCode,code_name_tab->psCode)==0)
	{
		/*
       *nAdd=code_name_tab->add;
	   *nCh=code_name_tab->ch;
	   */
		*nAdd=i;
		*nCh=j;
		bFind=TRUE;
	   break;
	}
	if (bFind) break;
 }
}



short CHistoryData::GetCode(char *pCode, short nAdd, short nCh)
{
 if ((nAdd>0)&&(nAdd<MAX_ADNUM+3)&&(nCh>0)&&(nCh<=MAX_CHNUM))
 {
    code_name_tab=code_name_tab1+nAdd*(MAX_CHNUM+1)+nCh;
//	strcpy(pCode,"");
    strcpy(pCode,code_name_tab->psCode);
	return RESULT_NORMAL;
 }
 return RESULT_ERROR;
}

void CHistoryData::ReadFileHistData()
{
  CHistData     *pHistoryData;
  CHistProperty *pHistProperty;
  time_t        *pHistTime;
  time_t        nBeginTime,nEndTime,nCurTime;
  float         nCurAnaval;
  short nCurDay;
  CString nFileName;
  CTime nTime;
   char nCode[16];
//  m_nFileCritSect.Lock();
 
   nTime=CTime::GetCurrentTime();
   nBeginTime=nTime.GetTime()-30*60;
   nEndTime  =nTime.GetTime();
   BOOL bFirstGet=TRUE;
   
   for(int i=0;i<m_nPointCount;i++)
   { 
       pHistProperty=m_pHistProperty+i;  
	   short nCurPos=0;
	//******* Get Point code begin***********
       if (GetCode(nCode,pHistProperty->nFdcsNo,pHistProperty->nCh)==RESULT_ERROR)continue;
	//********Get point code end*********
	   nFileName.Format(".\\History\\%4s\\D%02d.his",nCode,nTime.GetDay());
	   CFile  nFile;
	   CFileStatus  nStatus;
          if (nFile.GetStatus(nFileName,nStatus))
		  {
  	         if(nStatus.m_mtime.GetMonth()!= nTime.GetMonth())
			 {
                continue;
			 }
		  }
       FILE *ftpA;
	   if ((ftpA=fopen(nFileName,"rb"))==NULL) continue;
	   //while
	   fseek(ftpA,-8,2);
	   BOOL bFind=FALSE,bFirstRead=TRUE;
	   while (1)
	   {
		   if (fread(&nCurTime,sizeof(time_t),1,ftpA)!=1)break;
		   if (nCurTime>nBeginTime) 
		   {
			   if (fseek(ftpA,-12,1)) 
			   {
				   fseek(ftpA,0,0);
				   bFind=TRUE;
				   break;
			   }
		   }
		   else if(nCurTime==nBeginTime)
		   {
			   bFind=TRUE;
			   fseek(ftpA,-4,1);
			   break;
		   }
		   else
		   {
			 if (bFirstRead) break;
             fseek(ftpA,4,1);
			 bFind=TRUE;
			 break;
		   }
		   bFirstRead=FALSE;
	   }	
	   if (!bFind) 
	   {
		   fclose(ftpA);
		   continue;
	   }

 	   while(1)
	   {
	      if (fread(&nCurTime,sizeof(time_t),1,ftpA)!=1)break;
	      if ((nCurTime>=nBeginTime)&&(nCurTime<=nEndTime))
		  {
		    pHistoryData=m_pHistData[i]+nCurPos;
			if(bFirstGet)
			{
				pHistTime=m_pHistTime+nCurPos;
				*pHistTime=nCurTime;
			}
		    fread(&nCurAnaval,sizeof(float),1,ftpA);
            pHistoryData->nCurAnaval=nCurAnaval;
		    nCurPos++;
			if (nCurPos>=(MAX_MEMORY_HISTNUM-2)) break;            
		  }
	      else
		  {
 		     break;        
		  }
	   }
	   fclose(ftpA);
	   if (bFirstGet)
	   {
		  m_nHistNum=nCurPos;
		  m_nHistCurPos=nCurPos;
		  m_nHistSavePos=nCurPos;
		  bFirstGet=FALSE;
	   }
   }
}


void CHistoryData::CreateHistoryPath()
{
   CHistProperty *pHistProperty;
   char  nCurrentPath[128],nSubPath[128];
   ::GetCurrentDirectory(127,nCurrentPath);
   strcat(nCurrentPath,"\\alarm");
   CreateFilePath(nCurrentPath);
   ::GetCurrentDirectory(127,nCurrentPath);
   strcat(nCurrentPath,"\\history");
   CreateFilePath(nCurrentPath);
   char nCode[8];
   for(int i=0;i<m_nPointCount;i++)
   { 
       pHistProperty=m_pHistProperty+i;  
	   short nCurPos=0;
	//******* Get Point code begin***********
       if (GetCode(nCode,pHistProperty->nFdcsNo,pHistProperty->nCh)==RESULT_ERROR)continue;
	   sprintf(nSubPath,"%s\\%s",nCurrentPath,nCode);
	   if (CreateFilePath(nSubPath)==RESULT_ERROR) continue; //this file no esit;
	//********Get point code end*********
   }
}


int CHistoryData::CreateFilePath(char *nFile)
{
  	WIN32_FIND_DATA nFindData;
	HANDLE hFindFile;
	if ((hFindFile=::FindFirstFile(nFile,&nFindData))!=INVALID_HANDLE_VALUE)
	{
		::FindNextFile(hFindFile,&nFindData);
		::FindClose(hFindFile);
		return RESULT_NORMAL;
	}
	else
	{
		SECURITY_ATTRIBUTES  nSecurityAttributes;
		char nTempPath[64];
		short nError=::CreateDirectory(nFile,NULL);
	//	short nError=::CreateSubdirectory(nFile,&nSecurityAttributes);
	//	 nError=GetLastError();
		//::CreateDirectoryEx(nTempPath,nFile,&nSecurityAttributes);
	    CFile nFile;
		return RESULT_ERROR;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -