Le but de ce document est de présenter les différents choix efféctués pendant le développement de l'application GRED.Nous présenterons successivement les variables globales du système, les choix en matiéres d'algorithmique et de représentation des données.

Les variables Globales

Le tableau globale gred

En premier lieu, le tableau gred contient des informations générales à tout l'éditeur de grafcet.

  1. gred(date) Variable contenant la date inutilisé dans la suite !
  2. gred(exe) Exécutable gred.
  3. gred(setup,localfilerc) contient le fichier de ressource de gred.
  4. gred(setup,userfilerc) contient le fichier de ressource utilisateur de gred.
  5. gred(setup) contient le repértoire de librairie de gred
  6. gred(setup,userlibs) contient le repértoire de librairie de l'utilisateur.
  7. gred(grafcets) Liste des grafcets en cours d'édition.
  8. gred(grafcetUID) Identificateur unique de grafcet/window.
  9. gred(uid) Identification unique utilisable pour la creation des widgets.
  10. gred(initialised) Vaut 1 quand l'initialisation de gred est terminé.
  11. gred(grafcetCourant) Gafcet en cours d'édition.
  12. gred(untitled) Nom de fichier par défaut.
  13. gred(etape,nameIndex) Nom à partir duquel le nom des étapes sera détérminé. Si ce champs vaut, par exemple, "T3W", toutes les transirtions auront pour nom: "TxW" ou x est un entier supérieur ou égales à 3.
  14. gred(transition,nameIndex) Nom à partir duquel le nom des transitions sera détérminé.
  15. gred(etape,options) Liste des champs associés à une étape.
  16. gred(etape,type) Liste des type associé à une étape. A valeur dans la liste {Normal, Initial, Hyper, Macro, MacroDebut, MacroFin}.
  17. gred(etape,name) Nom associé aux types définies précédement. A valeur dans {"Etape normale", "Etape initiale", "Hyper étape", "Macro étape", "Début de macro étape", "Fin de macro étape"}
  18. gred(etape,state) Liste des état d'une étape. A valeur dans: {active, inactive}.
  19. gred(transition,options) Liste des champs associés à une transition. A valeur dans {name, receptivity, comment}.
Les préférences utilisateurs:
  1. gred(etape,border)
  2. gred(userMail) Nom de l'utilisateur.
  3. gred(grid) Taille de grille.
  4. gred(admin) Variable positionnée à "Vrai" si l'utilisateur est un administrateur, vaut "faux" sinon.
  5. gred(fontSize) Taille du texte dans le canvas.
  6. gred(sequence,yStep) Pas entre étape/transition pour la création de séquence.
  7. gred(grid,color) Couleur de la grille.
  8. gred(defaultSourceObjectType) Type d'objet source à créer par défaut.
  9. gred(etape,height) Largeur d'une étape.
  10. gred(look,etapeBackground) Couleur du fond d'étape.
  11. gred(transition,width) Largeur d'une transition.
  12. gred(transition,showName) Afficher le nom de la transition oui/non.
  13. gred(transition,height) Hauteur d'une transition.
  14. gred(transition,link) Longueur mini du lien coté d'une transition.
  15. gred(doubleLine,height) Distance entre les doubles lignes d'une transition.
  16. gred(link,width) Epaisseur des liens.
  17. gred(link,handlesize) Taille des poignées d'édition des liens.
  18. gred(doubleLine,xOffset) Longueur minimale du déplacement latéral d'une double ligne.
  19. gred(doubleLine,yOffset) Longueur minimale du segment de droite entre une transiton et sa double ligne.
  20. gred(look,transitionBackground) Couleur du fond de transition.
  21. gred(look,canvasBackground) Couleur du fond de la fenêtre principale.
  22. gred(virtualColor) Couleur des objets virtuels.
  23. gred(drag,limit) Limite de déclenchement du mode Drag.
  24. gred(sel,color) Couleur de la sélection.
  25. gred(selectMode) Mode de capture de la sélection.
  26. gred(Meta) Définition de la touche Meta.
  27. gred(shift) Définition de la touche Shift.
  28. gred(arrowScroll) Mode de déplacement à l'aide des flèches.

Le tableau globale gred.grafcetX

En second lieu, le tableau gred.grafcetX contient des informations relatives à la toplevel .grafcetX. Il contient des informations comme:
  1. gred.grafcetX(isDirty) vaut:
  2. gred.grafcetX(oidSource) Contient le nom du l'oid source que l'on vient de cliquer.
  3. gred.grafcetX(oidDesti) Contient le nom du l'oid destination que l'on vient de cliquer.
  4. gred(mouse,xPress) et gred(mouse,yPress) sont deux variables mémorisant la position du dernier click dans le canvas.
  5. gred.grafcetX(shiftActif) Vaut 1 si la touche "Shift" est appuyée.
  6. gred.grafcetX(status) Contient le dernier message d'erreur.
  7. gred.grafcetX(statusLog) Contient toutes les erreurs levées pendant l'édition du grafcet.
Remarque: X est un entier qui s'incrémente à chaque nouveau grafcet (cf variable gred(grafcetUID))

Le tableau globale grafcet.grafcetX

Ensuite, le tableau grafcet.grafcetXcontient des informations relatives à un grafcet.
Ici, X est un entier qui s'incrémente à chaque nouveau grafcet (cf variable gred(grafcetUID)).

