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

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

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

#include "contacteur_1s2v.h"



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

CB_Index contacteur_1s2v__num = 0;
CB_Mem_Bool *contacteur_1s2v_energie380;
CB_Mem_Bool *contacteur_1s2v_tensionCmd;
CB_Mem_Bool *contacteur_1s2v_tensionCpt;
CB_Mem_Bool *contacteur_1s2v_cmdPv;
CB_Mem_Bool *contacteur_1s2v_cmdGv;
CB_Mem_Bool *contacteur_1s2v_retourPv;
CB_Mem_Bool *contacteur_1s2v_retourGv;
CB_Mem_Bool *contacteur_1s2v_thermique;
CB_Mem_Bool *contacteur_1s2v_etatAvPv;
CB_Mem_Bool *contacteur_1s2v_etatAvGv;
CB_Mem_Bool *contacteur_1s2v_memoGv;
CB_Mem_Bool *contacteur_1s2v_memoPv;
CB_Mem_Bool *contacteur_1s2v_logiqueGv;
CB_Mem_Bool *contacteur_1s2v_logiquePv;
CB_Mem_Bool *contacteur_1s2v_logiqueThermique;
CB_Mem_Bool *contacteur_1s2v_d_Gv;
CB_Mem_Bool *contacteur_1s2v_v_d_Gv;
CB_Mem_Bool *contacteur_1s2v_d_Pv;
CB_Mem_Bool *contacteur_1s2v_v_d_Pv;
CB_Mem_Bool *contacteur_1s2v_d_electrique;
CB_Mem_Bool *contacteur_1s2v_v_d_electrique;

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

#define energie380 (contacteur_1s2v_energie380->CB_current_value)
#define tensionCmd (contacteur_1s2v_tensionCmd->CB_current_value)
#define tensionCpt (contacteur_1s2v_tensionCpt->CB_current_value)
#define cmdPv (contacteur_1s2v_cmdPv->CB_current_value)
#define cmdGv (contacteur_1s2v_cmdGv->CB_current_value)
#define retourPv (contacteur_1s2v_retourPv->CB_current_value)
#define retourGv (contacteur_1s2v_retourGv->CB_current_value)
#define thermique (contacteur_1s2v_thermique->CB_current_value)
#define etatAvPv (contacteur_1s2v_etatAvPv->CB_current_value)
#define etatAvGv (contacteur_1s2v_etatAvGv->CB_current_value)
#define memoGv (contacteur_1s2v_memoGv->CB_current_value)
#define memoPv (contacteur_1s2v_memoPv->CB_current_value)
#define logiqueGv (contacteur_1s2v_logiqueGv->CB_current_value)
#define logiquePv (contacteur_1s2v_logiquePv->CB_current_value)
#define logiqueThermique (contacteur_1s2v_logiqueThermique->CB_current_value)
#define d_Gv (contacteur_1s2v_d_Gv->CB_current_value)
#define v_d_Gv (contacteur_1s2v_v_d_Gv->CB_current_value)
#define d_Pv (contacteur_1s2v_d_Pv->CB_current_value)
#define v_d_Pv (contacteur_1s2v_v_d_Pv->CB_current_value)
#define d_electrique (contacteur_1s2v_d_electrique->CB_current_value)
#define v_d_electrique (contacteur_1s2v_v_d_electrique->CB_current_value)


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


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

int _bibliotheque_epo__contacteur_1s2v_init(void)
{
	(contacteur_1s2v_energie380)->CB_current_value = 1; /*energie380*/
	(contacteur_1s2v_tensionCmd)->CB_current_value = 1; /*tensionCmd*/
	(contacteur_1s2v_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(self.Bool+2)->CB_current_value = 1; /*logiqueGv*/
	(self.Bool+3)->CB_current_value = 1; /*logiquePv*/
	self.Bool+=11;


	return 0;
}


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

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

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

		contacteur_1s2v_memoGv = self.Bool+0;
		contacteur_1s2v_memoPv = self.Bool+1;
		contacteur_1s2v_logiqueGv = self.Bool+2;
		contacteur_1s2v_logiquePv = self.Bool+3;
		contacteur_1s2v_logiqueThermique = self.Bool+4;
		contacteur_1s2v_d_Gv = self.Bool+5;
		contacteur_1s2v_v_d_Gv = self.Bool+6;
		contacteur_1s2v_d_Pv = self.Bool+7;
		contacteur_1s2v_v_d_Pv = self.Bool+8;
		contacteur_1s2v_d_electrique = self.Bool+9;
		contacteur_1s2v_v_d_electrique = self.Bool+10;

		/********************* 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 une chaine de commande de moteur à		*/
			/*   un sens et deux vitesses symbolisée par deux contacteurs		*/
			/*   et restitution de l'état passant et des retours contacteurs.	*/
			/* -----------------------------------------------------------------	*/

			/* -----------------------------------------------------------------	*/
			/* Gestion des ordres de la Partie Commande				*/
			/*	s'il n'y a pas présence de la tension de commande, 		*/
			/*         les contacteurs ne comprennent pas les ordres.		*/
			/*	les contacteurs ne sont pas liés mécaniquement.			*/
			/* -----------------------------------------------------------------	*/
			if (!memoGv && cmdPv && tensionCmd) memoPv = 1;
			if (!cmdPv || !tensionCmd || d_electrique) memoPv = 0;
			if (cmdGv && !memoPv && tensionCmd) memoGv = 1;
			if (!cmdGv || !tensionCmd || d_electrique) memoGv = 0;

			/* -----------------------------------------------------------------	*/
			/* Calcul de l'état passant des contacteurs				*/
			/* -----------------------------------------------------------------	*/
			etatAvGv=memoGv & energie380;
			etatAvPv=memoPv & energie380;

			/* -----------------------------------------------------------------	*/
			/* Gestion du Thermique							*/
			/* -----------------------------------------------------------------	*/
			if (d_electrique) thermique=v_d_electrique;
			else
				if (tensionCpt) thermique= ! logiqueThermique;
				else thermique=0;

			/* -----------------------------------------------------------------	*/
			/* Gestion des retours 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'etat	*/
			/*         combiné avec sa logique de cablage.				*/
			/* -----------------------------------------------------------------	*/
			if (d_Gv) retourGv = v_d_Gv;
			else 	
				if (tensionCpt) retourGv = (memoGv ^ ! logiqueGv);
				else retourGv = 0;

			if (d_Pv) retourPv = v_d_Pv;
			else	
				if (tensionCpt) retourPv = (memoPv ^ ! logiquePv);
				else retourPv = 0;

		}

		CB_post_bool(contacteur_1s2v_retourPv);
		CB_post_bool(contacteur_1s2v_retourGv);
		CB_post_bool(contacteur_1s2v_thermique);
		CB_post_bool(contacteur_1s2v_etatAvPv);
		CB_post_bool(contacteur_1s2v_etatAvGv);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 11;

	return 0;
}

