Programmation D.L.S: la zone de logique
C'est dans cette zone où toute l'intelligence logique du plugin va résider. C'est elle qui définit l'ensemble des comportements attendus en fonction de l'environnement du module.
Cette zone est composée d'une suite de lignes (appelée dans la suite « ligne D.L.S ») dont le contenu suit la syntaxe suivante :
- EXPRESSION -> LISTE_ACTIONS;
Elle commence par un tiret « - », suivi d'une EXPRESSION, suivi par une flèche (tiret « - » puis supérieur « > »), une liste d'actions séparées par des virgules et enfin, un point virgule terminal.
Lier une expression à une action
Une EXPRESSION est un ensemble d'unités Booléennes
ou Arithmétiques
liées entre elles par des opérateurs de base.
Warning
Les operateurs ne peuvent être appliqués à des EXPRESSION de types différents. Par exemple, il n'est pas possible
d'ajouter un booléen
à une valeur arithmétique
.
La « LISTE_ACTIONS » est une liste d'une ou plusieurs ACTIONS, séparées par des virgules.
Voici un exemple de syntaxe :
/* Un exemple */
- PORTE:OUVERTE . ( /VERROU + TEMPO_BIPE ) → VISUEL_PORTE(mode="ouvert,couleur="red");
Les unités booléennes
Les unités booléennes
sont les suivantes:
Classe | Représentation | Exemple | Description |
---|---|---|---|
_DI | Entrée TOR | PORTE:OUVERTE | Une entrée TOR peut avoir 2 valeurs : 0 ou 1 et représente l'état physique d'un capteur |
_DO | Sortie TOR | VANNE:OUVRIR | Une sortie TOR peut avoir 2 valeurs : 0 ou 1, et représente l'état souhaité d'un actionneur |
_B | Bistable | SYS:FLIPFLOP_1SEC | Bit dont la valeur est 0 ou 1, maintenu dans le temps. Il faut explicitement coder la mise à zero du bit pour que celui-ci soit effectivement remis à 0. |
_M | Monostable | SYS:TOP_1SEC | Les monostables sont des bits furtifs, non maintenus dans le temps. Si la condition initiale qui imposait le maintien du bit n'est plus vraie, ce bit va alors tomber de lui-meme à 0. |
_T | Temporisation | GARAGE:TEMPO_OUV_PORTE | Les temporisations permettent de décaler, maintenir ou limiter dans le temps un evenement particulier |
_HORLOGE | Horloge | SALON:DMD_FERMETURE_VOLET | Les horloges sont des valeurs binaires positionnées a une heure bien précise de la journée |
_WATCHDOG | Watchdog | PRESENCE:CPT_A_REBOURS | Les comptes a rebours permettent de decompter le temps à partir d'un evenement et de réagir si cet evenement n'est pas revenu au bout d'une consigne précise. |
_TRUE | _TRUE | Cette unité est toujours vraie | |
_FALSE | _FALSE | Cette unité est toujours fausse |
Les unités arithmétiques
Les unités arithmétiques
sont les suivantes:
Classe | Représentation | Exemple | Description |
---|---|---|---|
_AI | Entrée Analogique | TEMP:JARDIN | Une entrée Analogique représente une valeur d'un capteur analogique. Celle-ci dispose d'options permettant au systeme de savoir comment interpréter les informations fournies par les capteurs (4/20mA, 0-10V, ...) |
_AO | Sortie Analogique | CHAUDIERE:CONSIGNE | Une sortie Analogique represente la valeur souhaitée d'un actionneur analogique. Elle dispose d'options permettant au systeme de traduire une valeur reelle en valeur compréhensible par les actionneurs. |
_CI | Compteur d'impulsions | PUIT:LITRE | Incrémenté à chaque front montant de sa condition de pilotage |
_CH | Compteur Horaire | POMPE:DUREE_VIE | Temps seconde représentant la durée effective de maintien de sa condition de pilotage |
_R | Registre | EDF:EQUIV_KWH | Les registres permettent de manipuler des points de consignes, de seuil, et permettent de réaliser des calculs |
nombre a virgule | 22.3 | représente le nombre décimal 22.3 | |
nombre a virgule | -1.2 | représente le nombre décimal -1.2 |
Opérateurs de base pour lier les unités
Le « . », ET
Dans une EXPRESSION, le « . » permet d'opérer la fonction logique ET entre deux sous-expressions de type booléennes
.
Le résultat associé sera booléen
lui aussi.
« a . b est vrai » si et seulement si « a est vrai » et « b est vrai ».
Exemple de syntaxe :
/* Si a et b sont vrais alors nous positionnons c */
- a . b → c;
Warning
Le ET n'a pas de sens dans une « LISTE_ACTIONS ».
Le « + », OU, Addition
Dans une EXPRESSION, le « + » permet d'opérer deux fonctions:
-
la fonction logique OU entre deux sous-expressions de type
booléennes
. Dans ce cas le résultat serabooléen
. -
la fonction mathématique d'addition entre deux sous-expressions de type
arithmétique
. Dans ce cas le résultat seraarithmétique
.
Exemple de syntaxe :
/* c aura la valeur de 10.0 (4+6) */
- 4.0 + 6.0 → c;
/* Si a, ou b, est vrai alors nous positionnons c */
- a + b → c;
Warning
Le OU n'a pas de sens dans une « LISTE_ACTIONS ».
Le « - »: Soustraction
Dans une EXPRESSION, le « - » permet d'opérer la fonction mathématique de soustraction entre deux sous-expressions de type arithmétiques
.
Dans ce cas le résultat sera également arithmétique
.
/* c prendra la valeur de a - b */
- a - b → c;
Warning
Le « - » n'a pas de sens dans une « LISTE_ACTIONS ».
Le « / » : Complément et division
Dans une EXPRESSION booléenne
ou une « LISTE_ACTIONS », le complément « / » permet d'opérer la fonction logique NON sur l'expression booléenne
suivante.
Dans ce cas, le résultat est booléen
.
« /a est vrai » si « a est faux ».
/* Si a est faux alors nous positionnons c à VRAI */
- /a → c;
Dans une EXPRESSION arithmétique
, le « / » permet d'opérer la fonction mathématique de division entre deux sous-expressions arithmétiques
.
« 10 / 2.0 » sera la valeur 5.0.
/* c représentera le coefficient temp_chaud divisé par temp_froid */
- TEMP_CHAUD / TEMP_FROID → c;
Le « * » : Multiplication
Dans une EXPRESSION arithmétique
, le « * » permet d'opérer la fonction mathématique de multiplication entre deux sous-expressions arithmétiques
.
« 10.0 * 2.0 » sera la valeur 20.0.
/* c obtient la valeur de 20.0 */
- 10.0 * 2.0 → c;
/* c représentera la puissance P=U*I */
- UPS_VOLTAGE * UPS_CURRENT → c;
Les comparaisons
La comparaison arithmétique
Dans une EXPRESSION arithmétique
, les opérateurs « <, <=, =, >=, > » permettent d'opérer une comparaison entre deux valeurs arithmétiques
.
le résultat sera lui booléen
.
/* Si TEMP est strictement supérieure à 15, c est positionné à 1 */
- TEMP > 15.0 → c;
/* Si TEMP est inférieure ou égale à -5, c est positionné à 1 */
- TEMP <= -5.0 → c;
Les comparaisons horaires
Dans une EXPRESSION arithmétique
, le mot clef _HEURE peut s'utiliser dans une comparaison pour agir selon l'heure de la journée.
le résultat sera lui booléen
.
/* c est positioné à 1 à 7 heure du matin */
- _HEURE = 07:00 → c;
/* HEURE_OUVREE est vraie entre 09h et 18h */
- _HEURE >=09:00 . _HEURE <=18:00 -> HEURE_OUVREE;
Précédences et parenthèses
Les priorités d'opérations sont les suivantes, dans l'ordre décroissant de priorité (du plus prioritaire au moins prioritaire):
- Le NON
- Le ET
- Le OU
Ce système de priorité peut être modifié en utilisant les parenthèses ouvrantes et fermantes.
Exemple de syntaxe:
/* Si a est vrai, ou b et c sont vrais, alors nous positionnons d à 1 */
- a + b . c → d;
/* Si a ou b est vrai, et c est vrai alors nous positionnons d à 1 */
- (a+b) . c → d;
/* Si a est vrai, et que l'on a ni b ni c, alors nous positionnons c à 0 */
- a . /(b+c) → /c;
Logique étendue
Il est possible de compléter un comportement par des options. La modification du comportement sera fonction des options elles-mêmes. La syntaxe retenue est la suivante:
- EXPRESSION -- liste_options -> LISTE_ACTIONS;
Aujourd'hui, les options disponibles sont les suivantes;
- daa = valeur : Ajoute un délai (en dixième de seconde) entre le momemt ou l'EXPRESSION devient vraie et le moment ou la LISTE_ACTIONS sera effectivement réalisée
Exemples:
- EXPRESSION -- daa = 100 -> ACTION; /* ACTION sera lancée 10 secondes après que l'EXPRESSION devienne vraie. */
Les actions
La LISTE_ACTIONS est une liste d'ACTION séparées par des virgules. Selon le type de l'EXPRESSION, elle peut etre interprétée de deux manières différentes.
Les actions booléennes
Lorsque l'EXPRESSION est de type booléen
, chacune des ACTIONS de la LISTE_ACTIONS représente une opération à réaliser
lorsque cette EXPRESSION est VRAIE.
Dans ce cas, les ACTIONS possibles sont:
- Positionner une sortie TOR
- Positionner un bistable
- Positionner un monostable
- Positionner une temporisation
- Positionner un compteur d'impulsion
- Positionner un compteur horaire
- Positionner un watchdog
Exemple:
/* Si a et b sont vraies, La sortie contacteur est activée */
/* et le compteur horaire de service continue de compter */
- a . b → DO_SORTIE_CT, CH_CT;
Les actions arithmétiques
Lorsque l'EXPRESSION est de type arithmétique
, chacune des ACTIONS de la LISTE_ACTIONS représente l'élément cible devant
recevoir la valeur arithmétique de l'EXPRESSION.
Dans ce cas, la seule ACTION possibles aujourd'hui est:
- Positionner un registre
Exemple:
/* MON_REGISTRE obtient la valeur de 10.0 */
- 10.0 -> MON_REGISTRE;
Les options
Chaque unités ou action peut être complétée par une liste d'options pour moduler son interprétation ou configurer ses paramètres. Ces options sont décrites dans chacune des pages présentant les classes de bits internes.