# Automatisme : norme 1131-3 et GRAFCET/Le langage FBD de la norme 1131-3
## Le langage FBD (Function Block Diagram)

Function Block Diagram est traduit par Boîtes fonctionnelles dans wikipédia.
Le langage FBD (Function Block Diagram) est un langage graphique qui ressemble à la schématique en électronique numérique. Il y a quand même quelques différences :
Cela signifie que l’on peut donner un nom à un sous-graphe et que celui-ci peut être exécuté de manière conditionnelle. Par exemple dans la partie gauche de la figure ci-dessus, le OU du bas (nommé NOMMODIF) n'est exécuté que si "manual" et "b1" sont à un simultanément. Nous trouvons cependant la sémantique de ce genre de chose très peu claire : que se passe-t-il sur la sortie "cmd10" si manual" et "b1" ne sont pas simultanément à un ?
Il faut d’autre part éviter les boucles car il n'y a aucune information sur l’ordre d'exécution dans le réseau dessiné et certains programmes (comme à la figure ci-dessous) donnent un résultat différent suivant leur ordre d'exécution.
Il faut donc garder à l'esprit qu’il s'agit d'un programme et non d'un schéma destiné à être implanter matériellement comme en électronique.
Une autre différence est qu’il est possible de faire des liaisons entre blocs qui ont plusieurs fils. Cela ressemble à un bus mais les données transportées peuvent avoir une signification (nombre flottant ou temps par exemple).

## Quelques blocs fonctionnels standards (de la norme 1131-3)
### Détecteurs de fronts

Il existe deux blocs fonctionnels destinés à détecter des fronts : un pour les fronts montants (R_TRIG), un pour les fronts descendants (F_TRIG). Les voici présentés en image ci-contre.
Ils sont simples, une entrée "CLK" et une sortie "Q".

### Les compteurs

Il existe trois sortes de compteurs que l’on présente maintenant :
Dans l'esprit de la norme, les compteurs comptent ou décomptent toujours : PV n’est pas un max mais un seuil qui, quand il est dépassé, passe la sortie à 1. Mais l'envoi d'un front augmentera toujours CV (Current Value) pour CTU (U=Up) et diminuera CV pour CTD (D=Down).
En ce qui concerne CTUD, on remarquera une entrée "LD" qui charge la valeur présente sur "PV".

### Les timers

Les timers sont des dispositifs destinés à mesurer un temps. Il existe trois sortes de timer.
Comme nous pouvons le remarquer, les trois timers ont les mêmes entrées et les mêmes sorties. Puisque ces timers peuvent être utilisés avec d'autres langages (présentés plus loin), nous allons nous contenter d'une description du timer "TON".
Nous présentons le diagramme destiné à expliquer le fonctionnement du timer appelé TON.
"ET" Ellapsed Time (temps écoulé) varie sans arrêt quand les conditions nécessaires à son évolutions sont satisfaites. "PT" est un temps qui doit être choisi et entré dans le timer.

### Autres blocs fonctionnels

Citons d'autres blocs fonctionnels : bistable RS et SR, sémaphore (claim:BOOL,release:Bool;Busy:BOOL). Puisque le lecteur est sensé connaître la logique séquentielle, nous ne détaillerons pas ces blocs. Notons quand même que le sémaphore ne fait pas partie de la logique séquentielle standard mais nous ne l’utiliserons pas dans la suite de ce document (en tout cas sous forme de bloc).
| Introduction | Retour sur le graphe d'état – Langage LD de la norme 1131-3 |