La méthode SCILAB

La méthode SCILAB ouvre un lien DDE avec le programme Scilab au temps initial et permet d’exécuter un script Scilab (d’extension .sce) à chaque pas de temps de régulation DTU pour ce module (qui peut être un multiple du pas de temps de calcul numérique DT).

Le fichier Scilab .sce choisi sera utilisé de la manière décrite ci-après. Le nom de ce fichier peut être indiqué dans les paramètres spécifiques de la méthode SCILAB (pid.sce dans l’exemple fourni sous dat/exemple/scilab). On peut indiquer ce nom soit avec l’extension .sce (ex. : pid.sce), soit sans cette extension (ex. : pid). Dans le cas où cette extension n’est pas présente elle sera ajoutée automatiquement. Si ce fichier est trouvé dans le sous-répertoire courant où se trouve le fichier xml du projet en cours, alors il sera celui utilisé, sans proposer à l’utilisateur d’en choisir un autre, ce qui facilite la tâche de l’utilisateur. Mais si ce fichier n’existe pas dans ce sous-répertoire courant, alors un fichier pourra être sélectionné parmi les fichiers .sce existants dans le sous répertoire des données. Si aucun nom n’est indiqué, alors un nom par défaut est généré et recherché : module2.sce, module3.sce, etc, ou de manière générique module"n".sce, où "n" est le numéro du régulateur, débutant en général à 2 (car l’indice 1 est utilisé pour les lois fonction du temps, qui sont gérées en interne également comme un régulateur le cas échéant).

Dans l’interface du calcul en régime permanent (Programme FLUVIA) ou transitoire (Programme SIRENE), les noms de ces fichiers .sce provenant du projet (fichier xml), générés automatiquement ou sélectionnés par l’utilisateur, sont indiqués.

Au temps initial (t = dt) le programme de calcul en régime transitoire (programme SIRENE de SIC) envoie dans l’environnement Scilab (espace de travail) le pas de temps de calcul dt, le pas de temps de régulation dtu, le temps final tfin et un indice "interf" indiquant si l’on est en mode avec interface ou sans interface (Cf. menu option). Cet indice peut éventuellement être utilisé pour autoriser ou non des affichages à l’écran programmés dans le fichier .sce. Il est également possible de faire la même chose avec une série de simulations en régime permanent (programme FLUVIA de SIC).

Puis, à ce pas de temps initial et à chaque pas de temps ultérieur t ≥ dt, multiple de dtu (cf. discussion sur DTU et DT), le programme SIRENE (ou FLUVIA) envoie dans l’environnement Scilab (workspace) les variables contrôlées y, les consignes correspondantes yt, les variables mesurées z, les anciennes commandes u et le temps courant t. Ces variables (ie leurs noms utilisés dans le script Scilab) sont celles décrites dans les paramètres du module de régulation, et on peut éventuellement changer ces noms. Les vecteurs sont gérés dans Scilab comme des vecteurs colonne (size(u) = [nu 1]), contrairement à Matlab où ils sont gérés comme des vecteurs ligne (size(u) = [1 nu]), puisque c’est l’option choisie par défaut dans ces différents environnements. Ces vecteurs y, yt et z sont ceux de l’instant courant t. Le vecteur u est celui calculé à l’instant courant t et qui sera donc appliqué et effectif dès l’instant de calcul suivant t+dt. Si vous voulez avoir l’historique de ces vecteurs c’est à vous de les stocker dans des variables dans l’espace mémoire de Scilab (les variables sont conservées entre 2 appels), ou éventuellement sur un fichier.

Le programme SIRENE (ou FLUVIA) exécute ensuite le fichier Scilab .sce (ex. : pid.sce) sélectionné comme indiqué ci-dessus (et ce à chaque pas de temps t=n.dtu, n=1 à nmax tel que t=nmax.dtu=tfin).

