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

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

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

#include "convoyeur.h"



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

CB_Index convoyeur__num = 0;
CB_Mem_Float *convoyeur_vitesseLineaire;
CB_Mem_Float *convoyeur_incPositionX;
CB_Mem_Float *convoyeur_incPositionY;
CB_Mem_Float *convoyeur_incPositionZ;
CB_Mem_Float *convoyeur_incRotationX;
CB_Mem_Float *convoyeur_incRotationY;
CB_Mem_Float *convoyeur_incRotationZ;
CB_Mem_Float *convoyeur_coordCentreX;
CB_Mem_Float *convoyeur_coordCentreY;
CB_Mem_Float *convoyeur_coordCentreZ;
CB_Mem_Int *convoyeur_status_act_prod;
CB_Mem_Float *convoyeur_m11;
CB_Mem_Float *convoyeur_m12;
CB_Mem_Float *convoyeur_m13;
CB_Mem_Float *convoyeur_m14;
CB_Mem_Float *convoyeur_m21;
CB_Mem_Float *convoyeur_m22;
CB_Mem_Float *convoyeur_m23;
CB_Mem_Float *convoyeur_m24;
CB_Mem_Float *convoyeur_m31;
CB_Mem_Float *convoyeur_m32;
CB_Mem_Float *convoyeur_m33;
CB_Mem_Float *convoyeur_m34;
CB_Mem_Float *convoyeur_m41;
CB_Mem_Float *convoyeur_m42;
CB_Mem_Float *convoyeur_m43;
CB_Mem_Float *convoyeur_m44;
CB_Mem_Float *convoyeur_incrementPositionX;
CB_Mem_Float *convoyeur_incrementPositionY;
CB_Mem_Float *convoyeur_incrementPositionZ;
CB_Mem_Float *convoyeur_incDeplacementProduit;
CB_Mem_Float *convoyeur_centreRotX;
CB_Mem_Float *convoyeur_centreRotY;
CB_Mem_Float *convoyeur_centreRotZ;
CB_Mem_Float *convoyeur_incRotY;
CB_Mem_Float *convoyeur_incRotZ;
CB_Mem_Float *convoyeur_incRotX;
CB_Mem_Bool *convoyeur_d_blocage;
CB_Mem_Bool *convoyeur_v_d_blocage;

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

#define vitesseLineaire (convoyeur_vitesseLineaire->CB_current_value)
#define incPositionX (convoyeur_incPositionX->CB_current_value)
#define incPositionY (convoyeur_incPositionY->CB_current_value)
#define incPositionZ (convoyeur_incPositionZ->CB_current_value)
#define incRotationX (convoyeur_incRotationX->CB_current_value)
#define incRotationY (convoyeur_incRotationY->CB_current_value)
#define incRotationZ (convoyeur_incRotationZ->CB_current_value)
#define coordCentreX (convoyeur_coordCentreX->CB_current_value)
#define coordCentreY (convoyeur_coordCentreY->CB_current_value)
#define coordCentreZ (convoyeur_coordCentreZ->CB_current_value)
#define status_act_prod (convoyeur_status_act_prod->CB_current_value)
#define m11 (convoyeur_m11->CB_current_value)
#define m12 (convoyeur_m12->CB_current_value)
#define m13 (convoyeur_m13->CB_current_value)
#define m14 (convoyeur_m14->CB_current_value)
#define m21 (convoyeur_m21->CB_current_value)
#define m22 (convoyeur_m22->CB_current_value)
#define m23 (convoyeur_m23->CB_current_value)
#define m24 (convoyeur_m24->CB_current_value)
#define m31 (convoyeur_m31->CB_current_value)
#define m32 (convoyeur_m32->CB_current_value)
#define m33 (convoyeur_m33->CB_current_value)
#define m34 (convoyeur_m34->CB_current_value)
#define m41 (convoyeur_m41->CB_current_value)
#define m42 (convoyeur_m42->CB_current_value)
#define m43 (convoyeur_m43->CB_current_value)
#define m44 (convoyeur_m44->CB_current_value)
#define incrementPositionX (convoyeur_incrementPositionX->CB_current_value)
#define incrementPositionY (convoyeur_incrementPositionY->CB_current_value)
#define incrementPositionZ (convoyeur_incrementPositionZ->CB_current_value)
#define incDeplacementProduit (convoyeur_incDeplacementProduit->CB_current_value)
#define centreRotX (convoyeur_centreRotX->CB_current_value)
#define centreRotY (convoyeur_centreRotY->CB_current_value)
#define centreRotZ (convoyeur_centreRotZ->CB_current_value)
#define incRotY (convoyeur_incRotY->CB_current_value)
#define incRotZ (convoyeur_incRotZ->CB_current_value)
#define incRotX (convoyeur_incRotX->CB_current_value)
#define d_blocage (convoyeur_d_blocage->CB_current_value)
#define v_d_blocage (convoyeur_v_d_blocage->CB_current_value)


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


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

