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

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

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

#include "capteur_plage.h"



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

CB_Index capteur_plage__num = 0;
CB_Mem_Float *capteur_plage_niveau;
CB_Mem_Bool *capteur_plage_tensionCpt;
CB_Mem_Bool *capteur_plage_capteurPlage;
CB_Mem_Float *capteur_plage_seuil;
CB_Mem_Float *capteur_plage_plage;
CB_Mem_Bool *capteur_plage_logiqueCpt;
CB_Mem_Bool *capteur_plage_d_capteur;
CB_Mem_Bool *capteur_plage_v_d_capteur;

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

#define niveau (capteur_plage_niveau->CB_current_value)
#define tensionCpt (capteur_plage_tensionCpt->CB_current_value)
#define capteurPlage (capteur_plage_capteurPlage->CB_current_value)
#define seuil (capteur_plage_seuil->CB_current_value)
#define plage (capteur_plage_plage->CB_current_value)
#define logiqueCpt (capteur_plage_logiqueCpt->CB_current_value)
#define d_capteur (capteur_plage_d_capteur->CB_current_value)
#define v_d_capteur (capteur_plage_v_d_capteur->CB_current_value)


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


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

int _bibliotheque_epo__capteur_plage_init(void)
{
	(capteur_plage_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(self.Float+0)->CB_current_value = 500.0; /*seuil*/
	(self.Float+1)->CB_current_value = 10.0; /*plage*/
	(self.Bool+0)->CB_current_value = 1; /*logiqueCpt*/
	self.Bool+=3;
	self.Float+=2;


	return 0;
}


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

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

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

		capteur_plage_seuil = self.Float+0;
		capteur_plage_plage = self.Float+1;
		capteur_plage_logiqueCpt = self.Bool+0;
		capteur_plage_d_capteur = self.Bool+1;
		capteur_plage_v_d_capteur = self.Bool+2;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Capteurs							*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente le comportement d'un capteur de 		*/
			/*	dépassement de seuil avec plage de détection.			*/
			/* -----------------------------------------------------------------	*/
			
			/* -----------------------------------------------------------------	*/
			/* Si l'organe est en défaut, il prend la valeur du défaut sinon 	*/
			/*	l'état du capteur combiné avec sa logique de cablage 		*/
			/* -----------------------------------------------------------------	*/
			if (d_capteur ) capteurPlage = v_d_capteur;
			else
				if ( tensionCpt ) capteurPlage = ((niveau >= seuil) & (niveau <= (seuil + plage))) ^ ! logiqueCpt;
				else capteurPlage = 0;
					}

		CB_post_bool(capteur_plage_capteurPlage);

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

		/*no Post-conditions*/
	}

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

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

	return 0;
}

