好吧,我不知道如何从一个简单的功能做到这一点,但它确实很方便,从一个类的函数(方法)内做到这一点。它适用于版本2009b。
将代码放在文件Test.m:
classdef Test < handle
properties
mdl
% Default input signal
t = [0 1 1 2]'
u = [0 0 1 1]'
end
methods
function this = Test(mdl) % Constructor
this.mdl = mdl;
end
function sim(this)
% Load model
load_system(this.mdl);
% Prepare model configuration
conf = getActiveConfigSet(this.mdl);
cs = conf.copy();
set_param(cs, 'StopTime', '4');
set_param(cs, 'LoadExternalInput', 'on');
set_param(cs, 'ExternalInput', '[test.t test.u]'); % <-- 1
% Run simulation
simout = sim(this.mdl, cs);
% Plot results
tout = simout.find('tout');
yout = simout.find('yout');
plot(tout, yout(:,1), 'b--');
end
end
end
然后,只需:
>> test = Test('TestSim');
>> test.sim();
会发生什么?你创建了对象测试,它定义了字段t和u。然后在sim()方法中你可以对Simulink寻找输入'[test.t test.u]'。 Simulink和sim()方法都可以访问这些变量(我相信这是最重要的)。
好吧,它仍然有一个很大的缺点,用数字1标记。你必须明确知道如何在工作区中命名类实例的引用(在这种情况下是'test')。您可以通过在构造函数中传递名称来处理它,也可以使用静态变量和方法,但这种方式不允许您动态更改输入信号。
此方法适用于模型引用并使用RTW编译? – Miebster 2011-03-12 22:11:30
,你不得不问Mathworks的人;我从来没有使用过RTW,也没有深入到Simulink中,而是从M文件中运行模拟。 – 2011-03-12 22:24:03
第一个选项在2009年工作...所以我只是会坚持下去,直到它咬我。谢谢! – JnBrymn 2011-03-14 22:07:08