pscad c语言程序,PSCAD入门教程(第8节):调用C语言函数及file reference组件使用...

第8节  在PSCAD中调用C语言函数及file reference组件使用

如果电脑上装的是Gfortran编译器就方便点,如果用的是CVFortran编译器就可能就要弄几个晚上才不会报错(此处给出了判别方法,可以减少出错的概率):至于怎么判断装的是Gfortran编译器还是CVFortran编译器,只需分别运行官方模型(文末可提取)中的C_Interface_GF.pscx和C_Interface_VF.pscx,运行哪个不报错,对应的就是哪个编译器,视频中有演示。

8.1  Gfortran编译器(不是装的这个编译器请跳至8.2)

(因为我电脑里没装这个,所以这部分的程序没跑过,不保证全对)

8.1.1编写C语言函数(并命名为.C文件):

#include

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里编写如下函数:

#STORAGEINTEGER:10

#STORAGEREAL:10

#LOCALINTEGER NMY_NSTORF

#LOCALINTEGER NMY_NSTORI

#LOCALREAL 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文件):

#include

voidmy_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

仿真输出结果:

0d7dd50d1297f4034a4c9f9f450744f7.png

总结:最好直接用fortran语言编写函数,然后在pscad的script脚本中调用该函数;实在是要用C语言编写函数,要注意自己装的编译器是Gfortran编译器还是CVFortran编译器(具体怎么甄别编译器,文中有提到,需要的模型见最后的链接。)若是Gfortran编译器则可以直接在pscad的script脚本中调用C函数, 若是CVFortran编译器则需要通过fortran语言简单的将c函数转换成pscad能识别的函数。

1.PSCAD/Matlab仿真模型解读

往期回顾

507aaa0e5d516af2e784470ecb41e32d.png

507aaa0e5d516af2e784470ecb41e32d.png

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

链接1:

https://pan.baidu.com/s/1U0_Lj0YbMHa1H1M9_iD7yQ

提取码1:p4u7

链接2:

https://pan.baidu.com/s/1APFaBsBzniOspbx0-jy8kA

提取码2:4ynb

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值