# Automatisme : norme 1131-3 et GRAFCET/Le langage SFC de la norme 1131-3

Le Sequential function chart (SFC) est un langage graphique de programmation des Automates Programmable Industriel défini dans la norme CEI 61131-3. Nous arrivons avec ce chapitre au troisième langage graphique de la norme.
Ce langage est une interprétation assez libre et plus permissive du grafcet dont il est inspiré : le grafcet est dédié à la spécification, alors que SFC est plus appliqué à la programmation.
L'ensemble de ce chapitre concernera les deux langages, mais on utilisera, certainement de manière abusive, le terme grafcet mieux connu chez les francophones.

## Le GRAFCET

Nous présentons dans cette section tous les concepts importants relatifs aux grafcets. Cette présentation est concise et méritera certainement d'y revenir pour en assimiler toute l'essence. Il est important en particulier d'assimiler la différence entre une étape et un état.
Le problème important de l'obtention d'un grafcet à partir d'un cahier des charges n’est pas abordé dans ce cours.

### Étapes

Une étape est représentée par un carré. Cette représentation a volontairement été choisie comme telle pour ne pas être confondue avec la notion d'état. Elle peut avoir deux états :
* état actif (une marque à l'intérieur du carré)
* état inactif
Remarquez dans cette figure la partie droite qui décrit ce qu'est une étape en général. Elle est forcément liée à un simple trait horizontal en entrée, en sortie ou aux deux.
On appellera un simple trait horizontal un OU logique. S'il est avant l'étape on dira qu’il réalise une convergence en OU et s'il est en sortie on dira qu’il réalise une divergence en OU.
Règle 1 : La situation initiale d'un grafcet caractérise le comportement de la partie commande vis-à-vis de la partie opérative et correspond aux étapes actives au début du fonctionnement de la partie commande.
* la situation initiale peut n'être obtenue qu'une seule fois à la mise sous tension
* on peut utiliser plusieurs étapes initiales

### Transitions

Une transition est représentée par un trait horizontal. À chaque transition est associée une réceptivité.
* Une transition peut être liée en amont à un double trait horizontal qui s’appelle alors une convergence en ET. Si c’est en aval que l’on a un double trait horizontal, on parle d'une divergence en ET.
* Lorsque l’on a des doubles traits horizontaux, la terminologie associée est le parallélisme structural.
* Une transition est validée lorsque toutes les étapes immédiatement précédentes reliées à cette transition sont actives.
Règle 2 : l'évolution de la situation d'un grafcet correspondant au franchissement d'une transition ne peut se faire :
* que lorsque cette transition est validée
* et que la réceptivité associée à cette transition est vraie.
Lorsque ces deux conditions sont réunies, la transition devient franchissable et elle est obligatoirement franchie.
Règle 3 : Le franchissement d'une transition provoque :
* la désactivation de toutes les étapes immédiatement précédentes reliées à cette transition.
* l'activation de toutes les étapes suivantes reliées à cette transition.
Un exemple sera plus parlant.
Remarquez encore une fois sur la figure les doubles traits horizontaux qui décrivent le parallélisme.
Règle 4 : plusieurs transitions simultanément franchissables sont simultanément franchies
exemple : montrer que ces deux représentations sont équivalentes
Règle 5 : si au cours du fonctionnement de l'automatisme une même étape doit être simultanément activée et désactivée, elle reste active.
exemple :

### Règles de syntaxe

Un grafcet est un graphe comportant des étapes et des transitions. Comme il s'agit d'un langage graphique de programmation les utilisateurs n'ont pas toujours conscience qu’il obéit quand même à une syntaxe. On trouve par exemple dans l’article wikipédia sur le grafcet :
* L'alternance étape-transition doit être respectée quel que soit le chemin du graphe parcouru.
* Deux étapes ne doivent jamais être reliées directement.
* Deux transitions ne doivent jamais être reliées directement.
Arrivé à ce point il serait assez normal d’être un peu perdu avec les règles de syntaxe. Nous allons donc les formuler autrement :
* Si vous avez un simple trait horizontal vous pourrez y connecter plusieurs transitions mais une seule étape !
* Si vous avez un double trait horizontal vous pourrez y connecter plusieurs étapes mais une seule transition !
Ne vous inquiétez pas ces règles seront assimilées au fur et à mesure. Même s'il s'agit de règles graphiques vous ne les appliquerez pas correctement tant que vous n'avez pas vu de grafcet.

### Les actions

Les étapes d'un grafcet peuvent être associées à des actions comme pour les graphes d'états. Ce point sera détaillé plus tard, mais un exemple est donné.
À partir de maintenant, nous allons rencontrer un certain nombre de grafcet d'exemple. Nous n'avons pas encore abordé les problèmes d'obtentions des grafcets. Ainsi on vous demande de prendre les grafcets d'exemples comme ils viennent et juste de comprendre ce qu’ils font.

## Équations de récurrences. Passage GRAFCET graphe d'états

La différence entre un grafcet et un graphe d'états (présenté au chapitre précédent) est le nombre de jetons : un seul pour le graphe d'état et un ou plusieurs pour le GRAFCET.

### Équation de récurrences

La méthode simple consiste à écrire pour chacune des étapes les conditions d'activations (notées $AC_{i}$) et les conditions de désactivations (notées $D_{i}$).
La condition d'activation $AC_{i}$ s'obtient en se posant la question : comment activer l'étape i si elle n’est pas active ?
La condition de désactivation s'obtient quant à elle en se posant la question : quelles sont les conditions nécessaires pour que le jeton quitte l'étape i s'il est dedans ?
Avec ces conditions on va pouvoir former les équations de récurrences :
* Pour la ou les étapes initiales : $x_{i}^{+}=AC_{i}+{\overline {D_{i}}}\cdot x_{i}+Init$
* Pour les étapes non initiales : $x_{i}^{+}=(AC_{i}+{\overline {D_{i}}}\cdot x_{i})\cdot {\overline {Init}}$
L'indice i parcourant toutes les étapes, il y a autant d'équations de récurrences que d'étapes. En terme matériel, cela signifie que l’on utilisera un bit mémoire par étape. Bien sûr, un codage des états (abordé plus loin) permet de faire des économies de ce côté là mais rappelez-vous qu’à ce point on a que des étapes et pas encore des états.
Nous allons partir d'un GRAFCET assez général pour réaliser un exemple complet.
Prenez un peu de temps pour relire l'équation de AC1 et celle de D3 qui prennent en compte le parallélisme. C'est le seul type de situation qui diffère du graphe d'état.

### Transformation en graphe d'états

Transformer un GRAFCET en graphe d'états est toujours possible. L'intérêt de la chose est qu'une fois le graphe d'évolution obtenu, il est possible de compter ses états. L'exemple de la section précédente nous semble être un bon point de départ :
Cette figure transforme un GRAFCET à gauche en un graphe d'états à droite. La notation {2,4} dans un état indique que l'état correspond à l'étape 2 et l'étape 4 actives (avec un jeton) dans le GRAFCET.
On dit que l'état {2,4} correspond au marquage de l'étape 2 et de l'étape 4 (un jeton dans cacune des étapes). Tout marquage doit être accessible pour être compté comme un état. Par exemple le marquage symbolisé par {1,2,4} n’est pas accessible, c'est-à-dire qu’il n'existe aucune séquence sur les entrées qui amène le GRAFCET de son état initial {1} vers ce marquage {1,2,4}.
Dans cet exemple vous obtenez un graphe d'états qui comporte 5 états pour un GRAFCET qui comporte 5 étapes.
En principe, le graphe d'états comporte plus d'états que le GRAFCET correspondant comporte d'étapes. C'est ce qui fait le gros intérêt des grafcets.
Nous allons présenter maintenant une opération qui s’appelle codage des états. Au fur et à mesure de l'évolution des technologies la connaissance de cette opération est de moins en moins indispensable. Elle ne s'avérait importante qu’à une époque largement révolue où la taille de la mémoire pour les états était limitée.

### Codage des états et équations de récurrences

Cette section est difficile à comprendre. Même si elle ne fait intervenir que des notions du niveau indiqué, il est conseillé d'avoir du recul sur les notions présentées pour bien assimiler ce qui suit. Cependant, ce contenu n'est pas fondamental et peut être sauté en première lecture.
Il est possible de partir d'un grafcet, de le transformer en graphe d'états comme déjà présenté. Une fois que l’on connait le nombre d'états, on peut choisir un code des états et transformer ensuite le tout en équations de récurrences. Voici un exemple :
Ce qui est nouveau est le tableau complètement à droite d'assignation des états à des codes. Ce tableau permet de remplir ensuite le tableau état présent état futur avec ces codes, pour en déduire finalement les équations de récurrences. Il est facile de tirer de cette figure :
* $Q_{0}^{+}={\overline {Q_{2}}}\cdot {\overline {Q_{1}}}\cdot {\overline {Q_{0}}}\cdot e_{1}+{\overline {Q_{2}}}\cdot {\overline {Q_{1}}}\cdot Q_{0}\cdot {\overline {e_{2}}}\cdot {\overline {e_{3}}}+{\overline {Q_{2}}}\cdot {\overline {Q_{1}}}\cdot Q_{0}\cdot e_{3}\cdot {\overline {e_{2}}}+{\overline {Q_{2}}}\cdot Q_{1}\cdot Q_{0}\cdot {\overline {e_{2}}}$
* $Q_{1}^{+}={\overline {Q_{2}}}\cdot {\overline {Q_{1}}}\cdot Q_{0}\cdot e_{2}\cdot {\overline {e_{3}}}+{\overline {Q_{2}}}\cdot Q_{1}\cdot {\overline {Q_{0}}}\cdot {\overline {e_{3}}}+{\overline {Q_{2}}}\cdot Q_{1}\cdot Q_{0}\cdot {\overline {e_{2}}}$
* $Q_{2}^{+}={\overline {Q_{2}}}\cdot {\overline {Q_{1}}}\cdot Q_{0}\cdot e_{3}\cdot e_{2}+{\overline {Q_{2}}}\cdot Q_{1}\cdot {\overline {Q_{0}}}\cdot e_{3}+{\overline {Q_{2}}}\cdot Q_{1}\cdot Q_{0}\cdot e_{2}+Q_{2}\cdot {\overline {Q_{1}}}\cdot {\overline {Q_{0}}}\cdot {\overline {e_{4}}}$
La complexité des équations que l’on obtient est assez dépendante du code choisi pour les états. Il existe des méthodes pour choisir le code optimal (Huffman) mais on ne les présente pas ici.
| Retour sur le graphe d'état – Langage LD de la norme 1131-3 | Transitions, Actions et temps |