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

📄 fdcsmanage.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// FdcsManage.cpp : implementation file
//

#include "stdafx.h"
#include "math.h"
//#include "OperView.h"
#include "FdcsManage.h"
#include "FdcsData.h"
#include "Global.h"
#include "DataType.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFdcsManage

IMPLEMENT_DYNCREATE(CFdcsManage, CCmdTarget)

CFdcsManage::CFdcsManage()
{
}

CFdcsManage::~CFdcsManage()
{
}
BEGIN_MESSAGE_MAP(CFdcsManage, CCmdTarget)
	//{{AFX_MSG_MAP(CFdcsManage)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFdcsManage message handlers
short firstGet=1;

short CFdcsManage::DataGet(short Fast_Type,CWnd *pWnd)
{
	CFdcsData fdcs;
	short i,chi,m;
	short chNum=15,Loc_Return=0,Loc_ThreeError_Flag=0;
	float tval,fval;
	short tst,err;
	APS *compensateAps;
    CTime nTime;
	for(short adr=1;adr<MAX_ADNUM;adr++)
	{		
		if ((Vapor[adr]!=1))  continue;
		if (Fast_Point_Adr[adr]!=Fast_Type)  continue;
		m=(adr+Glob_CurError_Adr)%MAX_ADNUM;
		if (Glob_Error_Three[m]>=3)
		{   
			Loc_ThreeError_Flag=1;
			if ((m!=Glob_CurError_Adr)&&(Loc_Return==0)) 
			{
				Loc_Return=m;
				Glob_CurError_Adr=m;
			}
		}
        if (Glob_Error_Count[adr]!=0) 
		{   
			Glob_Error_Count[adr]--;
			continue;
		}
		if(poll[adr] == 42) chNum=15;
		else				chNum=20;
		switch(poll[adr])
		{
	  	  case 9:
		  case 42:
			err=fdcs.Fdcs_Coll(adr);	
			aps = aps1 + adr*(MAX_CHNUM+1)+1;
		
			if (err<0) // error! data is invalidate,set a err single
			{
			   if (aps->last_err<0) for( i=1;i<=chNum;i++)
				{
					aps=aps1 + adr*(MAX_CHNUM+1)+i;
					aps->st=err-25;
				}		 		 
			//*******lxl add in 2000-5-8 begin check error return*******
			   	aps->last_err = err;
		    	if ((err==-2)||(err==-1))
				{
                  Glob_Error_Two[adr]++; 
 			      if (Glob_Error_Two[adr]>=3)  Glob_Error_Count[adr]=10;				  
				}
			    else if ((err==-3))
				{
                   Glob_Error_Three[adr]++; 
				   if (Glob_Error_Three[adr]>=3)
				   {
					   Glob_Error_Count[adr]=50;
					   
				   }
				}	
				continue;
			}
			aps->last_err = err;
			Glob_Error_Two[adr]=0;
			Glob_Error_Three[adr]=0;
			//******lxl add in 2000-5-8 end*************		
		
			for( chi=1;chi<=chNum;chi++)
			{
				aps = aps1 + adr*(MAX_CHNUM+1)+chi;	
				if (aps->psNo<=0) continue;
				tval= fdcs.getAnaVal(chi);
				tst=fdcs.getSt(chi);
				if(tst>=0){
				  switch(aps->Compensate_wayIndex)
				  {
				    case 0://0  直馈
					    break;
				    case 1://1  通道
						compensateAps = aps1+aps->Compensate_FdcsNo*(MAX_CHNUM+1)+aps->Compensate_ChannelNo;
						tval+=compensateAps->anaVal;
						
					    break;
				    case 2://2  迁移
					    tval+=aps->Compensate_Tempchange;
					
					  break;
				    default:
					  break;
				  }
				}
	  
				if(tst>=0)
				{
					if(firstGet) 
						aps->anaVal = tval;
					else
					{   
						if (aps->Speed_Type==0)
						{
						  fval= tval/2+aps->anaVal/2;					   
						  aps->anaVal = fval;
						}
						else											  
						  aps->anaVal = tval;
					}        
				  if (strstr(m_sPointCode,aps->psCode)==NULL) 
				  {
				    if((aps->anaVal>aps->alrmLl)&&(aps->anaVal<aps->alrmHl)) tst=0;
	  			    else tst=1; 
					if(aps->anaVal>aps->sysTop){tst=1;}
				    if(aps->anaVal<aps->sysBot){aps->anaVal=aps->sysBot;tst=1;}
				  }
				  else
				  {
                    if((aps->anaVal>fabs(aps->alrmLl))&&(aps->anaVal<fabs(aps->alrmHl))) tst=0;
	  			    else tst=1; 

				  }
											 
				}


 				if ((aps->AlarmGroup>=0)&&(aps->AlarmGroup<10)) //如果该测点没有设置为报警,测取消报警处理
                {
 				 switch(tst)
				 {				  
				  case 1:
				  case 2:
   				  case 3:
			      case 4:
				   	aps	= aps1 + adr*(MAX_CHNUM+1)+chi;
					nTime=CTime::GetCurrentTime();
					
  					if((aps->st==0))
					{//为出现越限报警	
						aps->alrmtime=nTime.GetTime();				 					 
						pWnd->SendMessage(NEW_ALARM_MESSAGE,adr*100+chi,0);						 
					
					}	 
					else if (aps->st>0)
					{              
					   nTime=CTime::GetCurrentTime();
					   if (nTime.GetTime()>=(aps->alrmtime+120))  
					   {
					      pWnd->SendMessage(MAX_ALARM_MESSAGE,adr*100+chi,0);
						  aps->alrmtime=nTime.GetTime();
					   }					   					   
					}
					else
					{
						tst=0;
					}
					aps->st=tst;
					break;			 
				  case 0:
			   	  case -1: 
				  default:
 				    aps	= aps1 + adr*(MAX_CHNUM+1)+chi;	
					if (aps->st>0)  //  报警
					{						
					  pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
					}
					aps->st = tst;
					break;
				 } //switch st
				}
				else
				{
				  if (tst>=0) tst=0;
				}							
			   aps->st	= tst;
			}// chi=1 to chNum
			 
			break;

		case 22:
		case 23:
        case 25:
		  if((Station==0)||(Station==2))
		  {
			err=fdcs.Fdcs_RdSt(adr);
		 	if(err<0)
			{
				for( i=1;i<=chNum;i++)
				{
					aps = aps1 + adr*(MAX_CHNUM+1)+i;
					aps->st	= -1;
				}
 				//*******lxl add in 2000-5-8 begin check error return*******
			   	if ((err==-2)||(err==-1))
				{
                  Glob_Error_Two[adr]++; 
			      if (Glob_Error_Two[adr]>=3) // after 210*3 second 
				  {
                    Glob_Error_Count[adr]=10;
                  }				  
				}
			    else if ((err==-3))
				{
                   Glob_Error_Three[adr]++; 
 				   if (Glob_Error_Three[adr]>=3)
				   {
					   Glob_Error_Count[adr]=50;
			
					   
				   }
				 }
			//******lxl add in 2000-5-8 end*************
				//return  
		    	continue; //lxl change return to continue in 2000-4-8
			}
		    Glob_Error_Two[adr]=0;
			Glob_Error_Three[adr]=0;
			// lxl add in 2000-5-8 begin		    
			// lxl add in 2000-5-8 end 
			for(i=1;i<=chNum;i++)
			{
				aps = aps1 + adr*(MAX_CHNUM+1)+i;
				aps->swVal = fdcs.getSwVal(i);			 
			}
			 
		}
		break;		  
	  default:
		 break;
    }
  }
  if (Loc_ThreeError_Flag==0)
  {
	 // if (Glob_CurError_Adr>0) Loc_Return=100;
	  Glob_CurError_Adr=0;
  }

    //计算温差报警
  short nMaxAddCh[4],nMinAddCh[4];
  float nMaxData[4],nMinData[4];
  for(i=0;i<4;i++)
  {
	nMaxData[i]=0;nMinData[i]=1000;
	nMaxAddCh[i]=nMinAddCh[i]=0;
  }
  for(adr=1;adr<MAX_ADNUM;adr++)
  {
    if(Vapor[adr]!=1)  continue;
	if (Fast_Point_Adr[adr]!=Fast_Type)  continue;
	for( chi=1;chi<=chNum;chi++)
	{ 
	   aps = aps1 + adr*(MAX_CHNUM+1)+chi;
	   if (aps->psNo<=0) continue;
	   switch(aps->AlarmGroup)
	   {
		 case 10:
			if (aps->anaVal>=nMaxData[0]) 
			{
			   nMaxData[0]=aps->anaVal;
			   nMaxAddCh[0]=adr*100+chi;
			}
            if (aps->anaVal<=nMinData[0]) 
			{
			   nMinData[0]=aps->anaVal;
			   nMinAddCh[0]=adr*100+chi;
			}
			break;
		 case 11:
            if (aps->anaVal>=nMaxData[1]) 
			{
			   nMaxData[1]=aps->anaVal;
			   nMaxAddCh[1]=adr*100+chi;
			}
            if (aps->anaVal<=nMinData[1]) 
			{
			   nMinData[1]=aps->anaVal;
			   nMinAddCh[1]=adr*100+chi;
			}
			break;
		  default:
			break;
	   }
	}
  }   
  if ((nMaxData[0]-nMinData[0])>=0.06)
  {
	 aps = aps1 + nMaxAddCh[0]/100*(MAX_CHNUM+1)+nMaxAddCh[0]%100;
	 aps->st=1;
     aps = aps1 + nMinAddCh[0]/100*(MAX_CHNUM+1)+nMinAddCh[0]%100;
	 aps->st=1;
  }
     
  if ((nMaxData[1]-nMinData[1])>=0.06)
  {
	 aps = aps1 + nMaxAddCh[1]/100*(MAX_CHNUM+1)+nMaxAddCh[1]%100;
	 aps->st=1;
     aps = aps1 + nMinAddCh[1]/100*(MAX_CHNUM+1)+nMinAddCh[1]%100;
	 aps->st=1;
  }

  for(adr=1;adr<MAX_ADNUM;adr++)
  {
	if(Vapor[adr]!=1)  continue;
	for( chi=1;chi<=chNum;chi++)
	{
	   aps = aps1 + adr*(MAX_CHNUM+1)+chi;
	   if (aps->psNo<=0) continue;
	   if (aps->AlarmGroup<10) continue;	 
	   	       switch(aps->st)
				{				  				   
				  case 1:
				   	aps	= aps1 + adr*(MAX_CHNUM+1)+chi;
					nTime=CTime::GetCurrentTime();
					
  					if(aps->oldst!=1)
					{//为出现越限报警	
						aps->alrmtime=nTime.GetTime();				 					 
						pWnd->SendMessage(NEW_ALARM_MESSAGE,adr*100+chi,0);						 					
					}	 			
					aps->oldst=aps->st;
					break;			 			 
				  default:  //只要出现过报警
 				    aps	= aps1 + adr*(MAX_CHNUM+1)+chi;	
					if (aps->oldst==1)  //  报警
					{						
					  pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
					}
					aps->oldst=aps->st;
					break;
				}
	}
  }
  return Loc_Return;
}




