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