Typiquement, dans la mesure où dans la version actuelle une fenêtre ne peut éditer qu'un seul grafcet. La fenêtre toplevel .grafcetX contiendra le grafcet contenu dans le tableau globale grafcet.grafcetX...

Informations globales

Les informations globales aux grafcets en cours d'edition sont:
  1. gred.grafcetX(filename) Nom du fichier en cours d'édition dans la fenêtre.
  2. grafcet.grafcetX(EtapeNameId) Nom à partir duquel le nom des étapes sera détérminé. Si ce champs vaut, par exemple, "T3W", toutes les transirtions auront pour nom: "TxW" ou x est un entier supérieur ou égales à 3. Vaut gred(etape,nameIndex) par défaut.
  3. grafcet.grafcetX(TransNameId) Nom à partir duquel le nom des transitions sera détérminé. Vaut gred(transition,nameIndex) par défaut.
Ce tableau contient aussi des informations nécessaires pour chaque type d'oid contenu dans un grafcet:

Informations concernant les étapes

On distingue les étapes les unes des autres par l'intermédiaire d'un identificateur du type oidEtapeY où Y est un entier qui s'incrémente à chaque nouvelle étape. Y prend ses valeurs suivant la variables grafcet.grafcetX(EtapeUId). Pour chaque étapes d'oid oidEtapeY du grafcet, on mémorise les champs:
  1. grafcet.grafcetX(oidEtapeY) qui vaut {} tant que cet objet existe. Cette variable permet de savoir si une étape d'oid oidEtapeY existe dans le grafcet.
  2. grafcet.grafcetX(oidEtapeY,x) et grafcet.grafcetX(oidEtapeY,y) continennent les coordonnées de l'étape.
  3. grafcet.grafcetX(oidEtapeY,name) est le nom l'étape.
  4. grafcet.grafcetX(oidEtapeY,type) prends ses valeurs dans la liste {Normal, Initial, Hyper, Macro, MacroDebut, MacroFin}. Permet de définir le type de l'étape. On associe en plus au étape de type Macro un champs grafcet.grafcetX(oidEtapeY,file) correspondant au fichier contenant la description de la Macro.
  5. grafcet.grafcetX(oidEtapeY,file) contient un nom de fichier pour les étape de type macro étape (i.e. de type Macro).
  6. grafcet.grafcetX(oidEtapeY,state) prend ses valeurs dans le couple {active,inactive}. Permet de préciser si une variable est oui ou non active.
  7. grafcet.grafcetX(oidEtapeY,comment) contient un commentaire lié à l'etape. Contient une liste constituée des coordonnées du commentaire (relative par rapport à la position de l'etape) et la valeur du commentaire.
  8. grafcet.grafcetX(oidEtapeY,action) est une liste de listes décrivant les actions associées à l'étape. Par exemple l'action définit par la liste {{A {ACTION 1} B}} correspond à une action de nom "ACTION 1" associé à un symbole A et à une référence B.
  9. grafcet.grafcetX(oidEtapeY,command) décrit la commande permettant de regénéré l'étape. Ce champs permet de redessiner facilement un grafcet, une sauvegarde rapide du grafcet en cours d'édition.

Informations concernant les transitions

On distingue les transitions les unes des autres par l'intermédiaire d'un identificateur du type oidTransY où Y est un entier qui s'incrémente à chaque nouvelle transition. Y prend ses valeurs suivant la variables grafcet.grafcetX(TransUId). Pour chaque transition d'oid oidTransY du grafcet, on mémorise les champs:
  1. grafcet.grafcetX(oidtransY) qui vaut {} tant que cet objet existe. Cette variable permet de savoir si une transition d'oid oidTransY existe dans le grafcet.
  2. grafcet.grafcetX(oidTransY,name) est le nom la transition.
  3. grafcet.grafcetX(oidTransY,x) et grafcet.grafcet1(oidTrans1,y) sont les coordonnées de la transition.
  4. grafcet.grafcetX(oidTransY,receptivity) mémorise la recéptivité lié à une transition.
  5. grafcet.grafcetX(oidTransY,comment) est le commentaire associé à une transition. Contient une liste constituée des coordonnées du commentaire (relative par rapport à la position de l'etape) et la valeur du commentaire.
  6. grafcet.grafcetX(oidTransY,command) décrit la commande permettant de regénéré la transition. Ce champs permet de redessiner facilement un grafcet, une sauvegarde rapide du grafcet en cours d'édition.

Informations concernant les liaisons

On distingue les transitions les unes des autres par l'intermédiaire d'un identificateur du type oidLinkXEtapeYTransZ où X est un entier qui s'incrémente à chaque nouvelle transition. Y prend ses valeurs suivant la variables grafcet.grafcet1(LinkUId). L'exemple précédent dénote une liaison liant l'étape d'oid oidEtapeY et la transition d'oid oidTransZ.

Choix de représentation des données

Nous allons commencer par présenter le principe de gestion des commentaires.

La gestion des commentaires

Les commentaires sont traitées de la même façon que ce soit pour les étapes que pour les transitions. Un commentaire est une liste de 3 éléments: Lorsque l'on clique sur un commentaire (d'étape ou de transition), on rentre en mode "commentEdit". Ce mode permet de définir les bindings permettant de gérer le déplacement du commentaire. En mode "commentEdit", on sélectionne un commentaire. Ensuite, on peut le "drag'n dropper" pour le déplacer. La gestion est établi par plusieurs procédures: La procédure LeaveModeCommentEdit permet de quitter le mode "commentEdit".