好吧,我不知道如何从一个简单的函数中做到这一点,但是从一个类函数(方法)中做到这一点真的很方便。它适用于 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 的大缺点。您必须明确知道如何在工作区中命名对类实例的引用(在本例中为“测试”)。您可以通过在构造函数中传递名称来解决它,或者您可以使用静态变量和方法,但这种方式不允许您动态更改输入信号。