Les méthodes USER1 à USER9

Les méthodes USER1 à USER9 permettent d’écrire des nouveaux modules de régulation directement en langage FORTRAN. Elles se programment d’une manière similaire à la routine CPID. Ces méthodes nécessite une compilation d’un module USER avec le compilateur Microsoft Digital 6.1 ou ultérieur ou avec le compilateur Intel 10 ou supérieur (compilation en 32 bits), et une nouvelle édition de lien avec le linkeur associé. Un module programmé en FORTRAN et compilé est beaucoup plus rapide qu’avec un lien DDE MatLab ou un module WDLANG.

Pour écrire ce module on peut s’inspirer du module PID. On peut imaginer que l’on met au point une méthode grâce à la méthode MATLAB et une fois qu’elle est mise au point et testée on l’intègre au logiciel SIC par la méthode USER1 (ou USER2 à USER9) pour gagner en rapidité d’exécution.

On peut programmer jusqu’à 9 modules de régulation en utilisant les méthodes USER1 à USER9. Pour chacune, on dispose de 3 routines à renseigner éventuellement dans le fichier REGUSER.FOR :

  1. !===================================================
  2. !> Routine de supervision du module de régulation USER1
  3. !===================================================
  4. SUBROUTINE SUSER1(Reg)
  5. IMPLICIT NONE
  6.  
  7. TYPE(Regulateur_t), INTENT(INOUT) :: Reg
  8.  
  9.  
  10. END SUBROUTINE SUSER1
  11.  
  12.  
  13. !===================================================!> Lecture des parametres specifiques pour la methode USER1
  14. !===================================================
  15. SUBROUTINE LUSER1(CHAINE,Reg)
  16.  
  17. USE SIRENE_Parametres, ONLY : LONG
  18. ! USE F1 , ONLY : IERROR
  19.  
  20. IMPLICIT NONE
  21.  
  22. CHARACTER, INTENT(IN) :: CHAINE*(*)
  23. TYPE(Regulateur_t), INTENT(INOUT) :: Reg
  24.  
  25.  
  26. !-----Exemple de lecture d'un reel sur une ligne PS=12. par exemple
  27. !-----Cette valeur est mise dans PARA pour une utilisation future dans
  28. !-----le regulateur correspondant. Le vecteur PARA est en effet
  29. !-----transmis a CUSER1.
  30. !-----A maximum of $NBPA parameters can be read and stored in the PARA
  31. !-----array variable. If you need more than $NBPA parameters, you must
  32. !-----store them in another common.
  33.  
  34.  
  35. ! READ (CHAINE,'(F3.0)',ERR=100) Reg%tPara(1)
  36. Reg%tPara(1)=0.
  37. ! RETURN
  38. ! 100 CONTINUE
  39. ! IERROR=2
  40.  
  41. END SUBROUTINE LUSER1
  42.  
  43.  
  44. !===================================================
  45. !> Calcul de la commande U a partir des données du régulateur (variables
  46. !> controllees Y, consignes correspondantes YT et variables mesurees Z
  47. !===================================================
  48. SUBROUTINE CUSER1(Reg)
  49.  
  50. USE SIRENE_Parametres, ONLY : LONG
  51.  
  52. IMPLICIT NONE
  53.  
  54. !> Régulateur (Voir structure Regulateur_t dans le source FLUXML, module D_REGULATION)
  55. TYPE(Regulateur_t), INTENT(INOUT) :: Reg
  56.  
  57.  
  58. !-----Exemple d'utilisation de CUSER1 pour imprimer des variables sur
  59. !-----le fichier .LST
  60.  
  61. !-----Exemple de calcul de la premiere composante U(1)
  62. IF (Reg%tZ(1)%V > 0.) THEN
  63. Reg%tU(1)%VarU%V = Reg%tPara(1) * (Reg%tY(1)%VarY%V - Reg%tY(1)%YTVal)
  64. ELSE
  65. Reg%tU(1)%VarU%V = Reg%tPara(2) * (Reg%tY(1)%VarY%V - Reg%tY(1)%YTVal)
  66. ENDIF
  67. Reg%tU(1)%VarU%V = 0.
  68.  
  69. END SUBROUTINE CUSER1

Télécharger

La routine SUSER1 est une routine de supervision appelée à chaque pas de temps. Elle permet éventuellement de changer les paramètres d’un module de régulation, de type de méthode, etc.

La routine LUSER1(CHAINE,PARA) est appelée uniquement en début de programme, au temps initial. Elle est appelée pour chaque ligne de paramètres spécifiques du régulateur. Elle permet de lire les paramètres spécifiques de la méthode USER1, dans la chaîne de caractère CHAINE située à la suite d’un code "PS=". Si plusieurs lignes "PS=" doivent être lues il faut donc gérer un compteur de ligne dans cette routine LUSER1, permettant de lire des variables différentes dans différentes lignes. Ce compteur iLignePS est géré et founit dans le module D_REGULATION. Le vecteur PARA est dimensionné à 20, ce qui signifie qu’un maximum de 20 paramètres peuvent être lus et stockés par cette routine de lecture pour chaque régulateur. Si vous voulez lire et stocker plus de 20 paramètres il faut créer de nouvelles variables en tête du module USER.

La routine CUSER1 est une routine de régulation appelée à chaque pas de temps de régulation (DTU), après la routine de supervision SUSER1. Elle permet de calculer les Reg%nbrU variables de contrôle Reg%tU(:)%VarU%V à partir des Reg%nbrY variables contrôlées Reg%tY(:)%VarY%V, des Reg%nbrZ consignes correspondantes Reg%tY(:)%YTVal, des variables mesurées Reg%tZ(:)%V et des paramètres placés dans le tableau Reg%tPara( :).