Grafcet avec Asymptote
Dessin vectoriel

Logo JDoTec

  Informatique - Réf:46110 - MàJ:29-04-2010
Télécharger Asymptote
Télécharger Asymptote

Dernière version stable : Lib_Grafcet_2010_001 du 29 avril 2010

^ La bibliothèque «GRAFCET»

L'objet egraph

Le dessin des GRAFCET s'appuie sur la manipulation d'objets nommés egraph, à déclarer par l'utilisateur de cette bibliothèque.
Pour la description structurelle d'un graphe, ces objets sont soit des cases étape, soit des tirets transition.

egraph e1,e2,t1;

Déclarer trois objets egraph, nommés ici e1, e2 et t1.

 

Les commandes


^ La commande etape()

La commande etape() dessine une case étape et peut être appelée de différentes manières :

etape(num); Créer une case étape de numéro num, centrée par défaut sur le point de coordonnées (0,0)
etape(num,(x,y));  Créer une case étape de numéro num centrée sur le point de coordonnées (x,y)
etape(num,trans); Créer une case étape de numéro num sous la transition trans, avec la liaison de la transition vers l'étape.
etape(num,trans,etap); Créer une case étape de numéro num sous la transition trans, à la hauteur de etap, avec la liaison de la transition vers l'étape.
etape(num,trans,(x,y));

Créer une case étape de numéro num sous la transition trans, décalée de (x,y) :

  • avec la liaison de la transition vers l'étape lorsque x = 0 ;
  • sans la liaison de la transition vers l'étape lorsque x ≠ 0.

Ces différentes syntaxes admettent de plus un paramètre supplémentaire facultatif pour indiquer la nature de la case :

^ La commande etape_active()

La commande etape_active() ajoute un jeton de couleur rouge par défaut sur une case étape :

etape_active(nom_etap); nom_etap est le nom de la case créée par egraf nom_etap=etape(...)

etape_active(nom_etap,coul);

Dessine le jeton avec la couleur coul spécifiée.

^ La commande transition()

La commande transition() dessine un tiret transition et peut être appelée de différentes manières :

transition((x,y)); Crée une transition au point de coordonnées (x,y)
transition(etape); Crée une transition sous la case etape, avec la liaison de la transition vers l'étape.
transition(etape,(x,y));

Crée une transition sous la case etape, décalée de (x,y) :

  • avec la liaison de la transition vers l'étape lorsque x = 0 ;
  • sans la liaison de la transition vers l'étape lorsque x ≠ 0.

Ces différentes syntaxes admettent deux paramètres supplémentaires facultatifs

transition([...],recept,num);

  • recept est l'expression logique de la réceptivité ;
  • num le numéro affecté à la transition.

^ La commande liaison()

La commande liaison() permet de relier les éléments entre eux.

liaison(trans,etap); Dessine une boucle de retour, de la transition trans vers la case etap.

liaison(trans,etap,(x,y));

Dessine une boucle de retour décalée de l'abscisse x par rapport à la case etap.

liaison(obj1,...,objn);

Essaie de tracer la vergence reliant tous les objets

^ La commande action()

La commande action() ajoute les ordres éventuels associés aux cases étape.

action(etap,ordre); Ajoute l'ordre ordre à la case étape etap.

action(actio,ordre);

Ajoute un ordre à une action déjà définie par une commande du type actio=egraph...

Ces différentes syntaxes admettent de plus un ou deux paramètres supplémentaires facultatifs pour indiquer la nature de l'action et la condition associée éventuelle.

^ La commande point()

La commande point() construit un objet a priori invisible.

point(obj,(x,y)); Crée un point décalé de (x,y) à partir du centre de l'objet obj.
point((x0,y0),(x,y)); Crée un point décalé de (x,y) à partir du point de coordonnées (x0,y0) récupérées sur des objets

Ces différentes syntaxes admettent le paramètre optionel "visible" pour faciliter la mise au point du graphe dessiné.

