Regulation proportionnelle TOR

Forum traitant des automates industriels de marque Schneider - Telemecanique
Squale
Aguerri de l'automation
Aguerri de l'automation
Messages : 82
Inscription : 05 sept. 2018, 06:17
Localisation : TAHITI

Regulation proportionnelle TOR

Message par Squale »

Bonjour,

Je dois commander une sortie digitale qui actionne une pompe doseuse qui doit servir à remonter une mesure de pH trop bas en injectant un réactif, le principe c'est que à chaque front montant de la sortie digitale correspond l'injection d'une dose de réactif par la pompe doseuse.

Je cherche à faire une sorte de régulation proportionnelle mais au lieu de sortir un signal analogique le régulateur doit sortir des impulsions dont la cadence augmente proportionnellement à l'écart par rapport à la consigne. Plus le pH chute et plus la cadence des impulsions augmente, plus on se rapproche de la consigne et plus les impulsions sont espacées (jusqu'à l'arrêt quand la consigne est atteinte).

Savez vous s'il y a un bloc fonctionnel dont le fonctionnement se rapproche de cela ou si on utilise le FB PI comment faire pour convertir le signal de sortie (REAL) vers une sortie à impulsions (BOOL) ?

Le projet est en somachine pour un M241.

Merci pour vos idees.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Regulation proportionnelle TOR

Message par itasoft »

slts,
voir si c'est possible avec un bloc PWM + horloge en sortie du PID
-----un exemple--------
_1234.JPG
Automaticien privé (de tout)
itasoft@free.fr
BenAutom
Code son premier grafcet
Code son premier grafcet
Messages : 32
Inscription : 02 mars 2019, 13:24

Re: Regulation proportionnelle TOR

Message par BenAutom »

