【问题标题】: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 通过使用“句柄”而不是 GUI 中的特定 Simulink 文件名来打开 Simulink 模块?
【发布时间】:2019-12-01 20:46:18
【问题描述】:

我被困在下面的代码中,因为我找不到任何解决方案来制作在“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.

【问题讨论】:

  • 您能否格式化您的代码以使其可读。
  • 感谢 Jared 的编辑。我确实正确地提出了我的问题,但是在单击“发布问题”后,它并没有以正确的顺序出现。

标签: matlab user-interface button simulink


【解决方案1】:

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

想必你真正想要的是打开名为[handles.baseFileName,'/NetworkSelector']的子系统,也就是使用handles.baseFileName中存储的模型名称。

我建议,为了稳健性,您还需要将代码的适当部分包装在检查中(使用bsIsloaded),以确保模型在尝试打开子系统之前确实是打开的。

【讨论】:

  • 事实上,我尝试在许多不同的配置中使用 [handles.baseFileName,'/NetworkSelector'],但我仍然无法通过单击按钮打开子系统,尽管 MATLAB 没有给出任何错误消息.它最后给出的是 ans = 'File.slx/NetworkSelector''。路径似乎确实正确,但我意识到我可以通过删除 ans 中的“.slx”来打开任何子系统,我在 open_system 中也使用过(我的意思是 ans='File/NetworkSelector'')。跨度>
  • 另外我希望你知道如何使用它和handles.baseFileName
  • 这是有道理的。在open_file_Callback 中,您将文件名(及其扩展名)保存到handles.baseFileName。因此,在形成要打开的子系统的名称时,需要从模型名称中删除扩展名。
【解决方案2】:

正如你所说,我通过在networkselector_Callback 中编写以下代码成功删除了扩展:

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

它也有效。非常感谢菲尔 :))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多