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

📄 alamc.c.bak

📁 完成数据的采集
💻 BAK
字号:
#include"ytep.h"
#include"ytepfunction.h"
#define  yt_Alamc_file
const	 Int16U ALA_TEM_TAB[]={0,4,8, 13,17,21,  26,30,34,  39,43,47, 52,56,60};
#define	BELL_ON					GPIOA->ODR|=1
#define	BELL_OFF				GPIOA->ODR&=0XFFFE
///////////////////////////////////////// 

Int16U	ALAMCREGISTER(Int8U *HourMin,Int16U *p,TIM *pos,Int16U *point)
{
	Int16U  a,b,c,d;
	static Int16U a_buf=0;
	a=*point|*(point+1)|*(point+2)|*(point+3);
	b=a^a_buf;
	if(b==0)return 0;		//
	a_buf=a;
	for(c=0;c<12;++c)	
	{
		if((a&1)&&(b&1))
			{
				d=2*c;
				pos->Tem[d+1]=pos->Tem[d];
				pos->Tem[d]=*(p+ALA_TEM_TAB[c]);
				pos->HOUR[d+1]=pos->HOUR[d];
				pos->HOUR[d]=*(HourMin+1);
				pos->MIN[d+1]=pos->MIN[d];
				pos->MIN[d]=*HourMin;
				
				pos->Flag[d+1]=pos->Flag[d];
				pos->Flag[d]=C_TEST_ALA_HIS;
			}
			a>>=1,b>>=1;
	}	
	return 0;
}


//////////////////////////////////////////

