# Automatisme : norme 1131-3 et GRAFCET/Retour sur le graphe d'état – Langage LD de la norme 1131-3
## Contacts et bobines

Le langage LD est composé de contacts (ou interrupteurs) qui doivent être considérées comme des entrées. Il est composé aussi de bobines qui sont elles des sorties (voir l’article correspondant dans wikipédia).
Le langage LD (Ladder Diagram ou langage Ladder) est plus connu chez nous comme langage à contacts. Comment implanter une fonction booléenne ? Les opérateurs de base étant le ET et le OU nous adopterons le principe suivant :
* interrupteurs en série = ET
* interrupteurs en parallèle = OU.
C'est la seule règle à connaître lorsqu'on programme en langage ladder. Il nous faut avouer quand même que les choses se compliquent un peu avec les équations de récurrences.
Bien distinguer les contacs qui sont des entrées et les bobines qui sont des sorties.
Il existe un certain nombre de modificateurs qu’il faut connaître :
* / = NOT, N=Negative pulse, P=Positive Pulse sont des modificateurs pour les contacts d'entrées.
* / = NOT N=Negative pulse, P=Positive Pulse, S=Set, R=Reset sont des modificateurs pour les bobines de sorties
L'exemple ci-contre est complet. Il utilise des blocs fonctionnels présentés au chapitre précédent. Cet aspect du langage sera seulement survolé dans ce chapitre.

## Graphe d'états

Lire le chapitre graphe d'états du projet Logique séquentielle. On y présente toutes les définitions pour comprendre ce qu'est un graphe d'états.
Nous sommes dans un livre d'automatisme et peut être des lecteurs savent ce qu'est un GRAFCET à ce point du cours (sinon il sera présenté plus loin, et pour vous, allez à la section suivante). Un graphe d'états est un GRAFCET pour lequel on a remplacé les étapes (rectangulaires) par des états (ronds) et pour lequel un jeton circule. Mais il ne peut y avoir qu'un seul jeton !

## Équations de récurrence

Lire le chapitre équations de récurrence du projet logique séquentielle.
Nous ne donnons que le résultat correspondant aux équations de récurrences de l'exemple ci-contre.
* ${{x_{1}}^{+}}=AC_{1}+{\overline {D_{1}}}\cdot x_{1}+Init=x_{3}\cdot e_{4}+x_{4}\cdot e_{3}+Init$
* ${{x_{2}}^{+}}=(AC_{2}+{\overline {D_{2}}}\cdot x_{2})\cdot {\overline {Init}}=(x_{1}\cdot e_{1}+{\overline {e_{2}}}\cdot x_{2})\cdot {\overline {Init}}$
* ${{x_{3}}^{+}}=(AC_{3}+{\overline {D_{3}}}\cdot x_{3})\cdot {\overline {Init}}=(x_{2}\cdot e_{2}+{\overline {e_{4}}}\cdot x_{3})\cdot {\overline {Init}}$
* ${{x_{4}}^{+}}=(AC_{4}+{\overline {D_{4}}}\cdot x_{4})\cdot {\overline {Init}}=(x_{1}\cdot {\overline {e_{1}}}+{\overline {e_{3}}}\cdot x_{4})\cdot {\overline {Init}}$

## Équations de sorties

Lire le chapitre Équations de sorties du projet logique séquentielle.
Les équations de sortie de l'exemple ci-dessus sont ainsi :
* $a_{1}=x_{1}$
* $a_{2}=x_{1}$
* $a_{3}=x_{3}+x_{4}$
* $a_{4}=x_{2}$

## Implantation des équations du graphe d'états en langage Ladder

Nous allons nous intéresser maintenant à l'écriture des équations de récurrence en langage Ladder. La méthode est différente suivant que les bobines sont normales ou de type R (Reset) et S (set).
L'entrée "Init" est un problème en soi. Elle n’est pas adaptée à l’utilisation des Automates Programmable Industriel. Une petite explication peut-être.
Il est normal d’utiliser une entrée spécifique appelée "Init" quand notre objectif est de réaliser une synthèse matérielle avec des circuits logiques (comme présenté dans un autre projet). Pour un automate programmable on utilisera jamais une entrée spécifique pour l'initialisation. En général il existe un mécanisme particulier pour gérer cette initialisation. Cela peut se faire à l'aide d'un bit interne ou d'une autre façon. Pour rester indépendant des fabricants d'automates, on utilisera bien dans la suite un interrupteur appelé "Init" sans se préoccuper de la façon dont on le réalise en pratique.

### Implantation des équations de récurrence avec bobines normales

Pour cette implantation on distingue arbitrairement les équations séquentielles (ou équations de récurrences) et les équations de sorties. Pourquoi ? Tout simplement parce que les équations de sorties seront utilisées sans aucun changement dans la section suivante.
Les variables associées aux états (notées $x_{i}$) sont présentes sur les contacts d'entrées et sur les bobines de sortie. C'est une caractéristique des équations de récurrences.
Remarquez aussi la présence du Init dont on a déjà discuté dans la section précédente.

### Implantation des équations de récurrence avec bobines mémorisées

Nous présentons la façon de faire sans gérer l'initialisation pour le moment.
La programmation des sorties se fait exactement de la même manière qu’à la section précédente.
Pour poursuivre plus loin, il nous faut gérer l'initialisation. Le principe est tout simple :
* pour l'état initial ajouter un OU "Init" sur la bobine SET
* pour tous les états normaux ajouter un OU "Init" sur la bobine RESET
Pour ne pas alourdir le texte de cette section, nous laissons de côté le problème du "Init" pour le moment.

### En résumé

Rien n'est plus parlant qu'une figure explicative. Voici en résumé les deux techniques pour implanter des équations de récurrences en langage Ladder.
Bien sûr une implémentation pratique nécessitera d'écrire les $AC_{i}$ et les $D_{i}$ en langage ladder.
Notez que les $D_{i}$ sont complémentés dans l'implantation avec bobine normale tandis qu’ils ne le sont pas dans l'implantation avec bobine mémorisée. Ce n’est pas une erreur. La compréhension du pourquoi vous ouvrira les portes de la compréhension des équations de récurrences.
| Le langage FBD de la norme 1131-3 | Le langage SFC de la norme 1131-3 |