繁体   English   中英

我应该如何使用open_system通过“句柄”而不是GUI中的特定Simulink文件名来打开Simulink块?

[英]How exactly should I use open_system to open a Simulink block by using 'handles' instead of a particular Simulink file name in GUI?

我被困在下面的代码中,因为我找不到在'open_system'中定义的Simulink对象的解决方案,该解决方案在GUI的标记为networkselector的按钮中有效。 handles.baseFileName是选定的文件,我通过在打开的文件窗口中单击另一个按钮成功打开了文件,但是我不知道如何正确使用'open_system'中的'handles'进行调用操作才能打开该文件中名为NetworkSelector的Simulink块。 我也希望您能在此问题上对我有所帮助。

提前非常感谢您!

handles.baseFileName
open_system('handles.baseFileName/NetworkSelector')

% push button to open a Simulink file
function open_file_Callback(hObject, eventdata, handles)
startingFolder = 'C:\Users\xxx\Documents'
      if ~exist(startingFolder, 'dir')
          % If that folder doesn't exist, just start in the current folder.
          startingFolder = pwd;
      end
      % Get the name of the mat file that the user wants to use.
      defaultFileName = fullfile(startingFolder, '*.slx')
      [handles.baseFileName, folder] = uigetfile(defaultFileName, 'Select a Simulink file')
      if handles.baseFileName == 0
          % User clicked the Cancel button.
          return;
      end
      fullFileName = fullfile(folder, handles.baseFileName)  
      [name] = fileparts(fullFileName)
      open_system(fullfile('C:\Users\xxx\Documents', handles.baseFileName), 'tab')
      guidata( hObject, handles )
% push button to open a Simulink block named NetworkSelector
function networkselector_Callback(hObject, eventdata, handles)
handles.baseFileName
open_system('handles.baseFileName/NetworkSelector')
guidata( hObject, handles )

Error using GUI>networkselector_Callback (line 711)
'handles.baseFileName/NetworkSelector' is not a valid
Simulink object name and no matching file found.

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in GUI (line 43)
    gui_mainfcn(gui_State, varargin{:});

Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)GUI('networkselector_Callback',hObject,eventdata,guidata(hObject))
- Show complete stack trace

Error while evaluating UIControl Callback.

根据错误消息,您没有名为'handles.baseFileName/NetworkSelector'的子系统(从字面上看)。

大概您真正想要的是打开名为[handles.baseFileName,'/NetworkSelector']的子系统,即使用存储在handles.baseFileName中的模型名称。

我建议出于鲁棒性,您还需要将代码的相应部分包装在检查中(使用bsIsloaded ),以确保在尝试打开子系统之前确实打开了模型。

如您所说,我通过在networkselector_Callback内编写以下代码成功删除了扩展名:

[pathstr,name,ext] = fileparts(handles.baseFileName); 
newFilename = fullfile( pathstr, name ); 
str = [newFilename,'/NetworkSelector'] 
open_system(str) 
guidata( hObject, handles )

也有效。 非常感谢Phil :))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM