Exemple de routine de calcul CAMIL (Vannes Amil)

Voilà le module de régulation CAMIL utilisé pour les vannes AMIL. 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 ancien ingénieur de Gec-Alsthom.

SUBROUTINE CAMIL(U,Y,PARA)
    PARAMETER(NBCM=$NBCM,NBUM=$NBUM,NSING=$NTO,NBIEF=$IB)
    PARAMETER(NPOIN=$NPOIN,NSECT=$NSC)
    CHARACTER CFIC1*3
    DIMENSION Y(*),U(*),PARA(*)
C-----index of the current controller (INURE),
C-----current number of calls of the controller n (INUAP(n))
    COMMON/P1/IFIC1,INURE,INUAP(NBCM),IFIC2
    COMMON/P2/INU,IFIC3(2),FIC1(3)
    COMMON/REGU/IFIC4,CFIC1(NBUM),IFIC5(NBUM,2),NSUG(NBUM)
1           ,IFIC6(NBUM),NKSU(NBUM),FIC2(NBUM,2)
    COMMON/REG2/NUD(NBCM),IFIC7(NBCM),BFIC1(NBCM)
    COMMON/NGEO/IFIC8(NBIEF,2),IP1(NSECT),IFIC9(NSECT,2)
    COMMON/RGEO/IFIC10,FIC3(NSECT),YGEO(NPOIN),FIC4(NPOIN,3)
1           ,FIC5(NSECT,3)
    COMMON/RSIN/FIC6(NSING),ZS0(NSING),FIC7(NSING,3)
C-----Equations de Goussard
C-----Affectations
C-----PARA(1) Modele (D parmis LISTD) de vanne AMIL
    D=PARA(1)
    Dec=PARA(2)
    R=PARA(3)
    HA=PARA(4)
C-----On met un filtre d'ordre 1 : S/E = (1-a)Z-1 / 1-aZ-1 (FILTRE = a)
    FILTRE=PARA(5)
C-----ZD : hauteur du radier % cote de fond
    ZD=ZS0(NKSU(NUD(INURE)))-YGEO(IP1(NSUG(NUD(INURE))))
C-----Calcul pour cette methode
    alfmax=asin(0.45*D/R)-asin(0.2205*D/R)
    alfb=HA/R
    alfb=min(alfb,1.)
    alfb=max(alfb,-1.)
    alfb=acos(alfb)
    alfc=alfb+alfmax
    UMAX=HA-R*cos(alfc)
C-----Y(1) est en tirant d'eau (mode TYS obligatoire sur le fichier .REG)
    Z=Y(1)-HA-ZD
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
C-----Regular setting
    if (Z.LE.-Dec) then
        alfa=0
        c=0
    elseif (z.GE.0.) then
        alfa=alfmax
        c=1
    else
        alfa=alfmax-asin(-Z/Dec*sin(alfmax))
        c=(1 - (0.45*D/R)**2)**0.5 * sin(alfa)
        1  / (0.2295*D/R) + 1.9608 * (1 - cos(alfa))
    endif
C-----Calcul de la commande
    U(1)=c*UMAX
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
C-----Calcul du debit
C     En réglage classique Zmax=0, en réglage alternatif Zmax=Dec
C     Kj=1 + 2.2*zmax/D - 1.6*(zmax/D)**2
C     Kq=1 + 2.82*zmax/D - 34.8*(zmax/D)**2 + 164*(zmax/D)**3
C     x=Y(1)-z2
C     if (x.LT.0) then
C        Q=0.
C     elseif (x.LE.(0.45*(1 - 0.7211*c**0.3)*Kj*D)) then
C        Q=0.7096*c*Kq*D**2.103*x**0.397
C     else
C        Q=0.3113*c*Kq*Kj**0.397*D**2.5
C     endif
END