我有一个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_system
与open_system
之间的关系如何崩溃? open_system
函数对load_system
函数不执行的基础工作区有什么作用吗?
修改
我决定尝试在类之外运行简单的命令来查看问题是否在其他地方。所以在命令窗口输入:
load_system('test')
sim('test')
在命令窗口中执行此操作时,Matlab也会崩溃。所以我开始想知道在调用load_system
函数时是否没有执行模型回调。
答案 0 :(得分:0)
我可以确认load_system和open_system之间确实存在非常不同的行为。我正在调试2015b下的一个奇怪的问题,我刚刚意识到我使用load_system时没有调用我的simulink模型的LoadFcn回调,但是当我使用open_system时调用正确。我不知道这在任何地方都有记录。如果在“加载”系统时没有调用它,我发现这个回调名称会产生误导!如果我找到更多信息,我会回复此帖子。