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

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

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

#include "cuve.h"



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

CB_Index cuve__num = 0;
CB_Mem_Float *cuve_debitRemplir;
CB_Mem_Float *cuve_debitVider;
CB_Mem_Float *cuve_niveauCuve;
CB_Mem_Float *cuve_pourcent;
CB_Mem_Float *cuve_contenance;
CB_Mem_Bool *cuve_d_niveau;
CB_Mem_Float *cuve_v_d_niveau;

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

#define debitRemplir (cuve_debitRemplir->CB_current_value)
#define debitVider (cuve_debitVider->CB_current_value)
#define niveauCuve (cuve_niveauCuve->CB_current_value)
#define pourcent (cuve_pourcent->CB_current_value)
#define contenance (cuve_contenance->CB_current_value)
#define d_niveau (cuve_d_niveau->CB_current_value)
#define v_d_niveau (cuve_v_d_niveau->CB_current_value)


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


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

int _bibliotheque_epo__cuve_init(void)
{
	(self.Float+1)->CB_current_value = 1000.0; /*contenance*/
	self.Bool+=1;
	self.Float+=3;


	return 0;
}


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

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

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

		cuve_pourcent = self.Float+0;
		cuve_contenance = self.Float+1;
		cuve_d_niveau = self.Bool+0;
		cuve_v_d_niveau = self.Float+2;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Preactionneurs - batch					*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente l'évolution du niveau dans une cuve.		*/
			/* Les informations de vidage et de remplissage sont 			*/
			/*	données en analogique sous la forme de débits.			*/
			/* -----------------------------------------------------------------	*/
			
			if (d_niveau ) niveauCuve = v_d_niveau;	/* organe en défaut 		*/
			else  {
				niveauCuve = niveauCuve + debitRemplir - debitVider; 		/* gestion du niveau 	*/
				if ( niveauCuve >= contenance ) niveauCuve = contenance; 	/* limitation du niveau 	*/
				if ( niveauCuve <= 0.0 ) niveauCuve = 0.0; 	
			}
			
			/* -----------------------------------------------------------------	*/
			/* Calcul du pourcentage de remplissage					*/
			/* -----------------------------------------------------------------	*/
			if (contenance != 0.0) pourcent = ((niveauCuve / contenance)*100);
					}

		CB_post_float(cuve_niveauCuve);

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

		/*no Post-conditions*/
	}

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

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

	return 0;
}