void	CFdcsManage::DataProcess(short adr){
	

}



void	CFdcsManage::SwitchProcess(short adr){

}


void	CFdcsManage::TimingData(void)
{
    CTime tt;
	short  mon,day,hour,minu,sec;

	tt=CTime::GetCurrentTime();
	mon  = tt.GetMonth();	//1-12
	day  = tt.GetDay();		//1-31
	hour = tt.GetHour();	//0-23
	minu = tt.GetMinute();	//0-59
	sec  = tt.GetSecond();	//0-59

    firstGet=0;
	
    if(((minu==0)||(minu==30))&&(sec<10))
	{ 
/*	  Glob_MinuBegin_SaveFalg%=2;
	  if (Glob_MinuBegin_SaveFalg==0)
	  {
	    Glob_MinuBegin_SaveFalg=1; 
	  }
      if((hour==0)&&(minu==0)&&(sec<10))
	  {	
		Glob_DayBegin_SaveFalg%=2;
		if (Glob_DayBegin_SaveFalg==0) 
		{
           Glob_DayBegin_SaveFalg=1;
		   AlrmPos=0;      AlrmSavePos=0;	 dwAlrmFile=0;
		   SwAlrmPos=0;    SwAlrmSavePos=0;
	//	   pAlrmHead=pAlrmEnd=analrm1;
	//	   pSwAlrmHead=pSwAlrmEnd=swalrm1; 
		   dwAlrmFile=0; 
		}
	  }*/
	} 	   
   
	if(((minu%3)==2)&&(sec<3))//定时存储历史数据
    {
	   SaveMinuData( mon, day, hour, minu);
	}

	if(((minu==29)||(minu==59))&&(sec>53))//定时存储历史数据
    {
/*		Glob_MinuBegin_SaveFalg=2;
		Glob_MinuEnd_SaveFalg%=2;
	    if (Glob_MinuEnd_SaveFalg==0)
		{  
		   SaveMinuData( mon, day, hour, minu);
		   Glob_MinuEnd_SaveFalg=1;
		}
*/	}

	if(((minu%6)==1)&&(sec<3)){//定时存储报警数据
		SaveTotalData( mon );
	}	 
    
	if(((minu%15)==3)&&(sec<3)){//定时存储报警数据
		SaveDayData(mon,day);
	}	
    
	if ((hour==23)&&(minu==59)&&(sec>45))
	{
	} 
	
}

void	CFdcsManage::SaveMinuData(short mon,short day,short hour,short minu)
{
}

void	CFdcsManage::SaveDayData(short mon,short day)
{
}

void	CFdcsManage::SaveAlrmData(short mon,short day)
{  
 
}

⌨️ 快捷键说明

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