Page 1 sur 2

Générer des impulsions

Posté : 23 août 2024, 12:00
par NitNeuq
Bonjour,

Je rencontre un soucis sur de la programmation (Automate M340).

Je vous explique mon problème :

Je récupère plusieurs valeurs booléen dans un tableau.
A la suite de cela, je veux envoyer une impulsion sur une sortie en fonction de la valeur de la variable tableau.

J'ai utilisé une boucle For pour réaliser cela hors j'ai l'impression qu'elle s'exécute trop vite donc la sortie ne s'active jamais.
(La sortie est représentée par un compteur pour la simulation pour voir si je récupère le bon nombre d'impulsion)

Vous trouverez ci-joint mon tableau. J'ai fait exprès de créer un tableau de 12 pour faire redescendre la variable "GenPulse" à 0.

PS :Les variables ne sont pas Reset c'est normal !

Quand pensez vous ?

Je vous joint mon programme.

Re: Générer des impulsions

Posté : 23 août 2024, 12:40
par Laurent
Salut,

de ce que je comprends, le code Ladder fait les choses dans cet ordre :
1. On positionne les Bits TabDosage[ x ],
2. le bloc GenImpulsion_L1 est exécuté, avec en détail
2.1. la boucle For..End For est exécutée,
2.2 les sorties du bloc sont positionnées,
3. les sorties du bloc sont affectées aux entrées du bloc Atelog,
4. la dernière ligne du réseau est évaluée mais on s'en fout pour ton problème.

Le souci est que le code du bloc GenImpulsion_L1 s'exécute complètement _avant_ le reste du code Ladder.
Il faudrait corriger en supprimant la structure For..Edn For, et ne garder que le code à l'intérieur, en simplifiant par un truc du genre

Code : Tout sélectionner

GenPulse := TopDosageG[ i ];
Les impulsions générées ainsi se feront au rythme de l'exécution de la tâche.
Il faudra aussi gérer l'initialisation et l'évolution de la variable d'index i.
Cela répond-t-il au problème ?

Re: Générer des impulsions

Posté : 23 août 2024, 12:53
par NitNeuq
1. On positionne les Bits TabDosage[ x ],
2. le bloc GenImpulsion_L1 est exécuté, avec en détail
2.1. la boucle For..End For est exécutée,
2.2 les sorties du bloc sont positionnées,
3. les sorties du bloc sont affectées aux entrées du bloc Atelog,
4. la dernière ligne du réseau est évaluée mais on s'en fout pour ton problème.

C'est exactement ça ! Par contre, la dernière ligne me permets de lancer la boucle For. Je viens vérifier que tous les doseurs soient fermés (En gros) puis je viens traiter les valeurs de mon tableau pour les transformer en impulsion

Une fois la boucle For terminée je viens Reset toutes les variables SET plus haut.
Puis j'attends de nouveau les tops dosages et je traite le tableau pour faire les impulsions etc...

En tout cas c'est le but...

Re: Générer des impulsions

Posté : 23 août 2024, 14:03
par Béryl
Tu veux envoyer un nombre d'impulsions sur une sortie en fonction d'un entier que tu lis, c'est ça ?
Si tu lis 3, ta sortie bat 3 fois ?

Re: Générer des impulsions

Posté : 23 août 2024, 14:14
par NitNeuq
Béryl a écrit : 23 août 2024, 14:03 Tu veux envoyer un nombre d'impulsions sur une sortie en fonction d'un entier que tu lis, c'est ça ?
Si tu lis 3, ta sortie bat 3 fois ?
C'est exactement ça !

Re: Générer des impulsions

Posté : 23 août 2024, 14:15
par NitNeuq
Béryl a écrit : 23 août 2024, 14:03 Tu veux envoyer un nombre d'impulsions sur une sortie en fonction d'un entier que tu lis, c'est ça ?
Si tu lis 3, ta sortie bat 3 fois ?
Il y a plusieurs façon de faire je pense j'ai essayé avec un entier et la j'essaye avec un tableau de booléen mais ce n'est pas évident !

Re: Générer des impulsions

Posté : 23 août 2024, 14:31
par Béryl
J'ai codé ça voilà longtemps pour envoyer des message sms en fonction de défauts.
Le boitier qui gère ça réagit à des impulsions : 1 impulsion=message 1 envoyé, 2 impulsions=message 2 envoyé, etc.
La sortie est sur sms_sortie_pulse.
Capture d’écran 2024-08-23 142749.png
Capture d’écran 2024-08-23 142817.png

Re: Générer des impulsions

Posté : 23 août 2024, 14:45
par Béryl
Je m'aperçois en le relisant que c'est très bordélique, quand même ! :oops:
Surtout sur les noms de variables !
Si tu veux le simuler, je peux te l'envoyer.

Re: Générer des impulsions

Posté : 26 août 2024, 12:20
par Uphelus
Bonjour,

Le problème c'est que la boucle FOR est exécutée sans mise à jour de la sortie:
Fonctionnement du Bloc Fonction:
* Lecture des entrées du bloc fonction
* Exécution du programme (avec des mot et des bits qui évolue mais qui ne sont pas affecté aux sorties)
* Mise à jour des sorties (même si un bit à battue plusieurs fois seul sont dernier état est affecté)

Pour que ton programme fonctionne, les battement devrons s'exécuter sur plusieurs cycles automates. (1 cycle à 1 puis un cycle à 0)

Re: Générer des impulsions

Posté : 26 août 2024, 14:11
par Béryl
Oui, c'est ça : la boucle For est exécutée en un cycle automate.
La variable GenPulse va prendre les valeurs du tableau une par une lors de ce cycle et, lors du rafraichissement des sorties, c'est la dernière valeur qui comptera.
Et la dernière valeur, c'est celle de TabDosage[12] qui vaut 0.