int _bibliotheque_epo__convoyeur_init(void)
{
	(self.Float+0)->CB_current_value = 1.0; /*m11*/
	(self.Float+5)->CB_current_value = 1.0; /*m22*/
	(self.Float+10)->CB_current_value = 1.0; /*m33*/
	(self.Float+15)->CB_current_value = 1.0; /*m44*/
	self.Bool+=2;
	self.Int+=1;
	self.Float+=26;


	return 0;
}


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

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

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

		convoyeur_status_act_prod = self.Int+0;
		convoyeur_m11 = self.Float+0;
		convoyeur_m12 = self.Float+1;
		convoyeur_m13 = self.Float+2;
		convoyeur_m14 = self.Float+3;
		convoyeur_m21 = self.Float+4;
		convoyeur_m22 = self.Float+5;
		convoyeur_m23 = self.Float+6;
		convoyeur_m24 = self.Float+7;
		convoyeur_m31 = self.Float+8;
		convoyeur_m32 = self.Float+9;
		convoyeur_m33 = self.Float+10;
		convoyeur_m34 = self.Float+11;
		convoyeur_m41 = self.Float+12;
		convoyeur_m42 = self.Float+13;
		convoyeur_m43 = self.Float+14;
		convoyeur_m44 = self.Float+15;
		convoyeur_incrementPositionX = self.Float+16;
		convoyeur_incrementPositionY = self.Float+17;
		convoyeur_incrementPositionZ = self.Float+18;
		convoyeur_incDeplacementProduit = self.Float+19;
		convoyeur_centreRotX = self.Float+20;
		convoyeur_centreRotY = self.Float+21;
		convoyeur_centreRotZ = self.Float+22;
		convoyeur_incRotY = self.Float+23;
		convoyeur_incRotZ = self.Float+24;
		convoyeur_incRotX = self.Float+25;
		convoyeur_d_blocage = self.Bool+0;
		convoyeur_v_d_blocage = self.Bool+1;

		/********************* 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 comportement représente le comportement d'une table à rouleaux.					*/
			/* Il reçoit en entrée une vitesse linéaire provenant d'un moto-réducteur et peut être associé 		*/
			/*	à des équipements tels que plateau-tournant, transbordeur ....					*/
			/* Il permet de déplacer les produits qui sont en interactions avec lui					*/
			/* -------------------------------------------------------------------------------------------------	*/

			/* Calcul de la vitesse de déplacement du produit	*/
			if (!d_blocage)
				incDeplacementProduit=(vitesseLineaire*CLOCK_PERIOD/1000000.0);
			else
				incDeplacementProduit=0;



			/* Association avec un transbordeur : prise en compte de la vitesse de déplacement du transbordeur */
			if (incPositionX != 0.0) moveXBy(myself, incPositionX);
			if (incPositionY != 0.0) moveYBy(myself, incPositionY);
			if (incPositionZ != 0.0) moveZBy(myself, incPositionZ);

			/* Association avec un plateau tournant : prise en compte de la vitesse de rotation du plateau	*/
			if ((incRotationY != 0.0) || (incRotationZ != 0.0))
				rotateBy(myself, incRotationX, incRotationY, incRotationZ, coordCentreX, coordCentreY, coordCentreZ);

			/*  Echanges des informations aux produits  		*/
			/* => infos provenant d'une table de rotation, ... */
			centreRotX=coordCentreX;
			centreRotY=coordCentreY;
			centreRotZ=coordCentreZ;
			incRotX=incRotationX;
			incRotY=incRotationY;
			incRotZ=incRotationZ;

			/* => infos provenant d'un transbordeur ... */
			incrementPositionX=incPositionX;
			incrementPositionY=incPositionY;
			incrementPositionZ=incPositionZ;



		}


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

		/*no Post-conditions*/
	}

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

	self.Bool += 2;
	self.Int += 1;
	self.Float += 26;

	return 0;
}

