je sèche :(

Forum traitant des automates industriels de marque Siemens.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7804
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: je sèche :(

Message par itasoft »

slts,
Oui le sujet est vaste et de milliers de cas spécifiques, disons que la solution bestiale de base c'est un PID à sortie type servo
+ je rajoute des pompes (remplissage du registre)
- je soustrais des pompes (vider le registre)
après il faut moduler
Automaticien privé (de tout)
itasoft@free.fr
meuh
Apprend le binaire
Apprend le binaire
Messages : 7
Enregistré le : 24 juin 2016, 10:19

Re: je sèche :(

Message par meuh »

Cyril93 a écrit :C'est un vaste sujet :D
mais le principe c'est de ne pas faire la régulation sur la dernière pompe mais sur plusieurs pompe en même temps.
Je m'explique :
si on a 4 pompes :
on évite l'algo 3 pompes à 100% et la dernière à 25 % qui s’arrêtent et redémarre 15 fois par heures
on fonctionne avec pompe 1 et 2 à 50Hz et pompe 3 et 4 qui régul ensemble à xxHz on évite ainsi les Marches/Arrêt fréquent d'une pompe.

Il y a surement d'autre façon de faire que je ne connais pas. Une bande morte sur le PID, tu risques d'avoir des écart entre ta consigne et ta mesure si le process le permet pourquoi pas.

Ouais je pense que ça devrait marcher avec la bande morte, mais l'erreur doit vraiment être dégueulasse.

j'ai plus l'habitude d'utiliser la sortie brut PID sur chaque pompe.
En gros on démarre avec une pompe, dès que la sortie PID dépasse un certain seuil pendant un certain temps, on démarre une 2ième pompe tout en forçant la sortie PID (avec une consigne plus faible que le seuil précédent pour compenser) durant un certain temps. après on relâche et le PID fait sa vie.
Même principe pour l'arrêt d'une pompe.
toutes les pompes reçoivent la même consigne au final, les temps/consigne de forçage sont modifiable à souhait, c'est assez flexible pour la mise en route, et assez robuste. si on paufine un peu les paramètres, on arrive a de bons résultats généralement, sans que cela soit vraiment compliqué.

On couple généralement ça à une priorité de démarrage suivant le temps de fonctionnement de chaque pompe, mais ça dépend du client ( le dernier c'était premier démarré, premier arrêté ... chacun a sa sauce :) )

merci pour ton retour!
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: je sèche :(

Message par Cyril93 »

meuh a écrit : Ouais je pense que ça devrait marcher avec la bande morte, mais l'erreur doit vraiment être dégueulasse.

j'ai plus l'habitude d'utiliser la sortie brut PID sur chaque pompe.
En gros on démarre avec une pompe, dès que la sortie PID dépasse un certain seuil pendant un certain temps, on démarre une 2ième pompe tout en forçant la sortie PID (avec une consigne plus faible que le seuil précédent pour compenser) durant un certain temps. après on relâche et le PID fait sa vie.
Même principe pour l'arrêt d'une pompe.
toutes les pompes reçoivent la même consigne au final, les temps/consigne de forçage sont modifiable à souhait, c'est assez flexible pour la mise en route, et assez robuste. si on paufine un peu les paramètres, on arrive a de bons résultats généralement, sans que cela soit vraiment compliqué.

On couple généralement ça à une priorité de démarrage suivant le temps de fonctionnement de chaque pompe, mais ça dépend du client ( le dernier c'était premier démarré, premier arrêté ... chacun a sa sauce :) )

merci pour ton retour!
De rien ;)
glamdring
Code son premier grafcet
Code son premier grafcet
Messages : 50
Enregistré le : 25 nov. 2015, 15:52

Re: je sèche :(

Message par glamdring »

Bonjour ,

d'abord je vous remercie de vos réponses cela va me permettre d'avancer sur mon projet ;)
L'automate c'est un s7-1500 sur tia v13 pour être complet.Les 12 moteurs que je commande sont des drycoolers (Ventilateurs). L'activation de chaque se fait via une sortie PID ( à 8.33% j'active un dry, à 16,66 % etc). La priorité doit être donnée au dry qui a le moins d'heure de fonctionnement sur les 12. Je me suis inspiré du code donnée dans un autre poste pour réaliser un tri des heures de fonctionnement par ordre croissant avec un autre tableau qui fait suivre un tag aux heures (pour savoir quel dry doit démarrer). J'ai fais en sorte que tableau_h [0] = 'dry_1' et ainsi de suite (voir exemple ci dessous). Le code fonctionne bien , je parviens a trier ;). Maintenant je dois a chaque fois que je franchis un palier regarder quel dry est en 1 ère position dans mon tableau. Par exemple si je commence à 0 et que l'on arrive au 1 ère palier (8.33%) je dois regarder quel dry est en 1 ère position et activer sa sortie et ainsi de suite. si la consigne redescend d'un palier je dois arrêter le 1 ère démarrer qui sera toujours le 1 ère du tableau. Voila pour ma logique...maintenant j'ai essayer de faire cela en contact et c'est laborieux. L'un de vous auraient ils une idée pour coder cela en SCL (je commence à bien accroché mais chaud chaud^^ ). Si je pouvais faire suivre mes sortie dry en même temps que le tableau des heures cela serait simple mais je vois pas comment faire :(

En espérant avoir été clair sinon on en parle ;)

Tab_h[0]=>Dry_1
Tab_h[1]=>Dry_2
Tab_h[2]=>Dry_3
Tab_h[3]=>Dry_4
Tab_h[4]=>Dry_5
Tab_h[5]=>Dry_6
Tab_h[6]=>Dry_7
Tab_h[7]=>Dry_8
Tab_h[8]=>Dry_9
Tab_h[9]=>Dry_10
Tab_h[10]=>Dry_11
Tab_h[11]=>Dry_12

Bien à vous

glam
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7804
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: je sèche :(

Message par itasoft »

Disons que trier la table des temps de marche dans le sens croissant nous fait perdre le n° du moteur
Une des solutions (parmi d’autre) serait de chercher dans cette table quelle est la valeur mini.
Puis de rechercher cette valeur dans cette même table qui nous donnerait le n° du moteur dans l’index.
Avant il faut mettre le bit le plus fort à 1 sur les cases dont le moteur tourne afin d’avoir une valeur maxi pour ne pas la retrouver à la recherche de la valeur mini.
En fait ça revient à asservir ce bit à la marche moteur.
ps:
je présume que l'on cherche le ventilo à mettre en marche parmi les ventilos qui sont à l'arrêt et celui qui a le moins tourné.
je présume que l'on cherche le ventilo à mettre à l'arrêt parmi les ventilos qui sont en marche et celui qui a le plus tourné.

ceci dit j'avais fais un truc similaire sur UNITY à une époque, c’était pas avec un PID mais le principe était le même à savoir:
En fonction du niveau de la cuve il fallait mettre en marche une pompe de plus toutes les minutes de préférence celle qui avait le moins d'heures au compteur.
ou arrêter les pompes progressivement de préférence celle qui avait le plus d'heures de fonctionnement au compteur.
Si je retrouve le programme je peux éventuellement publier l'extrait qui fait ça en exemple.
Automaticien privé (de tout)
itasoft@free.fr
glamdring
Code son premier grafcet
Code son premier grafcet
Messages : 50
Enregistré le : 25 nov. 2015, 15:52

Re: je sèche :(

Message par glamdring »

Bonjour ,

En faite je prend comme postulat un tableau de 12 éléments qui contient mes heures de fct. Le 1er élément sont les heures du 1er moteurs , le 2 ieme élément les heures du 2 ieme moteur,etc... Dans ma boucle de tri , j'ai un autre tableau qui contient le n° du moteur correspondant. 1er élément du 1er tableau correspond au 1er élément du second,etc... J'ai testé le code et cela fonctionne pas mal.Apres pour affecter la sortie au bon moteur en fonction du moteur j'utilise le mux de tia portal (multiplexeur) et paf cela fait des chocapics. Certes cela doit pas être la plus belle solution mais en tout cela doit fonctionner ( me reste à tester cela...après avoir mangé) et je vous reviens avec les résultats.
Ton exemple serait intéressant en tout cas cela permet de voir d'autre façon de faire^^


Bien à vous

Glam
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7804
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: je sèche :(

Message par itasoft »

Slts,
j'ai retrouve le programme, ci dessous l'extrait qui concerne l'ajout et le retrait de pompes en fonction de leurs temps de fonctionnement

cliquer dessus pour agrandir
FDB.JPG
programme:
(* Copie de la table des temps de marche dans 2 tables Tampons *)
TAB_MINI:=MOVE(TTEMPS);
TAB_MAXI:=MOVE(TTEMPS);

FOR INDEX:=0 TO 11 DO (*---boucle--------*)
if TRETOURS[INDEX] THEN
TAB_MINI[INDEX]:=16#7FFFFFFF; ELSE TAB_MAXI[INDEX]:=0;
END_IF;
END_FOR; (*---------------boucle---------------*)

(* Cherche et retourne la valeur MINI sur les pompes à l'arrêt car celles qui sont en marche ont pris la valeur positive maxi 16#7FFFFFFF *)
VMINI:=MIN_ARDINT(TAB_MINI);
NMINI:= FIND_EQ_ARDINT(TAB_MINI, VMINI);

(* Cherche et retourne la valeur MAXI sur les pompes en marche car celles qui sont en arrêts ont pris la valeur 0 *)
VMAXI:=MAX_ARDINT(TAB_MAXI);
NMAXI:= FIND_EQ_ARDINT(TAB_MAXI, VMAXI);
Modifié en dernier par itasoft le 28 juin 2016, 04:40, modifié 7 fois.
Automaticien privé (de tout)
itasoft@free.fr
glamdring
Code son premier grafcet
Code son premier grafcet
Messages : 50
Enregistré le : 25 nov. 2015, 15:52

Re: je sèche :(

Message par glamdring »

Merci a toi, je vais y jeter un oeil ;)

Franchement génial ce forum,je compte pas combien de fois j'ai eu de l'aide^^ me réjouis de pouvoir aussi aider.

Bien à toi

Glam
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7804
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: je sèche :(

Message par itasoft »

slts,
ci dessous les objects et fonctions utilisées, il faudrait trouver les équivalents en Siemens

cliquer dessus pour agrandir
symbols.JPG
Automaticien privé (de tout)
itasoft@free.fr
Répondre