《pscad自定义元件》由会员分享,可在线阅读,更多相关《pscad自定义元件(9页珍藏版)》请在金锄头文库上搜索。
1、在 PSCAD 中要实现新的算法,首先要建立一个自定义元件。自定义元件分为两种,一种是电气元件,一种是信号处理元件。本帖实现的内容是一个非线性电感,其电感值随着电流大小而变化,属于电气元件。写控制算法的同学可能主要用到后者,将输入信号经过一系列的处理计算得到一个输出信号。 问题 1:将程序写在哪里?首先要将算法程序分成两个部分:一部分是 PSCAD 可以实现的,如处理仿真参数、读入仿真数据、输出仿真结果以及积分、微分等简单函数。这部分内容写在自定义元件 definition 的 Script 中。可以写在 Fortran 中也可以写在 DSDYN 中,两者略有不同但不会影响简单应用,具体内容请
2、参阅帮助文件。另一部分是我们自己的 C 语言算法,要将 C 算法总结成 y=f(x,p )的输入输出形式的形式写在一个*.c 文件中。并添加到 PSCAD 的 File Reference 中。 C 函数的命名形式一定是 void XX_XXX_()的形式,注意名字中的下划线,本人的试验结果是必须有这三个下划线,哪位同学有其他发现可以一起探讨一下。问题 2:如何传数据?由于 PSCAD 和 C 函数是互相传递指针,因此就需要将 C 函数写成 f(y,x,p)的形式,例如:void ja_model_(real *h,real *ht,real *mt,real *ms,real *a,real
3、 *alpha,real *c,real *k,real *b,real *m)。其中 h 是输出,ht ,mt 是输入,后面的都是参数。在 PSCAD 中用 call 语句调用,例如:CALL JA_MODEL(H,HT,MT,$MS,$A,$ALPHA,$C,$K,B,M) 。注意函数名中的下划线,这里只有一个!其中 H,HT,MT 都是 Fortran 程序中的变量,后面参数前面加“$”是引用参数的意思,具体内容请参阅帮助文件。问题 3:如何保存前一时刻的变量并在本时刻调用?在时域仿真的时候我们不可避免的要用到上一时刻的某些计算结果。而 PSCAD 中的 Fortran 程序和 C 程序
4、每一时刻都重新执行一次,变量都要清零,所以就要单独存放需要的数据。PSCAD 提供了一个 STORF 数组,这里直接给出例子:#STORAGE REAL:4MY_NSTORF=NSTORFNSTORF=NSTORF+4BT=STORF(MY_NSTORF)HT=STORF(MY_NSTORF+1)MT=STORF(MY_NSTORF+2) H=STORF(MY_NSTORF+3)*$N/$L这是读上一时刻值。STORF(MY_NSTORF)=BSTORF(MY_NSTORF+2)=M这是保存存本时刻值。解决了上面 3 个问题就可以完成信号处理元件的建模。问题 4:如何建立电气元件?我们对一个电
5、气元件建模就是要描述其伏安特性。如一个双端口元件,测它两个结点电压,然后计算出支路电流就可以了。PSCAD 提供了一个基于结点的电气接口函数,说白了就是一个受控电流源叫 GGIN 和 CCIN。帮助里可以搜到,下面给出例子:CCIN($NA,$SS)=CCIN($NA,$SS)-STORF(MY_NSTORF+3)/1000.0CCIN($NB,$SS)=CCIN($NB,$SS)+STORF(MY_NSTORF+3)/1000.0GGIN($NA,$SS)=GGIN($NA,$SS)+GGGIN($NB,$SS)=GGIN($NB,$SS)+G我觉得解决以上 4 个问题就能满足一般应用了。这
6、里只是给大家提供一个思路,还有一些细节没有说到还需要看帮助文件,希望能帮到大家!附件中是个非线性电感,J-A 模型是个微分方程在 C 函数中用龙格库塔法解之。原文标题:由一个实例说明 PSCAD 与 C 语言接口方法 - PSCAD - 中国电力研学论坛 专注电力技术应用,关注电力科技前沿,打造专业电力社区! - Powered by Discuz!#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146原文链接:http:/ PSCAD 和 C 的接
7、口,发现一些细节 :1.fortran 接口子函数的文件名必须是 xxx_df90.f ,C 程序文件名必须是 xxx_msc.c。当大家编译通过但连接出现问题的时候,可以试试修改调用的这两个文件的文件名。 2.PSCAD3.0 以前的版本连接外部文件采用的是 File reference;4.0 以后的版本发生了一些变化,在以前的基础上,在 project setting 的 fortran 标签页里,也要添加接口子程序(.f)文件的文件路径。3.楼主提到了 PSCAD 存放数据的数组,其实有 4 个,数组指针名分别是 STORF(实数量) STORI(整数量) STORL(逻辑量) STO
8、RC(复数量),对应类型的量应该存到对应的数组里。楼主说的 C 函数命名时要加下划线的奇怪规则我也发现了。但想不明白原因。原文标题:由一个实例说明 PSCAD 与 C 语言接口方法 - PSCAD - 中国电力研学论坛 专注电力技术应用,关注电力科技前沿,打造专业电力社区! - Powered by Discuz!#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146#pid399146原文链接:http:/ 引言高压直流输电线路保护是直流线路安全稳定运行的基本保障。完
9、整的直流输电保护系统的核心技术目前只被 ABB、SIEMENS 等少数几个公司掌握,保护装置对实际运行人员往往是个黑盒子,只是给出保护动作或不动作的结果,难以对保护的动作过程进行分析。因此根据实际保护的原理和算法,建立相应的电磁暂态仿真模型,不仅能够得到保护动作结果,而且可以查看保护算法各中间量的变化,分析保护动作或不动作的原因,这对分析保护动作特性、改进保护定值等具有重要的意义。PSCADEMTDC (Power System ComputerAided DesignElectroMagnetic Transient in DCSystem)是使用最广泛的电磁暂态仿真程序之一,但其自带的继电
10、保护元件过于简单,保护算法单一,无法建立与实际直流工程线路保护原理和算法相一致的模型,因此也无法真实而准确地反映直流线路保护的动作特性。为了满足用户不同的应用要求,提高仿真的灵活性,PSCADEMTDC 为用户提供了自定义元件的功能。自定义元件由于自身的优势,在实际仿真中得到了越来越多的应用。自定义元件实质上是 PsCADEMTDc 所提供的与用户子程序进行接口的载体,对应不同的接口对象,自定义元件的原理、实现途径以及运行效率都有差异。目前对自定义元件的研究往往还局限于就事论事的方式,侧重于具体的实现方法,而对自定义建模缺乏一个整体的、机理层面上的认识。本文从机理层面对自定义元件的实现方式、运
11、行效率以及适用性等进行深入分析,揭示了导致自定义元件内存调用冲突的问题,提出了相应的解决方案。最后,本文以实际直流工程行波保护为原型,利用自定义建模技术搭建了其详细、精确的仿真模型,仿真结果证明了该方法的可行性与有效性。1 PSCADEMTDC 自定义建模原理分析11 PSOADEMTDC 的运行机制PSCAD 与 EMTDC 的运行机制如图 1 所示。PSCAD 是前端图形化操作界面, EMTDC 是整个软件的计算核心,其主程序由 System Dynamics 和 Network Solution 两部分组成 j。System Dynamics 包括 DSDYN 与 DsOUT 两个子程序
12、,DSDYN 一般用于加入用户的控制动态代码,而 DS0UT 则主要用于输出求解后的网络变量。图 1 PSCADEMTDC 软件的运行机制图12 自定义元件的实现方式PSCADEMTDC 目前可与 Foran、C 和 Matlab 三种语言编写的代码或程序进行接口,自定义元件实质上是其与外部程序进行接口的载体。EMTDC 与自定义元件之间的调用以及数据交换是通过 DSDYN 和 DSOUT 两个子程序来实现的。用户自定义的代码加入到 EMTDC 中有两种方法:(1)直接嵌入。直接由自定义元件 script 定义中编写的 Fortran 代码实现元件的功能。即把用户代码直接作为 DSDYN 和
13、DSOUT 子程序的一部分嵌入到 EMTDC 主程序中去。(2)问接调用。通过在元件的 script 定义中添加对外部子程序(Fortran、C 或 Matlab)的调用声明,由 DSDYN、DSOUT 子程序对其进行调用,元件的核心功能由外部子程序实现。13 自定义元件三种开发语言的效率对比采用 Fortran 编写源代码的自定义元件一般采用直接嵌入的方式,由于 PSCADEMTDC 是在 Foran 语言上实现的,且无需对外部子程序进行编译及频繁的调用,因而其内嵌性能好,运行效率高。基于 C 语言和 Matlab 构建的自定义元件同属间接调用的范畴,但两者又有所区别。前者是 PsCADEM
14、TDC 与其他程序设计语言的接口,外部的集成开发环境( 如 Microsoft Visual c+等)在运行中仅充当编译的角色,不参与具体运算,由 PscADEMTDc 直接调用经编译后的C 语言代码进行运算;后者是 PSCADEMTDC 与 Mat1ab 软件的接口,由 PSCADEMTDC 直接调用 MATLAB 进行运算,除了两者本身所固有的运算速度上的差异以外,两者间的通信也很大程度上影响了整个仿真的效率,因而其运行效率要较前者低。表 1 给出了三者在相同条件下(AMD Phenom21 GHz,RAM 2GB,仿真时间 10 S,步长 50 ps),实现每步长循环 10。次所耗费的计
15、算时间。可见,基于 Fortran 的自定义元件计算耗时要远少于 Matlab,C 语言居中。由于 Fortran 语言的格式限制较多,而 C 语言功能丰富、表达能力强,且在实际微机保护中得到了广泛应用,因此常选用 C 语言作为自定义元件的开发语言。Matlab 拥有强大的数值计算能力、图形处理能力以及完备的工具箱,但运行效率较低,因而基于 Matlab 构建的自定义元件更适宜作为一个过渡方案应用于保护新原理和新算法的开发与评估。当算法成熟后,为了提高仿真速度,应将其转换为基于 Fortran 或 C 语言构建的自定义元件。表 1 基于 Fortran、C 语言以及 Matlab 构建的自定义元件计算时间对比14 自定义元件与 ModuIe 的对比分析元件是 PSCADEMTDC 最基本的组件,Module 则是由若干个元件为了实现一定功能按一定逻辑结构组合而成的整体。实际仿真中,往往需要搭建单个白带元件所不能实现的功能结构体,在 PSCADEMTDc 中,有两类可实现特定功能的结构体:一类是自定义元件;另一类便是 Module。无论是自定义元件还是 Module,其功能性是用户最关心的部分,即模块能否满足用户明确的或隐含的功能需求。两者区别在于,自定义元件的核心功能完全由编程实现,不受已有元件功能的制约,而 Module 只能由已定义的元件组合而成