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