PSS/efortran阵列模块

PSS/efortran阵列模块,fortran,fortran77,Fortran,Fortran77,我正在用Fortran语言为PSS/E中的逆变器开发一个用户编写的控制模型。我想将此控制模型链接到标准生成器模型 我已经检查过控制模型是否工作正常。我输入两个输入命令:实际功率(P)和无功功率(Q)。我通过内部变量检查模型是否很好地接受了我定义的这些值。这个控制模型的输出是“正确的”,两个输出信号都是应该的 问题是,我无法将其链接到标准生成器模型。由于此模型包含在外部.dll文件中,我在代码开头使用use[MODULE]语句,在模式3中,我只写: WIPCMD1(MC)=VAR(L+5) WIQ

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

我已经检查过控制模型是否工作正常。我输入两个输入命令:实际功率(P)和无功功率(Q)。我通过内部变量检查模型是否很好地接受了我定义的这些值。这个控制模型的输出是“正确的”,两个输出信号都是应该的

问题是,我无法将其链接到标准生成器模型。由于此模型包含在外部.dll文件中,我在代码开头使用use[MODULE]语句,在模式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文件

有什么想法吗?下面是.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

您如何知道无法链接到标准发电机模块?如果有错误,如果您通过帖子本身显示错误是什么,这将非常有用。您必须显示代码、命令和错误,否则没有人知道发生了什么。您好。你们都是对的。我刚刚编辑了控制模型的fortran代码。此外,我在问题中给出了更多的细节。谢谢,我没有收到任何错误消息,只是当我在控制模型上更改命令时,输出也会更改,但生成器模型的输出总是相同的。例如,即使我订购了一个控制模型输入P=0,我也获得了一个控制模型输出VAR(L+5)=0,但发电机模型仍然保持注入相同的有功功率(P>>0)。。。因此,我认为发电机模型在输入VAR(L+5)@VladimirF的值时无法识别。您可以编辑问题或建议更改。这就是精神,不是吗?