/*2013-01-18T16:21:58-01:00*/

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

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

#include "tendance.h"



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

CB_Index tendance__num = 0;
CB_Mem_Float *tendance_pente;
CB_Mem_Float *tendance_ordonne;
CB_Mem_Float *tendance_A;
CB_Mem_Float *tendance_B;
CB_Mem_Float *tendance_temps;
CB_Mem_Float *tendance_sortieReelle;
CB_Mem_Float *tendance_sortieTheor;
CB_Mem_Float *tendance_memoPente;
CB_Mem_Float *tendance_memoInc;
CB_Mem_Bool *tendance_d_ForcageIntermediaire;
CB_Mem_Float *tendance_v_d_ForcageIntermediaire;
CB_Mem_Bool *tendance_d_RazParametres;
CB_Mem_Bool *tendance_v_d_RazParametres;

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

#define pente (tendance_pente->CB_current_value)
#define ordonne (tendance_ordonne->CB_current_value)
#define A (tendance_A->CB_current_value)
#define B (tendance_B->CB_current_value)
#define temps (tendance_temps->CB_current_value)
#define sortieReelle (tendance_sortieReelle->CB_current_value)
#define sortieTheor (tendance_sortieTheor->CB_current_value)
#define memoPente (tendance_memoPente->CB_current_value)
#define memoInc (tendance_memoInc->CB_current_value)
#define d_ForcageIntermediaire (tendance_d_ForcageIntermediaire->CB_current_value)
#define v_d_ForcageIntermediaire (tendance_v_d_ForcageIntermediaire->CB_current_value)
#define d_RazParametres (tendance_d_RazParametres->CB_current_value)
#define v_d_RazParametres (tendance_v_d_RazParametres->CB_current_value)


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


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

int _bibliotheque_epo__tendance_init(void)
{
	self.Bool+=3;
	self.Float+=3;


	return 0;
}


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

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

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

		tendance_memoPente = self.Float+0;
		tendance_memoInc = self.Float+1;
		tendance_d_ForcageIntermediaire = self.Bool+0;
		tendance_v_d_ForcageIntermediaire = self.Float+2;
		tendance_d_RazParametres = self.Bool+1;
		tendance_v_d_RazParametres = self.Bool+2;

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

		/*no Pre-conditions*/

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

		{
			/* -----------------------------------------------------------------	*/
			/* Type : Modèle de Comportement Opératif					*/
			/* Catégorie :  Boite à outils						*/
			/* Auteur : Techniques Nouvelles d'Informatique				*/
			/* Date de révision : Octobre 2002						*/
			/* -----------------------------------------------------------------	*/
			/* Ce module représente l'évolution d'une mesure dans le temps.	*/
			/*	L'operateur peut simuler une courbe de type ax + b.		*/
			/* Nota :									*/
			/*	-une action sur pente change la pente en preservant la		*/
			/*		continuite.							*/
			/*	-une action sur ordonne preserve la pente et force 		*/
			/*		l'ordonne uniquement.					*/
			/*	-la variable temps est reinitialisee a chaque changement	*/
			/*		de pente ou ordonne.						*/
			/* -----------------------------------------------------------------	*/

			if (d_RazParametres) {
				sortieReelle=0;
				sortieTheor=0;
				A=0;
				B=0;
				temps=0;
				memoPente=0;
				memoInc=0;
			}
			else {
				if (pente != memoPente) {
					memoPente = pente;
					A=pente;
					B=sortieTheor;
					temps=0;
				}
				if (ordonne != memoInc) {
					memoInc=ordonne;
					B=ordonne;
					temps=0;
				}
				temps=temps+(CLOCK_PERIOD/1000000);
				sortieTheor=A*temps+B;

				if (d_ForcageIntermediaire) 
					sortieReelle=v_d_ForcageIntermediaire;
				else 
					sortieReelle=sortieTheor;
			}

		}

		CB_post_float(tendance_A);
		CB_post_float(tendance_B);
		CB_post_float(tendance_temps);
		CB_post_float(tendance_sortieReelle);
		CB_post_float(tendance_sortieTheor);

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

		/*no Post-conditions*/
	}

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

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

	return 0;
}

