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