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

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

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

#include "capteur_presence.h"



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

CB_Index capteur_presence__num = 0;
CB_Mem_Bool *capteur_presence_tensionCpt;
CB_Mem_Float *capteur_presence_incPositionX;
CB_Mem_Float *capteur_presence_incPositionY;
CB_Mem_Float *capteur_presence_incPositionZ;
CB_Mem_Float *capteur_presence_incRotationX;
CB_Mem_Float *capteur_presence_incRotationY;
CB_Mem_Float *capteur_presence_incRotationZ;
CB_Mem_Float *capteur_presence_coordCentreX;
CB_Mem_Float *capteur_presence_coordCentreY;
CB_Mem_Float *capteur_presence_coordCentreZ;
CB_Mem_Bool *capteur_presence_presence;
CB_Mem_Int *capteur_presence_status_act_prod;
CB_Mem_Float *capteur_presence_m11;
CB_Mem_Float *capteur_presence_m12;
CB_Mem_Float *capteur_presence_m13;
CB_Mem_Float *capteur_presence_m14;
CB_Mem_Float *capteur_presence_m21;
CB_Mem_Float *capteur_presence_m22;
CB_Mem_Float *capteur_presence_m23;
CB_Mem_Float *capteur_presence_m24;
CB_Mem_Float *capteur_presence_m31;
CB_Mem_Float *capteur_presence_m32;
CB_Mem_Float *capteur_presence_m33;
CB_Mem_Float *capteur_presence_m34;
CB_Mem_Float *capteur_presence_m41;
CB_Mem_Float *capteur_presence_m42;
CB_Mem_Float *capteur_presence_m43;
CB_Mem_Float *capteur_presence_m44;
CB_Mem_Bool *capteur_presence_detection;
CB_Mem_Bool *capteur_presence_logPresence;
CB_Mem_Bool *capteur_presence_d_passage;
CB_Mem_Bool *capteur_presence_v_d_passage;

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

#define tensionCpt (capteur_presence_tensionCpt->CB_current_value)
#define incPositionX (capteur_presence_incPositionX->CB_current_value)
#define incPositionY (capteur_presence_incPositionY->CB_current_value)
#define incPositionZ (capteur_presence_incPositionZ->CB_current_value)
#define incRotationX (capteur_presence_incRotationX->CB_current_value)
#define incRotationY (capteur_presence_incRotationY->CB_current_value)
#define incRotationZ (capteur_presence_incRotationZ->CB_current_value)
#define coordCentreX (capteur_presence_coordCentreX->CB_current_value)
#define coordCentreY (capteur_presence_coordCentreY->CB_current_value)
#define coordCentreZ (capteur_presence_coordCentreZ->CB_current_value)
#define presence (capteur_presence_presence->CB_current_value)
#define status_act_prod (capteur_presence_status_act_prod->CB_current_value)
#define m11 (capteur_presence_m11->CB_current_value)
#define m12 (capteur_presence_m12->CB_current_value)
#define m13 (capteur_presence_m13->CB_current_value)
#define m14 (capteur_presence_m14->CB_current_value)
#define m21 (capteur_presence_m21->CB_current_value)
#define m22 (capteur_presence_m22->CB_current_value)
#define m23 (capteur_presence_m23->CB_current_value)
#define m24 (capteur_presence_m24->CB_current_value)
#define m31 (capteur_presence_m31->CB_current_value)
#define m32 (capteur_presence_m32->CB_current_value)
#define m33 (capteur_presence_m33->CB_current_value)
#define m34 (capteur_presence_m34->CB_current_value)
#define m41 (capteur_presence_m41->CB_current_value)
#define m42 (capteur_presence_m42->CB_current_value)
#define m43 (capteur_presence_m43->CB_current_value)
#define m44 (capteur_presence_m44->CB_current_value)
#define detection (capteur_presence_detection->CB_current_value)
#define logPresence (capteur_presence_logPresence->CB_current_value)
#define d_passage (capteur_presence_d_passage->CB_current_value)
#define v_d_passage (capteur_presence_v_d_passage->CB_current_value)


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


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

int _bibliotheque_epo__capteur_presence_init(void)
{
	(capteur_presence_tensionCpt)->CB_current_value = 1; /*tensionCpt*/
	(self.Bool+1)->CB_current_value = 1; /*logPresence*/
	self.Bool+=4;
	self.Int+=1;
	self.Float+=16;


	return 0;
}


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

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

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

		capteur_presence_status_act_prod = self.Int+0;
		capteur_presence_m11 = self.Float+0;
		capteur_presence_m12 = self.Float+1;
		capteur_presence_m13 = self.Float+2;
		capteur_presence_m14 = self.Float+3;
		capteur_presence_m21 = self.Float+4;
		capteur_presence_m22 = self.Float+5;
		capteur_presence_m23 = self.Float+6;
		capteur_presence_m24 = self.Float+7;
		capteur_presence_m31 = self.Float+8;
		capteur_presence_m32 = self.Float+9;
		capteur_presence_m33 = self.Float+10;
		capteur_presence_m34 = self.Float+11;
		capteur_presence_m41 = self.Float+12;
		capteur_presence_m42 = self.Float+13;
		capteur_presence_m43 = self.Float+14;
		capteur_presence_m44 = self.Float+15;
		capteur_presence_detection = self.Bool+0;
		capteur_presence_logPresence = self.Bool+1;
		capteur_presence_d_passage = self.Bool+2;
		capteur_presence_v_d_passage = self.Bool+3;

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

		/*no Pre-conditions*/

		/************************ Actor Myself init *************************/

		setMyselfFor(self_num);

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

		{
			/* -------------------------------------------------------------------------------------------------	*/
			/* Modèle de Comportement Opératif											*/
			/* Catégorie Acteurs													*/
			/* Techniques Nouvelles d'Informatique										*/
			/* Date de révision : Octobre 2002											*/
			/* -------------------------------------------------------------------------------------------------	*/
			/* Ce composant représente le comportement d'un capteur de passage de produits.				*/
			/* Il est considéré comme un "acteur"et peut être entrainé en rotation ou en translation.			*/
			/* Le produit en interaction agira	 sur la variable "detection".						*/
			/* ------------------------------------------------------------------------------------------------	*/
			
			/* Gestion de la détection						*/
			if (d_passage ) presence = v_d_passage;
			else 
				presence = tensionCpt & (detection ^ ! logPresence);
			
			
			
			/* RAZ info transmise par le produit */
			detection = 0;
			
			/* Capteur embarqué sur transbordeur : prise en compte de la vitesse de déplacement  */
			if ((incPositionX != 0.0) || (incPositionY != 0.0) || (incPositionZ != 0.0))
				moveBy(myself, incPositionX, incPositionY, incPositionZ);
			
			/* Capteur embarqué sur plateau tournant : prise en compte de la vitesse de rotation 	*/
			if ((incRotationX != 0.0) || (incRotationY != 0.0) || (incRotationZ != 0.0))
				rotateBy(myself, incRotationX, incRotationY, incRotationZ, coordCentreX, coordCentreY, coordCentreZ);
			
					}

		CB_post_bool(capteur_presence_presence);

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

		/*no Post-conditions*/
	}

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

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

	return 0;
}

