欢迎大家加入电力系统仿真论坛官方QQ群(584013101)讨论电气工程领域的相关问题,群里有许多电气方向的学术大咖,兴许还有你的师兄师姐,涉及的方向也比较多,比如柔直、稳定性分析、故障分析、控制与保护、新能源,重要的是他们都是英俊潇洒、风流倜傥、美丽动人、才华横溢、乐于助人的小哥哥小姐姐。
一、自定义模型(组件)的构建
01 PSCAD中自定义模型分类
PSCAD中自定义模型分为两大种,一种是自定义模型(组件),另一种是自定义模型(元件)。
(1)自定义模型(组件)
可以在自定义模型里添加PSCAD库中自带的元器件,比如电压表、电容、IGBT、发电机等等,也可以添加自定义元件。比如官网中关于MMC的控制模块,它的外部接口如图所示。
双击该组件自定义模型即可看到它的内部结构是由库中自带的一些元件搭建而成的,如下图所示。
(2)自定义模型(元件)
仅由程序语言(比如Fortran语言、C语言)构建该自定义模型。比如,此处我通过Fortran语言构建了一个自定义的可变电阻,它的外部接口如下图所示,由于该元件的功能通过程序表达,所以双击该元件自定义模型,其内部电气结构不可见,但可看到该元件的程序(程序未黑箱化的前提下)。
选中该元件自定义模型后,右键Edit definition,然后在界面偏下的部分就可以看到Graphic、paraments、Script三个选项,点击Script就可以看到该自定义模型的程序。
--------------------------------
#STORAGE INTEGER:10
#STORAGE REAL:10
#LOCAL INTEGER NMY_NSTORF
#LOCAL INTEGER NMY_NSTORI
#LOCAL REAL NR
#LOCAL REAL NU
#LOCAL REAL Ntest
#LOCAL INTEGER j
#LOCAL INTEGER i
#BEGIN
CALL E_VARRLC1_CFG(0,$SS,$NTB,0)
#ENDBEGIN
NMY_NSTORF=NSTORF
NSTORF=NSTORF+10
NMY_NSTORI=NSTORI
NSTORI=NSTORI+10
IF (TIMEZERO) THEN
STORF(NMY_NSTORF)=0
STORF(NMY_NSTORF+1)=0
i=0
j=0
Ntest=0
ENDIF
NR=$R_my
NU=0
CALL E_VARRLC1_EXE(0,$SS,$NTB,0,NR,NU)
i=i+5
$Nout1=i*1.0
$Nout2=STORF(NMY_NSTORF)+5
STORF(NMY_NSTORF)=$Nout2
-----------------------------------------
以上程序虽然只实现了一个可变电阻的功能,但是此处我将构建自定义模型时的简单程序框架放上去,方便读者在以上基础上进行更改,由于其中小部分变量是由我自定义的,所以可能有些繁琐,具体含义下次介绍自定义模型(元件)时再讲。在PSCAD中该部分程序是自定义的,所以可以编辑,而主界面“Fortran”部分中的Fortran程序不可更改。
02 构建自定义模型(组件)
此处以
(a+b)*c
这个简单功能介绍自定义模型(组件)的构建步骤:
在PSCAD库文件的界面中 -> 鼠标右键 -> 选择Create:component
->当到达自定义组件界面;
设置好以上数据后,点击finish,在库文件主界面将会显示以下自定义元件的示意图。
图中a、b表示“加法”的两个输入量端子,c端子为乘法输入端子,通过自定义模块的参数输入界面输入,out1表示输出端子。
由于c端子通过参数输入界面输入,所以需要在组件中手动添加以下元件:
并且在自定义模型的参数输入界面,对输入参数c的相关属性进行设置。
测试端子输入/输出:(a+b)*c=(1+2)*2=6
此处以一个简单的加减乘除运算为例说明自定义模型的构建步骤,小伙伴们只要掌握了构建的方法,构建其他功能的自定义模型也就很简单了。
二、应用于PSCAD的Fortran简单语法介绍
Fortran语言看起来高大上,听起来好像又是一门新的程序语言,其实如果Fortran只用于在PSCAD中编写自定义模型,那么我们只需要掌握部分的语法,学过C语言、matlab的M语言或者FPGA中的语法后,再学Fortran不算太难。在PSCAD中使用Fortran可能需要注意到的问题:
(一)、Fortran 数组下标默认情况下是从1 开始(c语言从0开始),与一般矩阵的下标相同
(二)、变量名不区分大小写,使用变量前建议对变量类型进行声明,且声明语句在所有执行语句之前。
在PSCAD中使用Fortran语言的方式有两种:①可以将Fortran语言与脚本语言结合起来使用,这样可以直接在脚本(Script)界面直接编写程序。②在外部编写.f函数,然后在PSCAD中的脚本(Script)界面中call该函数。
定义整型变量X: #LOCAL INTEGER X
实型变量X: #LOCAL REAL X
逻辑型变量X: #LOCAL Logical X
定义数组:
可以直接在PSCAD脚本中定义1维数组,高于1维的不能在脚本中直接定义,需要通过写.f函数文件,然后在脚本中call,例如,定义包含9个数据的1维数组:
整型变量X: #LOCAL INTEGER X 9
实型变量X: #LOCAL REAL X 9
逻辑型变量X: #LOCAL Logical X 9
(三)、赋值语句
例如,
将a赋值给b
b=a
将a赋值给数组c中的第4个位置
c(4)=a
(四)、数学运算表达式
加 | + |
减 | - |
乘 | * |
除 | / |
求余 | % |
平方 | ** |
并联 | \ |
(五)、关系运算符
大于 | >(或者“.gt.”) |
大于等于 | >=(或者“.ge.”) |
小于 | 或者“.lt.”) |
小于等于 | <=(或者“.le.”) |
等于 | ==(或者“.eg.”) |
不等于 | /=(或者“.ne.”) |
(六)、逻辑运算符
与 | .and. |
或 | .or. |
非 | .not. |
等 | .eqv. |
不等 | .neqv. |
(七)、条件、循环语句
①.if 语句
if (a>0 ) then
…
elseif(a<0) then
…
else
…
endif
②循环语句
DO j=1,b,c
…
End do
以上语句表示从j为1开始循环每次循环后j增加c,直到j大于b为止,若c不写,则默认每次循环后j增加1。
(八)、函数
例如,实现一个z=x+y的功能。
Subroutine add_sub(x,y,z)
!此处由于该函数不是在PSCAD脚本中编写的,所以声明变量时有所不同
Real:: x
Real::y
Real::z
z=x+y
end
在PSCAD脚本中使用以下语句就可以使用上述函数,语句中abc表示函数的三个输入输出参数,与上述函数中xyz相对应。
Call add_sub(a,b,c)
近
期
预
告
①.电气主接线
介绍电气主接线的主要原因是我们老师傅说了一句话触动了我,他说“当你走进变电站,第一眼看到的就是主接线,你要是主接线都弄不清,那你头顶的那些电线就和一团乱麻没有区别,其他工作开展起来也很困难”。确实,我觉得这虽然是一个很基础的知识,但对于新手来说,了解电气主接线有利建立电气知识框架,对于一二次系统的调试、运行、检修都能很好很快的入手。
②.PSCAD自定义模型(元件)的构建
③.PSCAD自定义模型中怎样call外部.f文件中的函数
④.模型解读计划
往期回顾
如何设计控制器使被控系统达到预期性能?
反馈控制的最根本问题是什么?
PSCAD入门教程(1、2节):认识PSCAD操作界面+波形数据的3种输出方式
有视频!~~但是比较模糊,效果差~~建议看文档。
插播| 电力公司面试常见试题(下)
电力公司面试;电气专业保研、考研复试问答。
易混| 4种派克(Park)变换、克拉克(Clark)变换与基于dq轴解耦的双闭环控制的关系(一)
4种形式的派克(Park)变换矩阵、锁相环(PLL)、电流内环与功率外环。