📄 alamc.c.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 + -