Exemple of calculation routine CGEC (Avis and Avio gates)

  1. SUBROUTINE CGEC(U,Y,PARA)
  2. PARAMETER(NBCM=$NBCM)
  3. DIMENSION Y(*),U(*),PARA(*)
  4. C-----index of the current controller (INURE),
  5. C-----current number of calls of the controller n (INUAP(n))
  6. COMMON/P1/ILNPS,INURE,INUAP(NBCM),IREGS
  7. COMMON/P2/INU,INY,INZ,DTU,DTY,DTZ
  8. C-----Equations de Goussard
  9. C-----Affectations
  10. C-----PARA(1) en degres, ALFMAX en radiants
  11. ALFMAX=PARA(1)*0.01745
  12. C-----Dec est negatif dans la formule de Goussard
  13. Dec=-PARA(2)
  14. R=PARA(3)
  15. HA=PARA(4)
  16. C-----CHUTE > 0 si ca descend vers l'aval
  17. CHUTE=PARA(5)
  18. C-----On met un filtre d'ordre 1 : S/E = (1-a)Z-1 / 1-aZ-1 (FILTRE = a)
  19. FILTRE=PARA(6)
  20. C-----Calcul pour cette methode
  21. C-----Y(1) est en tirant d'eau (mode TYS obligatoire sur le fichier .REG)
  22. Z=Y(1)-CHUTE-HA
  23. C-----Initialisation de Zold au premier appel
  24. IF(INUAP(INURE).EQ.1) PARA(10)=Z
  25. Z=FILTRE*PARA(10)+(1.0-FILTRE)*Z
  26. C-----On stocke Zold filtré dans PARA(10) pour le filtre
  27. PARA(10)=Z
  28. IF (Z.GE.0.) THEN
  29. ALFA=0.
  30. ELSEIF (Z.LE.Dec) THEN
  31. ALFA=ALFMAX
  32. ELSE
  33. ALFA=0.
  34. IF(Dec.NE.0.) ALFA=SIN(ALFMAX)*Z/Dec
  35. ALFA=MIN(ALFA,1.)
  36. ALFA=MAX(ALFA,-1.)
  37. ALFA=ASIN(ALFA)
  38. ENDIF
  39. C-----Calcul de U
  40. ALFB=0.
  41. IF(R.NE.0.) ALFB=HA/R
  42. ALFB=MIN(ALFB,1.)
  43. ALFB=MAX(ALFB,-1.)
  44. ALFB=ACOS(ALFB)
  45. C-----Calcul de la commande
  46. U(1)=HA-R*COS(ALFA+ALFB)
  47. C-----Si plusieurs U (SIMO) on duplique la meme ouverture
  48. C-----(interessant dans le cas de plusieurs vannes identiques en parallele
  49. C en mode V par exemple)
  50. IF(INU.GT.1) THEN
  51. DO 10 I=2,INU
  52. U(I)=U(1)
  53. 10 CONTINUE
  54. ENDIF
  55. END

Download