MAtlab7.0.4接口完整详细解释并给出多种简易示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab7.0.4 接口连接说明。
PSCAD使用的4.2.1教育版,网络版。
对于大小写的要求,对于系统的变量需要正常的大小写。
用户自定义的不需要注意。
切记:每个有MA TLAB的工程都需要设置一下链接,那个勾一定要勾上啊,害了我几天。
否则会报错的。
如下:
不勾就会报错:
下面的两个设置是一次设置就可以保存的。
1.设置fortran编译器,不能使用GUN编译器,因为它只能用在fortran77中,我用的下面的版本。
VF6.6专业版。
在PSCAD中如下设置:
2.设置MA TLAB,对于7.0.4已经可以正常运行。
3.PSCAD系统设置完成后,就可以建case了,开始加模块了。
下面是我做的一个简单测试模块。
单输入单输出。
已成功运行。
testmat1.m :文件如下:
function [I1]=testIO(in1)
I1=in1;
模块的制作如下:
首先建立一个模块,这个就自己建了。
上面的三个参数是可以自己改的,
第一个参数是m函数的文件名。
第二个参数是相对路径,即m函数所在的文件夹名,建议仿系统示例目录形式。
第三个参数是不一定需要的。
前面两个参数主要是用于调用m函数,表示路径和文件名。
下面是编写的脚本文件,是在DSDYN中。
#STORAGE REAL:2
#LOCAL INTEGER I_CNT
STORF(NSTORF) = $INPUT
CALL MLAB_INT("%:Dir\$Path", "$Name", "R" , "R")
$OUTPUT = STORF(NSTORF+1)
NSTORF = NSTORF + 2
联合数组多输入多输出:
首先建立一个INPUT,一个OUTPUT,可以是多维的,下面是一个2维输入输出。
注意,这里只有一个变量,使用数组表示,此数组下标是从1开始的。
在m文件中也是使用数组。
在main中使用数据组合和分离器。
M函数:
function [t1]=testmat1(inn1)
t1(1) = 2* inn1(1);
t1(2) = inn1(2);
Fortran DSDYN函数:
#STORAGE REAL:4
! --------------------------------------------------
! --------------------------------------------------
! PSCAD/EMTDC - MATLAB INTERFACE
! Module: $Name
!#LOCAL INTEGER I_CNT
! IF($Enabl.GT.0.9) THEN
! --------------------------------------------------
! Transfer EMTDC Input Variables to Matlab Interface
! --------------------------------------------------
!
! First Input Array (REAL(2))
! I_CNT = 1
! DO WHILE ( I_CNT .LE. 1 )
STORF(NSTORF) = $INPUT(1)
STORF(NSTORF+1) = $INPUT(2)
! I_CNT = I_CNT + 1
! END DO
!
! --------------------------------------------------
! Call PSCAD/EMTDC Matlab Interface:
! CALL MLAB_INT("MFILEPATH","MFILENAME","Input Format","Output Format") ! --------------------------------------------------
CALL MLAB_INT("%:Dir\$Path", "$Name", "R(2)" , "R(2)")
!
! --------------------------------------------------
! Transfer Matlab Output Variables from Matlab Interface
! --------------------------------------------------
!
! First Output Array (REAL(1))
! I_CNT = 1
$OUTPUT(1) = STORF(NSTORF+2)
$OUTPUT(2) = STORF(NSTORF+3)
! ENDIF
! Update STORx Pointers
NSTORF = NSTORF + 4
! --------------------------------------------------
! -------------------------------------------------- 单独的多输入多输出:
模块:
Fortran程序:
#storage real:4
STORF(NSTORF) = $IN1
STORF(NSTORF+1) = $IN2
CALL MLAB_INT("%:Dir\$Path","$Name","R R","R R") $OUT1 = STORF(NSTORF+2)
$OUT2 = STORF(NSTORF+3)
NSTORF = NSTORF + 4
M函数:
function [out1,out2]=testmat3(in1,in2)
out1=2*in1+0.1;
out2=in1+in2+0.5;
与MATLAB的接口程序编写
在DSDYN中使用Fortran语言编写代码,并且将编写的m函数使用文件链接到工程中,通过函数名接口调用。
Matlab和PSCAD是通过PSCAD中的数据栈进行通信的。
主要的数据栈有:
Fortran 语言:
#STORAGE REAL:33 //向系统申请一个数据空间,包括输入输出的个数,有real和integer
#LOCAL INTEGER I_CNT //定义一个局部变量
! First Input Array (REAL(31))
DO I_CNT = 1,31,1 //循环压栈,
STORF(NSTORF+I_CNT-1) = $INPUT(I_CNT)
END DO //注意空格
DO的用法简介:DO 与 end DO联合使用。
DO 变量名 = 初值,终值,步长(当步长为1时可省略)
………
ENDDO
DO WHILE(条件语句)
………
ENDDO
IF (条件) then。
Else if(条件) then。
Endif
或 #if //不用加then
………
#ELSE
………
#endif
! SUBROUTINE MLAB_INT(MPATH, MFILE, INPUTS, OUTPUTS)//路径一般使用相对路径,即在你当前的工程目录下建立一个文件夹,比如命名为mfiles。
则"$Path"可改写为”:$Dir\$Path”,Path,Name均为设定的变量值,A MATLAB module is called by [D] = TEST(A,B,C), where TEST is a module in a MATLAB file 'TEST.m', that is located in C:\TEMP MLAB_FILES. The input 'A' is a REAL variable, 'B' is a REAL array of dimension 31 and 'C' is an INTEGER. The output 'D' is a REAL array of dimension 10.
The MATLAB interface subroutine call would then appear as follows:
CALL MLAB_INT("%:Dir\$Path", "$Name", "R(3)" , "R" )//相对路径表示。
CALL MLAB_INT("$Path","$Name","R(31)","R(2)")
!
! First Output Array (REAL(2))
!得到输出值,同样是使用变量栈输出,数组的标号顺序与栈先后顺序一致。
DO I_CNT=1,2,1
$OUTPUT(I_CNT) = STORF(NSTORF+31+I_CNT-1) ENDDO
!
! Increment STORF pointer
!改变栈的索引值
NSTORF = NSTORF + 33
!。