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

📄 fdcsmanage.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
void	CFdcsManage::SaveSwAlrmData(short mon,short day)
{
 
}



void	CFdcsManage::SaveTotalData(short mon)
{
    char  fileName[30];
    FILE *ftpA; 
	sprintf(fileName,".\\table\\total%02d.txt",mon);
    if((ftpA=fopen(fileName,"w"))==NULL)  return;
	//Struc_Calc_Data *Glob_Calc_Data;
   //	Struc_Calc_Aps  *Glob_Calc_aps;
	for(int i=0;i<Glob_Calc_Count;i++)
	{   
		Glob_Calc_Data=Glob_Calc_Data1+i;
		if (Glob_Calc_Data->Calc_Type==1)
		{            		    
		   aps=aps1+Glob_Calc_Data->Own_add*(MAX_CHNUM+1)+Glob_Calc_Data->Own_ch;
		   fprintf(ftpA,"%s %f  ",aps->psCode,aps->anaVal);
        }
	}
	fclose(ftpA);
}

void	CFdcsManage::ReadTotalData(short mon)
{
	char  fileName[30];
    FILE *ftpA; 
	sprintf(fileName,".\\table\\total%02d.txt",mon);
    if((ftpA=fopen(fileName,"r"))==NULL)  return;
	char Local_Code[MAX_CALC_COUNT][8];
	float Local_Float[MAX_CALC_COUNT];
    int j=0;
	//Struc_Calc_Data *Glob_Calc_Data;
   //	Struc_Calc_Aps  *Glob_Calc_aps;
	while((fscanf(ftpA, "%s %f",Local_Code[j],&Local_Float[j])!=EOF)&&(j<MAX_CALC_COUNT)) j++;		 
	fclose(ftpA);
	if (j==0) return;
	for(int i=0;i<Glob_Calc_Count;i++)
	{    
        Glob_Calc_Data=Glob_Calc_Data1+i;
		if (Glob_Calc_Data->Calc_Type==1)
		{    			 
			aps=aps1+(Glob_Calc_Data->Own_add)*(MAX_CHNUM+1)+Glob_Calc_Data->Own_ch;
			for(int k=0;k<j;k++)
			{   
				if (strcmp(aps->psCode,Local_Code[k])==0)
				{  
                   aps->anaVal=Local_Float[k];
				   break;
				}
			}
		}
	}
}





void CFdcsManage::Def_Find_AlrmPoint(int Local_Alrm_Head, int Local_Alrm_Foot, time_t Local_Alrm_Time, int *Local_Alrm_Return)
{
   

}

short CFdcsManage::FastPoint_DataGet(short Fast_Type)
{
  return 0;
}

void CFdcsManage::GetDataFromBoiler(short adr,short ch)
{
	
        short err,tst;
		CFdcsData fdcs;
		float tval,fval;
	    APS *aps,*compensateAps;
        if (Glob_Error_Count[adr]!=0)
		{
            Glob_Error_Count[adr]--;
		}
		else
		{	
		 switch(poll[adr])
		{
	      case 9:
		  case 42:
            err=fdcs.Fdcs_Coll(adr);	
			aps = aps1 + adr*(MAX_CHNUM+1)+ch;
		    if (err<0) // lxl change in 200-5-8
			{
			   if (aps->last_err<0) aps->st=err-25;
			   	aps->last_err=err;
		    	if ((err==-2)||(err==-1))
				{
                  Glob_Error_Two[adr]++; 
			       
				  Glob_Error_Count[adr]=(Glob_Error_Two[adr]*3);				   
			       if (Glob_Error_Two[adr]==30) // after  435*3 second
				   {                      
                      Glob_Error_Count[adr]=0;
                      Glob_Error_Two[adr]=0;
					}				  
				}
			    else if ((err==-3))
				{
                   Glob_Error_Three[adr]++; 
			       
				   Glob_Error_Count[adr]=(Glob_Error_Three[adr])*3;
			       if (Glob_Error_Three[adr]==4) //  1+2+3+4=10 after 
				   {              
                     Glob_Error_Count[adr]=0;                 
				   }
			       if (Glob_Error_Three[adr]==10) //1+2+3+4+5+6=21
				   {
                     
                     Glob_Error_Count[adr]=0;
                     Glob_Error_Three[adr]=0;
				   }
				}		 
			}
			else
			{
		 	aps->last_err = err;
			Glob_Error_Two[adr]=0;
			Glob_Error_Three[adr]=0;
			//******lxl add in 2000-5-8 end*************					 		 	
			tval= fdcs.getAnaVal(ch);
			if(tval>aps->sysTop){  tval = aps->sysTop;  aps->st = -1;}
			if(tval<aps->sysBot){  tval = aps->sysBot;	aps->st = -1;}			 
			tst=fdcs.getSt(ch);
			    switch(aps->Compensate_wayIndex)
				{ 
			       case 1:
                        compensateAps = aps1+aps->Compensate_FdcsNo*(MAX_CHNUM+1)+aps->Compensate_ChannelNo;
						tval+=compensateAps->anaVal;
						if((tval>aps->alrmLl)&&(tval<=aps->alrmHl)) tst=0;

				    case 2://2  迁移
					    tval+=aps->Compensate_Tempchange;
						if((tval>aps->alrmLl)&&(tval<=aps->alrmHl)) tst=0;
						else tst=1;
					  break;
				    default:
					  break;
				  }

				if(tst>=0)
				{
					if(firstGet) 
					{						 
						aps->anaVal = tval;
					}
					else
					{
						fval = tval/2+aps->anaVal/2;					 
						aps->anaVal = fval;
					}
				}

				if(tst>0)
				  if((aps->anaVal>=aps->alrmLl)&&(aps->anaVal<=aps->alrmHl)) tst=0;              
				 
			aps->st	= tst;
			}
			break;
          default:
			  break;
		 }
		}
  	
}

 

