Dans un système à réservoirs couplés, quelle est la stratégie de contrôle pour contrôler simultanément le niveau dans plusieurs réservoirs. Dans ce cas, les actionneurs influencent plusieurs variables de contrôle. Le système est comme indiqué dans ce schéma
Les variables à contrôler sont les niveaux de liquide dans chacun des réservoirs. Les actionneurs sont les vannes sur les conduites ainsi que le débit d'entrée q0. Le problème est que le même actionneur, par exemple V1 influence à la fois h1 et h2. J'ai essayé de 3 PID différents pour chaque réservoir. Chaque contrôleur reçoit la hauteur dans le réservoir correspondant et envoie le signal de commande à la sortie correspondante. Ainsi, PID1 reçoit l’entrée h1 et ne contrôle que V1; PID2 reçoit l’entrée h2 et ne contrôle que V2 ...
Réponses:
Vous avez affaire à un système multi-entrées multi-sorties Système (MIMO), auquel cas vous ne pouvez généralement pas appliquer les mêmes techniques que pour les systèmes à une seule entrée (SISO). Si vous avez affaire à un système MIMO invariant dans le temps linéaire, vous pouvez utiliser ce que l’on appelle le tableau de gain relatif pour voir si une approche de contrôle SISO fonctionnerait bien. Cependant, dans ce cas, je pense que vous avez affaire à un système non linéaire, mais il serait peut-être possible d'effectuer un découplage entrées-sorties, notamment en contrôlant le flux entrant dans chaque réservoir. Pour cela, je suppose pour le moment que vous pouvez choisir les débits $ q_0 $, $ q_1 $, $ q_2 $ et $ q_3 $ et que la dynamique peut être écrite de la manière suivante:
$$ \ begin {align} \ dot {h} _i = \ alpha_i (q_ {i-1} - q_i) \ tag {1} \ end {align} $$
de sorte que la dynamique des combinaisons peut être écrite comme
$$ \ dot {\ vec {h}} = \ begin {bmatrix} \ alpha_1 & amp; - \ alpha_1 & amp; 0 & amp; 0 \\ 0 & amp; \ alpha_2 & amp; - \ alpha_2 & amp; 0 \\ 0 & amp; 0 & amp; \ alpha_3 & amp; - \ alpha_3 \ end {bmatrix} \ vec {q} \ tag {2} $$
où $ \ vec {h} = \ begin {bmatrix} h_1 & amp; h_2 & amp; h_3 \ end {bmatrix} ^ \ top $ et $ \ vec {q} = \ begin {bmatrix} q_0 & amp; q_1 & amp; q_2 & amp; q_3 \ end {bmatrix} ^ \ top $. Maintenant, en définissant une entrée virtuelle $ \ vec {v} $ telle que $ \ dot {\ vec {h}} = \ vec {v} $, toutes les paires d’entrée et de sortie sont découplées. Pour cela nous avons besoin
$$ \ begin {bmatrix} \ alpha_1 & amp; - \ alpha_1 & amp; 0 & amp; 0 \\ 0 & amp; \ alpha_2 & amp; - \ alpha_2 & amp; 0 \\ 0 & amp; 0 & amp; \ alpha_3 & amp; - \ alpha_3 \ end {bmatrix} \ vec {q} = \ vec {v} \ tag {3} $$
qui peut être résolu pour $ \ vec {q} $ en utilisant un pseudo inverse de la matrice sur le côté gauche. Cela peut être fait de plusieurs manières, mais la solution qui minimise les rendements $ \ | \ \ vec {q} \ | $
$$ \ vec {q} = \ begin {bmatrix} \ frac {3} {4 \, \ alpha_1} & amp; \ frac {1} {2 \, \ alpha_2} & amp; \ frac {1} {4 \, \ alpha_3} \\ \ frac {-1} {4 \, \ alpha_1} & amp; \ frac {1} {2 \, \ alpha_2} & amp; \ frac {1} {4 \, \ alpha_3} \\ \ frac {-1} {4 \, \ alpha_1} & amp; \ frac {-1} {2 \, \ alpha_2} & amp; \ frac {1} {4 \, \ alpha_3} \\ \ frac {-1} {4 \, \ alpha_1} & amp; \ frac {-1} {2 \, \ alpha_2} & amp; \ frac {-3} {4 \, \ alpha_3} \ end {bmatrix} \ vec {v}. \ tag {4} $$
Vous pouvez donc maintenant utiliser des méthodes de contrôle SISO normales, telles que PID, pour chaque paire $ h_i $ - $ v_i $ qui conduirait $ \ vec {h} $ à la valeur souhaitée.
Cependant, il n'y a probablement pas de relation linéaire entre $ q_i $ et $ V_i $, mais plutôt quelque chose comme $ q_i \ propto \ sqrt {V_i (h_i - h_ {i + 1})} $ ou une autre fonction dépendante de l'état non linéaire. Si vous connaissez cette relation plus précisément, vous pouvez créer un contrôleur non linéaire, sinon vous pouvez effectuer une fermeture de boucle séquentielle. Pour la fermeture de boucle séquentielle, vous utilisez $ V_i $ pour contrôler $ q_i $ à la valeur souhaitée définie par $ \ vec {v} $ à partir de l'équation $ (4) $.
Si vous avez des signaux de référence plus difficiles pour les hauteurs, vous devrez peut-être recourir à des techniques encore plus avancées, telles que le contrôle prédictif du modèle. Par exemple, lorsque les hauteurs de référence sont telles que $ h_ {r, 1} & lt; h_ {r, 2} $ et $ h_ {r, 2} & gt; h_ {r, 3} $ mais votre système démarre à $ h_1 = h_2 = h_3 & lt; h_ {r, 2} $, dans un premier temps, il ne sera pas possible d'avoir un apport positif dans le second réservoir et pour atteindre les hauteurs souhaitées, $ h_1 $ doit être supérieur à $ h_2 $ pendant un certain temps pour $ h_2 $ pour atteindre son objectif.
la source
Je ne suis pas un spécialiste des systèmes de contrôle, alors pardonnez mon approche peu systématique.
La première chose à faire est d’essayer de régler manuellement les vannes pour obtenir une valeur q constante, afin d’atteindre les niveaux souhaités.
Je contrôlerais q à partir de la moyenne des écarts de hauteur par rapport à la hauteur souhaitée dans chaque réservoir. Si le niveau d'eau global est inférieur au niveau souhaité, augmentez q et vice versa.
La variable de contrôle pour les vannes doit être la différence de hauteur entre deux réservoirs consécutifs: V1 est contrôlé pour h1-h2, ces différences de hauteur que vous calculez à partir des hauteurs souhaitées dans tous les réservoirs. Seule la vanne 3 est contrôlée directement pour h3.
Veillez également à ce que la première vanne soit plus rapide que la seconde et la seconde plus rapide que la troisième. Cela devrait vous aider à éviter les oscillations.
Malgré cela, j’ai promis une approche non systématique, voici un peu de raisonnement: Pour un q donné, il existe une relation entre la différence de hauteur et le degré d’ouverture ou de fermeture de la vanne. C'est probablement pourquoi votre stratégie n'a pas fonctionné.
la source