^ Télécharger

Version beta

en_cours Lib_Grafcet_2010_002.asy

Versions stables

29.04.2010 Lib_Grafcet_2010_001.asy

^ Exemples

Graphes à construire :


^ Structure d'une séquence

sequence_10.gif

//*************************
// exemple_10.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------
//
// Déclaration des objets
egraph e1,e2,e3,e4,t1,t2,t3,t4;

// Quatre couples étape-transition
e1=etape("$1$","i");
t1=transition(e1);
e2=etape( "$2$",t1);
t2=transition(e2);
e3=etape( "$3$",t2);
t3=transition(e3);
e4=etape( "$4$",t3);
t4=transition(e4);

// La boucle de retour
liaison(t4,e1);

// Un jeton sur la case étape active
etape_active(e2);

 

^ Deux séquences côte à côte

sequence_11.gif

//*********************
// exemple_11.asy
//*********************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------
//
// Déclaration des objets
egraph e10,e11,e12,e13,t10,t11,t12,t13;
egraph e20,e21,e22,t20,t21,t22;

// Quatre couples étape-transitions
e10=etape("$10$","i");
t10=transition(e10);
e11=etape("$11$",t10,"m");
t11=transition(e11);
e12=etape("$12$",t11,"e");
t12=transition(e12);
e13=etape("$13$",t12,"m");
t13=transition(e13);

// La boucle de retour
liaison(t13,e10);

// Un jeton rouge sur la case étape active
etape_active(e12);

// Trois couples étape-transition
e20=etape("$20$",(10,0));
t20=transition(e20);
e21=etape("$21$",t20);
t21=transition(e21);
e22=etape("$22$",t21,"i");
t22=transition(e22);

// La boucle de retour
liaison(t22,e20);

// Un jeton bleu sur la case étape active
etape_active(e21,blue);

 

^ Transition source et transition puit

exemple_14.gif

//*************************
// exemple_14.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

// Déclaration des objets
egraph t1,t2,t3,t4,e1,e2,e3;

t0=transition((0,0));
e1=etape("$1$",t0);
t1=transition(e1);
e2=etape("$2$",t1);
t2=transition(e2);
e3=etape("$3$",t2);
t3=transition(e3);

// Les mêmes avec des noms aux transitions egraph t10=transition((6,0),"","$ts$");
egraph e11=etape("$1$",t10);
egraph t12=transition(e11,"","$1$");
egraph e12=etape("$2$",t12);
egraph t13=transition(e12,"","$2$");
egraph e13=etape("$3$",t13);
egraph t14=transition(e13,"","$tp$");

 

^ Habillage d'une séquence

sequence_20.gif

//*********************
// exemple_20.asy
//*********************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------
//
// Déclaration des objets
egraph e1,e2,e3,e4,t1,t2,t3,t4,a3;

// Quatre couples étape-transition
e1=etape("$1$");
t1=transition(e1,"$\uparrow\! m$");
e2=etape("$2$",t1);
t2=transition(e2,"$2s/X2$");
e3=etape("$3$",t2);
t3=transition(e3,"$v1$");
e4=etape("$4$",t3);
t4=transition(e4,"$v0$");

// La boucle de retour
liaison(t4,e1);

// Les actions
action(e2,"$M$");
a3=action(e3,"$M$");
action(a3,"$V+$");
action(e4,"$V-$");

^ Les actions particulières

sequence_21.gif

//*********************
// exemple_21.asy
//*********************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e1=etape("$X$");
action(e1,"$G20\{10\}$","f");

egraph e2=etape("$X$",(0,-4));
action(e2,"$M$","c","$pp$");

egraph e3=etape("$X$",(0,-8)); action(e3,"$A:=1$","a");

egraph e4=etape("$X$",(0,-12));
action(e4,"$cpt.INC.$","d");

