IPA02 – Tutoriel ladder set et reset – La mémoire des ampoules

Front montant et descendant.

Voila la dernière ligne droite, restez bien concentrés, après ce chapitre nous verrons un gros exercice de synthèse.

Nous allons découvrir une autre « particularité » utilisable, il s’agit des fronts. Ces éléments servent à prendre en compte une information sur un seul cycle.

Par exemple, vous voulez compter le nombre de fois où un capteur est actionné (nous n’avons pas encore vu les valeurs analogique, mais imaginez un nombre auquel on ajoute +1 à chaque cycle si ses conditions sont passantes). Imaginons qu’un cycle dure 1ms, et que le capteurs est actionné pendant 1 seconde.

Dans 1 secondes, il y a 1 000 millisecondes, donc lorsque le capteurs repassera à 0, notre nombre aura la valeur 1000. Le programme croira donc qu’il y a eut 1 000 actions exercées sur le capteur alors qu’en réalité il n’y en a eut qu’une seul. Et bien voila l’utilité des fronts.

Un front ne tient compte que du changement d’état d’une variable, et il en existe de 2 types:

  • Les fronts montant: Ils sont égaux à 1 au moment où la variable passe de 0 à 1 (donc durant 1 seul cycle).
  • Les fronts descendants: Ils sont égaux à 1 au moment où la variable passe de 1 à 0 (donc durant 1 seul cycle).

Reprenons notre comptage d’impulsions. Peu importe le temps durant lequel le capteur est actionné, s’il est utilisé comme un front montant, il ne sera à 1 qu’au moment de l’appui, donc sur 1 seul cycle. De cet manière nous ne compterons bien que +1 par appui (et peu importe la durée de celui ci).

Les bibliothèques de fonctions.

A l’instar des SET, des RESET et des fronts, d’autres « fonctions » toutes faites existent et vous simplifierons la tâche. Nous reviendrons plus tard sur ce que sont les fonctions, mais ce que vous devez savoir c’est quelles sont, en général, regroupées en ce que l’on appel bibliothèque. Les SET et RESET sont intégrées d’origine sous Codesys, mais ce n’est pas le cas des fronts. Il nous faudra donc intégrer la bibliothèque « STANDARD.LIB » contenants les fonctions « standard », dont les fronts.

Sous Codesys, une fois votre programme créé, sélectionnez l’onglet « Ressources » (le quatrième) en bas de l’arborescence des programmes.

Onglet ressources de Codesys

Onglet ressources

Puis sélectionnez le Gestionnaire de bibliothèque. Dans le carré blanc en haut à gauche, faite un clique gauche: « Autre bibliothèque ».

Insérer bibliothèque sous Codesys.

Insérer bibliothèque.

Et là sélectionnez le fichier nommé « standart.LIB » (si vous ne la trouvez pas, celui ci se situe dans le répertoire « Codesys V2.3/Library »).

Installation d'une bibliothèque sous codesys

Installation d’une bibliothèque

Voici l’écran de la bibliothèque installée.

  • En rouge se trouve le noms de la bibliothèque sélectionnée (en l’occurrence standart.LIB).
  • En bleu se trouvent toutes les fonctions comprises dans la bibliothèque. On peut voir des fonctions de temporisation « Timer », mais celle qui nous intéressent sont les Trigger (front en anglais). F_TRIG pour Fall Trigger (front descendant) et R_TRIG pour Raise Trigger (front montant).
  • En bleu les variables utilisées pour faire la fonction (actuellement inutile pour nous).
  • En jaune la représentation de la fonction. Ici une entrée qui sera notre capteur. Sa sortie ne sera à 1 que sur un cycle, au moment du passage de 0 à 1 (c’est un front montant).

Testons cela sous Codesys, en bas de l’arborescence, cliquez nous l’onglet de gauche « MODULES » pour revenir sur l’écran des programmes. Créez une variable d’entrée et 2 variables de sortie. Le but est que vous preniez un même contact, via un front montant, alimente une bobine normale et une bobine SET.

Alors pour créer un front sous Codesys, commencez par insérer le contact duquel vous voulez extraire le front. Re-cliquez dans le centre du réseau, puis dans la barre d’outil, sélectionnez « Détection de front montant ».

BP front montant codesys

La boite du front s’insère, à la place des 3 points d’interrogation, donnez un noms à cette boite, par exemple « front_montant1 ». La déclaration automatique de variable ouvre une fenêtre pré remplit où il ne vous reste qu’à mettre le commentaire. Voilà ce que vous devez avoir.

Essais d'un front montant en ladder sous codesys

Essais d’un front montant

(Vous pouvez aussi mettre DO1 et DO2 dans 2 réseaux séparés).

Faites l’essai, accédez au système, démarrez l’automate et passez DI1 à 1. Vous pourrez constater que DO1 passe très brièvement à 1 (peut être ne le verrez vous même pas) ce qui correspond à l’état 1 sur 1 seul cycle, alors que DO2 reste à 1(car SETTER).

Faire un télérupteurs.

Nous y voila, l’exemple de synthèse!

