1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
public void face1(double alphaBO, double betaBO, float[] tabOrdre, float[] tabRetard, double SBO, double SO,
double sp1, double si, double si1, double sd1,
double sd, double sp, double EBO)
{
double pe = 0;
if(rretard<1) //si procédé sans retard
{
for(int i=1; i<oordre; i++)
{
if(i==1)
tabOrdre[1]=(float) (alphaBO*tabOrdre[1]+ggs*betaBO*sortiePid.floatValue());
else
tabOrdre[i]=(float) (alphaBO*tabOrdre[i]+tabOrdre[i-1]*betaBO);
}
SBO=tabOrdre[oordre]; //PV
}
else //si procédé avec retard
{
SBO=tabRetard[0];
for(int i=1; i<rretard; i++)
{
tabRetard[i-1]=tabRetard[i];
}
for(int i=1; i<=oordre; i++)
{
if (i==1)
tabOrdre[1]=(float) (alphaBO*tabOrdre[1]+ggs*betaBO*sortiePid.floatValue());
else
tabOrdre[i]=(float) (alphaBO*tabOrdre[i]+tabOrdre[i-1]*betaBO);
}
tabRetard[(int) (rretard-1)]=tabOrdre[oordre];
if((manu==1)&&(auto==0))
{
SO=sortiePid.floatValue();
Consigne=(float) SBO;
}
if((auto==1)&&(manu==0)) //si mode AUTO
{
//sortiePid=0;
EBO=Consigne-SBO;
sp=Gain*EBO;
if(Ti!=0)
si= (si1+1*sp1/3);
si= (si1+pe*sp1/Ti);
if(Td!=0)
sd=Math.exp(-5*1/(Td*sd1)+5*(sp-sp1));
sortiePid=(int) (si+sd+sp+SO);
}
}
si1=si;
sp1=sp;
sd1=sd;
SP1.add(new Millisecond(), sp1);
addFunctionObservation2(sp1);
face1(alphaBO, betaBO, tabOrdre, tabRetard, SBO, SO,
sp1, si, si1, sd1,
sd, sp, EBO);
} |
Partager