由于项目要用到pscad的自定义元件功能,于是花了几天恶补了一下相关知识。正好看到说明书里面的CCIN功能,受到启发,正好可以实现电流放大功能。" J" q I$ Q {; ?2 L: b j0 l
3 H2 D) P9 z9 A t- e+ X8 d
$ A' y" y/ N& ?( D2 M2 z 本帖提出一种通过电流放大实现的方法,原理、实施都特别简单,但是该方法存在一些问题。 ! ]$ S9 S8 t7 V$ O) R1 ~% l2 d. O
开此贴目的有三: : E4 Q4 |6 p9 p# ] z & q, e- r. X4 h 首先,抛砖引玉,分享经验,我想到的方法不一定好,希望能集思广益,看看应该如何改进;+ Z6 f H8 K+ O* p
# \% w, l# ^- `. ?
其次,通过一个实例帮助不熟悉自定义元件的人快速入门,并提供; - P ?, L' V# F( t* l6 T 最后,帮助大家开拓思路,希望大家在建模时能多一种选择。! I5 x0 K! y; s. i) J9 U9 t3 y
# g) ]& [1 E# y3 _" Q6 v' I p6 D" T$ \) Y6 D$ T 原理& \5 c9 i [8 u' x' c) I Q/ f6 n' ]
通过在Fortran Segment中调用PSCAD自带CCIN电流源功能,在每个仿真步长内将需要放大的电流值乘以(n-1),所得结果赋给CCIN,使得自定义元件流出电流与原电流的加和为被放大电流的n倍。 3 s$ g3 u6 x* g9 j, o V4 s! v# |1 S3 R4 x2 u) p
( c y6 k3 E, Y: c9 P 实现方法& p4 o" k' |% c m, i* q
考虑到大家对PSCAD4.2较熟悉,以下介绍如何在PSCAD4.5中实现,最后的附件中有两个版本的示例。 5 e F4 @; S+ D & x4 Q9 |* t; r6 G+ P% B$ y. ]6 g9 ?2 s, n 1.创建简单的仿真系统; i f0 t& e6 Y: c7 E; r* m! K$ l
如图是一个简单的电压源串两个1Ohm电阻的系统,我们要实现的是Ia2放大为Ia1的n倍,即Ia2=Ia1*n。+ P* \& G3 F( j8 O$ Y- Z+ n
" I# C" w0 I, h2 M, j* q$ c
' [4 e4 [- h0 S& B# x
3 @+ t# [5 }" Q2.创建与编辑自定义元件% A9 t8 y, S# I5 U1 a+ I
2 W. d e/ N! B' i! z0 C0 \+ l 为紧凑一点,把这个过程放在一张图上,红色数字对于下面的1)~6)步。
! H r2 b. W+ X 1)在画布空白处点右键Create-Component,在右边弹出一个侧边栏; ( y- Q. u; I; p) z: |5 Z8 j 9 g# H2 X" ?2 V6 i 2)侧边栏中Component Wizard是元件创建向导,我们只需要填下元件的名字(Name),画布上元件显示的名称(Title),然后点Finish完成创建; 6 E+ l5 ^5 ?/ O8 D. I# [) D2 L/ @. H( [
3)在元件上右键Edit Definition进入元件编辑;6 i8 u- [* X ~, X: \ s5 [* ^
/ W" s; T, K/ H
4)元件编辑界面分为3部分:Graphic图形界面,Parameter参数界面,Script脚本界面(也就是常说的编程序的地方),通过Edit Definition首先进入图形编辑界面,利用工具栏Shape里面的直线Line和端口Port,在元件上引出一根线,末端为端子N1;(PSCAD4.2好像默认将端子Connection Type设置为Input类型,颜色为绿色,请注意改为Electrical类型)/ H* S( X2 C. {* }. E9 L
9 u& g# J, s8 T2 J+ I 5)为便于元件的使用,希望在主电路直接通过修改参数的方式设置放大倍数、需要放大的电流。为此需要增加元件的参数,在Parameters界面内点击右键New parameter创建参数; # s( D1 j% D+ t% ]8 O6 `. Z* }. r( a' ]7 [
6)创建两个参数:需要放大的电流Current、放大倍数Scale,有2点需要注意: + U) ~6 ^( e, F9 M7 T 0 Q- C* y3 X5 r8 v. \: C5 [ a)每个参数中还有其他条目,Description是参数名,Symbol是在Script中用到的变量名,不要混淆; . [) l' v- g- X& o+ ~& E b)Current为text文本类型,因为需要放大的变量是通过文本作为参数输入的,Scale为integer整型,这点比较好理解,在此处我设置了放大倍数的上下限是1~1000,也可以修改为其他值; ) Z) @6 e8 l b) r* L" zfile:///C:/Users/a/Documents/My%20Knowledge/temp/d48ab359-523f-4567-b793-723d9ea7e439.png ' m( |& \8 d! N! O L+ ? 7 _) ^9 I t0 V% z3.编写脚本 # [2 D+ a* `6 `% b; }' g" I* y 上一步中创建的元件是“死”的,这里才是整个元件的核心 ,在Script里面加入如下代码: ! j0 B5 l! n/ q, U1 h, o' C 8 _) s) Z! C6 _) A4 c0 {" G
#BEGIN9 F6 ` ~0 A. p+ ^# b$ t) ^) m( G
ENABCCIN($N1,$SS)=.TRUE. 1 `. T4 @6 V2 r
#ENDBEGIN / x; {3 N# \# I2 E
CCIN($N1,$SS)=($Scale-1)*$Current
复制代码
8 h6 N$ Z( ]0 u' Q w, |; L5 U8 L5 I$ [* t8 d
注意,Script包含多个Segment,请确保该段代码是放在Fortran Segment中。 . S6 v+ [7 i- c) U9 d% F% [( H9 w/ @! E0 H; Q" ^
解释一下这几行代码: @& L+ R+ s: O$ Q; v" H! H! O0 l. q8 f
1) #BEGIN/#ENDBEGIN是一对指令,包含在其中的代码段只在仿真初始阶段运行一次, 6 R! N4 T. ?. q1 k 2 S$ \3 f0 e! J% Q6 k 【如不识别该指令语句,请用IF(TIMEZERO) THEN...ENDIF: $ q0 x. L. Y5 U