Vous êtes sur la page 1sur 7

Cycle de fonctionnement

d’une machine de poteyage


TOUDOUFT Hamaz L3 SA 2021/2022

1_ introduction

2_1_ Identification des paramètres décrivant le cycle de poteyage

2_2_ définir la qualité de l'opération de poteyage

2_3_ la relation entre le rapport de recouvrement et le pas de balayage

2_4_1_ pas sur Y

1_ introduction

L’objectif de ce mini projet est de programmer une machine automatisée


qui permet de recouvrir de demi-moules une couche de carbone obtenu par la
combustion incomplète de la flamme d’un bruleur. Nous allons mettre en pratique les
techniques de programmations appris durant les 3 TPs.

A partir du programme de la partie commande fourni, on a rédigé le


grafcet ci-dessous qui correspond au fonctionnement de notre partie commande. On
a inséré toutes les parties du grafcet pour que ça puisse être le plus lisible.
poure un aller retour on obtien la tras suivante :

2_1_ Identification des paramètres décrivant le cycle de poteyage :

Calculs :

La distance à parcourir pour le déplacement de X, aussi appelé L, se calcule de la


manière suivante :

L=b*N

b : largeur d’un moule ; N : nombre de moules (allant de 1 à 3)

Pas de calcul pour le Pas, on s’aperçoit juste qu’il équivaut à d (diamètre de la


surface de dépose de carbone)

On peut calculer le nombre de lignes (de longueur L) comme ceci :

NLignes = a/Pas

a : longueur du moule

Dans cette partie nous allons faire le développement du logiciel de la machine


de poteyage. On a choisi la première solution pour le déplacement de la table.
Ci-dessous les variables utilisées dans le grafcet.

Nous allons programmer le circuit de la machine qui


commencera son parcours en (20 ;20)

Le pas étant de 20

Il partira tout à droite en (170 ;20) Puis montera de 20


donc en (170 ;40) Puis ira à gauche donc en (0 ;40) Et
ainsi du suite jusque arriver en (170; 220) diagram :

grafset en anex

PROGRAM _INIT

//Vitesse et acceleration par defaut


aNom := 5.0; //[mm/s^2]
vNom := 10.0; // [mm/s]

//Deplacement
x0 := 20; //[mm]

END_PROGRAM

PROGRAM _CYCLIC
CASE etat OF
0: //Attente demande de demarrage
IF ihm_on THEN
etat := 10;
gAxeCmd01.BpOn := TRUE;
gAxeCmd02.BpOn := TRUE;
etat:=10;
END_IF

10: //Demarrage de l'axe


IF gAxeInfo01.PowerOn AND gAxeInfo02.PowerOn THEN
etat := 11;
gAxeCmd01.BpHome := TRUE;
gAxeCmd02.BpHome := TRUE;
END_IF

11://Attente fin prise d'origine


IF gAxeInfo01.Standstill THEN
gAxeCmd01.BpMoveAbsolute := TRUE;
IF gAxeInfo02.Standstill THEN
gAxeCmd02.BpMoveAbsolute := TRUE;
etat := 12;
END_IF
END_IF
12: //Passage en mode de commande "Deplacement absolu"
IF gAxeInfo01.StandstillAbs AND gAxeInfo02.StandstillAbs
THEN
etat := 13;
END_IF
13:
gAxeCmd01.MoveAbsolute.Acc := aNom;
gAxeCmd01.MoveAbsolute.Vit := vNom;
gAxeCmd01.MoveAbsolute.Pos := 0;
gAxeCmd01.MoveAbsolute.BpMove := TRUE;
gAxeCmd02.MoveAbsolute.Acc := aNom;
gAxeCmd02.MoveAbsolute.Vit := vNom;
gAxeCmd02.MoveAbsolute.Pos := 0;
gAxeCmd02.MoveAbsolute.BpMove := TRUE;
etat:=14;
14:
IF gAxeInfo01.StandstillAbs AND gAxeInfo02.StandstillAbs
THEN
etat:=20;
END_IF
20: //Attente action utilisateur
IF ihm_start THEN //demande depart mouvement
gAxeCmd01.MoveAbsolute.Acc := aNom;
gAxeCmd01.MoveAbsolute.Vit := vNom;
gAxeCmd01.MoveAbsolute.Pos := x0;
gAxeCmd01.MoveAbsolute.BpMove := TRUE;
gAxeCmd02.MoveAbsolute.Acc := aNom;
gAxeCmd02.MoveAbsolute.Vit := vNom;
gAxeCmd02.MoveAbsolute.Pos := x0;
gAxeCmd02.MoveAbsolute.BpMove := TRUE;
etat := 100;

