【发布时间】:2014-01-30 16:59:26
【问题描述】:
我有一个 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 函数时是否没有执行模型回调。
【问题讨论】:
-
什么样的崩溃?有任何错误信息吗?
-
@Daniel Appcrash 我想。 Windows 错误消息。
-
@Daniel 问题签名:问题事件名称:APPCRASH 应用程序名称:MATLAB.exe 应用程序版本:1.0.0.1 应用程序时间戳:4b54ec23 故障模块名称:libut.dll 故障模块版本:1.0.0.1跨度>
-
什么版本和操作系统?它按预期工作 R2013b,Win8。你说你正在使用 InitFcn,所以你编辑的最后一句话是不相关的。 InitFcn 不会被 load_system 或 open_system 调用,而是在模型被初始化为对 sim 调用的一部分时被调用。但无论哪种方式,它都不应该导致段错误,而是只会返回一个错误,说明变量尚未定义。
-
Win7 和 Matlab R2010a。我将参数移动到 PreLoad 回调,现在一切正常。在使用
load_system时,在 InitFcn 中调用的参数显然会导致崩溃。