/*2011-01-03T15:23:10-01:00*/

/********************************************************************
 * integrale_1s1v_cov.c
 * 
 * generated by: plcgen 2.1.201
 ********************************************************************/

#include "cb_comp.h"
#include "cb_covs.h"
#include "iec_1131.h"

#include "integrale_1s1v.h"



/**************************** Variables *****************************/

CB_Index integrale_1s1v__num = 0;
CB_Mem_Bool *integrale_1s1v_etatAvGv;
CB_Mem_Float *integrale_1s1v_positionRampe;
CB_Mem_Float *integrale_1s1v_pourcentRampe;
CB_Mem_Float *integrale_1s1v_increment;
CB_Mem_Float *integrale_1s1v_pSortie;
CB_Mem_Float *integrale_1s1v_maxRampe;
CB_Mem_Float *integrale_1s1v_tempsRampe;
CB_Mem_Bool *integrale_1s1v_d_blocage;
CB_Mem_Float *integrale_1s1v_v_d_blocage;

/**************************** Variables *****************************/

#define etatAvGv (integrale_1s1v_etatAvGv->CB_current_value)
#define positionRampe (integrale_1s1v_positionRampe->CB_current_value)
#define pourcentRampe (integrale_1s1v_pourcentRampe->CB_current_value)
#define increment (integrale_1s1v_increment->CB_current_value)
#define pSortie (integrale_1s1v_pSortie->CB_current_value)
#define maxRampe (integrale_1s1v_maxRampe->CB_current_value)
#define tempsRampe (integrale_1s1v_tempsRampe->CB_current_value)
#define d_blocage (integrale_1s1v_d_blocage->CB_current_value)
#define v_d_blocage (integrale_1s1v_v_d_blocage->CB_current_value)


/************************ Components offsets ************************/


/********************* Initialization function **********************/

int _bibliotheque_epo__integrale_1s1v_init(void)
{
	(self.Float+2)->CB_current_value = 1000.0; /*maxRampe*/
	(self.Float+3)->CB_current_value = 10.0; /*tempsRampe*/
	self.Bool+=1;
	self.Float+=5;


	return 0;
}


/************************ Behavior function *************************/

int bibliotheque_epo__integrale_1s1v(void)
{
	static char *__comp_name = "bibliotheque_epo.integrale_1s1v";
	if (exec_term_node(self_num)) {

		/*********************** Internals variables ************************/

		integrale_1s1v_increment = self.Float+0;
		integrale_1s1v_pSortie = self.Float+1;
		integrale_1s1v_maxRampe = self.Float+2;
		integrale_1s1v_tempsRampe = self.Float+3;
		integrale_1s1v_d_blocage = self.Bool+0;
		integrale_1s1v_v_d_blocage = self.Float+4;

		/********************* Pre-conditions execution *********************/

		/*no Pre-conditions*/

		/************************ Behavior execution ************************/

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Actionneurs							*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente l'évolution d'une rampe bornée en  		*/
			/*	fonction de la valeur d'une entrée booléenne.			*/
			/* -----------------------------------------------------------------	*/
			
			/* -----------------------------------------------------------------	*/
			/* Calcul de la rampe							*/
			/* -----------------------------------------------------------------	*/
			
			if (! d_blocage)  {
				/* ----------------------------------------------------------	*/
				/* calcul de l'incrément de translation en fonction de  	*/
				/* l'horloge de simulation 						*/
				/* ----------------------------------------------------------	*/
				if (tempsRampe > 0.0)
					increment = (maxRampe/tempsRampe) * (CLOCK_PERIOD/1000000.0);
			
				/* ----------------------------------------------------------	*/
				/* Calcul de la valeur de la rampe 				*/
				/* ----------------------------------------------------------	*/
				if (etatAvGv) pSortie = maxRampe;
				else pSortie = 0.0;
				if ( positionRampe < pSortie) {
					positionRampe += increment;
					if ( positionRampe > pSortie) positionRampe = pSortie;
				}
				if ( positionRampe > pSortie) {
					positionRampe -= increment;
					if (positionRampe < 0.0) positionRampe = 0.0;
				}
			}
			
			
			/* ------------------------------------------------------------------------------------------	*/
			/* Calcul du pourcentage de hauteur de la rampe			*/
			/* ------------------------------------------------------------------------------------------	*/
			if (maxRampe > 0.0)
				pourcentRampe = ((positionRampe/maxRampe)*100);
			
			
			
					}

		CB_post_float(integrale_1s1v_positionRampe);
		CB_post_float(integrale_1s1v_pourcentRampe);

		/******************** Post-conditions execution *********************/

		/*no Post-conditions*/
	}

	/*************************** self update ****************************/

	self.Bool += 1;
	self.Float += 5;

	return 0;
}

