Regulation proportionnelle TOR
-
- Aguerri de l'automation
- Messages : 82
- Inscription : 05 sept. 2018, 06:17
- Localisation : TAHITI
Regulation proportionnelle TOR
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.
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.
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Regulation proportionnelle TOR
slts,
voir si c'est possible avec un bloc PWM + horloge en sortie du PID
-----un exemple--------
voir si c'est possible avec un bloc PWM + horloge en sortie du PID
-----un exemple--------
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
Re: Regulation proportionnelle TOR
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
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
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Regulation proportionnelle TOR
slts,
dans mon exemple le bit horloge set à générer un certain nombre d'impulsions pendant un certain temps
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
itasoft@free.fr
Re: Regulation proportionnelle TOR
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!!!
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!!!
-
- Aguerri de l'automation
- Messages : 82
- Inscription : 05 sept. 2018, 06:17
- Localisation : TAHITI
Re: Regulation proportionnelle TOR
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.
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.
- itasoft
- Mi homme - Mi automate
- Messages : 7037
- Inscription : 20 oct. 2015, 10:15
- Localisation : Lyon
- Contact :
Re: Regulation proportionnelle TOR
slts,
le bit horloge c'est un clignotant, reste à trouver la bonne fréquence fixe de clignotement
-------------------------
le bit horloge c'est un clignotant, reste à trouver la bonne fréquence fixe de clignotement
-------------------------
Dernière modification par itasoft le 04 mars 2019, 01:13, modifié 1 fois.
Automaticien privé (de tout)
itasoft@free.fr
itasoft@free.fr
-
- Aguerri de l'automation
- Messages : 82
- Inscription : 05 sept. 2018, 06:17
- Localisation : TAHITI
Re: Regulation proportionnelle TOR
OK je comprends mieux,
merci itasoft.
merci itasoft.
Re: Regulation proportionnelle TOR
Bonjour,
J'ai pas tout lu
mais pourquoi ne pas modifier la fréquence d’impulsion en fonction le la lecture PH ?
du coup un simple PID ferait l'affaire.
J'ai pas tout lu
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 ...