Int16U    Fast_TEM_NOTS(Int16U n,Int16U m,Int16U *p,SensorRF *pos)
{
	static  Int16U FTimer,sw;
  static  Int8U	 FNOT[15][10];
  static  Boolean B_start=0;
  Int16U  a,b,c; 
  if(B_start==0)
  {
    B_start=1;
    for(a=0;a<15;++a)
    FNOT[a][0]=FNOT[a][1]=FNOT[a][2]=FNOT[a][3]=FNOT[a][4]=FNOT[a][5]=FNOT[a][6]=FNOT[a][7]=FNOT[a][8]=FNOT[a][9]=0xff;
  }
	m=m*6;
	if(++FTimer>=m)FTimer=0,sw=15;//温升过快的时间单位值/10
	if(sw>15)sw=15;
        if(sw!=0)
        {
          m=sw-1; 
          for(a=0;a<9;++a)
          FNOT[m][9-a]=FNOT[m][8-a]; 
	 }
        switch (sw)	
        {
        case 15: 
        	pos+=4;  
          FNOT[m][0]=pos->ATem; 
         break; 
         case 14: 
         	pos+=4;   
          FNOT[m][0]=pos->BTem; 
         break;   
         case 13:
         	pos+=4;    
          FNOT[m][0]=pos->CTem; 
         break;  
         
        case 12:   
          FNOT[m][0]=pos->ATem; 
         break; 
         case 11:   
          FNOT[m][0]=pos->BTem; 
         break;   
         case 10:   
          FNOT[m][0]=pos->CTem; 
         break;  
          case 9: 
          ++pos;
          FNOT[m][0]=pos->ATem; 
         break; 
          case 8: 
          ++pos;
          FNOT[m][0]=pos->BTem; 
         break; 
          case 7: 
          ++pos;
          FNOT[m][0]=pos->CTem; 
         break; 
          case 6: 
          pos+=2;
          FNOT[m][0]=pos->ATem; 
         break; 
          case 5: 
          pos+=2;
          FNOT[m][0]=pos->BTem; 
         break; 
          case 4: 
          pos+=2;
          FNOT[m][0]=pos->CTem; 
         break; 
          case 3: 
          pos+=3;
          FNOT[m][0]=pos->ATem; 
         break; 
          case 2: 
          pos+=3;
          FNOT[m][0]=pos->BTem; 
         break; 
          case 1: 
          pos+=3;
          FNOT[m][0]=pos->CTem; 
         break; 
        case 0:
         return 0;
         return 0;
         }    
          b=c=0XFF;
          for(a=0;a<10;++a)
          {
            if(b==0xff)b=FNOT[m][a];
            if(c==0xff)c=FNOT[m][a];
            if(b<=FNOT[m][a]&&FNOT[m][a]<0xfe)b=FNOT[m][a];
            if(c>=FNOT[m][a]&&FNOT[m][a]<0xfe)c=FNOT[m][a];
          }
           a=12-sw;
           a=1<<a;
           if(b!=0xff&&c!=0xff)
           {
             if(b>(c+n))*p|=a;
            else       *p&=~a;
           }
           sw--;
           return 0;

	  
		
}
/////////////////////////////////////////
void	AlamcFault(SensorRF *A,_yt *B,Int8U *HOUR_MIN)//5s
{
  static  Int8U ala[5][16];
  SensorRF *A_BUF;   
	Int16U i,m,Q,V,S;
	
  A_BUF=A;
	for(i=0;i<C_RF_MAX_COUNT;++i)
	{		 
		if(i==0||i==3||i==6||i==9||i==12)Q=A->ATem+C_TEMP_JUST,V=A->AVol;
		if(i==1||i==4||i==7||i==10||i==13)Q=A->BTem+C_TEMP_JUST,V=A->BVol;
		if(i==2||i==5||i==8||i==11||i==14)Q=A->CTem+C_TEMP_JUST,V=A->CVol,A++;	
		if(V>=21)S=28;
		else		 S=10;	
		if(Q>=(B->_TemFault+C_TEMP_JUST)&&Q<0xfe)
                {
                  if(ala[0][i]<C_RF_MAX_COUNT)ala[0][i]++;
                }
		else			
		if(ala[0][i]>0)
                {
                  if(ala[0][i]>10)ala[0][i]=10;
                  --ala[0][i];//事件故障
                }
		if(Q>=(B->_TemOver+C_TEMP_JUST)&&Q<0xfe)
                {
                  if(ala[1][i]<C_RF_MAX_COUNT)ala[1][i]++;
                }
		else			
		if(ala[1][i]>0)//预防故障
		{
                  if(ala[1][i]>10)ala[1][i]=10;
                  --ala[1][i];
                }
		 
		if(Q>=(B->_TemRoom+A_Tembuf)&&Q<0xfe)
                {
                  if(ala[2][i]<C_RF_MAX_COUNT)ala[2][i]++;
                }
		else    
		if(ala[2][i]>0)//与室温相差过大
		{
                  if(ala[2][i]>10)ala[2][i]=10;
                  --ala[2][i];
                }
                
                
		if(V<=S&&(Q<0xff))
                {
                  if(ala[3][i]<C_RF_MAX_COUNT)ala[3][i]++; 
                }
		else    
		if(ala[3][i]>0)//电压过低
	        {
                  if(ala[3][i]>10)ala[3][i]=10;
                  --ala[3][i];
                }

	 }
	for(i=0,m=1;i<C_RF_MAX_COUNT;++i)
	{
		if(ala[0][i]>=C_RF_MAX_COUNT)
		{
				B->_AlamcFaultTem|=m;
		}
		else if(ala[0][i]==0)B->_AlamcFaultTem&=(~m);
		if(ala[1][i]>=C_RF_MAX_COUNT)
		{
			B->_AlamcOverTem|=m;
		}
		else if(ala[1][i]==0)B->_AlamcOverTem&=(~m);
		if(ala[2][i]>=C_RF_MAX_COUNT)
		{
			B->_AlamcRoomTem|=m;
		}
		else if(ala[2][i]==0)B->_AlamcRoomTem&=(~m);
			
		if(ala[3][i]>=C_RF_MAX_COUNT)
		{
			B->_AlamcLowVol|=m;
		}
		else if(ala[3][i]==0)B->_AlamcLowVol&=(~m);
	
		m<<=1;
	}
	if((B->_AlamcFaultTem!=0)||(B->_AlamcOverTem!=0)||(B->_AlamcRoomTem!=0)||(B->_AlamcLowVol!=0)||(B->_AlamcFastTem!=0))
	Set_bit(GPIOC->ODR,0);
	else	Clr_bit(GPIOC->ODR,0);
  if(B->_AlamcFaultTem!=0)Set_bit(GPIOC->ODR,10);
  else                    Clr_bit(GPIOC->ODR,10);
  if((B->_AlamcOverTem!=0)||(B->_AlamcRoomTem!=0)||(B->_AlamcFastTem!=0))Set_bit(GPIOA->ODR,2);
  else										Clr_bit(GPIOA->ODR,2);
} 
//////////////////////////////////////
//NOTS_Store(&History,_yt._Xorder,gSampleFlag,&_yt.sensor);
Int16U		NOTS_Store(NOTS *DATA,Int8U Flag,SensorRF *pos)
{
	static Int32U	TimerCount=288-60;
	Int16U  a,b,c;
	if(Flag==C_Refurbish)//重分配了时钟
		{
			TimerCount=0;
			DATA->SpaceCount=0;
			(++DATA)->SpaceCount=0;	
			(++DATA)->SpaceCount=0;
			(++DATA)->SpaceCount=0; 
		}
	  b=288;//288  sec时间60 ;//
	  
	 if(Flag==C_Refurbish||++TimerCount>=b)
	 	{
	 		TimerCount=0;
	 		for(c=0;c<5;c++)
	 		{
	 		if(DATA->SpaceCount>=(C_STORE_BAR-1))
	 			{
	 				for(a=0;a<(C_STORE_BAR-1);a++)
	 				{
	 					b=DATA->ATemper[a+1];
	 					DATA->ATemper[a]=b;
	 				  b=DATA->BTemper[a+1];
	 					DATA->BTemper[a]=b;
	 					b=DATA->CTemper[a+1];
	 					DATA->CTemper[a]=b;
	 			  }
	 			  b=pos->ATem;
	 				DATA->ATemper[C_STORE_BAR-1]=b;
	 				b=pos->BTem;
	 				DATA->BTemper[C_STORE_BAR-1]=b;
	 				b=pos->CTem;
	 				DATA->CTemper[C_STORE_BAR-1]=b;
	 				
	 			}else
	 				{
	 					for(a=0;a<C_RF_MAX_COUNT;a++)
	 					{
	 					 	DATA->ATemper[DATA->SpaceCount]=pos->ATem;
	 		 				DATA->BTemper[DATA->SpaceCount]=pos->BTem;
	 		 				DATA->CTemper[DATA->SpaceCount]=pos->CTem; 		 
	 		      }
	 		      DATA->SpaceCount++; 
	 	      }
	 		DATA->B_DISP=1;
	 		DATA++,pos++;
	   } 
	 	}
	 	return 0;
}
/////////////////////////
void CHK_BELL(Int16U *pos,Int16U a)
{
	 static Int16U  B_COUNTER;
	 if(a==0)
	 {
	 	BELL_OFF;
	 }else
{
	 if(*pos!=0)
	{
		if(++B_COUNTER>=50)B_COUNTER=0;
		if(B_COUNTER==0||B_COUNTER==2||B_COUNTER==4||B_COUNTER==6)BELL_ON;
		else						BELL_OFF;
	}
	else
	if(*++pos!=0)
	{
		if(++B_COUNTER>=50)B_COUNTER=0;
		if(B_COUNTER==0)BELL_ON;
		else						BELL_OFF;
	}
	else
	if(*++pos!=0)
	{
		if(++B_COUNTER>=50)B_COUNTER=0;
		if(B_COUNTER==0||B_COUNTER==2)BELL_ON;
		else						BELL_OFF;
	}
	else
	if(*++pos!=0)
	{
		if(++B_COUNTER>=50)B_COUNTER=0;
		if(B_COUNTER==0||B_COUNTER==2||B_COUNTER==4)BELL_ON;
		else						BELL_OFF;
	}
	else
	BELL_OFF;
}
}






⌨️ 快捷键说明

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