Aller au contenu

Les Monostables _M

Un monostable est un bit interne de la mémoire d'information, de classe _M.

Chaque monostable a pour valeur booléenne soit 0, soit 1. Il peut etre utilisé dans une EXPRESSION, ou dans une LISTE_ACTIONS

Déclarer un Monostable

Dans la zone d'ALIAS, déclarez un monostable de la manière suivante:

#define ACRONYME <-> _M(libelle="Ceci est mon monostable");

La définition commence par le mot clé #define, puis une chaine de caractères représentant l'ACRONYME de l'entrée, puis une double flèche (un inférieur « < », un tiret « - », un supérieur « > »), la classe _M, un couple de parenthèses, et enfin un point virgule terminal.

De manière optionnelle, il est possible d'adjoindre un libellé au monostable en lui ajoutant l'option libelle.

Les options d'un monostable

Options à la déclaration

  • libelle: permet de documenter le rôle du monostable.
  • groupe: permet de créer un groupe de monostables mutuellement exclusifs. Lorsqu'un monostable du groupe est activé, tous les autres monostables du même groupe sont automatiquement remis à 0. Le groupe est représenté par un entier dont la portée est limitée au module D.L.S propriétaire.

Exemple :

/* Un seul mode actif à la fois parmi les trois */
#define MODE_AUTO   <-> _M(libelle="Mode automatique",  groupe=1);
#define MODE_MANUEL <-> _M(libelle="Mode manuel",       groupe=1);
#define MODE_REPOS  <-> _M(libelle="Mode repos",        groupe=1);

Options d'usage dans une EXPRESSION

  • edge_up: permet de ne prendre en compte que les fronts montants (vrai lorsque l'entrée passe de 0 à 1)
  • edge_down: permet de ne prendre en compte que les fronts descendants (vrai lorsque l'entrée passe de 1 à 0)

Positionnement

Prenons en exemple:

/* Entre 10h et 11h, on veut chauffer */
- MA_CONDITION → MON_MONOSTABLE;

Si MA_CONDITION est VRAIE, alors MON_MONOSTABLE devient VRAI.

Si MA_CONDITION devient FAUSSE alors MON_MONOSTABLE devient FAUX également.

Tip

De part la nature evenementiel des monostables, il est conseillé de n'avoir qu'une seule et unique ligne D.L.S positionnant un monostable donné.

Exemple d'usage

/* Nous sommes dans le DLS "PORTE" */
#define WANT_CHAUFFE <-> _M (libelle="Demande de chauffe");

Usage dans une EXPRESSION

/* Entre 10h et 11h, on veut chauffer */
- _HEURE > 10:00 . _HEURE < 11:00 → WANT_CHAUFFE;

/* Si WANT_CHAUFFE passe de 0 à 1, MON_BISTABLE est positionné à 1 */
- WANT_CHAUFFE(edge_up) → MON_BISTABLE;

/* Si WANT_CHAUFFE passe de 1 à 0, MON_BISTABLE est positionné à 0 */
- WANT_CHAUFFE(edge_down) → MON_BISTABLE;

Warning

Un monostable ne peut etre positionné que dans le module D.L.S à qui il appartient. Le positionnement d'un monostable d'un autre module D.L.S lèvera une erreur à la compilation.