ELSIF NOT ihm_on THEN


gAxeCmd01.BpMoveAbsolute := FALSE;
gAxeCmd02.BpMoveAbsolute := FALSE;
etat := 21;
END_IF
21://Sortie mode "deplacement absolu"
IF gAxeInfo01.Standstill AND gAxeInfo02.Standstill THEN
gAxeCmd01.BpOn := FALSE;
gAxeCmd02.BpOn := FALSE;
etat := 22;
END_IF
22://Arret moteur
IF NOT gAxeInfo01.PowerOn AND gAxeInfo02.PowerOn
THEN
etat := 30;
END_IF
30://Attente action utilisateur : demande de demarrage
IF ihm_on THEN
gAxeCmd01.BpOn := TRUE;
gAxeCmd02.BpOn := TRUE;
etat := 31;

END_IF
31://Demarrage moteur
IF gAxeInfo01.PowerOn AND gAxeInfo02.PowerOn THEN
gAxeCmd01.BpMoveAbsolute := TRUE;
gAxeCmd02.BpMoveAbsolute := TRUE;
etat := 12;
END_IF

//------------------------
//Deplacement aller-retour
//------------------------
100://Deplacement en x0
IF gAxeInfo02.StandstillAbs THEN //Information
"mouvement termine"
gAxeCmd01.MoveAbsolute.Acc := 100;
gAxeCmd01.MoveAbsolute.Vit := 20;
gAxeCmd01.MoveAbsolute.Pos := 20;
gAxeCmd01.MoveAbsolute.BpMove := TRUE;
etat := 101;
END_IF
101:
IF gAxeInfo01.Standstill.Abs THEN
gAxeCmd02.MoveAbsolute.Acc := 100;
gAxeCmd02.MoveAbsolute.Vit := 20;
gAxeCmd02.MoveAbsolute.Pos := 20;
gAxeCmd02.MoveAbsolute.BpMove := TRUE;
etat := 102;
END_IF

102:
IF gAxeInfo02.StandstillAbs THEN
gAxeCmd01.MoveAbsolute.Acc := 100;
gAxeCmd01.MoveAbsolute.Vit := 20;
gAxeCmd01.MoveAbsolute.Pos := 150;
gAxeCmd01.MoveAbsolute.BpMove := TRUE;
etat := 103;
END_IF
103:
IF gAxeInfo01.StandstillAbs THEN
gAxeCmd02.MoveAbsolute.Acc := 100;
gAxeCmd02.MoveAbsolute.Vit := 20;
gAxeCmd02.MoveAbsolute.Pos := 150;
gAxeCmd02.MoveAbsolute.BpMove := TRUE;
etat := 104;
END_IF
104:
122:
IF ihm_start THEN
etat := 13;
ihm_start:=0;
END_IF
END_CASE

//Actualisation de la position et de la vitesse courante


Position.x := gAxeInfo01.S_act;
Vitesse.x := gAxeInfo01.V_act;
Position.y := gAxeInfo02.S_act;
Vitesse.y := gAxeInfo02.V_act;

END_PROGRAM

Vous aimerez peut-être aussi