将 Matlab 的 M 函数引用到 Simulink 中
作者:彭天
邮件:hellotim@foxmail.com
博客:http://hi.baidu.com/pengjun
一、简单的例子
假设我有如下的一个简单的 M 函数:
function y=peng(x,t)
tt=0:0.1:2*t;
y=sum(tt)*x;
如果我需要在 Simulink 中用到这个 peng 函数,那么可以用下面的 Simulink 模型:
MATLAB
Function
MATLAB Fcn
4020
Display 1
2
Constant
Clock
10
Display
其中MATLABFcn 模块的设置如下:
也就是说x等于第一个输入,t为第二个输入。而在我的Simulink模型中第一个输入是一个常
量模块,一直为2,也就是x=2;第二个是随时间改变的量,也就是t每次仿真都等于当前的
仿真时间,所以最后就是t=2;因此用peng函数计算出来的结果是4020,证明是正确的。
二、使用subsystem模块
可以建立如下的模型图:
1
Constant
peng Function
created by PenG
Subsystem
1
Display 1
将上图保存为timpeng.mdl,并存放在当前目录中。
其中Subsystem的封装如下:
4020
Display
而Subsystem内部的模型如下:
1
In 1
y
Gain
1
Out 1
当双击Subsystem模块时,设置如下:
也就是说相当于输出peng(2,10)的值,结果自然是4020了。如果你要循环的改变t的值,可以
用如下的命令。
当然需要给timpeng.mdl增加一个输出模块,如下:
1
Constant
peng Function
created by PenG
Subsystem
1
Display 1
4020
Display
1
Out 1
然后,保存。
运行下面的程序:
open_system('timpeng');
for i=1:10
set_param('timpeng/Subsystem','t',num2str(i));
save_system('timpeng');
[t_out,x_out,y_out]=sim('timpeng',[010]);
disp(y_out(end));
end
也就是用open_system来打开Simulink模型文件,用set_param来设置其中Subsystem模块的t参
数的值依次为1到10,然后用save_system来保存Simulink模型文件。之后用sim函数来运行
timpeng.mdl,然后用disp函数输出最后一个输出值。
可以看到会依次的输出当t为1到10时,对应的用peng函数计算的值。最后一个是4020,代表
运行完毕,即t=10.
可以用close_system来关闭Simulink模型。