0

假设我在 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().

4

0 回答 0