Réalisation d’un T.P. de régulation thermique (niveau BAC + 2) en utilisant l’environnement MATLAB pour la partie commande Patrick BRUNET Emile FERRERE LTEG Henri BRISSON 25 Avenue Henri BRISSON 18108 VIERZON 02 48 52 74 00 Sommaire A. PRÉSENTATION DU SYSTÈME À RÉGULER ..................................3 A.1. SCHÉMA DE PRINCIPE ............................................................................3 A.2. DONNÉES POUR LA MODÉLISATION DU SYSTÈME ...................................4 B. MODÉLISATION DU PROBLÈME AVEC MATLAB ........................5 B.1. PRÉSENTATION DE MATLAB................................................................5 B.2. CONSTRUCTION DU MODÈLE AVEC MATLAB.......................................6 B.2.1. Modélisation de la cuve....................................................................6 B.2.2. Modélisation du gradateur de puissance ..........................................7 B.2.3. « vectorisation » du contrôleur.........................................................7 B.2.4. Prise en compte d’une perturbation..................................................7 B.3. CONSTRUCTION DU CORRECTEUR FLOU .................................................8 B.3.1. Introduction à la logique floue .........................................................8 B.3.2. Notion d’ensemble flou.....................................................................8 B.3.3. Structure d’un contrôleur flou ........................................................ 10 B.3.3.1. Opération de fuzzification ......................................................... 10 B.3.3.2. Base de règles « d’inférence » ................................................... 11 B.3.3.3. Mise en oeuvre de la base de règles ........................................... 11 B.3.3.4. Défuzzification .......................................................................... 12 B.3.3.5. Conclusion ................................................................................ 13 B.3.4. Utilisation de la boite à outils « Fuzzy logic » ................................ 14 B.3.4.1. Opérations de fuzzification........................................................ 14 B.3.4.2. Sauvegarde du contrôleur dans l’espace de travail matlab ......... 15 B.4. RÉSULTATS DE SIMULATION ................................................................ 16 B.4.1. Réponse à une consigne de température ......................................... 16 B.4.2. Réponse à une perturbation en régime établi.................................. 17 C. RÉGULATION TEMPS RÉEL DU SYSTÈME .................................. 18 C.1. PRÉ-REQUIS LOGICIELS ........................................................................ 18 C.2. CARACTÉRISTIQUES DE LA CARTE D’ENTRÉES / SORTIES ..................... 19 C.3. MODIFICATION DU MODÈLE................................................................. 20 C.3.1. Insertion et paramétrage du bloc Analog Input .............................. 21 C.3.2. Insertion et paramétrage du bloc Analog Output............................ 22 C.3.3. Paramétrage des propriétés des oscilloscopes................................ 23 C.4. GÉNÉRATION DU CODE ........................................................................ 24 C.5. EXÉCUTION DU CODE........................................................................... 28 Patrick BRUNET-Emile FERRERE Année 2000-2001 1 Régulation thermique sous Matlab C.6. RÉSULTATS TEMPS RÉEL ...................................................................... 32 C.6.1. Réponse à une consigne de température ......................................... 32 C.6.2. Réponse à une perturbation en régime établi.................................. 33 C.6.3. Réponse à une modification de la consigne en cours de régulation 34 D. CONCLUSION....................................................................................... 35 Patrick BRUNET-Emile FERRERE Année 2000-2001 2 Régulation thermique sous Matlab A. Présentation du système à réguler A.1. Schéma de principe Cuve dont la température est à réguler sonde PT 100 220V/50Hz Thermoplongeur Bloc de puissance « gradipack » Le schéma de principe ci-dessus représente le synoptique de la régulation de température à réaliser Fonctions gérées par l’ordinateur * E* + uc Régulateur θ consigne C.N.A. Bloc de puissance : GRADIPACK système : cuve θ * échantillonnage Capteur : sonde PT 100 et dont le schéma fonctionnel est précisé ci-dessous : Il s’agit de réguler la température de l’eau d’une cuve (seau d’une contenance de quelques litres) équipée d’un thermoplongeur apportant l’énergie calorifique. Une sonde de température (PT100) permet de mesurer la température réelle de l’eau. Il est bon de prévoir un brassage de l’eau dans la cuve afin d’homogénéiser sa température. La puissance nominale du thermoplongeur (1 kW) est modulée grâce à un bloc de puissance « GRADIPACK » (dénomination commerciale). Il s’agit d’un ensemble de 2 thyristors montés têtebêche (gradateur) permettant de faire varier la puissance électrique dissipée par variation de l’angle de retard à l’amorçage des thyristors. Celle-ci est contrôlée par une tension de commande 0 -10V continue (Ucom ) qui permet de faire varier la tension efficace (Ueff ) appliquée au thermoplongeur. Le rôle du micro-ordinateur sera de faire la mesure de la température de la cuve à partir du signal délivré par la sonde PT100 et sa mise à l’échelle, de comparer cette valeur avec la température de consigne, de traiter l’écart entre ces 2 valeurs et de fournir une tension de commande utile pour le « GRADIPACK ». Tout cela nécessite la mise en oeuvre d’une carte d’entrées-sorties analogiques. Patrick BRUNET-Emile FERRERE Année 2000-2001 3 Régulation thermique sous Matlab A.2. Données pour la modélisation du système Cuve à chauffer : On supposera que la capacité calorifique de la cuve à chauffer se réduit à l’eau qu’elle contient. En prenant un volume de 3 litres, on obtient : C = m.c = 3 * 4.18 E 3 ≈ 1.25 E 4 JK −1 Contrôle du thermoplongeur : Ueff 230 V Ucom 0.5 V 8.5 V La figure ci-dessus donne la modélisation du fonctionnement du « GRADIPACK ». La tension efficace appliquée au thermoplongeur passe de 0 à 230V si la tension de commande évolue de 0.5V à 8.5V. On pourra donc écrire : 230 U eff = .(U com − 0.5) 8 La puissance de chauffe sera donnée par : P = PN . (U ) eff (U N )2 2 , soit en tenant compte de l’expression précédente : P= PN 8 2 (U com − 0.5)2 2 = 15.6(U com − 0.5) (en Watts). Evaluation des pertes thermiques : Les pertes thermiques peuvent se mettre sous la forme Pth = K .(θ − θ ext ) (Loi de FOURIER). L’expérience montre qu’elles sont faibles. On les estimera à 50 W pour un ∆θ = 25°C. D’où K = 2WK −1 Bilan de puissance sur la cuve : La puissance fournie par le thermoplongeur : PT, sert à élever la température de l’eau et participe aux pertes soit : d (θ − θ ini ) PT = C. + K .(θ − θ ext ) dt avec θ : température de l’eau θ ini : température initiale de l’eau θ ext : température extérieure à la cuve Patrick BRUNET-Emile FERRERE Année 2000-2001 4 Régulation thermique sous Matlab B. Modélisation du problème avec MATLAB B.1. Présentation de MATLAB MATLAB est le « noyau dur » d’un logiciel de mathématiques spécialement étudié pour traiter des matrices. Un langage de programmation spécifique permet de faire des manipulations sur des matrices et toutes sortes de calculs et de présentation graphique de ces calculs. Différentes « boites à outils » peuvent y être adjointes pour simuler le comportement de systèmes linéaires ou non. Dans ce cas, il n’est pas nécessaire d’utiliser le langage de programmation car une interface graphique permet d’avoir accès de façon intuitive à des schémas réalisant une fonction particulière. Plusieurs d’entre elles sont dédiées à l’étude de l’automatique. La plus importante est SIMULINK. Ce module permet de construire des schémas fonctionnels à partir d’éléments contenus dans des bibliothèques qu’il suffit de « draguer » avec la souris pour les déposer sur la « feuille » de travail et construire son système : la bibliothèque « source » fournit des échelons, des GBF, etc … les bibliothèques « continu » et « discret » proposent des dérivateurs, des intégrateurs, des fonctions de transfert pour construire des systèmes à temps continu ou échantillonné (discret), la bibliothèque « math » fournit des gains, des multiplicateurs, des sommateurs, on trouve également des multiplexeurs pour « vectoriser » des signaux ainsi que des oscilloscopes pour visualiser les résultats de modélisation. Le module CONTROL SYSTEM TOOLBOX fournit des outils d’analyse des sytèmes (Bode, etc …) Le module FUZZY LOGIC TOOLBOX permet de générer des blocs utilisant la logique floue. On développera particulièrement dans la suite de cet article la méthode permettant d’élaborer un « correcteur flou » après avoir donné les éléments nécessaires à la compréhension. Patrick BRUNET-Emile FERRERE Année 2000-2001 5 Régulation thermique sous Matlab B.2. Construction du modèle avec MATLAB Le schéma fonctionnel ci dessous présente la modélisation du système à étudier à partir des éléments de base décrits plus haut. On peut y reconnaître : des échelons, des sommateurs, un produit, des oscilloscopes, un intégrateur, des multiplexeurs,… B.2.1. Modélisation de la cuve En reprenant le bilan de puissance sur la cuve, il vient en utilisant la notation de Laplace : PT = C. p(θ − θ ini )+ K (θ − θ ext ) PT − K (θ − θ ext ) = C. p(θ − θ ini ) 1 (θ − θ ini )= [PT − K (θ − θ ext )] 1 θ = θ ini + [PT − K (θ − θ ext )] C. p C. p Ce qui se traduit par le schéma simulink ci dessous : Patrick BRUNET-Emile FERRERE Année 2000-2001 6 Régulation thermique sous Matlab B.2.2. Modélisation du gradateur de puissance Rappelons la relation donnant la puissance de chauffe en fonction de la tension de commande P 2 2 P = N2 (U com − 0.5) = 15.6(U com − 0.5) 8 La saturation permet de limiter la tension de commande à la plage 0.5V-8.5V et le bloc produit permet de faire l’élévation au carré. B.2.3. « vectorisation » du contrôleur 1 » est un opérateur échantillonné, sa sortie est mise à jour toutes les 5 z secondes. Il permet de mémoriser la valeur de l’erreur à l’instant « t-1 ». Ainsi, le circuit de différence permet d’obtenir la variation de l’erreur entre 2 instants d’échantillonnage. Le contrôleur sera donc sensible à l’erreur de température et à sa variation. L’opérateur retard « B.2.4. Prise en compte d’une perturbation La perturbation pourra être simulée par un créneau de puissance négatif limité dans le temps (et décalé par rapport au début de la simulation) traduisant un apport d’eau froide par exemple. Patrick BRUNET-Emile FERRERE Année 2000-2001 7 Régulation thermique sous Matlab B.3. Construction du correcteur flou B.3.1. Introduction à la logique floue Si les processus commandés sont linéaires, (c’est-à-dire lorsque les grandeurs de sortie sont reliées aux grandeurs d’entrée par des équations différentielles linéaires) ils peuvent être alors modélisés par un modèle mathématique (fonction de transfert en « p » pour les systèmes à temps continu ou en « z » pour les systèmes à temps échantillonnés). Le concepteur devra alors calculer les valeurs des paramètres de réglage du régulateur (gain, durées d’intégration et de dérivation) pour satisfaire aux exigences d’un cahier des charges (temps de montée, dépassement). Le système régulé sera correct s’il est peu sensible aux perturbations (on dira alors qu’il est robuste). Certains processus sont par nature difficilement modélisables (thermique, chimique), variables dans le temps ou encore ne peuvent être correctement représentés par un modèle linéaire. Dans ce cas, les paramètres de réglage du régulateur ne seront pas optimaux et le système pourra ne pas être correctement contrôlé. Dans une approche « logique floue », on ne se préoccupe pas d’une modélisation mathématique du processus mais, par contre, on suppose le processus non régulé bien connu par un opérateur humain, l’objectif est toutefois de l’automatiser. On parle alors de connaissance par un « expert » qui sait ce qu’il faut faire pour que ça marche dans tous les cas de figure. Par exemple : si la température est très basse, je chauffe "plein pot" jusqu’à telle valeur, ensuite je réduis de 50 % si le four est plein ou de 75% si le four est moitié plein car j’ai remarqué que c’est un bon choix : c’est « l’expertise ». On se propose dans la suite de détailler les étapes permettant, à partir des données fournies par un ou plusieurs capteurs, d’élaborer un signal de commande compréhensible par une interface de puissance (0-10V par exemple). B.3.2. Notion d’ensemble flou Un problème de vocabulaire se pose pour le mot flou (fuzzy en anglais qui signifie vague, confus). Cela ne doit pas être interprété comme on va le voir par un « p’tet ben qu’oui, p’tet ben qu’non » ! En aucun cas il ne s’agit d’un manque d’information pour une décision à prendre, mais d’une représentation qui prend en compte l’incertitude que l’on a du modèle. La notion d’ensemble flou a été introduite par L.A. ZADEH en 1965. Une théorie des ensembles flous permet de définir toutes les opérations classiques (conjonction, disjonction, etc.). Elle englobe la théorie des ensembles classiques. La figure ci-dessous représente la plage de variation d’un capteur (de température par exemple). Le signal de sortie peut varier de 0 à 10V, mais on constate qu’à partir de 9 V se produit une saturation. On va décider de partitionner la plage de variation utile (0-9V) en 3 zones qui seront dénommées : petite (0-3V), moyenne (3V à 6V), et grande (6V à 9V). µ : degré d’appartenance petite moyenne grande 1 tension issue du capteur 0 3V 6V 9V Patrick BRUNET-Emile FERRERE Année 2000-2001 8 Régulation thermique sous Matlab Si la tension est de 2V, elle est alors dans la classe « petite » et bien sûr ni « moyenne » ni « grande ». Le degré d’appartenance de la valeur 2V à la classe « petite » est de 1 et 0 pour les 2 autres. On retrouve là une logique binaire où l’état d’un comparateur ne peut être que « 0 » ou « 1 ». l’inconvénient de cette représentation est que la valeur 2.95V appartient à la classe « petite » alors que la valeur 3.05V appartient à la classe « moyenne » et pourtant les valeurs sont proches. Ceci est dû à la définition des 3 sous-ensembles classiques « petite », « moyenne » e t « grande » qui ont une « frontière » nette d’où cette discontinuité. Si le résultat de la mesure est légèrement bruité (cas très fréquent évidemment), on pourra basculer d’un coté à l’autre de la « frontière ». La notion de sous-ensemble flou permet d’éviter cette discontinuité brutale. Cette opération s’appelle « la fuzzification ». La sortie du capteur est appelée variable « linguistique » puisqu’elle pourra prendre les valeurs linguistiques « petite », « moyenne » ou « grande », mais on va modifier comme indiqué ci-dessous les « frontières » entre ces valeurs linguistiques, c’est-à-dire les formes des fonctions d’appartenance. µ : degré d’appartenance petite moyenne grande 1 0.8 0.2 tension issue du capteur 0 1.5V 3V 4.5V 7.5V 6V 9V Représentation des degrés d’appartenance avec 3 ensembles flous Dans cette représentation la valeur de tension 2V sera à la fois « petite » et « moyenne »; de plus, on va préciser de combien. On définit alors un degré d’appartenance µ à chacune de ces classes : µpetite = 0.8 et µmoyenne = 0.2 On peut dire que l’ordre de grandeur de la tension issue du capteur est pris en compte par les valeurs linguistiques, puis la valeur précise est contenue dans les degrés d’appartenance (on parle aussi de mesure d’appartenance ou de degré de certitude). Remarques : Les profils des frontières peuvent être variés : triangle, trapèze, sigmoïde, courbe de Gauss, etc. Il n’y a rien de flou dans cette représentation, une même mesure peut appartenir à plusieurs classes avec un degré d’appartenance précis dans chaque classe. La valeur de la tension issue du capteur est ici considérée comme précise comme en automatique classique (on l’appelle singleton). C’est le rôle de l’expert que de définir les valeurs linguistiques de la variable. Patrick BRUNET-Emile FERRERE Année 2000-2001 9 Régulation thermique sous Matlab B.3.3. Structure d’un contrôleur flou B.3.3.1. Opération de fuzzification La grandeur d’entrée du contrôleur doit d’abord être fuzzifiée, c’est-à-dire que l’on va fixer les valeurs linguistiques ainsi que la forme des fonctions d’appartenance. Cette opération doit être faite également sur la variable de sortie. Bien sûr cette sortie fuzzifiée n’est pas exploitable pour attaquer l’interface de puissance. Il faudra donc avoir en tête de faire une opération de « défuzzification » pour résoudre ce problème. On va prendre un exemple où l’on va fuzzifier l’erreur (notée e), entrée du régulateur, mais aussi la variation de l’erreur (notée ∆e) et la sortie (notée s). Les valeurs de e de ∆e sont mises à jour à chaque période d’échantillonnage. On passe pour cela par un convertisseur analogique numérique. erreur : e µ : degré d’appartenance grande - moyenne - petite moyenne + grande + 1 0.8 variable : e 0.2 -9 -7.5 -4.5 -1.5 0 1.5 4.5 7.5 9 2V variation de l’erreur : ∆ e µ : degré d’appartenance grande - moyenne - petite moyenne + grande + 1 0.6 variable : ∆ e 0.4 -9 -7.5 -4.5 -1.5 0 1.5 4.5 7.5 9 2.2V µ : degré d’appartenance sortie : s petite moyenne grande 1 varaible : s 0 1.5V 3V 4.5V 6V 7.5V 9V Fuzzification des 2 variables d’entrée et de la variable de sortie L’entrée e a été partitionnée en 5 valeurs linguistiques ainsi que ∆e. Elles peuvent être positives ou négatives. Patrick BRUNET-Emile FERRERE Année 2000-2001 10 Régulation thermique sous Matlab La sortie s a été partitionnée en 3 valeurs linguistiques ; elle pourra n’être que positive (cas de la figure) dans le cas où la partie puissance est commandée par une tension (0, 10V) par exemple. On a gradué les axes donnant la variation des variables en Volt pour faciliter la compréhension, mais en pratique les tests seront faits sur les valeurs échantillonnées des entrées (on passe par un C.A.N.) B.3.3.2. Base de règles « d’inférence » Le rôle de l’expert est ici présent car c’est lui qui va fixer les règles de la commande qui vont porter uniquement sur les valeurs linguistiques des variables. Soit par exemple la liste de règles suivantes (qui résultent de la connaissance de l’expert) : -R1 : SI (e) est petite ET (∆e) est petite ALORS (s) est petite -R2 : SI (e) est petite ET (∆e) est moyenne + ALORS (s) est petite -R3 : SI (e) est moyenne + ET (∆e) est petite ALORS (s) est petite -R4 : SI (e) est moyenne + ET (∆e) est moyenne + ALORS (s) est moyenne -R5 : SI (e) est grande + ET (∆e) est moyenne + ALORS (s) est moyenne - .... Le tableau ci-dessous représente la base de règles en donnant les valeurs de la sortie pour les différentes valeurs linguistiques de e et ∆e : ∆e e grande moyenne petite moyenne + grande + grande - moyenne - ... ... ... ... ... ... petite ... ... (R1) s : petite (R2) s : petite ... moyenne + grande + ... ... ... ... (R3) s : petite ... (R4) s:moyenne (R5) s:moyenne Remarques : « SI (e) est petite » : constitue une prémisse de la règle « ET »: est appelé opérateur de conjonction « ALORS (s) est petite » : est appelé implication (conclusion) de la règle La liste des règles est appelée base d’inférence (inférence : opération logique par laquelle on admet une proposition en vertu de sa liaison avec d’autres propositions tenues pour vraies : Nouveau Petit Robert). On parle aussi de moteur d’inférence. Il n’est pas nécessaire que toutes les cases du tableau soient remplies. On peut trouver les règles énoncées critiquables, elles ne sont données qu’à titre d’exemples et doivent être adaptées en fonction de chaque processus. B.3.3.3. Mise en oeuvre de la base de règles Supposons qu’à un instant t on ait : e = 2 V et ∆e = 2.2 V Ces valeurs vont constituer des faits et à ce titre activer la base de règles. Il est facile de voir à partir de la figure donnant la fuzzification de e et ∆e que les règles R 1, R2 , R3 , R4 vont être actives puisque e et ∆e sont à la fois petite et moyenne + (partie la plus grisée du tableau). Il s’agit ici des valeurs linguistiques des variables. Mais l’examen des figures montre aussi que l’on peut en déduire les degrés d’appartenance à chacune de ces classes. Pour e on a µpetite = 0.8 et µmoyenne + = 0.2 Pour ∆e on a µpetite = 0.6 et µmoyenne + = 0.4 Patrick BRUNET-Emile FERRERE Année 2000-2001 11 Régulation thermique sous Matlab On va donc étudier maintenant le rôle de chaque règle activée et voir concrètement comment on traduit les opérations de conjonction (ET) et d’implication (ALORS). Pour traduire le ET (c’est-à-dire la conjonction des prémisses), on peut utiliser la fonction MIN : on prendra la valeur minimale des 2 degrés d’appartenance des prémisses. La signification physique de ce choix est de conserver l’information la plus sûre. Le résultat est un nouveau degré d’appartenance au sous ensemble flou de la sortie. Ainsi pour R1, on a : le MIN de 0.8 et 0.6 est 0.6, donc pour (s) : µpetite = 0.6 On fait ensuite la même chose pour toutes les règles activées et on obtient les résultats suivants pour la variable linguistique de sortie (s) : Pour R1 : µpetite = 0.6 Pour R2 : µpetite = 0.4 Pour R3 : µpetite = 0.2 Pour R 4 : µ moyenne = 0.2 L’opération n’est pas terminée car les 4 règles étant activées en même temps, il faut faire ce que l’on appelle l’agrégation des règles (l’assemblage) Les règles R1, R2 et R3 concernent la même valeur linguistique « petite » de la variable de sortie alors que R 4 porte sur la valeur « moyenne ». On utilise ici l’opérateur MAX, c’est-à-dire que pour chaque valeur linguistique de sortie concernée on va prendre la valeur maximum des degrés d’appartenance. Le résultat de l’agrégation des règles donne donc la variable s « petite » avec un degré d’appartenance de 0.6 en même temps que « moyenne » avec un degré d’appartenance de 0.2. A ce stade, on a donc la sortie définie sous forme linguistique avec des degrés d’appartenance précis. Il faut maintenant passer à une grandeur qui, elle, sera interprétable par l’interface de commande. B.3.3.4. Défuzzification µ : degré d’appartenance sortie : s petite moyenne grande 1 valeur de la commande 0.6 0.2 variable : s 0 1.5V 4.5V 3V 6V 7.5V 9V La figure ci-dessus indique comment on interprète l’agrégation des règles. Le sous ensemble « petite » est limité par le degré d’appartenance à 0.6 et le sous ensemble « moyenne » par 0.2 (on prend le MIN entre la fonction d’appartenance de la valeur linguistique de la sortie concernée et le µ trouvé par l’agrégation des règles). On obtient ainsi toute la surface grisée. Pour obtenir le signal de commande à envoyer à l’interface, on utilise le plus souvent la règle « du centre de masse » c’est-à-dire que l’on calcule le barycentre de la surface pour obtenir la valeur de la commande. Patrick BRUNET-Emile FERRERE Année 2000-2001 12 Régulation thermique sous Matlab B.3.3.5. Conclusion CAN ajustement des échelles consigne Base de règles en ROM + e CAN Fuzzification CAN retour - sortie d/dt Moteur d’inférence en RAM ∆e Défuzzification Fuzzification Les grandeurs réelles consigne et retour sont numérisées avec ces convertisseurs AN puis l’erreur (éventuellement la variation de l’erreur) est fuzzifiée. La base de règles qui sera stockée en ROM sera activée et le moteur d’inférence permettra d’élaborer une sortie qui sera ensuite défuzzifiée et convertie en signal analogique. On peut constater que dans son principe même le contrôleur à logique floue n’est pas linéaire. En effet l’activation des règles d’inférence n’est pas un processus linéaire pas plus que la traduction mathématique que l’on en donne (algorithme MAX MIN). On a utilisé ici l’algorithme MIN MAX (MIN pour la conjonction des prémisses et l’implication des règles, MAX pour l’agrégation des règles). Mais, il existe d’autres possibilités : on peut par exemple utiliser l’algorithme PROD MAX (PROD pour la conjonction des prémisses et l’implication des règles, MAX pour l’agrégation des règles) c’est-à-dire que l’on fait le produit des degrés d’appartenance obtenu avec chaque règle pour définir le degré d’appartenance pour la sortie. Il existe un autre type de contrôleur flou dit de type SUGENO. Les prémisses des règles sont aussi linguistiques mais les conclusions sont élaborées directement sous une forme polynomiale avec des coefficients définis à l’avance. L’avantage de ce type de régulateur est qu’il est possible d’introduire des algorithmes d’apprentissage pour adapter les coefficients. C’est ainsi qu’il existe des contrôleurs flous adaptatifs. La technologie des réseaux de neurones peut être utilisée pour l’apprentissage. Bibliographie : Université d’été du 8 au 12 Juillet 1996 organisée par l’IUP du littoral à Calais (Université du littoral) La logique floue de Jean-Raphael Tong Tong (Editions HERMES) La logique floue de B Bouchon-Meunier (Que sais-je) Le contrôle flou de Bühler (éditions E.P.R.) Fuzzylogic toolbox (documentation du logiciel MATLAB) Patrick BRUNET-Emile FERRERE Année 2000-2001 13 Régulation thermique sous Matlab B.3.4. Utilisation de la boite à outils « Fuzzy logic » On commence par taper fuzzy à l’invite de la fenêtre de commande de MATLAB : >> ce qui lance l’éditeur de contrôleur flou : Fis Editor B.3.4.1. Opérations de fuzzification étape 1 La commande Edit permettra de choisir le nombre d’entrées-sorties (2 entrées et 1 sortie dans notre application). On pourra renommer à loisir ces différentes variables. étape 2 Double-cliquer sur chaque variable d’entrée ou de sortie pour définir les valeurs linguistiques et la forme des fonctions d’appartenance. Pour cela utiliser dans le nouveau menu Edit la commande Add MFs, ce qui signifie ajouter des fonctions d’appartenance. On pourra choisir des fonctions triangulaires [trimf], trapézoïdales [trapmf], etc… Patrick BRUNET-Emile FERRERE Année 2000-2001 14 Régulation thermique sous Matlab étape 3 Double-cliquer sur le bloc central (mandani) pour entrer les règles d’inférences choisies. étape 4 Pour visualiser le comportement du contrôleur ainsi créé, on pourra utiliser dans le menu View, la commande View rules. Il est alors possible de fixer les valeurs des variables d’entrées, de voir quelles sont les règles d’inférences activées et de lire la valeur de la tension de commande correspondante. B.3.4.2. Sauvegarde du contrôleur dans l’espace de travail matlab Pour que le contrôleur ainsi créé soit disponible dans un modèle simulink, il faut qu’il soit sauvegardé dans l’espace de travail. Pour cela dans le menu File, utiliser l’option Save to workspace. Ainsi, son contenu sera mis dans un fichier de type « *.fis » (chauff3.fis dans l’exemple ci-dessus) auquel il sera fait appel dans simulink. Pour incorporer le correcteur flou dans son propre modèle simulink, le plus simple est d’en copier un à partir d’une démo de MATLAB. Ensuite, on double-cliquera sur le modèle en entrant dans la fenêtre le nom du fichier (chauff3 comme indiqué précédemment) Le modèle définitif est (enfin !) prêt à fonctionner. Patrick BRUNET-Emile FERRERE Année 2000-2001 15 Régulation thermique sous Matlab B.4. Résultats de simulation B.4.1. Réponse à une consigne de température La consigne de température est réglée à 30°C alors que la température initiale est de 15°C. Les oscillogrammes ci-dessous donnent les évolutions de la température, de la tension de commande du gradipack, de l’erreur et de la variation de l’erreur. Patrick BRUNET-Emile FERRERE Année 2000-2001 16 Régulation thermique sous Matlab B.4.2. Réponse à une perturbation en régime établi La consigne de température reste réglée à 30°C. Les oscillogrammes ci-dessous donnent les évolutions de la température, de la tension de commande du gradipack, de l’erreur et de la variation de l’erreur lorsque l’on perturbe le système à t = 500s. Patrick BRUNET-Emile FERRERE Année 2000-2001 17 Régulation thermique sous Matlab C. Régulation temps réel du système C.1. Pré-requis logiciels Pour mener à bien la régulation de température en temps réel sous MATLAB, les boîtes à outils et le compilateur suivants doivent être installés sur le micro-ordinateur : Matlab 6 (release 12) Simulink 4.0 (release 12) Real-Time Workshop 4.0 Real-Time Windows Target 2.0 Compilateur Watcom 11.0 De plus, différents fichiers sont nécessaires à la création du modèle et sont téléchargeables sur le site http://www.iufmrese.cict.fr/ dans l’archive regul.zip : Liste des fichiers inclus dans l’archive : doslib.mdl fstlabad.c, fstlabad.h, fstlabad.tlc (sources du driver de la carte) fstlabda.c, fstlabda.h, fstlabda.tlc (sources du driver de la carte) drt_comp.h win_watc.tmf chauff3.fis (source du contrôleur flou) regul_rt.mdl (modèle simulink temps réel du système) Avant de modifier le modèle précédemment décrit, plusieurs manipulations doivent être effectuées, une fois tous les fichiers téléchargés : Extraire tous les fichiers de l’archive dans un répertoire temporaire Sauvegarder le fichier doslib.mdl original du répertoire \matlabR12\toolbox\rtw\rtw sous un autre nom ce qui permettra d’en garder une image en cas de fausse manœuvre. Copier le fichier doslib.mdl téléchargé dans le répertoire \matlabR12\toolbox\rtw\rtw Sauvegarder le fichier win_watc.tmf original du répertoire : matlabR12\toolbox\rtw\targets\rtwin\rtwin sous un autre nom Copier le fichier win_watc.tmf téléchargé dans le répertoire : \matlabR12\toolbox\rtw\targets\rtwin\rtwin Remplacer le fichier drt_comp.h du répertoire \matlabR12\rtw\c\dos\devices par le fichier téléchargé de même nom Créer un répertoire nommé fastlab dans le répertoire \matlabR12\rtw\c\dos\devices Copier tous les sources du driver dans le répertoire fastlab Copier le fichier fis.c qui se trouve dans le répertoire \matlabR12\toolbox\fuzzy\fuzzy dans le répertoire \matlabR12\toolbox\fuzzy\fuzzy\src Copier les fichiers regul_rt.mdl et chauff3.fis dans le répertoire de travail de Matlab \matlabr12\work Patrick BRUNET-Emile FERRERE Année 2000-2001 18 Régulation thermique sous Matlab C.2. Caractéristiques de la carte d’entrées / sorties Pour élaborer la tension de commande du gradateur de puissance et pour récupérer la température mesurée par la sonde PT100, il nous a fallu installer une carte d’entrées / sorties analogiques dans le micro-ordinateur. La carte retenue pour le système est une FASTLAB sur bus ISA du fabricant Eurosmart. Cette carte possède de nombreuses fonctionnalités fort intéressantes, mais dans ce document nous ne verrons plus précisément que les caractéristiques techniques concernant les conversions analogique / numérique et numérique / analogique. Interface Analogique / Numérique : Voies d’entrée Résolution Echelle d’entrée bipolaire 8 simples ou 4 différentielles 12 bits (4096 pts) ± 10 V max. – gain 1 programmable Temps de conversion Codage numérique 16 gains programmables 1,25 µs (800 kHz) Binaire naturel 1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800, 1000, 2000, 4000, 8000 V/V Interface Numérique / Analogique : Voies de sortie bipolaire 2 indépendantes Résolution 12 bits (4096 pts) Echelle de sortie bipolaire ± 10 V Temps de conversion 5 µs max Codage numérique Binaire naturel Patrick BRUNET-Emile FERRERE Année 2000-2001 19 Régulation thermique sous Matlab C.3. Modification du modèle Pour la régulation temps réel du système, il faut modifier le modèle simulink décrit précédemment au paragraphe B.2 : en supprimant toute la partie modélisation du gradateur de puissance, de la cuve et de la perturbation en rajoutant 2 blocs Sfunction permettant de piloter la carte FASTLAB, le gain du transmetteur de la sonde PT100 (G=38.485) Patrick BRUNET-Emile FERRERE Année 2000-2001 20 Régulation thermique sous Matlab Les deux blocs Sfunction (Analog Input, Analog Output) correspondent au driver « Matlab » de la carte FASTLAB, permettant de générer la tension de commande du Gradipack et de récupérer la tension délivrée par le transmetteur (image de la température de l’eau du bac). Ce driver a été réalisé en se basant sur l’exemple du driver de la carte Keithley fourni avec les boîtes à outils de MATLAB (cf. § Creating Device Drivers doc. Real-Time Workshop). Le driver n’est pas complet, étant données toutes les fonctionnalités de la carte (E/S logiques, Timer), mais la partie qui concerne notre système fonctionne. Remarque : Le driver fonctionne sous Dos, Windows 9x, mais pas sous WinNT. C.3.1. Insertion et paramétrage du bloc Analog Input Dans le navigateur de simulink, Développer l’arborescence Real-Time Workshop Développer la sous-arborescence Eurosmart FASTLAB Sélectionner le bloc Sfuntion Analog Input Faire glisser le bloc sélectionné dans le modèle simulink regul_rt.mdl Double-Cliquer sur le bloc Analog Input du modèle regul_rt.mdl Patrick BRUNET-Emile FERRERE Année 2000-2001 21 Régulation thermique sous Matlab Configurer le driver en se référant à l’image suivante : Adresse de base de la carte E/S Etendue de la plage d’entrée en Volts Gain en entrée (1.0 - 8000.0) Numéro de la voie d’entrée (0 - 7) Période d’échantillonnage Accès à la carte d’entrées / sorties Valider par la touche OK C.3.2. Insertion et paramétrage du bloc Analog Output Procéder de même pour l’insertion du bloc Sfunction Analog Output Double-Cliquer sur le bloc Analog Output du modèle regul_rt.mdl Configurer le driver en se référant à l’image suivante Adresse de bas de la carte E/S Etendue de la plage de sortie en Volts Valeur de sorti avant simulatio en Volts Valeur de sortie après simulation en Volts Numéro de la vo (channel 1 / chann Période d’échantillonna Accès à la carte d’entrées / sorties Valider par la touche OK Patrick BRUNET-Emile FERRERE Année 2000-2001 22 Régulation thermique sous Matlab C.3.3. Paramétrage des propriétés des oscilloscopes Double-Cliquer un des blocs scope du modèle regul_rt.mdl Cliquer sur le bouton Properties de la fenêtre scope Cliquer sur l’onglet General et configuer les paramètres du bloc scope suivant l’image ci-dessous Ne pas cocher la case Nombre de graphes tracés Echelle des temps 1000 s Affichage en continu Cliquer sur le bouton OK pour confirmer Recommencer les opérations précédentes pour chaque bloc scope Patrick BRUNET-Emile FERRERE Année 2000-2001 23 Régulation thermique sous Matlab C.4. Génération du code Pour générer le programme exécutable relatif au modèle simulink regul_rt.mdl comportant le contrôleur flou, il est nécessaire de : Définir le compilateur par défaut utilisé par Matlab (Watcom 11.0) Entrer sur la ligne de commande Matlab : mex –setup ↵ Appuyer sur les touches <y> et <Entrée> afin que Matlab localise les différents compilateurs installés sur le poste Saisir le numéro correspondant au compilateur Watcom 11.0 et valider par la touche <Entrée> Confirmer le choix du compilateur par les touches <y> et <Entrée> Ajouter le chemin d’accès aux fichiers du driver de la carte Fastlab à la liste des chemins d’accès de Matlab Sélectionner Set Path… du menu File de la fenêtre Matlab Cliquer sur le bouton Add Folder… Patrick BRUNET-Emile FERRERE Année 2000-2001 24 Régulation thermique sous Matlab Déployer l’arborescence c:\matlabr12\rtw\c\dos\devices Sélectionner le répertoire Fastlab Valider par le bouton OK Sauvegarder la liste en appuyant sur le bouton Save de la boîte de dialogue Set Path Fermer la boîte de dialogue en appuyant sur le bouton Close Compiler les fichiers du driver de la carte Fastlab Se positionner dans le répertoire où se trouvent les fichiers du driver de la carte Fastlab, en tapant la commande cd c:\matlabr12\rtw\c\dos\devices\fastlab ↵ dans la fenêtre Matlab ou en cliquant sur l’icône Browse for Folder dans la barre d’outils Patrick BRUNET-Emile FERRERE Année 2000-2001 25 Régulation thermique sous Matlab Compiler le fichier fstlabad.c en saisissant sur la ligne de commande Matlab : mex fstlabad.c ↵ ⇒ génération du fichier fstlabad.dll Compiler le fichier fstlabda.c en saisissant sur la ligne de commande Matlab : mex fstlabda.c ↵ ⇒ génération du fichier fstlabda.dll Charger le contrôleur flou dans l’espace de travail de Matlab Se positionner dans le répertoire où se trouvent les fichiers modèles regul_rt.mdl et chauff3.fis, en tapant la commande cd c:\matlabr12\work ↵ ou en utilisant le Entrer sur la ligne de commande Matlab : fuzzy chauff3 ↵ Appuyer sur le bouton Close Appuyer sur le bouton Save to workspace Valider par le bouton OK Configurer la page du module Real-Time Workshop Revenir à la fenêtre simulink du modèle, cliquer sur la rubrique Simulation parameters du menu Simulation Cliquer sur l’onglet Real-Time Workshop Cliquer sur le bouton Browse Dans le navigateur des fichiers systèmes cible, sélectionner le fichier rtwin.tlc pour la génération de code dans le mode temps réel sous Windows Patrick BRUNET-Emile FERRERE Année 2000-2001 26 Régulation thermique sous Matlab Cliquer sur le bouton OK Faire dérouler la liste Category et sélectionner la rubrique Real-Time Windows Target build options Cocher les options External mode et Compiler optimizations Cliquer sur le bouton Apply Configurer la page « solver » du module simulink Cliquer sur l’onglet Solver afin de définir les paramètres de simulation Durée de simulation de 1000 s Echantillonnage à pas fixe Système à temps discret période d’échantillonnage de 5 s Valider par le bouton OK Patrick BRUNET-Emile FERRERE Année 2000-2001 27 Régulation thermique sous Matlab Générer le code exécutable de l’application temps réel Dans le menu Tools de la fenêtre simulink, sélectionner le sous-menu Real-Time Workshop Cliquer sur la rubrique Build Model Real-Time Workshop génère plusieurs fichiers sources, les compile et génère le fichier binaire regul_rt.rwd correspondant à l’application temps réel sous windows. C.5. Exécution du code Avant d’exécuter l’application temps réel sous windows, il faut vérifier que le noyau temps réel de Matlab soit installé. Entrer sur la ligne de commande Matlab : rtwho ↵ Si le message suivant apparaît, cela signifie que le noyau temps réel est installé Sinon, installer le noyau temps réel en tapant la commande : rtwintgt –install ↵ Redémarrer le micro-ordinateur pour que le noyau soit actif Ouvrir à nouveau le modèle regul_rt.mdl Cocher le mode External dans le menu Simulation de la fenêtre simulink, pour que le module simulink s’exécute dans le mode externe Pour visualiser les tracés des courbes en temps réel sur les blocs scope, ajouter les paramètres de déclenchement Dans le menu Tools de la fenêtre simulink, cliquer sur External mode control panel… Patrick BRUNET-Emile FERRERE Année 2000-2001 28 Régulation thermique sous Matlab La boîte de dialogue External Mode Control Panel s’ouvre : Cliquer sur le bouton Target interface … et vérifier que le fichier rtwinext.dll soit bien entré Cliquer sur le bouton OK Patrick BRUNET-Emile FERRERE Année 2000-2001 29 Régulation thermique sous Matlab Cliquer sur le bouton Signal & triggering … La boîte de dialogue External Signal & Triggering s’ouvre : Cocher la case Select all Sélectionner manual dans la liste Source Sélectionner normal dans la liste Mode Indiquer le nombre de points à afficher (durée=1000 s, fréquence échantillonnage = 1 Hz => 1000 dans le champ Duration Cocher la case Arm when connect to target Cliquer sur le bouton Apply pour que les nouveaux paramètres soient pris en compte Cliquer sur le bouton Close Patrick BRUNET-Emile FERRERE Année 2000-2001 30 Régulation thermique sous Matlab Connecter le modèle simulink regul_rt.mdl à l’application temps réel regul_rt.rwd, en cliquant sur Connect to target du menu Simulation ou sur l’icône de la barre d’outils L’application temps réel est chargé en mémoire et communique avec le modèle simulink. Démarrer la régulation du système en cliquant sur Start real-time code ou sur de la barre d’outils l’icône Patrick BRUNET-Emile FERRERE Année 2000-2001 31 Régulation thermique sous Matlab C.6. Résultats temps réel C.6.1. Réponse à une consigne de température Ces résultats de mesure seront mis en parallèle avec ceux obtenus en simulation (cf. paragraphe B.4.1). Ils ont été réalisés un jour de forte chaleur dans une salle non climatisée (température ambiante proche de 30°C !). La période d’échantillonnage a été fixée à 5 s dans cet essai. On peut noter que la durée de mise en température est assez proche de celle obtenue en simulation. On note un léger dépassement de la consigne qui peut s’expliquer par le fait que le thermoplongeur possède une inertie thermique et que les échanges de chaleur ne sont pas instantanés. La température mettra donc du temps à s’homogénéiser et la sonde thermique ne donnera une information fiable que lorsque cette homogénéisation aura eu lieu. Ces aspects n’ont pas été pris en compte dans la modélisation. La consigne étant réglée à 30°C, soit très proche de la température ambiante, aucun refroidissement naturel ne pourra avoir lieu ce qui explique que la température atteinte reste stabilisée autour de 31 °C. Patrick BRUNET-Emile FERRERE Année 2000-2001 32 Régulation thermique sous Matlab C.6.2. Réponse à une perturbation en régime établi Ces résultats seront comparés à ceux du paragraphe B.4.2. Ils ont été obtenus avec une période d’échantillonnage de 1s. La perturbation consiste à introduire une petite quantité de glace dans le seau ; On constate la chute de la température puis sa remontée grâce à l’apport de puissance thermique du thermoplongeur comme l’atteste la tension de commande du Gradipack. Patrick BRUNET-Emile FERRERE Année 2000-2001 33 Régulation thermique sous Matlab C.6.3. Réponse à une modification de la consigne en cours de régulation Il est possible de modifier en temps réel la valeur de la consigne de température (comme d’autres paramètres du modèle). C’est ce que montre les 4 oscillogrammes ci-dessous. La consigne est réglée à 30 °C pendant les 300 premières secondes puis portée à 50 °C. Enfin une perturbation est introduite autour de 700 s. On notera les mises en températures avec les évolutions de la tension de commande du Gradipack correspondantes. Contrairement à ce qu’il se passait avec une consigne de 30 °C, lorsque celle celle-ci est portée à 50 °C, la température chute naturellement. En effet le différentiel de température entre l’eau et l’ambiante (20 °C environ) permet cette fois un refroidissement naturel. En conséquence, on note la remise en action du Gradipack qui permet la compensation des pertes. Patrick BRUNET-Emile FERRERE Année 2000-2001 34 Régulation thermique sous Matlab D. Conclusion L’objectif de cette contribution est de montrer la faisabilité d’une application temps réel mettant en œuvre les outils de modélisation de MATLAB pour la partie commande . Dans cet article, c’est un contrôleur flou qui a été implanté, mais on pourrait tout aussi bien mettre en œuvre un contrôleur PID plus classique. On peut penser que les opérations préalables à la génération du code sont un peu lourdes. Un développement futur permettra de les rendre transparents pour un utilisateur non intéressé par cette partie. Enfin d’autres cartes d’Entrées / Sorties pourraient être prises en compte. Toutes les remarques à propos de cette étude peuvent nous être adressées à : [email protected] (Patrick BRUNET) ou [email protected] (Emile FERRERE). Patrick BRUNET-Emile FERRERE Année 2000-2001 35