Introduction
Pendant la reconnaissance d'un front, un bit est surveillé pendant un passage de 0 à 1 (front positif ou ascendant) ou de 1 à 0 (front négatif ou descendant).
Pour ce faire, la valeur du bit du cycle précédent est comparée à la valeur du bit du cycle en cours. Dans ce cas, non seulement la valeur en cours est requise mais également l’ancienne valeur.
C’est pourquoi, lors de la détection de fronts, 2 bits (valeurs courante et ancienne) sont requis au lieu d’un.
Comme le type de données BOOL
n'offre qu'un
seul bit (valeur courante), un autre type de données est utilisé
pour la détection de fronts, EBOOL
(BOOL
étendu). Outre la détection des fronts, le
type de données EBOOL
offre une option pour
le forçage. Vous devez donc également l'enregistrer que
le forçage de bit soit actif ou non.
Le type de données EBOOL
enregistre les données suivantes :
la valeur courante du bit dans le bit de valeur,
la valeur précédente du bit dans le bit d'historique,
(au début de chaque cycle, le contenu du bit de valeur est copié dans le bit d’historique)
les informations sur l'activation du forçage du bit dans le bit de forçage,
(0 = forçage inactif, 1 = forçage actif)
Restrictions d'EBOOL
ATTENTION | |
---|---|
En utilisant une variable EBOOL
pour les contacts afin de reconnaître les fronts
positifs (P) et négatifs (N) (fronts ascendants et descendants,
avec une EF), vous devez respecter les restrictions ci-après.
EBOOL avec %M non écrit dans le programme
Une
variable EBOOL
avec une adresse %M
qui n'est pas écrite dans le programme, mais fournie directement
(par une table d'animation, un écran ou une interface, par exemple),
fonctionnera de manière imprévue. La valeur du front reste
indéfiniment TRUE car %M
n'est écrit qu'une
seule fois.
L'ancienne valeur n'est
mise à jour que lorsque le bit %M
est écrit.
Par conséquent, si vous n'écrivez le bit qu'une fois, la
détection de front est infinie.
Valeur ancienne |
Valeur actuelle |
Détection de front |
Description |
---|---|---|---|
0 |
0 |
0 |
état 0 (avant d'écrire le bit) |
0 |
1 |
1 |
Ecrivez 1 dans le bit (avec une table d'animation, par exemple). |
0 |
1 |
1 |
Si vous ne l'écrivez pas à nouveau, le front demeure indéfiniment. |
1 |
1 |
0 |
Ecrivez à nouveau 1 dans le bit, la valeur ancienne est actualisée et la détection de front est réglée sur 0. |
EBOOL avec %M écrit dans le programme
Pour une variable EBOOL
avec une adresse %M
écrite dans le programme, vous devez respecter les
limitations suivantes :
N'utilisez pas le bit avec une bobine d'enclenchement ou de déclenchement. Dans ce cas, l'ancienne valeur n'est pas actualisée. Vous pouvez donc établir un front infini.
N'écrivez pas le bit de manière conditionnelle. Une logique simple telle que
IF NOT %M1 THEN %M1 := TRUE; END_IF
cause un front éternel car elle n'est écrite qu'une fois.
EBOOL avec %I
Pour une variable EBOOL
avec une adresse %I
, vous devez respecter les restrictions
suivantes :
En fonctionnement multitâche, la vérification du front
%I
doit être effectuée dans la tâche où il est actualisé. Il est déconseillé d'utiliser la détection du front d'un%I
planifiée dans une tâche de priorité supérieure.Exemple : si vous avez une tâche fast qui actualise
%I
, n'utilisez pas la détection de front dans la tâche mast. Selon la planification, le front peut être détecté ou non.
Détection de fronts positifs
Pour détecter des fronts positifs, vous devez utiliser un
contact pour la détection de fronts positifs. Avec ce contact,
la connexion de droite pour un cycle de programme est 1 lorsque la
transition du paramètre associé réel (A
) passe de 0 à 1 et que, simultanément, l'état de
la connexion de gauche est 1. Sinon, l'état de la liaison de
droite est 0.
Dans l'exemple, un front positif de la variable A
doit être reconnu et B
doit donc être
défini pendant un cycle.

Chaque fois que le bit de valeur de A
est
égal à 1 et que le bit d'historique est égal à
0, B
est réglé sur 1 pendant un cycle (cycle
1, 4 et 9).

Détection de fronts négatifs
Pour détecter des fronts négatifs, vous devez utiliser
un contact pour la détection de fronts négatifs. Avec ce
contact, la connexion de droite pour un cycle de programme est 1 lorsque
la transition du paramètre associé réel (A
) passe de 1 à 0 et que, simultanément, l'état de
la connexion de gauche est 1. Sinon, l'état de la liaison de
droite est 0.
Dans l'exemple, un front négatif de la variable A
doit être reconnu et B
doit donc
être défini pendant un cycle.

Chaque fois que le bit de valeur de A
est
égal à 0 et que le bit d'historique est égal à
1, B
est réglé sur 1 pendant un cycle (cycle
2 et 8).

Forçage de bits
Lors du forçage de bits, la valeur des variables indiquée par la logique est écrasée par la valeur de forçage.
Dans l'exemple, un front négatif de la variable A
doit être reconnu et B
doit donc
être défini pendant un cycle.

Chaque fois que le bit de valeur ou le bit de forçage
de A
est égal à 0 et que le bit d'historique
est égal à 1, B
est réglé sur
1 pendant un cycle (cycle 1 et 8).

Utilisation des variables BOOL et EBOOL
Le comportement de la détection de fronts
peut varier selon que vous utilisez le type de variable BOOL
ou EBOOL
:
Lorsque vous utilisez une variable
BOOL
, le système gère l'historique en permettant la détection de front pendant l'exécution du contact.Lorsque vous utilisez une variable
EBOOL
, le bit d'historique est actualisé pendant l'exécution de la bobine.
Les exemples suivants montrent les différents comportements selon le type de variable.
La variable A
est définie comme BOOL
; chaque fois que A
est réglé
sur 1, %MW1
est incrémenté de 1.

La variable B
est définie comme EBOOL
; son comportement diffère de celui de la variable A
. Lorsque B
est réglé sur 1, %MW2
est incrémenté de 1 parce que le bit d'historique
n'est pas actualisé.

La variable C
est définie comme EBOOL
; son comportement est identique à celui de la
variable A
. Le bit d'historique est actualisé.

Perte de la détection de fronts probablement due au forçage de bobines
Le forçage de bobines peut causer la perte de la détection de fronts.
Dans l'exemple, lorsque A
est égal à
1, B
devrait être égal à 1, et avec
un front montant de A
, la bobine B
sera définie pendant un cycle.
Dans cet exemple, la variable B
est d'abord
affectée à la bobine, puis à la liaison pour reconnaître
les fronts montants.


Au début du deuxième cycle, le bit de valeur de B
est égal à 0. En cas de forçage de B
dans ce cycle, le bit de forçage et le bit de valeur
sont réglés sur 1. Pendant le traitement de la première
ligne de logique dans le troisième cycle, le bit d'historique
de la bobine (B
) est également réglé
sur 1.
Problème :
Pendant la détection de front
(comparaison du bit de valeur et du bit d'historique), dans la deuxième
ligne de logique, aucun front n'est détecté car, en raison
de la lise à jour, le bit de valeur et d'historique de la ligne
1 de B
sont toujours identiques.
Solution :
Dans cet exemple, la variable B
est d'abord
affectée à la liaison pour reconnaître les fronts montants,
puis à la bobine.


Au début du deuxième cycle, le bit de valeur de B
est égal à 0. En cas de forçage de B
dans ce cycle, le bit de forçage et le bit de valeur
sont réglés sur 1. Pendant le traitement de la première
ligne de logique dans le troisième cycle, le bit d'historique
de la liaison (B
) reste réglé sur 0.
La détection de front reconnaît la différence entre
les bits de valeur et les bits d'historique et règle la bobine
(C
) sur 1 pour un cycle.
Perte de la détection de fronts probablement due à l'utilisation des bobines d'enclenchement ou de déclenchement
L'utilisation de bobines d'enclenchement
ou de déclenchement peut causer la perte de la détection
de fronts avec les variables EBOOL
.
La variable
au-dessus de la bobine d'enclenchement/de déclenchement (variable C
dans l'exemple) est toujours affectée par la valeur
de la liaison de gauche.
Si la liaison de gauche est 1, le bit
de valeur bit (variable C
dans l'exemple) est copié
dans le bit d'historique et le bit de valeur est réglé sur
1.
Si la liaison de gauche est 0, le bit de valeur bit (variable C
dans l'exemple) est copié dans le bit d'historique,
mais le bit de valeur n'est pas modifié.
Ainsi, quelle que soit la valeur prise par la liaison de gauche avant la bobine d'enclenchement ou de déclenchement, le bit d'historique est toujours mis à jour.
Dans l'exemple, un front positif de
la variable C
devrait être reconnu et définir D
pendant un cycle.
Ligne de code |
Comportement en LD |
Equivalence en ST |
---|---|---|
1 |
Situation initiale :
|
|
2 |
|
|
3 |
C = 1, Bit d'historique = 1 D = 0, car le bit de valeur et le bit d'historique
de Le front montant de (Si la condition est FALSE, la valeur
présente de |
- |