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

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

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

#include "contacteur_2s2v.h"



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

CB_Index contacteur_2s2v__num = 0;
CB_Mem_Bool *contacteur_2s2v_cmdAv;
CB_Mem_Bool *contacteur_2s2v_cmdAr;
CB_Mem_Bool *contacteur_2s2v_cmdPv;
CB_Mem_Bool *contacteur_2s2v_cmdGv;
CB_Mem_Bool *contacteur_2s2v_energie380;
CB_Mem_Bool *contacteur_2s2v_tensionCmd;
CB_Mem_Bool *contacteur_2s2v_tensionCpt;
CB_Mem_Bool *contacteur_2s2v_retourAv;
CB_Mem_Bool *contacteur_2s2v_retourAr;
CB_Mem_Bool *contacteur_2s2v_retourPv;
CB_Mem_Bool *contacteur_2s2v_retourGv;
CB_Mem_Bool *contacteur_2s2v_thermique;
CB_Mem_Bool *contacteur_2s2v_etatAvPv;
CB_Mem_Bool *contacteur_2s2v_etatAvGv;
CB_Mem_Bool *contacteur_2s2v_etatArPv;
CB_Mem_Bool *contacteur_2s2v_etatArGv;
CB_Mem_Bool *contacteur_2s2v_memoAv;
CB_Mem_Bool *contacteur_2s2v_memoAr;
CB_Mem_Bool *contacteur_2s2v_memoPv;
CB_Mem_Bool *contacteur_2s2v_memoGv;
CB_Mem_Bool *contacteur_2s2v_logiqueAv;
CB_Mem_Bool *contacteur_2s2v_logiqueAr;
CB_Mem_Bool *contacteur_2s2v_logiqueGv;
CB_Mem_Bool *contacteur_2s2v_logiquePv;
CB_Mem_Bool *contacteur_2s2v_logiqueThermique;
CB_Mem_Bool *contacteur_2s2v_d_Av;
CB_Mem_Bool *contacteur_2s2v_v_d_Av;
CB_Mem_Bool *contacteur_2s2v_d_Ar;
CB_Mem_Bool *contacteur_2s2v_v_d_Ar;
CB_Mem_Bool *contacteur_2s2v_d_Gv;
CB_Mem_Bool *contacteur_2s2v_v_d_Gv;
CB_Mem_Bool *contacteur_2s2v_d_Pv;
CB_Mem_Bool *contacteur_2s2v_v_d_Pv;
CB_Mem_Bool *contacteur_2s2v_d_electrique;
CB_Mem_Bool *contacteur_2s2v_v_d_electrique;

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

#define cmdAv (contacteur_2s2v_cmdAv->CB_current_value)
#define cmdAr (contacteur_2s2v_cmdAr->CB_current_value)
#define cmdPv (contacteur_2s2v_cmdPv->CB_current_value)
#define cmdGv (contacteur_2s2v_cmdGv->CB_current_value)
#define energie380 (contacteur_2s2v_energie380->CB_current_value)
#define tensionCmd (contacteur_2s2v_tensionCmd->CB_current_value)
#define tensionCpt (contacteur_2s2v_tensionCpt->CB_current_value)
#define retourAv (contacteur_2s2v_retourAv->CB_current_value)
#define retourAr (contacteur_2s2v_retourAr->CB_current_value)
#define retourPv (contacteur_2s2v_retourPv->CB_current_value)
#define retourGv (contacteur_2s2v_retourGv->CB_current_value)
#define thermique (contacteur_2s2v_thermique->CB_current_value)
#define etatAvPv (contacteur_2s2v_etatAvPv->CB_current_value)
#define etatAvGv (contacteur_2s2v_etatAvGv->CB_current_value)
#define etatArPv (contacteur_2s2v_etatArPv->CB_current_value)
#define etatArGv (contacteur_2s2v_etatArGv->CB_current_value)
#define memoAv (contacteur_2s2v_memoAv->CB_current_value)
#define memoAr (contacteur_2s2v_memoAr->CB_current_value)
#define memoPv (contacteur_2s2v_memoPv->CB_current_value)
#define memoGv (contacteur_2s2v_memoGv->CB_current_value)
#define logiqueAv (contacteur_2s2v_logiqueAv->CB_current_value)
#define logiqueAr (contacteur_2s2v_logiqueAr->CB_current_value)
#define logiqueGv (contacteur_2s2v_logiqueGv->CB_current_value)
#define logiquePv (contacteur_2s2v_logiquePv->CB_current_value)
#define logiqueThermique (contacteur_2s2v_logiqueThermique->CB_current_value)
#define d_Av (contacteur_2s2v_d_Av->CB_current_value)
#define v_d_Av (contacteur_2s2v_v_d_Av->CB_current_value)
#define d_Ar (contacteur_2s2v_d_Ar->CB_current_value)
#define v_d_Ar (contacteur_2s2v_v_d_Ar->CB_current_value)
#define d_Gv (contacteur_2s2v_d_Gv->CB_current_value)
#define v_d_Gv (contacteur_2s2v_v_d_Gv->CB_current_value)
#define d_Pv (contacteur_2s2v_d_Pv->CB_current_value)
#define v_d_Pv (contacteur_2s2v_v_d_Pv->CB_current_value)
#define d_electrique (contacteur_2s2v_d_electrique->CB_current_value)
#define v_d_electrique (contacteur_2s2v_v_d_electrique->CB_current_value)


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


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