j'ai eu le problème il y a peu !
On avait utilisé un bloc PWM pour une vanne (elle s'ouvre 3s, elle se ferme 4s par exemple), mais le client voulait la même chose pour une pompe doseuse!! Sauf que la pompe, elle envoie une dose sur un front montant de son entrée...La modulation en largeur d'impulsion, ben çà fonctionne pas dans ce cas!!! EN effet, on va faire doser la pompe pendant 3s, puis plus rien pendant 4s... pas le top du top

Après recherche et demandes au client :
La pompe a un maximum de 120 coups par minutes. Il faut que son entrée soit à 1 pendant au moins 300ms pour quelle comprenne.
120coup par minute, ca en fait 2 par secondes. Donc un coup toute les 500ms. Son entrée devant être à 1 pendant 300ms, elle doit donc être à 0 pendant 200ms. Ainsi, au maximum de la pompe (120cpm), on a 300ms à 1, 200ms à 0, 300ms à 1, 200ms à 0, etc.

Ça c'est quand la pompe va tourner au max de chez max.

Les demande client : pouvoir choisir le nombre de coup max pour la pompe (dans ce n'est pas 120 en dur dans l'automate...)

Je n'ai plus le code sous les yeux, ni le type de variable utilisé (real, int, etc....). Je ne vais donc pas mettre les conversion (real_to_int, etc.) je vais mettre grosso modo comment on a fonctionné :
les variables : SP (consigne); PV (la valeur process); MAX_CPM (le nombre de coup max par minute. Sur l'IHM, il était borné entre 1 et 120); MAX_100P (ca c'est la valeur process pour laquelle la pompe tournera à fond. Par exemple, si le pH >9, la pompe ira à fond les ballons); DIFFERENCE (voir l'utilité plus loin); NB_CPM(nombre de coups nécessaires, voir plus loin), DUREE_OFF (voir plus loin)

Alors on commence: si MAX_CPM <1 ou >120, alors on le remet à 1 (demande client, et ça évite les résultats bizarre)
on vérifie que SP <> MAX_100P et SP <> PV pour éviter la division par 0
DIFFERENCE := (PV-SP)/(MAX_100P/SP) --> on calcul le %age d'écart.
On peut ainsi calculer le nombre de coup par minute dont on a besoin :
NB_CPM := DIFFERENCE * MAX_CPM.

pour exemple : Le pH est de 8, on veut un pH de 7. La pompe est à MAX_CPM = 120. On a décidé qu'au dessus de pH9, la pompe est à fond.
DIFFERENCE = (8-7)/(9-7)=1/2=0.5 : 50%: La pompe devra fonctionner 50% du temps
NB_CPM = 0.5 * 120 = 60. On a besoin de 60 coups en 1 minute (60000 ms)
On sait que la pompe doit être à 1 pendant 300ms, il ne reste plus qu'à calculer le temps qu'elle doit être à 0:
DUREE_OFF(60000 / NB_CPM) - 300. On obtient la durée pour laquelle la pompe doit être à 0.
Si on reprend notre exemple : 60000 / 60 - 300 = 1000 - 300 = 700

La pompe doit être à 0 pendant 700 ms. Elle est à 1 pendant 300ms (fixe). Elle envoi donc une dose sur son front montant, qui est toute les 1000ms, ce qui nous donne bien 60 dose par minute, ce qu'on voulait!!!
On a ensuite utilisé des blocs PULSE : une pulse à 300ms, une pulse à 'DUREE_OFF', qui s'enchainent à l'infini (et au delà)
Reste à prendre le Q du bloc à 300ms pour la pompe.

Attention, je n'ai mis que les grandes lignes. Nous avons mis des vérifications (comme pour la division par 0). En faisant des tests, on s'était aperçu que lorsque PV=SP, le calcul ne se fait plus, et on reste sur la pulse précédente. On a donc conditionné la sortie de la pompe avec un 'PV<>SP'.

Voilà c'est pas forcement parfait, mais ça fonctionne... Si d'autres ont des solutions plus 'PRO', je suis aussi preneur. En tout cas, on l'a testé de long en large, ça fonctionne bien ;)
Je peux envoyer au besoin le code (en ST) par MP
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Regulation proportionnelle TOR

Message par itasoft »

slts,
dans mon exemple le bit horloge set à générer un certain nombre d'impulsions pendant un certain temps
Automaticien privé (de tout)
itasoft@free.fr
BenAutom
Code son premier grafcet
Code son premier grafcet
Messages : 32
Inscription : 02 mars 2019, 13:24

Re: Regulation proportionnelle TOR

Message par BenAutom »

Effectivement, nous avions pensé à cela. Mais le client ne voulait pas :
le PWM va être à 1 pendant 5secondes, puis à 0 pendant 5s. ce qui fait que la pompe va doser (en cadence avec le bit horloge) pendant 5 secondes, puis plus rien, puis recommencer... Le client voulait 'lisser' les pulses au lieu d'en faire plein d'un coup, puis plus rien...
C'est sur que si ça dérange pas le client, c'est beaucoup plus rapide!!!
Squale
Aguerri de l'automation
Aguerri de l'automation
Messages : 82
Inscription : 05 sept. 2018, 06:17
Localisation : TAHITI

Re: Regulation proportionnelle TOR

Message par Squale »

Slts,

J'ai testé avec un bloc PI suivi d'un PWM et je confirme que ca ne fonctionne pas, on module la largeur des impulsions alors que c'est la cadence qui m'intéresse dans ce cas précis. Je n'ai pas mis de bit horloge car je ne connais pas son fonctionnement, je dois me pencher dessus.

En tout cas merci pour vos pistes, je dois continuer de creuser. Pour me dépanner j'ai mis un asservissement on/off sur la pompe avec des bornes (pompe = on si ph < x et pompe = off si ph > consigne) ca me permet de faire fonctionner l'installation en attendant de trouver mieux.
Avatar de l’utilisateur
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7037
Inscription : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Regulation proportionnelle TOR

Message par itasoft »

slts,
le bit horloge c'est un clignotant, reste à trouver la bonne fréquence fixe de clignotement
-------------------------
_barr.JPG
Dernière modification par itasoft le 04 mars 2019, 01:13, modifié 1 fois.
Automaticien privé (de tout)
itasoft@free.fr
Squale
Aguerri de l'automation
Aguerri de l'automation
Messages : 82
Inscription : 05 sept. 2018, 06:17
Localisation : TAHITI

Re: Regulation proportionnelle TOR

Message par Squale »

OK je comprends mieux,

merci itasoft.
Avatar de l’utilisateur
josé
Codeur fou
Codeur fou
Messages : 263
Inscription : 20 oct. 2015, 17:02

Re: Regulation proportionnelle TOR

Message par josé »

Bonjour,
J'ai pas tout lu :roll:
mais pourquoi ne pas modifier la fréquence d’impulsion en fonction le la lecture PH ?
du coup un simple PID ferait l'affaire.
Créateur de pannes ...
Répondre