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

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

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

#include "contacteur.h"



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

CB_Index contacteur__num = 0;
CB_Mem_Bool *contacteur_cmdAv;
CB_Mem_Bool *contacteur_tensionCmd;
CB_Mem_Bool *contacteur_tensionCpt;
CB_Mem_Bool *contacteur_energie380;
CB_Mem_Bool *contacteur_retourAv;
CB_Mem_Bool *contacteur_etatAvGv;
CB_Mem_Bool *contacteur_thermique;
CB_Mem_Bool *contacteur_memoAv;
CB_Mem_Bool *contacteur_logiqueAv;
CB_Mem_Bool *contacteur_logiqueThermique;
CB_Mem_Bool *contacteur_d_Av;
CB_Mem_Bool *contacteur_v_d_Av;
CB_Mem_Bool *contacteur_d_electrique;
CB_Mem_Bool *contacteur_v_d_electrique;

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

#define cmdAv (contacteur_cmdAv->CB_current_value)
#define tensionCmd (contacteur_tensionCmd->CB_current_value)
#define tensionCpt (contacteur_tensionCpt->CB_current_value)
#define energie380 (contacteur_energie380->CB_current_value)
#define retourAv (contacteur_retourAv->CB_current_value)
#define etatAvGv (contacteur_etatAvGv->CB_current_value)
#define thermique (contacteur_thermique->CB_current_value)
#define memoAv (contacteur_memoAv->CB_current_value)
#define logiqueAv (contacteur_logiqueAv->CB_current_value)
#define logiqueThermique (contacteur_logiqueThermique->CB_current_value)
#define d_Av (contacteur_d_Av->CB_current_value)
#define v_d_Av (contacteur_v_d_Av->CB_current_value)
#define d_electrique (contacteur_d_electrique->CB_current_value)
#define v_d_electrique (contacteur_v_d_electrique->CB_current_value)


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


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

int _bibliotheque_epo__contacteur_init(void)
{
	(contacteur_tensionCmd)->CB_current_value = 1; /*tensionCmd*/
	(contacteur_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(contacteur_energie380)->CB_current_value = 1; /*energie380*/
	(contacteur_thermique)->CB_current_value = 1; /*thermique*/
	(self.Bool+1)->CB_current_value = 1; /*logiqueAv*/
	self.Bool+=7;


	return 0;
}


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

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

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

		contacteur_memoAv = self.Bool+0;
		contacteur_logiqueAv = self.Bool+1;
		contacteur_logiqueThermique = self.Bool+2;
		contacteur_d_Av = self.Bool+3;
		contacteur_v_d_Av = self.Bool+4;
		contacteur_d_electrique = self.Bool+5;
		contacteur_v_d_electrique = self.Bool+6;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Preactionneurs						*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente l'enclenchement d'un contacteur avec 		*/
			/*		restitution de son état et du retour contacteur.	*/
			/* -----------------------------------------------------------------	*/
			
			/* -----------------------------------------------------------------	*/
			/* Gestion des ordres de la Partie Commande				*/
			/*	s'il n'y a pas présence de la tension de commande, 		*/
			/*         le contacteur ne comprend pas l'ordre.			*/
			/* -----------------------------------------------------------------	*/
			memoAv=cmdAv & tensionCmd & ! d_electrique;
			
			/* -----------------------------------------------------------------	*/
			/* Calcul de l'état passant du contacteur					*/
			/* -----------------------------------------------------------------	*/
			etatAvGv=memoAv & energie380;
			
			/* -----------------------------------------------------------------	*/
			/* Gestion du Thermique							*/
			/* -----------------------------------------------------------------	*/
			if (d_electrique) thermique = v_d_electrique;
			else
				if (tensionCpt) thermique = ! logiqueThermique;
				else thermique = 0;
			
			/* -----------------------------------------------------------------	*/
			/* Gestion du retour vers la Partie Commande				*/
			/*     si un défaut est demandé, le retour contacteur prend la	*/
			/*         valeur du défaut.						*/
			/*	s'il n'y a pas présence de la tension d'alimentation des	*/
			/*         capteurs, le retour contacteur reste au repos.		*/
			/*     sinon, le retour contacteur renvoie la valeur de l'état	*/
			/*         combiné avec sa logique de cablage.				*/
			/* -----------------------------------------------------------------	*/
			if (d_Av) retourAv = v_d_Av;
			else
				if (tensionCpt) retourAv = (memoAv ^ ! logiqueAv);
				else retourAv = 0;
			
			
					}

		CB_post_bool(contacteur_retourAv);
		CB_post_bool(contacteur_etatAvGv);
		CB_post_bool(contacteur_thermique);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 7;

	return 0;
}

