# Grafcet

Le Grafcet (Graphe Fonctionnel de Commande Étape Transition) est un mode de représentation et d'analyse d'un automatisme, particulièrement bien adapté aux systèmes à évolution séquentielle, c'est-à-dire décomposable en étapes. Il est dérivé du modèle mathématique des réseaux de Petri.
Le Grafcet est donc un langage graphique représentant le fonctionnement d'un automatisme par un ensemble :
* d'étapes auxquelles sont associées des actions ;
* de transitions entre étapes auxquelles sont associées des conditions de transition (réceptivités) ;
* des liaisons orientées entre les étapes et les transitions.
Son nom est l'acronyme à la fois de « graphe fonctionnel de commande étapes / transitions » et, non officiellement, de « graphe du groupe AFCET (Association française pour la cybernétique économique et technique) ».

## Historique

Le Grafcet est dérivé des réseaux de Petri, définis en 1962, leurs approches respectives ayant bien des points communs.
En 1975, le groupe de travail Systèmes logiques de l'AFCET crée la Commission de Normalisation de la représentation du cahier des charges d'un automatisme logique, qui publie en 1977 son rapport, acte de naissance du Grafcet.
Le Grafcet est d'abord normalisé par l'AFNOR en juin 1982 sous la référence NF C03-190 et le titre Schémas, diagrammes, tableaux : diagramme fonctionnel "GRAFCET" pour la description des systèmes logiques de commande. Cette norme sera revue en septembre 1995.
Le Grafcet devient une norme internationale en 1987 sous la référence IEC/CEI 848, puis IEC/CEI 60848 en 2002 et 2013. La norme européenne correspondante est l'EN 60848, avec le titre français Langage de spécification GRAFCET pour diagrammes fonctionnels en séquence.

## Mode de représentation

Le mode de représentation qui est normalisé par l'Union technique de l'électricité (UTE) est le suivant :
* Une étape est représentée par un carré repéré par un numéro identificateur. Une étape active peut être désignée par un point au-dessous du numéro. Les actions associées sont indiquées de façon littérale ou symbolique, dans un rectangle relié à la partie droite. Une étape initiale est représentée par un carré doublé. (En bleu, fig. ci-contre)
* Une liaison orientée est représentée par une ligne, parcourue par défaut de haut en bas ou de gauche à droite. Dans le cas contraire, on utilise des flèches. On évite les croisements. (En noir, fig. ci-contre)
* Une transition entre deux étapes est représentée par une barre perpendiculaire aux liaisons orientées qui la relient aux étapes précédente(s) et suivante(s). Une transition indique la possibilité d'évolution entre étapes. À chaque transition est associée une réceptivité inscrite à droite de la barre de transition. Une réceptivité est une condition logique qui permet de distinguer parmi toutes les combinaisons d'informations disponibles celle qui est susceptible de faire passer le système aux étapes suivantes (En rouge, fig. ci-contre).

## Séquence unique et séquences multiples

1. Séquence unique : un automatisme est décrit par un grafcet à séquence unique lorsqu'il peut être représenté par un ensemble de plusieurs étapes formant une suite dont le déroulement s'effectue toujours dans le même ordre. (Le grafcet ci-dessus en est un exemple)
2. Séquences multiples simultanées : lorsque le franchissement d'une transition conduit à activer plusieurs étapes, les séquences issues de ces étapes sont dites « séquences simultanées ». Les séquences simultanées débutent toujours sur une réceptivité unique et se terminent toujours sur une réceptivité unique. En effet, les différentes séquences « démarrent » en même temps puis évoluent ensuite indépendamment les unes des autres. Ce n'est donc que lorsque toutes les étapes finales de ces séquences sont actives simultanément (ce qui se produit souvent après attente réciproque) que l'évolution peut se poursuivre par le franchissement simultané d'une même transition. Le début et la fin des séquences simultanées sont représentés par deux traits parallèles (en rouge, fig. ci-contre), qui ne constituent pas des entités spécifiques du grafcet, mais qui doivent être compris comme l'élargissement de l'entrée ou de la sortie de la transition. (On parle parfois de « divergence » et de « convergence en ET » pour cette représentation.)
3. Séquences multiples exclusives : Lorsque, à partir d'une étape, on peut effectuer un choix entre plusieurs séquences possibles conditionnées par plusieurs réceptivités exclusives, c'est une « sélection de séquences » ou « aiguillage ». Pour une meilleure lisibilité, les différentes séquences possibles sont installées sous un trait horizontal (en rouge fig. ci-contre) qui représente l'élargissement de la sortie de l'étape, et se retrouvent par un trait analogue représentant l'entrée de l'étape à nouveau commune. D'une façon analogue au double trait vu ci-dessus, on parle de « divergence » et de « convergence en OU » pour cette représentation.
Deux cas particuliers de sélection de séquences se rencontrent fréquemment dans la plupart des automatismes séquentiels. Ce sont le saut d'étape et la reprise de séquence :
* Le saut d'étapes permet de sauter un certain nombre d'étapes si une condition logique est réalisée (c'est le cas général, avec une branche vide d'action).
* La reprise de séquence permet de répéter une même séquence jusqu'à ce que la réceptivité de fin de séquence soit vraie.
Si les réceptivités ne sont pas exclusives (par exemple, si c12 et c13 peuvent être vraies au même moment), conformément à la règle d'évolution n°4 (cf. ci-dessous), les transitions correspondantes seront franchies simultanément : contrairement à ce qui se passe avec un réseau de Petri, il y a "partage du jeton". Cela peut souvent correspondre à une anomalie de fonctionnement : il y a donc lieu d'examiner soigneusement les réceptivités des transition issues d'une même étape, dans la majorité des cas un fonctionnement correct impliquera que ces réceptivités soient exclusives. Un cas fréquent consistera à rendre prioritaire une des transitions de la "divergence OU". Dans le cas où la vérification simultanée des réceptivités de transitions "en conflit" - i.e. issue d'une même étape - correspondrait à un comportement admissible, il peut être conseillé de le faire apparaitre explicitement dans le grafcet, en ajoutant une transition supplémentaire correspondant à ce cas de fonctionnement.

