📄 getleak.c
字号:
#include "config.h"
/********************************************************************/
// 获取漏率子函数
/********************************************************************/
#define SamNum 120
uint32 PaiXuTmp;
void PaiXu(void)
{
uint8 i,j;
for (i=0;i<SamNum;i++)
{
for(j=0;j<(SamNum-i-1);j++)
{
if (LkValueDyn[j]>LkValueDyn[j+1])
{
PaiXuTmp=LkValueDyn[j+1];
LkValueDyn[j+1]=LkValueDyn[j];
LkValueDyn[j]=PaiXuTmp;
}
}
}
}
void GetLeak()
{
uint32 i;
uint8 Exp;
float TmpLeakBase;
/*DisTm0;
DisTm1;
DisUart0;
DisUart1;
DisI2C0;*/
//Hc595Dat=Hc595Dat&0xbf;
//MSPI_SendData(Hc595Dat);
//ad_ch_scal(0,0);
//j=0;
//if ((IO0PIN & AD_READY)==0)
{
//if (AmpDly1==0)
{
Cs7705(0);
LeakValueRd1=ad_result();
Cs7705(1);
//LeakValueRd=LeakValueRd>>2;
}
//LeakValueRd=LeakValueRd1;
//ad_ch_scal(0,0);
}
if(FPGAEn==1)
{
LeakValueRd=LeakValueRd1;
}
else
{
LeakValueRd=LeakValueRd1*128;
}
if ((StartLkDec!=0)||(SysStd==StandBy))
{
switch(StartLkDec)
{
case 1:
if ((AmpDly1==0)&&(VDly3==0)) //LEAKVALUERD2 FLOAT
switch(AmpRate)
{
case 1:
if (SysStd==StandBy)
LeakValueRd2=(LeakValueRd)/4000*33*33*33*2940;
else
LeakValueRd2=(LeakValueRd)*33*33*33*2940;
break;
case 2:
if (SysStd==StandBy)
LeakValueRd2=(LeakValueRd)/4000*33*33*2940;
else
LeakValueRd2=(LeakValueRd)*33*33*2940;
break;
case 3:
if (SysStd==StandBy)
LeakValueRd2=(LeakValueRd)/4000*33*2940;
else
LeakValueRd2=(LeakValueRd)*33*2940;
break;
case 4:
if (SysStd==StandBy)
LeakValueRd2=(LeakValueRd)/4000*2940;
else
LeakValueRd2=(LeakValueRd)*2940;
break;
default:
break;
}
if ((LeakValueRd/128)>50000)
{
if (AmpDly1==0)
{
if((AmpRate>1)&&(AmpSelect==0))
{
AmpRate=AmpRate-1;
AmpChgDly&=0xfe;
//DelayNS(200);
}
else
;//信号上限益出
}
}
else if ((LeakValueRd/128)<1000)
{
if( (AmpDly1==0))
{
if ((AmpRate<4)&&(AmpSelect==0))
{
AmpRate=AmpRate+1;
AmpChgDly&=0xfe;
//DelayNS(200);
}
else
{
if ((DecPort>2)||(DecPort==0))
OverPort=2;//信号逸出
}
}
}
if ((AmpChgDly&0x01)==0)
{
AmpChgDly|=0x01;
AmpDly1=60;
}
//if (AmpDly1==0)
SetAmp(AmpRate);
break;
case 2:
if ((AmpDly1==0)&&(VDly5==0))
switch(AmpRate)
{
case 1:
LeakValueRd2=LeakValueRd*33*33*33*50;
break;
case 2:
LeakValueRd2=LeakValueRd*33*33*50;
break;
case 3:
LeakValueRd2=LeakValueRd*33*50;
break;
case 4:
LeakValueRd2=LeakValueRd*50;
break;
default:
break;
}
if ((LeakValueRd/128)>50000)
{
if (AmpDly1==0)
{
if((AmpRate>1)&&(AmpSelect==0))
{
AmpRate=AmpRate-1;
AmpChgDly&=0xFe;
//DelayNS(200);
}
else
{
OverPort=1;//信号上限益出
Overed=1;
}
}
}
else if ((LeakValueRd/128)<1000)//else if ((LeakValueRd/128)<1000)
{
if (AmpDly1==0)
{
if ((AmpRate<4)&&(AmpSelect==0))
{
AmpRate=AmpRate+1;
AmpChgDly&=0xfe;
//DelayNS(200);
}
else
{
if ((DecPort>2)||(DecPort==0))
OverPort=3;//信号逸出
}
}
}
if ((AmpChgDly&0x01)==0)
{
AmpChgDly|=0x01;
AmpDly1=60;
}
//if (AmpDly1==0)
SetAmp(AmpRate);
break;
case 3:
if ((AmpDly1==0)&&(VDly6==0))
switch(AmpRate)
{
case 1:
LeakValueRd2=LeakValueRd*33*33*33;
break;
case 2:
LeakValueRd2=LeakValueRd*33*33;
break;
case 3:
LeakValueRd2=LeakValueRd*33;
break;
case 4:
LeakValueRd2=LeakValueRd;
break;
default:
break;
}
if ((LeakValueRd/128)>50000)
{
if (AmpDly1==0)
{
if((AmpRate>1)&&(AmpSelect==0))
{
AmpRate=AmpRate-1;
AmpChgDly&=0xfe;
//DelayNS(200);
}
else
{
OverPort=2;//信号上限益出
Overed=1;
}
}
}
else if ((LeakValueRd/128)<1000)
{
if (AmpDly1==0)
{
if ((AmpRate<4)&&(AmpSelect==0))
{
AmpRate=AmpRate+1;
AmpChgDly&=0xfe;
//DelayNS(200);
}
else
{
SetAmp(4);//inficon on our's off
OverPort=3;//信号逸出
}
}
}
if ((AmpChgDly&0x01)==0)
{
AmpChgDly|=0x01;
AmpDly1=60;
}
//if (AmpDly1==0)
SetAmp(AmpRate);
break;
default:
break;
}
if(FltMod==FltDyn)
{
if (AmpDly1!=0) //IF VAR IS CHANGING THEN IF VALUE GRATE THAN
{
if (LeakValueRd/128>10000) //1000 THEN DO NOT SAMPLE THEN VALUE
{
;
}
else
{
for(i=0;i<(SamNum-1);i++) //old i=20
{
LkValueDyn1[i]=LkValueDyn1[i+1];
}
LkValueDyn1[SamNum-1]=LeakValueRd2;
}
}
else
{
for(i=0;i<(SamNum-1);i++) //old i=20
{
LkValueDyn1[i]=LkValueDyn1[i+1];
}
LkValueDyn1[SamNum-1]=LeakValueRd2;
}
for(i=0;i<SamNum;i++)
{
LkValueDyn[i]=LkValueDyn1[i];
}
}
else //如果是静态滤波
{
LeakValueTmp+=LeakValueRd2;
}
if(FltMod==FltStc)
{
if (Cnt>5)
{
Cnt=0;
if (AmpDly1==0)
{
//if(FPGAEn==1)
LeakValue=LeakValueTmp/6/128;
//else
//LkValue=LeakValueTmp/6;
//LeakValue=LeakValueTmp/6;
LeakValueTmp=0;
// ZeroLeakValueTp=LeakValue;
ZeroLeakValueTp=LeakValue;
}
}
}
else
{
if (Cnt>3)
{
Cnt=0;
PaiXu();
for(i=10;i<(SamNum-10);i++)
{
LeakValueTmp+=LkValueDyn[i];
}
//if (AmpDly1==0) //070302 OLD IF VAR IS CHANGING THEN DO NOT CALCULATE THE LEAK
{
//if(FPGAEn==1)
LeakValue=LeakValueTmp/(SamNum-20.0)/128.0;
//else
//LkValue=LeakValueTmp/10.0;
LeakValueTmp=0;
// ZeroLeakValueTp=LeakValue;
ZeroLeakValueTp=LeakValue;
//LeakValue=LeakValueTmp/20;
}
}
}
//ZeroLeakValueTp=LeakValue;
if (Zeroing==0xff)
{
if (ZeroLeakValue>ZeroLeakValueTp)
{
//LeakValue=(ZeroLeakValue)-(ZeroLeakValue)+0.1;
LeakValue=LkValueDown;
}
else
{
LeakValue=ZeroLeakValueTp-ZeroLeakValue+0.1;
LkValueDown=LeakValue;
}
if (ZeroLeakValue>=ZeroLeakValueTp)
{
ZeroLeakValue=ZeroLeakValueTp;
}
}
else
{
ZeroLeakValue=0xfffff*65535*128;
}
LeakBase=(float)((float)(CalBase)*(LeakValue)/(float)(RemCal)*(float)(MacFact/10.0));
TmpLeakBase=LeakBase;
Exp=0;
if ((LeakBase<10.0)&&(LeakBase!=0))
{
while(TmpLeakBase<10.0)
{
TmpLeakBase*=10;
Exp++;
}
LeakExp=CalExp+Exp;
LeakBase=TmpLeakBase;
}
else //if (LeakBase>99)
{
while(TmpLeakBase>=100.0)
{
TmpLeakBase/=10;
Exp++;
}
LeakExp=CalExp-Exp;
LeakBase=(int8)(TmpLeakBase);
}
}
//Hc595Dat=Hc595Dat|0x40;
//MSPI_SendData(Hc595Dat);
LeakDeal();
/*EnTm0;
EnTm1;
EnUart0;
EnUart1;
EnI2C0; */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -