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

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

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

#include "bascule.h"



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

CB_Index bascule__num = 0;
CB_Mem_Bool *bascule_raz;
CB_Mem_Float *bascule_poids;
CB_Mem_Bool *bascule_tarage;
CB_Mem_Float *bascule_valPoids;
CB_Mem_Bool *bascule_poidsStable;
CB_Mem_Float *bascule_tare;
CB_Mem_Float *bascule_ancPoids;
CB_Mem_Bool *bascule_logStable;
CB_Mem_Bool *bascule_d_stable;
CB_Mem_Bool *bascule_v_d_stable;
CB_Mem_Bool *bascule_d_mesure;
CB_Mem_Float *bascule_v_d_mesure;

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

#define raz (bascule_raz->CB_current_value)
#define poids (bascule_poids->CB_current_value)
#define tarage (bascule_tarage->CB_current_value)
#define valPoids (bascule_valPoids->CB_current_value)
#define poidsStable (bascule_poidsStable->CB_current_value)
#define tare (bascule_tare->CB_current_value)
#define ancPoids (bascule_ancPoids->CB_current_value)
#define logStable (bascule_logStable->CB_current_value)
#define d_stable (bascule_d_stable->CB_current_value)
#define v_d_stable (bascule_v_d_stable->CB_current_value)
#define d_mesure (bascule_d_mesure->CB_current_value)
#define v_d_mesure (bascule_v_d_mesure->CB_current_value)


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


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

int _bibliotheque_epo__bascule_init(void)
{
	(self.Bool+0)->CB_current_value = 1; /*logStable*/
	self.Bool+=4;
	self.Float+=3;


	return 0;
}


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

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

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

		bascule_tare = self.Float+0;
		bascule_ancPoids = self.Float+1;
		bascule_logStable = self.Bool+0;
		bascule_d_stable = self.Bool+1;
		bascule_v_d_stable = self.Bool+2;
		bascule_d_mesure = self.Bool+3;
		bascule_v_d_mesure = self.Float+2;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Batch							*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente une bascule avec tarage et raz du poids	*/
			/* Si le poids est stable, la partie commande pourra interpreter	*/ 
			/* l'information de poids							*/
			/* -----------------------------------------------------------------	*/
			
			/* -----------------------------------------------------------------	*/
			/* Tarage de la bascule				 			*/
			/* -----------------------------------------------------------------	*/
			if(FM(tarage))  tare=poids;
			
			/* -----------------------------------------------------------------	*/
			/* Calcul du poids 								*/
			/* -----------------------------------------------------------------	*/
			if (d_mesure) valPoids = v_d_mesure;
			else valPoids=poids-tare;
			
			/* -----------------------------------------------------------------	*/
			/* RAZ du poids 								*/
			/* -----------------------------------------------------------------	*/
			if((raz)) tare=0;
			
			
			/* -----------------------------------------------------------------	*/
			/*Stablité du poids 								*/
			/* -----------------------------------------------------------------	*/
			if(ancPoids!=poids) poidsStable=!logStable;
			if(d_stable) poidsStable=v_d_stable^!logStable;
			ancPoids=poids;
			
					}

		CB_post_float(bascule_valPoids);
		CB_post_bool(bascule_poidsStable);

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

		/*no Post-conditions*/
	}

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

	self.Bool += 4;
	self.Float += 3;

	return 0;
}