Enfin, le programme SIRENE (ou FLUVIA) récupère les variables de contrôle u dans l’espace de travail et les applique dans SIRENE (ou FLUVIA) aux ouvrages correspondants (définition classique des u dans l’interface Edisic pour le module de régulation correspondant, avec aussi les y, yt et z).

Cette méthode SCILAB permet d’écrire et de tester rapidement une méthode de régulation en profitant de tout l’environnement de développement de Scilab. Elle ne nécessite en outre aucune compilation ni édition de lien du programme SIRENE (ou FLUVIA). En plus Scilab est un programme gratuit développé sous licence libre et téléchargeable sur Internet. Par contre, l’exécution du module de régulation est plus lente (que pour un module de régulation interne (ex. : PID) ou écrit en Fortran via les modules USER1 à USER9) du fait des échanges de données entre SIRENE (ou FLUVIA) et Scilab et du fait qu’un fichier .sce est interprété par Scilab et non pas compilé en code directement exécutable. Vous pouvez comparer ces temps d’exécution, et nous fournissons le même exemple avec le PID interne, le lien DDE Matlab, le lien DDE Scilab et le module wdlang.

Exemple de fichier .sce (voir l’exemple fourni sous dat/ex_scilab) :

  1. % fichier pid.sce correspondant à un contrôleur PID
  2. // initialisation ----------
  3. // Matlab et Scilab gèrent les vecteurs différemment
  4. // Dans Matlab, par défaut un vecteur est une ligne (size(u)=1 nu)
  5. // Dans Scilab, par défaut un vecteur est une colonne (size(u)=nu 1)
  6. // Pour éviter la double indexation inutile, on s'adapte à cette convention
  7. // Les scripts sous Matlab et sous Scilab sont donc légèrement différents
  8.  
  9. if t == dt
  10. [nu n1]=size(u);
  11. [ny n1]=size(y);
  12. eold=zeros(ny,1);
  13. se=eold;
  14. de=eold;
  15. end;
  16.  
  17. // calcul des coefficients utiles ----------
  18. Kp=[14.78;1.44;4.22;2.51;1.53];
  19. Ti=[1440;1680;1200;1440;1440];
  20. Td=zeros(nu,1);
  21. N =zeros(nu,1);
  22. for i=1:nu,
  23. if Ti(i)==0;
  24. Ki(i)=0;
  25. else
  26. Ki(i)=Kp(i)/Ti(i)*dt/2;
  27. end
  28. if Td(i)==0;
  29. Kd1(i)=0;
  30. Kd2(i)=0;
  31. else
  32. if N==0
  33. Kd1(i)=0;
  34. Kd2(i)=Kp(i)*Td(i)/dt;
  35. else
  36. Kd1(i)=1/(1+N(i)/Td(i)*dt);
  37. Kd2(i)=Kp(i)*N(i)*Kd1(i);
  38. end;
  39. end;
  40. end;
  41.  
  42. // calcul du pid vectoriel ----------
  43. e=yt-y;
  44. se=se+Ki.*(eold+e);
  45. de=Kd1.*de+Kd2.*(e-eold);
  46. u=Kp.*e+se+de;
  47.  
  48. // sauvegarde ancien ecart ----------
  49. eold=e;
  50.  
  51. // dessin de y et u ----------
  52. if interf==1
  53. // plot2;
  54. end;

Télécharger

Les paramètres pour la méthode SCILAB sont le nom du fichier .sce par défaut et le nom des variables dans l’espace de travail Scilab. Ces indications sont facultatives car des noms par défauts sont proposés.

