好吧,我不知道如何從一個簡單的功能做到這一點,但它確實很方便,從一個類的函數(方法)內做到這一點。它適用於版本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