int _bibliotheque_epo__contacteur_2s2v_init(void)
{
	(contacteur_2s2v_energie380)->CB_current_value = 1; /*energie380*/
	(contacteur_2s2v_tensionCmd)->CB_current_value = 1; /*tensionCmd*/
	(contacteur_2s2v_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(self.Bool+4)->CB_current_value = 1; /*logiqueAv*/
	(self.Bool+5)->CB_current_value = 1; /*logiqueAr*/
	(self.Bool+6)->CB_current_value = 1; /*logiqueGv*/
	(self.Bool+7)->CB_current_value = 1; /*logiquePv*/
	self.Bool+=19;


	return 0;
}


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

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

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

		contacteur_2s2v_memoAv = self.Bool+0;
		contacteur_2s2v_memoAr = self.Bool+1;
		contacteur_2s2v_memoPv = self.Bool+2;
		contacteur_2s2v_memoGv = self.Bool+3;
		contacteur_2s2v_logiqueAv = self.Bool+4;
		contacteur_2s2v_logiqueAr = self.Bool+5;
		contacteur_2s2v_logiqueGv = self.Bool+6;
		contacteur_2s2v_logiquePv = self.Bool+7;
		contacteur_2s2v_logiqueThermique = self.Bool+8;
		contacteur_2s2v_d_Av = self.Bool+9;
		contacteur_2s2v_v_d_Av = self.Bool+10;
		contacteur_2s2v_d_Ar = self.Bool+11;
		contacteur_2s2v_v_d_Ar = self.Bool+12;
		contacteur_2s2v_d_Gv = self.Bool+13;
		contacteur_2s2v_v_d_Gv = self.Bool+14;
		contacteur_2s2v_d_Pv = self.Bool+15;
		contacteur_2s2v_v_d_Pv = self.Bool+16;
		contacteur_2s2v_d_electrique = self.Bool+17;
		contacteur_2s2v_v_d_electrique = self.Bool+18;

		/********************* 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 à		*/
			/*   deux sens et deux vitesses symbolisée par quatre 			*/
			/*   contacteurs.	 Les états passants et les quatre retours		*/
			/*   contacteurs sont restitués.						*/
			/* -----------------------------------------------------------------	*/

			/* -----------------------------------------------------------------	*/
			/* 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 peuvent pas être actionnés en même		*/
			/*	   temps. La sécurité est mécanique.				*/
			/* -----------------------------------------------------------------	*/
			if (cmdAv && !memoAr && tensionCmd) memoAv = 1;
			if (!cmdAv || !tensionCmd || d_electrique) memoAv = 0;
			if (!memoAv && cmdAr && tensionCmd) memoAr = 1;
			if (!cmdAr || !tensionCmd || d_electrique) memoAr = 0;

			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=memoAv & memoGv & energie380;
			etatAvPv=memoAv & memoPv & ! memoGv & energie380;
			etatArGv=memoAr & memoGv & energie380;
			etatArPv=memoAr & memoPv & ! memoGv & 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'état	*/
			/*         combiné avec sa logique de cablage.				*/
			/* -----------------------------------------------------------------	*/
			if (d_Av) retourAv=v_d_Av;
			else
				if (tensionCpt) retourAv=(memoAv ^ ! logiqueAv);
				else retourAv=0;

			if (d_Ar) retourAr=v_d_Ar;
			else
				if (tensionCpt) retourAr=(memoAr ^ ! logiqueAr);
				else retourAr=0;

			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_2s2v_retourAv);
		CB_post_bool(contacteur_2s2v_retourAr);
		CB_post_bool(contacteur_2s2v_retourPv);
		CB_post_bool(contacteur_2s2v_retourGv);
		CB_post_bool(contacteur_2s2v_thermique);
		CB_post_bool(contacteur_2s2v_etatAvPv);
		CB_post_bool(contacteur_2s2v_etatAvGv);
		CB_post_bool(contacteur_2s2v_etatArPv);
		CB_post_bool(contacteur_2s2v_etatArGv);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 19;

	return 0;
}

