Exemple de routine de calcul CGEC (Vannes Avis et Avio)

Voilà le module de régulation CGEC utilisé pour les vannes AVIS et AVIO. Vous pouvez vous inspirer de ce module de régulation pour en écrire d’autres. Les équations programmées proviennent d’un document de M. Goussard.

SUBROUTINE CGEC(U,Y,PARA)
    PARAMETER(NBCM=$NBCM)
    DIMENSION Y(*),U(*),PARA(*)
C-----index of the current controller (INURE),
C-----current number of calls of the controller n (INUAP(n))
    COMMON/P1/ILNPS,INURE,INUAP(NBCM),IREGS
    COMMON/P2/INU,INY,INZ,DTU,DTY,DTZ
C-----Equations de Goussard
C-----Affectations
C-----PARA(1) en degres, ALFMAX en radiants
    ALFMAX=PARA(1)*0.01745
C-----Dec est negatif dans la formule de Goussard
    Dec=-PARA(2)
    R=PARA(3)
    HA=PARA(4)
C-----CHUTE > 0 si ca descend vers l'aval
    CHUTE=PARA(5)
C-----On met un filtre d'ordre 1 : S/E = (1-a)Z-1 / 1-aZ-1 (FILTRE = a)
    FILTRE=PARA(6)
C-----Calcul pour cette methode
C-----Y(1) est en tirant d'eau (mode TYS obligatoire sur le fichier .REG)
    Z=Y(1)-CHUTE-HA
C-----Initialisation de Zold au premier appel
    IF(INUAP(INURE).EQ.1) PARA(10)=Z
    Z=FILTRE*PARA(10)+(1.0-FILTRE)*Z
C-----On stocke Zold filtré dans PARA(10) pour le filtre
    PARA(10)=Z
    IF (Z.GE.0.) THEN
        ALFA=0.
    ELSEIF (Z.LE.Dec) THEN
        ALFA=ALFMAX
    ELSE
        ALFA=0.
        IF(Dec.NE.0.) ALFA=SIN(ALFMAX)*Z/Dec
        ALFA=MIN(ALFA,1.)
        ALFA=MAX(ALFA,-1.)
        ALFA=ASIN(ALFA)
    ENDIF
C-----Calcul de U
    ALFB=0.
    IF(R.NE.0.) ALFB=HA/R
    ALFB=MIN(ALFB,1.)
    ALFB=MAX(ALFB,-1.)
    ALFB=ACOS(ALFB)
C-----Calcul de la commande
    U(1)=HA-R*COS(ALFA+ALFB)
C-----Si plusieurs U (SIMO) on duplique la meme ouverture
C-----(interessant dans le cas de plusieurs vannes identiques en parallele
C      en mode V par exemple)
    IF(INU.GT.1) THEN
        DO 10 I=2,INU
            U(I)=U(1)
        10    CONTINUE
    ENDIF
END