b383452643eede1fb87e46cef4b51243.png
PSCAD入门教程(第7节):怎样调用fortran编写的自定义函数?(附模型)​mp.weixin.qq.com
55679844081f4c396cfeb00663f35059.png
74beccca6f1bbe28751b827ca698ca08.png
https://www.zhihu.com/video/1242208346717540352

第7节 怎样在pscad中call自定义函数?(自定义函数由fortran语言编写)

7.1 pscad脚本中call的函数由fortran语言编写7.1.1在Fortran编译器中编写如下函数(可以先在文本文档中写,再把文本档后缀改为.f,但前提是你装了fortran编译器):<!函数功能:比较i和j的大小,并将小赋值给i,大的赋值给j。注意每段前空6格>

Subroutine my_bj(i,j)

REAl i,j,t

if (i>j) THEN

t=i

i=j

j=t

ENDIF

end subroutine my_bj

7.1.2将该函数文件加载到pscad中(讲解视频中可能忘说这步了...)。

6a4eacb3f5b695a603c84a6406973671.png

7.1.3新建一个自定义模型(元件),并在其中自定义模型中调用函数。

961e0d68cd975fcc2eb7c34d6f1fcc12.png

<!功能:通过调用两值比较函数,将三个输入i1、i2、i3从小到大排序,并按从小到大的顺序,依次赋值给o1、o2、o3输出>。

#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

call my_bj(a,b)

ENDIF

IF(b .gt. c) THEN

call my_bj(b,c)

ENDIF

IF(a .gt. b) THEN

call my_bj(a,b)

ENDIF

$o1=a

$o2=b

$o3=c

47af3e2aa95c39df990d865eb50c5ccc.png

7.1.4 对于多个子模块电容电压排序,需要注意的是,它不仅需要将多个子模块的电容电压值进行排序,还需要知道排序后的子模块电容的编号,这样才能确定是否让该子模块投切。附一个我参考博客上的排序例子(该排序算法用于pscad中排序时,部分程序需要省略,但该程序借鉴意义极大):<博主名称:楚香饭>链接如下

近期预告

1.PSCAD/Matlab仿真模型解读

往期回顾

35b9bfd219edaf59be28c01afaa3070e.png

PSCAD入门教程(第6节):构建自定义元件(附讲解模型)

简单示例模型在文章底部自行提取!

35b9bfd219edaf59be28c01afaa3070e.png

PSCAD入门教程(第5节): 4种常用元件的使用(附讲解模型)

简单示例模型在文章底部自行提取!

由于本人水平有限,所述内容难免会有疏漏之处,有遗漏或阐述不当之处请各位同学、老师傅指正,公众号私信或QQ(3135975766)

ac2d9970855f91f700909be9b2e81cad.png

222bd7a42ae9f8af22eb617c7fb6bf48.png

85044460c2f6d259cf02bd67e44d2d2c.png

示例模型百度网盘链接(其中有一个为官方CInterface模型可用于学习)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