egraph e5=etape("$X$",(0,-16));
action(e5,"$B:=0$","e","$even$");

 

^ Aiguillage à deux branches

exemple_30.gif

//*************************
// exemple_30.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

// Déclaration des objets egraph
e1,e2,e3,e4,e5,t1a,t1b,t2,t3,t4,t5;

// Etapes et transitions
e1=etape("$1$","i");
t1a=transition(e1,(-2,-1),"","1a");
t1b=transition(e1,(+6,-1),"","1b");
e2=etape("$2$",t1a);
t2=transition(e2,"","2");
e3=etape("$3$",t2);
t3=transition(e3,"","3");
e4=etape("$4$",t1b);
t4=transition(e4,"","4");
e5=etape("$5$",t3,(+2,-1));
t5=transition(e5,"","5");

//Les vergences
liaison(e1,t1a,t1b);
liaison(t3,t4,e5);

//Retour
liaison(t5,e1,(-5,0));

 

^ Aiguillage à trois branches

exemple_32.gif

//*************************
// exemple_32.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

// déclaration des objets
egraph e1,e2,e3,e4,e5,e6;
egraph t1a,t1b,t1c,t2,t3,t4,t5,t6;

e1=etape("$1$","i");
t1a=transition(e1,(-2,-1),"","1a");
t1b=transition(e1,(+4,-1),"","1b");
t1c=transition(e1,(+10,-1),"","1c");

e2=etape("$2$",t1a);
t2=transition(e2,"","2");

e3=etape("$3$",t1b);
t3=transition(e3,"","3");

e4=etape("$4$",t3);
t4=transition(e4,"","4");

e5=etape("$5$",t1c);
t5=transition(e5,"","5");

e6=etape("$6$",t4,(+2,-1));
t6=transition(e6,"","6");

//Les vergences
liaison(e1,t1a,t1b,t1c);
liaison(t2,t4,t5,e6);

//Le retour
liaison(t6,e1,(-5,0));

 

^ Aiguillage à trois branches avec retour (1/2)

exemple_33.gif

//*************************
// exemple_33.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e1=etape("$1$","i");
egraph t1a=transition(e1,(-2,-1),"","1a");
egraph t1b=transition(e1,(+4,-1),"","1b");
egraph t1c=transition(e1,(+10,-1),"","1c");

egraph e2=etape("$2$",t1a);
egraph t2=transition(e2,"","2");

egraph e3=etape("$3$",t2);
egraph t3=transition(e3,"","3");

egraph e4=etape("$4$",t1b);
egraph t4=transition(e4,"","4");

egraph e5=etape("$5$",t1c);
egraph t5=transition(e5,"","5");

//Les vergences
liaison(e1,t1a,t1b,t1c);
liaison(t3,t4,t5,e1);

Cet exemple se termine par le message suivant inscrit dans la console :

exemple_33_rep.gif

 

^ Aiguillage à trois branches avec retour (2/2)

exemple_34.gif

//*************************
// exemple_34.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e1=etape("$1$","i");
egraph t1a=transition(e1,(-2,-1),"","1a");
egraph t1b=transition(e1,(+4,-1),"","1b");
egraph t1c=transition(e1,(+10,-1),"","1c");

egraph e2=etape("$2$",t1a);
egraph t2=transition(e2,"","2");

egraph e3=etape("$3$",t2);
egraph t3=transition(e3,"","3");

egraph e4=etape("$4$",t1b);
egraph t4=transition(e4,"","4");

egraph e5=etape("$5$",t1c);
egraph t5=transition(e5,"","5");

//Ajout d'un point
egraph p1=point(t3,(2,-2),"visible");

//Les vergences
liaison(e1,t1a,t1b,t1c);
liaison(t3,t4,t5,p1);
liaison(p1,e1,(-5,0));

 

^ Vergences bancales

exemple_38.gif

//*************************
// exemple_38.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e1=etape("$1$","i");
egraph t1=transition(e1,"","1");

