load_system和open_system之间的Simulink差异

时间:2014-01-30 16:59:27

标签: matlab class simulink

我有一个Simulink模型,它调用模型回调的InitFcn中的脚本。此脚本初始化基本工作空间中的一组变量,以便Simulink模型可以使用它们。使用Classes时,我发现使用load_system函数会使Matlab崩溃,open_system函数也可以正常工作。

这里是班级:

classdef simulinkModel
    properties
        model = '';
    end
    methods
        function obj = simulinkModel(modelName)
            obj.model = modelName;
        end
        function openModel(obj)
            % Make sure any previously open model are closed, and open the model.
            if bdIsLoaded(obj.model)
                obj.closeModel()
            end
            %load_system(obj.model) % Matlab crash
            open_system(obj.model) % Matlab run the model correctly
        end
        function closeModel(obj)
            close_system(obj.model, 0) 
        end
        function runModel(obj)
            sim(obj.model)
        end
    end
end

在命令窗口中:

objModel = simulinkModel('test');
objModel.openModel
objModel.runModel

那么load_systemopen_system之间的关系如何崩溃? open_system函数对load_system函数不执行的基础工作区有什么作用吗?

修改

我决定尝试在类之外运行简单的命令来查看问题是否在其他地方。所以在命令窗口输入:

load_system('test')
sim('test')

在命令窗口中执行此操作时,Matlab也会崩溃。所以我开始想知道在调用load_system函数时是否没有执行模型回调。

1 个答案:

答案 0 :(得分:0)

我可以确认load_system和open_system之间确实存在非常不同的行为。我正在调试2015b下的一个奇怪的问题,我刚刚意识到我使用load_system时没有调用我的simulink模型的LoadFcn回调,但是当我使用open_system时调用正确。我不知道这在任何地方都有记录。如果在“加载”系统时没有调用它,我发现这个回调名称会产生误导!如果我找到更多信息,我会回复此帖子。