単純な関数からそれを行う方法はわかりませんが、クラス関数(メソッド)内からそれを行うのは本当に便利です。バージョン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()で、入力'[test.ttest.u]'を探すようにSimulinkに指示します。Simulinkとメソッドsim()の両方がこの変数にアクセスできます(これが最も重要なことだと思います)。
OK、それでも番号1でマークされている大きな欠点があります。クラスインスタンスへの参照がワークスペースでどのように命名されるかを明示的に知る必要があります(この場合は「test」)。コンストラクターで名前を渡すことで回避できます。または、静的変数とメソッドを使用できますが、この方法では、入力シグナルを動的に変更することはできません。