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

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

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

#include "fusible.h"



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

CB_Index fusible__num = 0;
CB_Mem_Bool *fusible_energieAvant;
CB_Mem_Bool *fusible_tensionCpt;
CB_Mem_Bool *fusible_etatFusible;
CB_Mem_Bool *fusible_energieApres;
CB_Mem_Bool *fusible_logiqueFusible;
CB_Mem_Bool *fusible_d_electrique;
CB_Mem_Bool *fusible_v_d_electrique;

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

#define energieAvant (fusible_energieAvant->CB_current_value)
#define tensionCpt (fusible_tensionCpt->CB_current_value)
#define etatFusible (fusible_etatFusible->CB_current_value)
#define energieApres (fusible_energieApres->CB_current_value)
#define logiqueFusible (fusible_logiqueFusible->CB_current_value)
#define d_electrique (fusible_d_electrique->CB_current_value)
#define v_d_electrique (fusible_v_d_electrique->CB_current_value)


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


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

int _bibliotheque_epo__fusible_init(void)
{
	(fusible_energieAvant)->CB_current_value = 1; /*energieAvant*/
	(fusible_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(self.Bool+0)->CB_current_value = 1; /*logiqueFusible*/
	self.Bool+=3;


	return 0;
}


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

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

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

		fusible_logiqueFusible = self.Bool+0;
		fusible_d_electrique = self.Bool+1;
		fusible_v_d_electrique = self.Bool+2;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Puissance							*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente le déclenchement d'un fusible 			*/
			/*	avec coupure de l'énergie et renvoi de son état.		*/
			/* -----------------------------------------------------------------	*/
			
			/* -----------------------------------------------------------------	*/
			/* Gestion du retour vers la Partie Commande				*/
			/*     si un défaut est demandé, le fusible prend la			*/
			/*         valeur du défaut.						*/
			/*	s'il n'y a pas présence de la tension d'alimentation des	*/
			/*         capteurs, le etatFusible ne renvoie rien.			*/
			/*     sinon, le fusible renvoie son état combiné avec la 		*/
			/*	    logique de cablage (par défaut : positive).			*/
			/* -----------------------------------------------------------------	*/
			if (d_electrique) etatFusible = v_d_electrique;
			else
				if (tensionCpt) etatFusible = tensionCpt ^ !logiqueFusible;
				else etatFusible = 0;
			
			/* -----------------------------------------------------------------	*/
			/* Gestion du passage de l'énergie						*/
			/*     le fusible est passant s'il n'est pas en mode défaut.		*/
			/* -----------------------------------------------------------------	*/
			energieApres = energieAvant & ! d_electrique;
			
			
					}

		CB_post_bool(fusible_etatFusible);
		CB_post_bool(fusible_energieApres);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 3;

	return 0;
}

