void my_bj(double*i,double*j)
{double t;
if(*i>*j)
t=*i;
*i=*j;
*j=t;
}
8.1.2 通过鼠标右键add component添加一个filereference组件
8.1.3 PSCAD中的Script里编写如下函数:
#STORAGE INTEGER:10
#STORAGE REAL:10
#LOCAL INTEGER NMY_NSTORF
#LOCAL INTEGER NMY_NSTORI
#LOCAL REAL a,b,c
#BEGIN
#ENDBEGIN
a=$i1
b=$i2
c=$i3
IF(a .gt.b) THEN
callmy_bj(a,b)
ENDIF
IF(b .gt.c) THEN
callmy_bj(b,c)
ENDIF
IF(a .gt.b) THEN
callmy_bj(a,b)
ENDIF
$o1=a
$o2=b
$o3=c
8.2 CVFortran编译器
8.2.1 编写C语言函数(并命名为.C文件:
#includevoidmy_bjc(double*i,double*j)
{double t;
if (*i>*j)
t=*i;
*i=*j;
*j=t; }
8.2.2 用fortran语言编写一个辅助子程序my_bjf(并命名为.f文件),让pscad能识别c语言。
Subroutine my_bjf(i,j)
Real i,j
Interface
Subroutine my_bjc(i,j)
!DEC$ attributes C:: my_bjc
!DEC$ attributes reference:: i,j
Real i,j
End Subroutine
End Interface
Call my_bjc(i,j)
end
8.2.3 通过鼠标右键add component添加2个file reference组件(一个用于引用以上.C文件,一个用于引用以上的.f文件
8.2.4 PSCAD脚本中调用my_bjf函数(注意此处是my_bjf不是my_bjc。
#STORAGE INTEGER:10
#STORAGE REAL:10
#LOCALINTEGER NMY_NSTORF
#LOCALINTEGER NMY_NSTORI
#LOCALREAL a,b,c
#BEGIN
#ENDBEGIN
a=$i1
b=$i2
c=$i3
IF(a .gt. b) THEN
call my_bjf (a,b)
ENDIF
IF(b .gt. c) THEN
call my_bjf (b,c)
ENDIF
IF(a .gt. b) THEN
call my_bjf (a,b)
ENDIF
$o1=a
$o2=b
$o3=c
仿真输出结果:
总结:最好直接用fortran语言编写函数,然后pscad的script脚本中调用该函数;实是要用C语言编写函数,要注意自己装的编译器是Gfortran编译器还是CVFortran编译器(具体怎么甄别编译器,文中有提到,需要的模型见最后的链接。若是Gfortran编译器则可以直接pscad的script脚本中调用C函数, 若是CVFortran编译器则需要通过fortran语言简单的将c函数转换成pscad能识别的函数。
近
期
预
告
1.PSCAD/Matlab仿真模型解读
往期回顾
PSCAD入门教程(第6节):构建自定义元件(附讲解模型
简单示例模型文章底部自行提取!
PSCAD入门教程(第5节): 4种常用元件的使用(附讲解模型
简单示例模型文章底部自行提取!
由于本人水平有限,所述内容难免会有疏漏之处,有遗漏或阐述不当之处请各位同学、老师傅指正,公众号私信或QQ(3135975766)。
示例模型百度网盘链接(其中有一个为官方CInterface模型可用于学习:
链接1:
https://pan.baidu.com/s/1U0_Lj0YbMHa1H1M9_iD7yQ
提取码1:p4u7
链接2:
https://pan.baidu.com/s/1APFaBsBzniOspbx0-jy8kA
提取码2:4ynb