En mode débug = 0 aucune vérification de syntaxe du fichier .sce n’est effectuée, en mode débug = 1 des vérifications sont effectuées et les messages éventuels sont écrits sur un fichier scilab.dbg (attention à l’effacer en fin de simulation car il est ouvert en mode "append" et les messages sont concaténés en fin de fichier s’il existe déjà, il peut donc devenir très gros), en mode débug = 2 les messages sont, en outre, affichés à l’écran. On conseille d’utiliser le mode 2 au cours de la mise au point du fichier .sce, puis de basculer en mode 0 pour faire les simulations de routine (gain en temps). [rmq : cette gestion est bien fonctionnelle dans le lien DDE Matlab, mais pas encore dans le lien DDE Scilab, le module Scilab est donc plus difficile à débugger à partir de SIC, il est bon de le tester d’abord directement dans Scilab à l’aide d’un petit script garnissant des vecteurs y, yt et z, ainsi que les variables t, dt, tfin, etc lancant le script .sce à tester et vérifiant le vecteur u calculé tant en dimension qu’en valeurs].

On peut indiquer l’emplacement du programme scilab.exe, ce qui est utile si différentes versions de Scilab sont installées sur l’ordinateur. Mais la version de Scilab désirée doit aussi et surtout être définie dans l’option correspondante du menu "Options/Options" qui gère les exe de SIRENE et FLUVIA avec la bonne version de Scilab. Il faut aussi que le PATH système contienne bien la référence au sous répertoire de Scilab (de la bonne version qu’on souhaite utiliser, par exemple : C :\Program Files\scilab-5.3.3\bin), et qu’il n’y ait pas de référence avant à un autre sous-répertoire contenant également des librairies comme lapack.dll. Sinon il y aura un conflit (par exemple avec une autre version de Scilab, ou une version de MatLab, voir ci-dessous). Les solutions peuvent alors être soit de modifier ce path, soit de renommer temporairement les sous-répertoires d’installation de ces autres programmes (il faut en général avoir les droits administrateur pour faire cela). Il faut aussi que la variable d’environnement TMPDIR soit définie (Menu Windows Démarrer, Système, Propriétés système avancé, Variables d’environnement, TMPDIR=C :\tmp par exemple).

On peut aussi indiquer si l’on veut fermer Scilab en fin de simulation (Case cochée pour fermer Scilab).

Le lien DDE SciLab est disponible à partir de la version 5.29 de SIC et est compatible avec les versions de Scilab 4.0, 5.0.2, 5.2.2 et 5.3.3. En Février 2013 la version 5.4.0 de Scilab est devenue disponible, mais les routines du lien DDE ont changé (la librairie libscilab.lib n’est plus disponible mais remplacée par call_scilab.lib). Idem pour les versions 5.5.1 et ultérieures. Ces nouvelles versions n’ont pas encore été testées, mais nous le ferons prochainement, ou sur demande urgente !

En cas de problème au lancement du lien DDE (problème pour lancer Scilab, message indiquant que des dll ne sont pas trouvées, ou que des points d’entrée de procédure ne sont pas trouvés dans des dll, ou fonction non trouvée) c’est que vous avez probablement un conflit entre diverses dll liées à MatLab et à Scilab installées sur votre ordinateur. Le problème c’est que ces programmes utilisent un certain nombre de dll dont certaines ont le même nom, comme lapack.dll en particulier. Si vous choisissez l’option "Aucun lien DDE" (en mode "Hydraulique" aller dans le menu Options / Options, Bouton "Choisir" de la rubrique "Version du lien DDE Matlab ou Scilab"), alors les programmes FLUVIA et SIRENE actifs sont ceux ne comportant pas les liens DDE avec MatLab ni Scilab. Il n’y aura donc plus de conflit mais vous ne pourrez pas utiliser ce lien DDE. Vous aurez un message dans la fenêtre d’affichage lors du calcul. Il faudra donc choisir la version de FLUVIA et SIRENE qui correspond à la version de MatLab ou Scilab que vous utilisez (installée sur votre ordinateur) en choisissant l’option "MatLab 6", "MatLab 7.1", "MatLab 7.4", "MatLab 7.5", "MatLab 2008", "MatLab 2009", "Scilab 4" ou "Scilab 5". Dans ce cas, les exe correspondants de FLUVIA et de SIRENE, ainsi que les dlluser*.dll sont copiées dans le sous-répertoire SIC/EXE et deviennent les versions actives.