FUNCTION "RAMPE_2" : VOID
TITLE ="Ramp with acc/deceleration time in m/s?
AUTHOR : BENBEN
VERSION : 1.1
VAR_INPUT
VALID : BOOL ; //Validation
T_CYCLE : REAL ; //Cycle time (ms)
MAXI_OUT : REAL ; //Maximum output (m/min)
TX_ACCEL : REAL ; //Acceleration rate (m/s?
TX_DECEL : REAL ; //Deceleration rate (m/s?
Setpoint : REAL ; //Input (m/min)
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 ; //Sortie rampe
END_VAR
VAR_TEMP
D_ACC : REAL ; //Delta acc閘閞ation
D_DEC : REAL ; //Delta d閏閘閞ation
DV_ACC : REAL ; //Delta acceleration suivant signe sortie
DV_DEC : REAL ; //Delta decel閞ation suivant signe sortie
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 #TX_ACCEL; // temps accel > 0
L 0.000000e+000;
>R ;
) ;
A( ;
L #TX_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 M009; // alors OK et saut en M12
L 0.000000e+000; // sinon 0 dans la sortie
T #OUT;
JU M001;
M009: NOP 0;
//
//************************** CALCUL DELTA ACCEL ET DELTA DECEL ***************
L #T_CYCLE;
L 1.000000e+003;
/R ;
L #TX_ACCEL;
*R ;
L 6.000000e+001;
*R ;
T #D_ACC;
//
L #T_CYCLE;
L 1.000000e+003;
/R ;
L #TX_DECEL;
*R ;
L 6.000000e+001;
*R ;
T #D_DEC;
// ********* CHOIX DES TAUX ACCEL ET DECEL SELON SIGNE DE LA SORTIE **************
A( ;
L #OUT;
L 0.000000e+000;
) ;
JC M015;
L #D_ACC;
T #DV_ACC;
L #D_DEC;
T #DV_DEC;
JU M019;
M015: L #D_DEC;
T #DV_ACC;
L #D_ACC;
T #DV_DEC;
M019: NOP 0;
//
// ************************* LIMITATION DE LA CIBLE AU MAXI ******************
L #Setpoint;
L #MAXI_OUT;
JC M027;
L #MAXI_OUT; // transfert maxi dans cible
T #Setpoint;
JU M029;
M027: NOP 0;
L #MAXI_OUT;
L -1.000000e+000;
*R ;
L #Setpoint;
JC M029;
TAK ;
T #Setpoint; // transfert - maxi dans cible
M029: NOP 0;
// ****************************** TEST SI CIBLE = SORTIE *************************
L #Setpoint;
L #OUT;
==R ;
JC M001;
// ****************************** TEST SI CIBLE > SORTIE *************************
L #Setpoint;
L #OUT;
>R ;
JCN M049;
L #OUT;
L #DV_ACC;
+R ;
T #OUT;
L #Setpoint;
JC M049;
L #Setpoint;
T #OUT;
JU M001;
M049: NOP 0;
//
// ****************************** TEST SI CIBLE < SORTIE *************************
L #Setpoint;
L #OUT;
JCN M059;
L #OUT;
L #DV_DEC;
-R ;
T #OUT;
L #Setpoint;
>R ;
JC M059;
L #Setpoint;
T #OUT;
M059: NOP 0;
// ****************************** 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