/*2011-01-03T15:22:52-01:00*/

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

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

#include "tige_double_effet.h"



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

CB_Index tige_double_effet__num = 0;
CB_Mem_Bool *tige_double_effet_flexibleTravail;
CB_Mem_Bool *tige_double_effet_flexibleRetour;
CB_Mem_Float *tige_double_effet_positionTige;
CB_Mem_Float *tige_double_effet_pourcentTige;
CB_Mem_Float *tige_double_effet_increment;
CB_Mem_Float *tige_double_effet_maxSortie;
CB_Mem_Float *tige_double_effet_tempsSortie;
CB_Mem_Bool *tige_double_effet_d_blocage;
CB_Mem_Float *tige_double_effet_v_d_blocage;

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

#define flexibleTravail (tige_double_effet_flexibleTravail->CB_current_value)
#define flexibleRetour (tige_double_effet_flexibleRetour->CB_current_value)
#define positionTige (tige_double_effet_positionTige->CB_current_value)
#define pourcentTige (tige_double_effet_pourcentTige->CB_current_value)
#define increment (tige_double_effet_increment->CB_current_value)
#define maxSortie (tige_double_effet_maxSortie->CB_current_value)
#define tempsSortie (tige_double_effet_tempsSortie->CB_current_value)
#define d_blocage (tige_double_effet_d_blocage->CB_current_value)
#define v_d_blocage (tige_double_effet_v_d_blocage->CB_current_value)


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


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

int _bibliotheque_epo__tige_double_effet_init(void)
{
	(self.Float+1)->CB_current_value = 1000.0; /*maxSortie*/
	(self.Float+2)->CB_current_value = 10.0; /*tempsSortie*/
	self.Bool+=1;
	self.Float+=4;


	return 0;
}


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

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

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

		tige_double_effet_increment = self.Float+0;
		tige_double_effet_maxSortie = self.Float+1;
		tige_double_effet_tempsSortie = self.Float+2;
		tige_double_effet_d_blocage = self.Bool+0;
		tige_double_effet_v_d_blocage = self.Float+3;

		/********************* 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 tige de vérin double  	*/
			/* effet en fonction de l'état d'alimentation des deux flexibles.	*/
			/* -----------------------------------------------------------------	*/
			
			if (d_blocage) increment=0;
			else {
				increment=(maxSortie/tempsSortie)*(CLOCK_PERIOD/1000000);
				if (flexibleTravail && ! flexibleRetour) {
					if ( positionTige < maxSortie ) (positionTige) += increment;
					if ( positionTige > maxSortie ) positionTige = maxSortie;
				}
				if (! flexibleTravail && flexibleRetour) {
					if ( positionTige > 0 ) (positionTige) -= increment;
					if ( positionTige < 0 ) positionTige = 0;
				}
			}
			
			/* -----------------------------------------------------------------	*/
			/* Calcul du pourcentage de sortie de la tige du vérin			*/
			/* -----------------------------------------------------------------	*/
			if (maxSortie > 0.0)
				pourcentTige = ((positionTige/maxSortie)*100);
			
					}

		CB_post_float(tige_double_effet_positionTige);
		CB_post_float(tige_double_effet_pourcentTige);

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

		/*no Post-conditions*/
	}

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

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

	return 0;
}

