Générer des impulsions

Forum traitant des automates industriels de marque Schneider - Telemecanique
NitNeuq
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 103
Enregistré le : 18 janv. 2021, 16:09

Générer des impulsions

Message 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.
Fichiers joints
Tableau.png
LAdder.png
Detail_DFB.png
Laurent
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 124
Enregistré le : 20 oct. 2015, 11:16
Localisation : Oise et Ile-de-France / France

Re: Générer des impulsions

Message 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 ?
Laurent
NitNeuq
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 103
Enregistré le : 18 janv. 2021, 16:09

Re: Générer des impulsions

Message 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...
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Générer des impulsions

Message 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 ?
NitNeuq
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 103
Enregistré le : 18 janv. 2021, 16:09

Re: Générer des impulsions

Message 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 !
NitNeuq
Générateur de blocs fonctions
Générateur de blocs fonctions
Messages : 103
Enregistré le : 18 janv. 2021, 16:09

Re: Générer des impulsions

Message 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 !
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Générer des impulsions

Message 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
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Générer des impulsions

Message 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.
Uphelus
Première mise en service
Première mise en service
Messages : 52
Enregistré le : 02 janv. 2019, 08:35

Re: Générer des impulsions

Message 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)
Avatar du membre
Béryl
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1953
Enregistré le : 20 oct. 2015, 12:00
Localisation : localhost

Re: Générer des impulsions

Message 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.
Répondre