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

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

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

#include "disjoncteur.h"



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

CB_Index disjoncteur__num = 0;
CB_Mem_Bool *disjoncteur_energieAvant;
CB_Mem_Bool *disjoncteur_tensionCpt;
CB_Mem_Bool *disjoncteur_thermique;
CB_Mem_Bool *disjoncteur_energieApres;
CB_Mem_Bool *disjoncteur_logiqueThermique;
CB_Mem_Bool *disjoncteur_d_electrique;
CB_Mem_Bool *disjoncteur_v_d_electrique;

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

#define energieAvant (disjoncteur_energieAvant->CB_current_value)
#define tensionCpt (disjoncteur_tensionCpt->CB_current_value)
#define thermique (disjoncteur_thermique->CB_current_value)
#define energieApres (disjoncteur_energieApres->CB_current_value)
#define logiqueThermique (disjoncteur_logiqueThermique->CB_current_value)
#define d_electrique (disjoncteur_d_electrique->CB_current_value)
#define v_d_electrique (disjoncteur_v_d_electrique->CB_current_value)


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


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

int _bibliotheque_epo__disjoncteur_init(void)
{
	(disjoncteur_energieAvant)->CB_current_value = 1; /*energieAvant*/
	(disjoncteur_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	self.Bool+=3;


	return 0;
}


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

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

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

		disjoncteur_logiqueThermique = self.Bool+0;
		disjoncteur_d_electrique = self.Bool+1;
		disjoncteur_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 disjoncteur 		*/
			/*	avec coupure de l'énergie et renvoi de son état.		*/
			/* -----------------------------------------------------------------	*/

			/* -----------------------------------------------------------------	*/
			/* Gestion du retour vers la Partie Commande				*/
			/*     si un défaut est demandé, le contact thermique prend la	*/
			/*         valeur du défaut.						*/
			/*     s'il n'y a pas présence de la tension d'alimentation du	*/
			/*         capteur, le contact thermique ne renvoie rien.		*/
			/*     sinon, le contact thermique renvoie son état combiné avec 	*/
			/*	    la logique de cablage (par défaut : négative).		*/
			/* -----------------------------------------------------------------	*/
			if (d_electrique) thermique=v_d_electrique;
			else
				if (tensionCpt) thermique= tensionCpt ^ !logiqueThermique;
				else thermique=0;

			/* -----------------------------------------------------------------	*/
			/* Gestion du passage de l'énergie						*/
			/* S'il n'y pas d'énergie en amont il n'y a pas d'énergie après	*/
			// si le disjoncteur n'est pas en mode defaut.				*/
			/* -----------------------------------------------------------------	*/
			energieApres = energieAvant & ! d_electrique;
		}

		CB_post_bool(disjoncteur_thermique);
		CB_post_bool(disjoncteur_energieApres);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 3;

	return 0;
}