Je vais vous demander de réaliser un télérupteur. Le principe, lorsque j’appuie sur un bouton (DI1), ça allume une ampoule (DO1), et il faut que j’appuie sur ce même bouton (DI1) pour éteindre la même ampoule (DO1).

Aucun clignotement n’est toléré.

Essayez de le faire par vous même, si vous y arrivez, vous aurez parfaitement compris tout ce qui a été expliqué précédemment.

Si cela est un peu compliqué, voici quelques indices:

  • Utilisez le SET – RESET pour allumer et éteindre l’ampoule.
  • Utilisez les front pour éviter tous clignotements.
  • Utilisez la sortie comme contact pour savoir si elle est allumée ou éteinte.

Essayez encore avec ces quelques indices.

Je sais que cet exemple n’est pas évident.

Et je meuble un peu pour éviter que vous ne voyez tout de suite la deuxième série d’indices.

Vous n’y arrivez toujours pas ?

Bon alors voila une autre fournée d’indices:

  • Pensez bien au déroulement d’un cycle automate.
  • Si le changement d’état de la sortie est prit en compte trop rapidement, il pourrait être utile de la stocker dans une « autre sortie », écrite simplement au début du programme, et que utiliseriez comme « image de la sortie au début du cycle ».
  • Ceci traité sur un front montant pourrai faire vos affaires.

Je vous laisse encore chercher quelques minutes.

Ne vous découragez pas.

Bon voici la réponse.

Cet exemple est très difficile, et ce n’est pas dramatique de ne pas avoir trouvé la solution.

Télérupteur en ladder sous codesys

Télérupteur en ladder

Si vous n’aviez pas trouvé, refaites ce programme et testez le avec diverses modifications pour voir les impacts que ce peut avoir.

Explications:

Le premier réseau sert à connaitre l’état de l’ampoule, mais celui ci n’étant traité qu’au début du programme, sa valeur ne changera jamais durant le cycle. Ceci contrairement à la sortie de l’ampoule qui peut changer d’état DURANT le cycle étant donné qu’elle est traitée plusieurs fois.

Ensuite, il peut y avoir 2 cas différents, soit l’ampoule est allumé au début du cycle, soit éteinte.

L’ampoule est éteinte au début du cycle, on appuie sur DI1:

  • Dans le réseau 1, DO1 et DO2 sont donc à 0.
  • Dans le réseau 2, on sort d’un front de DI1, DO2 étant à 0, le contact est passant et va donc SETTER DO1 (mais ne change pas la valeur de DO2, à ce moment du cycle, DO1=1 et DO2=0 !!!)
  • Dans le réseau 3,  on sort d’un front de DI1, DO2 étant encore à 0, le contact n’est pas passant, donc on ne RESET pas DO1.
  • Le cycle est fini.
  • Au cycle suivant, l’interrupteur étant encore actionné, DO1 et DO2 sont cette fois à 1.
  • Mais le front de DI1 ayant déjà était exécute au cycle précédent, celui ci n’est plus passant. Donc les réseau 2 et 3 ne sont plus exécutes jusqu’à ce que l’interrupteur soit relâche.

L’ampoule est allumée au début du cycle, on appuie sur DI1:

  • Dans le réseau 1, DO1 et DO2 sont donc à 1.
  • Dans le réseau 2, on sort d’un front de DI1, DO2 étant à 1, le contact n’est pas passant.
  • Dans le réseau 3,  on sort d’un front de DI1, DO2 étant à 1, le contact est passant, donc on  RESET DO1.
  • Le cycle est fini.
  • Au cycle suivant, l’interrupteur étant encore actionné, DO1 et DO2 sont cette fois à 0.
  • Mais le front de DI1 ayant déjà était exécute au cycle précédent, celui ci n’est plus passant. Donc les réseau 2 et 3 ne sont plus exécutes jusqu’à ce que l’interrupteur soit relâché.

Conclusion.

Félicitation d’avoir suivi jusque là, vous pouvez vous détendre 😎 .

Vous venez d’effectuer un exercice très compliqué mêlant cycle de programme, front et SET / RESET. Si vous pensez ne pas avoir tout assimilé, revenez dessus dans quelques jours, avec du recul les choses sont plus facilement assimilables. Et pour plus de précisions pensez au forum.

Ça en est fini pour ce chapitre (et pour le ladder). La prochaine fois nous plongerons dans le « vrai » langage de programmation, le littéral (rassurez vous, ce sera plus léger).

Entre temps n’hésitez pas à retourner sur codesys pour y faire vous propres essais et ainsi améliorer votre compréhension de la programmation.

Si vous avez une question, remarque ou suggestion, passez sur le forum. Vos réflexions servirons probablement à d’autres personnes.

N’hésitez pas a vous abonner aux différents réseaux sociaux, et à parler du site autour de vous 😉

Lien vers le chapitre suivant, « du ladder au littéral », cliquez ici.

Tutoriel du ladder au littéral

Lien du forum: http://automacile.fr/forum/viewforum.php?f=7

Lien youtube: https://www.youtube.com/channel/UChYxOrIAM-SdgvE3gTkGnzA

Lien facebook: https://www.facebook.com/automacile

Lien Twitter: 

Lien Google Plus: https://plus.google.com/u/0/b/103490367154199738684/103490367154199738684/posts