/*2013-01-18T16:21:59-01:00*/

/********************************************************************
 * relais.c
 * 
 * generated by: plcgen 2.3.253
 ********************************************************************/

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

#include "relais.h"



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

CB_Index relais__num = 0;
CB_Mem_Bool *relais_contacteurEncl;
CB_Mem_Bool *relais_tensionCmd;
CB_Mem_Bool *relais_tensionCpt;
CB_Mem_Bool *relais_energieAvant;
CB_Mem_Bool *relais_retourEncl;
CB_Mem_Bool *relais_energieApres;
CB_Mem_Bool *relais_memoEncl;
CB_Mem_Bool *relais_logiqueEncl;
CB_Mem_Bool *relais_d_Encl;
CB_Mem_Bool *relais_v_d_Encl;

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

#define contacteurEncl (relais_contacteurEncl->CB_current_value)
#define tensionCmd (relais_tensionCmd->CB_current_value)
#define tensionCpt (relais_tensionCpt->CB_current_value)
#define energieAvant (relais_energieAvant->CB_current_value)
#define retourEncl (relais_retourEncl->CB_current_value)
#define energieApres (relais_energieApres->CB_current_value)
#define memoEncl (relais_memoEncl->CB_current_value)
#define logiqueEncl (relais_logiqueEncl->CB_current_value)
#define d_Encl (relais_d_Encl->CB_current_value)
#define v_d_Encl (relais_v_d_Encl->CB_current_value)


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


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

int _bibliotheque_epo__relais_init(void)
{
	(relais_tensionCmd)->CB_current_value = 1; /*tensionCmd*/
	(relais_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(relais_energieAvant)->CB_current_value = 1; /*energieAvant*/
	(self.Bool+1)->CB_current_value = 1; /*logiqueEncl*/
	self.Bool+=4;


	return 0;
}


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

int bibliotheque_epo__relais(void)
{
	if (exec_term_node(self_num)) {

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

		relais_memoEncl = self.Bool+0;
		relais_logiqueEncl = self.Bool+1;
		relais_d_Encl = self.Bool+2;
		relais_v_d_Encl = self.Bool+3;

		/********************* 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 un relais ou contacteur				*/
			/*	avec un contact auxiliaire. 					*/
			/* -----------------------------------------------------------------	*/


			/* -----------------------------------------------------------------	*/
			/* Gestion des ordres de la Partie Commande				*/
			/*	s'il n'y a pas présence de la tension de commande, 		*/
			/*         le contacteur ne comprennd pas l'ordre.			*/
			/*	   Le défaut d'enclenchement est mécanique.			*/
			/* -----------------------------------------------------------------	*/
			if (d_Encl) retourEncl = v_d_Encl;
			else memoEncl = contacteurEncl && tensionCmd;


			/* -----------------------------------------------------------------	*/
			/* Calcul de l'état passant de l'énergie 					*/
			/* S'il n'y pas d'énergie en amont il n'y a pas d'énergie après.	*/
			/* -----------------------------------------------------------------	*/
			energieApres=memoEncl & energieAvant;

			/* -----------------------------------------------------------------	*/
			/* Gestion des retours vers la Partie Commande				*/
			/* S'il n'y pas de tension de capteur il n'y a pas de retour capteur	*/
			/*     sinon, le retour capteur renvoie son état combiné avec la 	*/
			/*	    logique de cablage (par défaut : positive).			*/
			/* -----------------------------------------------------------------	*/
			retourEncl = (memoEncl ^ ! logiqueEncl) && tensionCpt;
				
		}

		CB_post_bool(relais_retourEncl);
		CB_post_bool(relais_energieApres);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 4;

	return 0;
}

