PSS / E fortran阵列模块

时间:2014-01-10 19:24:14

标签: fortran fortran77

我正在通过Fortran语言为PSS / E中的逆变器开发用户编写的控制模型。我想将此控制模型链接到标准生成器模型。

我已经检查过控制模型是否正常工作。我正在输入2个输入命令:Real Power(P)和Reactive Power(Q)。我检查了内部变量,模型很好地理解了我定义的这些值。并且该控制模型的输出是“正确的”两个输出信号都是应该的。

问题在于我无法将其链接到标准生成器模型。由于此模型包含在外部.dll文件中,因此我在代码开头使用USE [MODULE]语句,而在MODE 3中我只写:

WIPCMD1(MC)=VAR(L+5)
WIQCMD1(MC)=VAR(L+4)

其中MC是应用两个模型的机器索引,WIPCMD和WIQCMD是用作生成器模型输入的数组,VAR(L+5)VAR(L+4)是用户编写的控件模型的输出

我知道连接是错误的,因为当我更改控制模型的2个输入时,此控件的2个输出也会改变,但生成器模型的输出总是相同的(我认为这是初始化的)从权力流动。)

另一个可能的原因是我正在编译错误的PSS / E环境管理器中的文件:我只是将我的控件模型.flx文件放在“用户模型Fortran源文件”和.obj文件中,其名称相同包含“用户模型对象,库文件”中的GEPVMODULE的.mod文件。我使用生成的.dll文件。

有什么想法吗? Bellow是.flx控制模型的完整代码。

非常感谢。

此致

      SUBROUTINE INVCTRLELEC (MC,ISLOT)
C
      USE GEPVMODULE
C
$INSERT COMON4.INS
C
      INTEGER I,J,K,L,MC,ISLOT,BS
      INTEGER IERR1,IERR3
      REAL VINP1,VINP2,VINP3,VINP4,VINP5,VINP6,VINP7,VINP8,VINP9,VINP10
      REAL VOUT1,VOUT2,VOUT3,VOUT4,VOUT5,VOUT6,VOUT7,VOUT8,VOUT9,VOUT10
C
C
      I=STRTIN(4,ISLOT)
      J=STRTIN(1,ISLOT)
      K=STRTIN(2,ISLOT)
      L=STRTIN(3,ISLOT)
C
      CALL FLOW1(I,L+6,L+1,L+7)
C
      IF (MODE.EQ.8)
      .  CON_DSCRPT(1)='Kqi'
      .  CON_DSCRPT(2)='Kvi'
      .  CON_DSCRPT(3)='Ihql'
      .  CON_DSCRPT(4)='Ipmax'
      .  CON_DSCRPT(5)='Iphl'
      .  CON_DSCRPT(6)='Vmaxcl'
      .  CON_DSCRPT(7)='Vmincl'
      .  CON_DSCRPT(8)='Vdc'
      .  CON_DSCRPT(9)='Porder'
      .  CON_DSCRPT(10)='Qorder'
      .  ICON_DSCRPT(1)='Bus origen'
      .  ICON_DSCRPT(2)='Bus destino'
      .  ICON_DSCRPT(3)='Identificador'
      .  RETURN
      ...FIN
C
      IF (MODE.GT.4) GO TO 1000
C
      GO TO (100,200,300,400), MODE
C
  100 VOUT1=CON(J+9)-VAR(L+1)
      VINP1=INT_MODE1(1.0,VOUT1,K,IERR1)
C
      VOUT3=VOUT2-VAR(L+2)
      VINP3=INT_MODE1(1.0,VOUT3,K+1,IERR3)

      VAR(L+2)=ABS(VOLT(ICON(I)))
C     
      VAR(L+5)=WIPCMD1(MC)
      VAR(L+4)=WIQCMD1(MC)
C
      RETURN
C
  200 VAR(L+2)=ABS(VOLT(ICON(I)))
C
      VINP1=CON(J+9)-VAR(L+1)
      VOUT1=INT_MODE2(1.0,VINP1,K)
      VAR(L)=CON(J+9)
C
      VINP2=VOUT1*CON(J)
      VOUT2=MIN(CON(J+5),MAX(CON(J+6),VINP2))
C  
      VINP3=VOUT2-VAR(L+2)
      VOUT3=INT_MODE2(1.0,VINP3,K+1)
      VAR(L+11)=VOUT3*CON(J+1)
C
      VINP5=VAR(L+5)
      VOUT5=((CON(J+3))**(2)-(VAR(L+5))**(2))**(0.5)
C
      VINP6=VOUT5
      VOUT6=MIN(CON(J+2),VINP6)
      VAR(L+8)=VOUT6
C
      VINP7=VAR(L+2)
      VOUT7=-0.5+0.01733*(VINP7*360-360)-0.0117*(CON(J+7)-560)+VAR(L+6)*1/4.37
      VAR(L+9)=VOUT7
C
      VINP4=VOUT3*CON(J+1)
      VOUT4=MIN(VOUT6,MAX((MAX(VOUT7,-VOUT6)),VINP4))
      VAR(L+4)=VOUT4
C
      VINP8=VAR(L+2)
      VOUT8=MAX(0.01,VAR(L+2))
C
      VINP9=CON(J+8)
      VAR(L+3)=CON(J+8)
      VOUT9=VINP9/VOUT8
C
      VINP10=VOUT9
      VOUT10=MIN(MIN(CON(J+3),CON(J+4)),VINP10)
      VAR(L+5)=VOUT10
C
      RETURN
C
  300 VAR(L+2)=ABS(VOLT(ICON(I)))
C
      VINP1=CON(J+9)-VAR(L+1)
      VOUT1=INT_MODE3(1.0,VINP1,K)
      VAR(L)=CON(J+9)
C
      VINP2=VOUT1*CON(J)
      VOUT2=MIN(CON(J+5),MAX(CON(J+6),VINP2))
C  
      VINP3=VOUT2-VAR(L+2)
      VOUT3=INT_MODE3(1.0,VINP3,K+1)
      VAR(L+11)=VOUT3*CON(J+1)
C
      VINP5=VAR(L+5)
      VOUT5=((CON(J+3))**(2)-(VAR(L+5))**(2))**(0.5)
C
      VINP6=VOUT5
      VOUT6=MIN(CON(J+2),VINP6)
      VAR(L+8)=VOUT6
C
      VINP7=VAR(L+2)
      VOUT7=-0.5+0.01733*(VINP7*360-360)-0.0117*(CON(J+7)-560)+VAR(L+6)*1/4.37
      VAR(L+9)=VOUT7
C
      VINP4=VOUT3*CON(J+1)
      VOUT4=MIN(VOUT6,MAX((MAX(VOUT7,-VOUT6)),VINP4))
      VAR(L+4)=VOUT4
C
      VINP8=VAR(L+2)
      VOUT8=MAX(0.01,VAR(L+2))
C
      VINP9=CON(J+8)
      VAR(L+3)=CON(J+8)
      VOUT9=VINP9/VOUT8
C
      VINP10=VOUT9
      VOUT10=MIN(MIN(CON(J+3),CON(J+4)),VINP10)
      VAR(L+5)=VOUT10     
C     
      WIPCMD1(MC)=VAR(L+5)
      WIQCMD1(MC)=VAR(L+4)
C 
      VAR(L+12)=MC
      VAR(L+13)=ISLOT
C      
      RETURN
C
  400 NINTEG=MAX(NINTEG,K+3)
      RETURN
C
      IF (MODE.EQ.6) GO TO 2000
C
  900 RETURN
 1000 RETURN
 2000 RETURN
      RETURN
      END

0 个答案:

没有答案