## Règles d'évolution
### Règles de syntaxe

* L'alternance étape-transition doit être respectée.
* Deux étapes ne doivent jamais être reliées directement.
* Deux transitions ne doivent jamais être reliées directement.
Les flèches sont inutiles, elles ne participent pas à la syntaxe mais aident à la lecture.

### Règles d'évolution

* L'initialisation : une situation initiale est caractérisée par le fait qu'un certain nombre d'étapes sont actives au début du fonctionnement. Ces étapes sont repérées sur le grafcet par un double carré.
* Le franchissement d'une transition : une transition est soit validée soit non validée. Elle est validée lorsque toutes les étapes immédiatement précédentes sont actives (voir le tableau suivant). Elle ne peut être franchie
** que lorsqu'elle est validée
** et que la réceptivité associée est vraie.
* L'évolution des étapes actives : le franchissement d'une transition entraîne l'activation de toutes les étapes immédiatement suivantes et la désactivation de toutes les étapes immédiatement précédentes.
* Évolution simultanée : plusieurs transitions simultanément franchissables sont simultanément franchies. Par exemple, sur la figure ci-contre, si la variable c est vraie, le grafcet va évoluer vers la désactivation simultanée des étapes 5 et 10 et l'activation simultanée des étapes 6 et 11.
* Activation et désactivation simultanées : si au cours du fonctionnement, une même étape doit être simultanément désactivée et activée, elle reste ACTIVE
Franchissabilité d'une transition (cf point 2) :
| Étape active | aucune | aucune | 5 | 5 |
| Transition validée | non | non | oui | oui |
| Réceptivité vraie | non | oui | non | oui |
| Transition franchissable | non | non | non | oui |

## Nature des actions

Le critère de classification des actions les plus utilisées est : la durée de l'action comparativement à la durée de l'étape :
* Action continue : l'action se poursuit tant que l'étape à laquelle elle est associée est active. Cela se traduit par le diagramme temporel (chronogramme 1) ci-contre.
* Action conditionnelle : l'action est exécutée si, en plus de l'activité de l'étape à laquelle elle est associée, une condition logique spécifiée est vraie (voir chronogramme 2 ci-contre). Ces actions conditionnelles sont particulièrement importantes car elles permettent, dans une étape, de réaliser une combinatoire locale en vue, par exemple, d'exécuter l'action seulement pendant un certain temps, ou après un certain temps d'activité de l'étape (voir les chronogrammes 3 et 4 ci-contre).
* Action : pour maintenir la continuité d'une action devant se prolonger pendant l'activité de plusieurs étapes, il est possible :
** de répéter l'action continue dans toutes les étapes concernées ;
** de mémoriser l'action par des fonctions mises à 1 (SET) et mises à zéro (RESET).
    La figure 4 ci-contre présente ces différentes méthodes équivalentes de maintien d'une action sur plusieurs étapes.

## Nature des réceptivités

Il s'agit toujours du résultat d'une expression booléenne unique pouvant faire intervenir
* Des états de variables booléennes (état direct, front, fin de temporisation...)
* Des comparaisons sur des valeurs numériques.
* Des tests sur les états actifs d'étapes (permis mais à éviter pour une meilleure lisibilité).
* etc.

## Macro-étapes

Une macro-étape est un moyen de représentation d'un ensemble unique de transitions et étapes en une seule étape : la macro-étape. Une macro-étape Mi peut être complètement remplacée par son expansion qui contient une étape d'entrée Ei et une de sortie Si. (voir image ci-contre)
Ce moyen de représentation peut donc être considéré comme un « zoom » qui permet de simplifier la lecture de Grafcet de taille importante. Une expansion ne peut être utilisée qu'une seule fois : son utilisation est unique et elle ne doit pas être confondue avec un sous-programme, à l'instar d'autres langages de programmation.
Si l'on veut utiliser une même expansion, il faut la dupliquer. Cela revient, en fait, à faire une instance de l'expansion par appel, à l'instar des appels de fonctions dans la norme CEI 61131-3.

## Différences avec la norme CEI 61131-3

La norme CEI 61131-3 (1993) normalise cinq langages dont le langage Sequential function chart (SFC) qui est très proche du Grafcet. Plusieurs différences peuvent néanmoins être notées :
* L'objectif du langage :
** Le SFC est un langage de programmation destiné à être implanté sur contrôleur, comme un automate programmable industriel par exemple.
** Le Grafcet est un langage de représentation qui peut être utilisé pour spécifier un comportement attendu ou pour décrire le comportement de systèmes automatisés existants.
* La syntaxe :
** Contrairement au Grafcet, les transitions du SFC sont ordonnées en priorités dans le cas de divergence en OU.
** Les actions du SFC peuvent être lancées suivant trois modes : P1, P0, C pour, respectivement, à l'activation, à la désactivation, en continu.
* L'évolution / l'exécution :
** Le SFC est exécuté sur un contrôleur, avec une notion de PRE et POST traitements, notion inexistantes en Grafcet qui est fait pour évoluer.