假设我在 Simulink 中设置了一个仿真,它由三个块组成:输入(From Workspace
块)、模型计算(S-function
块)和结果(Outport
)。在我的课堂上,我对输入数据做了很多预处理,这里没有展示。然后,我将 Input 块指向使用inputArray
,这是我的类的一个属性。
classdef SimulationClass < handle
%SimulationClass Simulate process using model
properties
inputArray double = ones(101, 11)
modelFilename char
simOpts struct
simulationTime double
simulationResultsArray double
end
methods
function obj = SimulationClass(simulationTime)
obj.simulationTime = simulationTime;
end
function prepareSimulation(obj, modelFilename)
obj.modelFilename = modelFilename;
open_system(obj.modelFilename);
set_param([obj.modelFilename '/fromWorkspaceBlock'],...
'VariableName', 'obj.inputArray');
obj.simOpts = simset('SrcWorkspace', 'current');
end
function runSimulation(obj)
[~, ~, obj.simulationResultsArray] = sim(obj.modelFilename,...
obj.simulationTime, obj.simOpts);
end
end
end
我可以从命令提示符轻松启动模拟运行。
mySim = SimulationClass(1:10);
mySim.prepareSimulation('mySimulinkSheet');
mySim.runSimulation;
但是,如果我使用一些设置(例如,不同的求解器)并在 Simulink 中按Run,它不起作用,因为数据不在base
工作区中。即,我失去了与 Simulink 的交互性。
关于如何解决这个问题的任何想法?到目前为止,我想出的唯一解决方法writePropertiesToBaseWorkspace
是编写一个附加方法(如),它将类转换properties
为变量,使用assignin()
.