/*2011-01-03T15:23:17-01:00*/

/********************************************************************
 * distributeur_53_cov.c
 * 
 * generated by: plcgen 2.1.201
 ********************************************************************/

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

#include "distributeur_53.h"



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

CB_Index distributeur_53__num = 0;
CB_Mem_Bool *distributeur_53_energiePression;
CB_Mem_Bool *distributeur_53_tensionCmd;
CB_Mem_Bool *distributeur_53_electroTravail;
CB_Mem_Bool *distributeur_53_electroRetour;
CB_Mem_Bool *distributeur_53_flexibleTravail;
CB_Mem_Bool *distributeur_53_flexibleRetour;
CB_Mem_Bool *distributeur_53_commandeTravail;
CB_Mem_Bool *distributeur_53_commandeRetour;
CB_Mem_Int *distributeur_53_positionTiroir;
CB_Mem_Bool *distributeur_53_d_travail;
CB_Mem_Bool *distributeur_53_v_d_travail;
CB_Mem_Bool *distributeur_53_d_retour;
CB_Mem_Bool *distributeur_53_v_d_retour;

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

#define energiePression (distributeur_53_energiePression->CB_current_value)
#define tensionCmd (distributeur_53_tensionCmd->CB_current_value)
#define electroTravail (distributeur_53_electroTravail->CB_current_value)
#define electroRetour (distributeur_53_electroRetour->CB_current_value)
#define flexibleTravail (distributeur_53_flexibleTravail->CB_current_value)
#define flexibleRetour (distributeur_53_flexibleRetour->CB_current_value)
#define commandeTravail (distributeur_53_commandeTravail->CB_current_value)
#define commandeRetour (distributeur_53_commandeRetour->CB_current_value)
#define positionTiroir (distributeur_53_positionTiroir->CB_current_value)
#define d_travail (distributeur_53_d_travail->CB_current_value)
#define v_d_travail (distributeur_53_v_d_travail->CB_current_value)
#define d_retour (distributeur_53_d_retour->CB_current_value)
#define v_d_retour (distributeur_53_v_d_retour->CB_current_value)


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


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

int _bibliotheque_epo__distributeur_53_init(void)
{
	(distributeur_53_energiePression)->CB_current_value = 1; /*energiePression*/
	(distributeur_53_tensionCmd)->CB_current_value = 1; /*tensionCmd*/
	self.Bool+=4;
	self.Int+=1;


	return 0;
}


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

int bibliotheque_epo__distributeur_53(void)
{
	static char *__comp_name = "bibliotheque_epo.distributeur_53";
	if (exec_term_node(self_num)) {

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

		distributeur_53_positionTiroir = self.Int+0;
		distributeur_53_d_travail = self.Bool+0;
		distributeur_53_v_d_travail = self.Bool+1;
		distributeur_53_d_retour = self.Bool+2;
		distributeur_53_v_d_retour = self.Bool+3;

		/********************* 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 un distributeur 5/3 à Point Milieu 		*/
			/*	Bloqué (ou Centre Fermé) ou Point Milieu Libre 			*/
			/*	(ou Centre Ouvert) pour pilotage d'un vérin bistable.		*/
			/* -----------------------------------------------------------------	*/
			
			/* -----------------------------------------------------------------	*/
			/* Gestion des ordres de la Partie Commande				*/
			/*	s'il n'y a pas présence de la tension de commande, les		*/
			/*       électrovannes de commande ne comprennent pas l'ordre.	*/
			/*     Hypothèse de base : si les électrovannes sont excitées en	*/
			/*       même temps, le tiroir se positionne au centre.		*/
			/* -----------------------------------------------------------------	*/
			if (tensionCmd) 
				if (electroTravail & ! electroRetour) positionTiroir = 1;
				else
					if ( ! electroTravail & electroRetour) positionTiroir=2;
					else positionTiroir=0;
			else positionTiroir=0;
			
			if (tensionCmd && electroTravail) commandeTravail = 1;
			else commandeTravail = 0;
			
			if (tensionCmd && electroRetour) commandeRetour = 1;
			else commandeRetour=0;
				
			/* -----------------------------------------------------------------	*/
			/* Calcul de l'état passant de l'énergie dans les flexibles		*/
			/*     si un défaut est demandé sur un flexible, celui-ci prend	*/
			/*	   la valeur du défaut.						*/
			/*     s'il n'y a pas présence de l'énergie d'entrainement, les	*/
			/*	   flexibles ne sont pas sous pression.				*/
			/* -----------------------------------------------------------------	*/
			if (d_travail)
				flexibleTravail = v_d_travail;
			else
				flexibleTravail = (positionTiroir ==1) & energiePression;
			
			if (d_retour)
				flexibleRetour=v_d_retour;
			else
				flexibleRetour = (positionTiroir==2) & energiePression;
			
			
			
			
					}

		CB_post_bool(distributeur_53_flexibleTravail);
		CB_post_bool(distributeur_53_flexibleRetour);
		CB_post_bool(distributeur_53_commandeTravail);
		CB_post_bool(distributeur_53_commandeRetour);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 4;
	self.Int += 1;

	return 0;
}