egraph e2=etape("$2$",t1,(-2,-1));
egraph t2=transition(e2,"","2");

egraph e3=etape("$3$",t1,(2,-1));
egraph t3=transition(e3,"","3");

egraph e4=etape("$4$",t1,(6,-1));
egraph t4=transition(e4,"","4");

egraph e5=etape("$5$",t4);
egraph t5=transition(e5,"","5");

egraph e6=etape("$6$",t5,(+2,-1));
egraph t6=transition(e6,"","6");

//Les vergences
liaison(t1,e2,e3,e4);
liaison(t2,t3,t5,e6);

//Le retour
liaison(t6,e1,(-5,0));


 

^ Actions simultanées

exemple_40.gif

//*************************
// exemple_40.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e10=etape("$10$","i");
egraph t10=transition(e10,"","10");

egraph e11=etape("$11$",t10,(-2,-1));
egraph t11=transition(e11,"","11");
egraph e12=etape("$12$",t11);

egraph e21=etape("$21$",t10,(2,-1));
egraph t21=transition(e21,"","21");
egraph e22=etape("$22$",t21);

egraph e31=etape("$31$",t10,(6,-1));
egraph t31=transition(e31,"","31");
egraph e32=etape("$32$",t31);
egraph t32=transition(e32,"","32");
egraph e33=etape("$33$",t32);

egraph t40=transition(e33,(-6,-1),"","40");
egraph e41=etape("$41$",t40);
egraph t41=transition(e41,"","41");

//Les vergences
liaison(t10,e11,e21,e31);
liaison(e12,e22,e33,t40);

//Le retour
liaison(t41,e10,(-5,0));

 

^ Actions simultanées avec alignement

exemple_41.gif

//*************************
// exemple_41.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e10=etape("$10$","i");
egraph t10=transition(e10,"","10");

// Pour aligner les étapes, il faut commencer par la branche la plus longue

egraph e31=etape("$31$",t10,(6,-1));
egraph t31=transition(e31,"","31");
egraph e32=etape("$32$",t31);
egraph t32=transition(e32,"","32");
egraph e33=etape("$33$",t32);

egraph e11=etape("$11$",t10,(-2,-1));
egraph t11=transition(e11,"","11");
egraph e12=etape("$12$",t11,e33);

egraph e21=etape("$21$",t10,(2,-1));
egraph t21=transition(e21,"","21");
egraph e22=etape("$22$",t21,e33);

egraph t40=transition(e12,(2,-1),"","40");
egraph e41=etape("$41$",t40);
egraph t41=transition(e41,"","41");

//Les vergences
liaison(t10,e11,e21,e31);
liaison(e12,e22,e33,t40);

//Le retour
liaison(t41,e10,(-5,0));

 

^ Les quatre retours

exemple_50.gif

//*************************
// exemple_50.asy
//*************************
//
//--------------------------
import Lib_Grafcet_2010_001;
//--------------------------

egraph e1=etape("$1$",(0,12));
egraph t4=transition((0,6),"","4");

liaison(t4,e1);

egraph e2=etape("$2$",(12,12));
egraph t5=transition((6,6),"","5");

liaison(t5,e2);

egraph e3=etape("$3$",(0,0));
egraph t6=transition((0,-6),"","6");

liaison(t6,e3,(3,0));

egraph e4=etape("$4$",(6,0));
egraph t7=transition((12,-6),"","7");

liaison(t7,e4,(3,0));

 


^ Gestion de défauts sur un plateau tournant

exemple_80.gif

[Solution exemple_e80.asy ]

^ Tri de boîtes

exemple_81.gif

[Solution exemple_81.asy ]

^ Un graphe complexe

exemple_82.gif

[Solution exemple_e82.asy]

^ Notes de version

Lib_Graph_2010_002 (en cours)

Lib_Graph_2010_001 (29.04.2010)


- 4723 -