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

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.

NOTE : pour éviter cela, %M doit être écrit à la fin de la tâche pour mettre à jour les informations de valeur anciennes.

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 : C = 0, Bit d'historique = 0

A = 1,

B = 1,

C = 1, Bit d'historique = 0

IF A AND B

THEN C := 1;

ELSE C := C;

END_IF;

2

A = 1,

B = 1,

C = 1, Bit d'historique = 1

IF NOT(A) AND NOT(B)

THEN C := 0;

ELSE C := C;

END_IF;

3

C = 1, Bit d'historique = 1

D = 0, car le bit de valeur et le bit d'historique de C sont identiques.

Le front montant de C, représenté dans ligne 1 du code, n'est par reconnu par le code de la ligne 2, car cela force l'actualisation du bit d'historique.

(Si la condition est FALSE, la valeur présente de C est à nouveau attribuée à C, voir l'instruction ELSE de la ligne de code 2 dans l'exemple ST, par exemple.)

-