Ну, я не знаю, как сделать это из простой функции, но это действительно удобно делать изнутри функции класса (метода).Он отлично работает с версией 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').Вы можете обойти это, передав имя в конструкторе, или вы можете использовать статические переменные и методы, но этот способ не позволит вам динамически изменять входной сигнал.