电力仿真论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: pscad atp VIP会员
新来朋友

fy030509

yoonae

fengxian

luzhiyuan

节度使

szg0933

Iris

YANG

柔直小白

messiliu10

ywwy

18720669717

qq954646921

suoybing

EE_EDTA

zcx

wuzhixiang

chj

玉面孟尝

13647319986

晚风吻尽荷花叶

吃不胖的王胖子

荔荔

zjzy8888

dawoya

查看: 7.2K|回复: 5

PSCAD入门教程第8节调用C语言函数及file reference组件(附模型

[复制链接]
发表于 2020-5-10 13:35:14 | 显示全部楼层 |阅读模式

注册可看大图、可下载

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第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<math.h>
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文件):

#include<math.h>

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文件)

qw1.jpg

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

仿真输出结果:

qw2.jpg

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

近期预告
1.PSCAD/Matlab仿真模型解读


往期回顾

qw3.jpg

PSCAD入门教程(第6节):构建自定义元件(附讲解模型)
简单示例模型在文章底部自行提取!



PSCAD入门教程(第5节): 4种常用元件的使用(附讲解模型)
简单示例模型在文章底部自行提取!


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

qw6.jpg

qw7.jpg

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

链接1:

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

提取码1:p4u7

链接2:

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

提取码2:4ynb
回复

使用道具 举报

会员网龄
3.7岁

TA在排名榜Top100

积分:暂未上榜

发帖:暂未上榜

在线:暂未上榜

  • TA的每日心情
    开心
    2021-2-1 11:14
  • 2

    主题

    7

    回帖

    9

    积分

    新手上路

    Rank: 1

    积分
    9
    发表于 2020-10-31 10:22:50 | 显示全部楼层
    ding ding ding
    回复

    使用道具 举报

    会员网龄
    5.4岁

    TA在排名榜Top100

    积分:NO. 73 名

    发帖:暂未上榜

    在线:NO. 59 名

  • TA的每日心情
    开心
    2021-5-28 07:54
  • 0

    主题

    11

    回帖

    272

    积分

    中级会员

    Rank: 4

    积分
    272

      发表于 2020-11-2 12:02:50 | 显示全部楼层
      非常好的资料,给力!!!!!!
      回复

      使用道具 举报

      会员网龄
      3.5岁

      TA在排名榜Top100

      积分:NO. 26 名

      发帖:暂未上榜

      在线:NO. 43 名

    • TA的每日心情
      慵懒
      2024-1-26 02:33
    • 0

      主题

      13

      回帖

      1195

      积分

      金牌会员

      Rank: 8Rank: 8

      积分
      1195

        发表于 2020-11-26 04:50:34 | 显示全部楼层
        好资料 学习学习
        回复

        使用道具 举报

        会员网龄
        2.7岁

        TA在排名榜Top100

        积分:暂未上榜

        发帖:暂未上榜

        在线:暂未上榜

      • TA的每日心情
        开心
        2022-10-4 21:06
      • 0

        主题

        1

        回帖

        1

        积分

        新手上路

        Rank: 1

        积分
        1

          发表于 2021-11-20 16:33:09 | 显示全部楼层
          为什么原模型我都会报错??我用的Gfortran编译器
          回复

          使用道具 举报

          发表于 2021-12-16 16:43:13 | 显示全部楼层
          这个还是复杂了  用c的肯定不想用f,所以还是全c好,但是楼上是f里调用c,纯c的坑,后辈还要爬。 就是下划线的坑
          回复

          使用道具 举报

          发贴规则: 
          1.严禁将帖子发至无关版面,请选择对应版块发贴,以维护论坛的系统性和整洁性。
          2.提问题需要将问题描述清楚,涉及到仿真模型问题需要添加报错图片或描述,上传仿真模型效果更佳。
          3.由于论坛的时效性不足,可以发帖后点击楼层下分享到:QQ好友和群快速得到关注。
          4.保持和谐。
          您需要登录后才可以回帖 登录 | 立即注册

          本版积分规则

          Archiver|手机版|小黑屋|电力仿真论坛

          GMT+8, 2024-4-27 01:16 , Processed in 0.112584 second(s), 54 queries .

          Powered by Discuz! X3.4

          © 2001-2023 Discuz! Team.

          快速回复 返回顶部 返回列表