FUNCTION "RAMPE_1" : VOID
TITLE ="Ramp with acc/deceleration time in ms"
AUTHOR : BenBen
VERSION : 1.1
VAR_INPUT
VALID : BOOL ; //Validation
T_CYCLE : REAL ; //Cycle time (ms)
MAXI_OUT : REAL ; //Maximum output
T_ACCEL : REAL ; //Acceleration time (ms)
T_DECEL : REAL ; //Deceleration time (ms)
Setpoint : REAL ; //Input
END_VAR
VAR_OUTPUT
ZERO : BOOL ; //Output ramp at zero
AV : BOOL ; //Output ramp positive
AR : BOOL ; //Output ramp negative
END_VAR
VAR_IN_OUT
OUT : REAL ; //Output ramp
END_VAR
VAR_TEMP
T_ACC : REAL ; //Temps acc閘閞ation en cours
T_DEC : REAL ; //Temps d閏閘閞ation en cours
END_VAR
BEGIN
NETWORK
TITLE =
//*********************** TEST DES PARAMETRES D'ENTREE ********************
A #VALID; // Si rampe valid閑
A( ;
L #T_CYCLE; // et temps de cycle > 0
L 0.000000e+000;
>R ;
) ;
A( ;
L #T_ACCEL; // temps accel > 0
L 0.000000e+000;
>R ;
) ;
A( ;
L #T_ACCEL; // temps de decel > 0
L 0.000000e+000;
>R ;
) ;
A( ;
L #MAXI_OUT; // maxi de la sortie > 0
L 0.000000e+000;
>R ;
) ;
JC M12; // alors OK et saut en M12
L 0.000000e+000; // sinon 0 dans la sortie
T #OUT;
JU M001;
//
// ************************* LIMITATION DE LA CIBLE AU MAXI ******************
M12: L #Setpoint;
L #MAXI_OUT;
JC M007;
L #MAXI_OUT; // transfert maxi dans cible
T #Setpoint;
JU M002;
M007: NOP 0;
L #MAXI_OUT;
L -1.000000e+000;
*R ;
L #Setpoint;
JC M002;
TAK ;
T #Setpoint; // transfert - maxi dans cible
// ****************************** TEST SI CIBLE = SORTIE *************************
M002: L #Setpoint; // si cible
L #OUT; // == sortie
==R ;
JC M001; // alors saut
//
// *************** CHOIX DES TAUX ACCEL ET DECEL SELON SIGNE DE LA SORTIE **********
A( ;
L #OUT; //Si sortie
L 0.000000e+000; //est negative
) ;
JC M005;
L #T_ACCEL; // si sortie positive alors
T #T_ACC; // pas d'inversion des taux
L #T_DECEL;
T #T_DEC;
JU M006;
M005: NOP 0; // si sortie n間ative alors
L #T_DECEL; // on inverse les taux accel et decel
T #T_ACC;
L #T_ACCEL;
T #T_DEC;
//
//****************************** CHOIX DU SENS *******************************
M006: NOP 0;
L #Setpoint;
L #OUT; // si cible < sortie
JC DEC; // alors saut ?DEC
//
NOP 0; //******** ACCELERATION *********
L #T_CYCLE; // (T_CYCLE * MAXI_OUT)/(T_0_MAX)
L #MAXI_OUT; // + OUT ---> OUT
*R ;
L #T_ACC;
/R ;
L #OUT;
+R ;
T #OUT;
//
L #Setpoint; // Si OUT > CIBLE
JC M001; // Alors saut en M001
L #Setpoint; // sinon CIBLE ---> OUT
T #OUT;
JU M001;
//
DEC: NOP 0; //******** DECELERATION *********
L #T_CYCLE; // (T_CYCLE * MAXI_OUT)/(T_MAX_0)
L #MAXI_OUT; // - OUT ---> OUT
*R ;
L #T_DEC;
/R ;
L -1.000000e+000;
*R ;
L #OUT;
+R ;
T #OUT;
//
L #Setpoint; // Si OUT < CIBLE
>R ;
JC M001; // Alors saut en M001
L #Setpoint; // sinon CIBLE ---> OUT
T #OUT;
//
// ****************************** SORTIES ZERO/ AV/ AR ***********************
M001: NOP 0;
L #OUT;
L 0.000000e+000; // Si sortie > 0 alors saut en M003
>R ;
JC M003;
JC M004;
S #ZERO; // Sinon ZERO = vrai
R #AV; // AV = faux
R #AR; // AR = faux
JU FIN;
M003: NOP 0;
R #ZERO; // ZERO = faux
S #AV; // AV = vrai
R #AR; // AR = faux
JU FIN;
M004: NOP 0;
R #ZERO; // ZERO = faux
R #AV; // AV = faux
S #AR; // AR = vrai
FIN: NOP 0;
END_FUNCTION