/*2013-01-18T16:22:07-01:00*/

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

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

#include "logique_ouex.h"



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

CB_Index logique_ouex__num = 0;
CB_Mem_Bool *logique_ouex_bitEntree1;
CB_Mem_Bool *logique_ouex_bitEntree2;
CB_Mem_Bool *logique_ouex_bitSortie;
CB_Mem_Bool *logique_ouex_invEntree1;
CB_Mem_Bool *logique_ouex_invEntree2;
CB_Mem_Bool *logique_ouex_invSortie;
CB_Mem_Bool *logique_ouex_d_sortie;
CB_Mem_Bool *logique_ouex_v_d_sortie;

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

#define bitEntree1 (logique_ouex_bitEntree1->CB_current_value)
#define bitEntree2 (logique_ouex_bitEntree2->CB_current_value)
#define bitSortie (logique_ouex_bitSortie->CB_current_value)
#define invEntree1 (logique_ouex_invEntree1->CB_current_value)
#define invEntree2 (logique_ouex_invEntree2->CB_current_value)
#define invSortie (logique_ouex_invSortie->CB_current_value)
#define d_sortie (logique_ouex_d_sortie->CB_current_value)
#define v_d_sortie (logique_ouex_v_d_sortie->CB_current_value)


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


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

int _bibliotheque_epo__logique_ouex_init(void)
{
	(self.Bool+0)->CB_current_value = 1; /*invEntree1*/
	(self.Bool+1)->CB_current_value = 1; /*invEntree2*/
	(self.Bool+2)->CB_current_value = 1; /*invSortie*/
	self.Bool+=5;


	return 0;
}


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

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

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

		logique_ouex_invEntree1 = self.Bool+0;
		logique_ouex_invEntree2 = self.Bool+1;
		logique_ouex_invSortie = self.Bool+2;
		logique_ouex_d_sortie = self.Bool+3;
		logique_ouex_v_d_sortie = self.Bool+4;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Boite à outils						*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module réalise une opération logique de type OU exclusif  sur 	*/
			/*     deux entrées et restitue son résultat sur un booléen.		*/
			/* La sortie peut être forcée à une valeur par l'utilisateur		*/
			/* -----------------------------------------------------------------	*/

			if (d_sortie) bitSortie = v_d_sortie;
			else
				bitSortie = ((bitEntree1 ^ ! invEntree1) ^ (bitEntree2 ^ ! invEntree2)) ^ ! invSortie;


		}

		CB_post_bool(logique_ouex_bitSortie);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 5;

	return 0;
}