BOOL CFdcsManage::DataGetGenerator(CWnd *pWnd)  
{
	//当有二级报警时返回false
	//采集发电机温度
	BOOL bResult=true;
   	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 ((Generator[adr]!=1))  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;	
				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
					{   
						
						aps->anaVal = tval;
					} 
				  if((aps->anaVal>aps->alrmLl)&&(aps->anaVal<aps->alrmHl)) tst=0;
	  			  else tst=1;
				  if(aps->anaVal>aps->sysTop){ aps->anaVal=aps->sysTop;tst=-1;}
				  if(aps->anaVal<aps->sysBot){ aps->anaVal=aps->sysBot;tst=-1;}
		
				  switch(aps->AlarmGroup)
				  {
			 	   case 7:
					  if (aps->anaVal>=90) 
					  {
						  tst=2;
						  bResult=false;  //二级越限
					  }
					 break;
			  	   case 8:                      
					 break;
				   case 9:
					  if (aps->anaVal>=85)
					  {
						  tst=2;
						  bResult=false;  //二级越限
					  }
					  break;
				   default:
				 	  break;
				  }
				} 			
		  	    aps->st	= tst;
			}// chi=1 to chNum			 
			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]=200;
	nMaxAddCh[i]=nMinAddCh[i]=0;
  }
 
  for(adr=1;adr<MAX_ADNUM;adr++)
  {
	if ((Generator[adr]!=1))  continue;
	for( chi=1;chi<=chNum;chi++)
	{
	   aps = aps1 + adr*(MAX_CHNUM+1)+chi;
	   if (aps->st<0) continue;
	   if (aps->psNo<=0) continue;
	   switch(aps->AlarmGroup)
	   {
		 case 7:
			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 8:   
		 
			break;
		  case 9:
			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;
	   }
	}
  }
  float nOneData[]={8,8};  //一级温差
  float nTwoData[]={14,12};//二级温差

  for(i=0;i<2;i++)
  {
    if ((nMaxData[i]-nMinData[i])>=nOneData[i])
	{
	   aps = aps1 + nMaxAddCh[i]/100*(MAX_CHNUM+1)+nMaxAddCh[i]%100;
	   aps->st=1;
       aps = aps1 + nMinAddCh[i]/100*(MAX_CHNUM+1)+nMinAddCh[i]%100;
	   aps->st=1;
	}
    if ((nMaxData[i]-nMinData[i])>=nTwoData[i])
	{
	   aps = aps1 + nMaxAddCh[i]/100*(MAX_CHNUM+1)+nMaxAddCh[i]%100;
	   aps->st=2;
       aps = aps1 + nMinAddCh[i]/100*(MAX_CHNUM+1)+nMinAddCh[i]%100;
	   aps->st=2;
	   bResult=false;  //二级报警
	}
  }
  //线圈温度报警
  for(adr=1;adr<MAX_ADNUM;adr++)
  {
	if ((Generator[adr]!=1))  continue;
	for( chi=1;chi<=chNum;chi++)
	{
	   aps = aps1 + adr*(MAX_CHNUM+1)+chi;
	   if (aps->psNo<=0) continue;
	   if ((aps->AlarmGroup!=7)) continue;
	   	       switch(aps->st)
				{				  				   
				  case 2:
				   	aps	= aps1 + adr*(MAX_CHNUM+1)+chi;
					nTime=CTime::GetCurrentTime();
					
  					if(aps->oldst!=2)
					{//为出现越限报警	
						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==2)  //  报警
					{						
					  pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
					}
					aps->oldst=aps->st;
					break;
				}//switch st
	}
  }
  //出水温度报警;
  for(adr=1;adr<MAX_ADNUM;adr++)
  {
    if ((Generator[adr]!=1))  continue;
	for( chi=1;chi<=chNum;chi++)
	{
	   aps = aps1 + adr*(MAX_CHNUM+1)+chi;
	   if (aps->psNo<=0) continue;
	   if ((aps->AlarmGroup!=9)) continue;
	   	       switch(aps->st)
				{				  				   
				  case 2:
				   	aps	= aps1 + adr*(MAX_CHNUM+1)+chi;
					nTime=CTime::GetCurrentTime();
					
  					if(aps->oldst!=2)
					{//为出现越限报警	
						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==2)  //  报警
					{						
					  pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
					}
					aps->oldst=aps->st;
					break;
				}//switch st
	}
  }

  return bResult;
}

⌨️ 快捷键说明

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