【问题标题】:simulink run with gui matlabsimulink 用 gui matlab 运行
【发布时间】:2013-05-06 15:47:18
【问题描述】:

我有一个 Gui 和一个 Simulink 模型,我想在 Gui 的文本字段中输入一些值并按下开始按钮,之后,我的 simulink 模型应该采用这些值并运行,结果应该显示在 gui 静态文本中.

到 simulink:我必须使用常量块,它们的名称是 kraft 和 flaeche。并且进入块的参数是k和f。

好的,现在我想在 gui 中编辑 k 和 f 的值。这是我的代码:

      function kraft_Callback(hObject, eventdata, handles)
      kraft_value = str2num(get(hObject,'String')); 
     if (isempty(kraft_value)) 
     set(hObject,'String','0') 
     end 
      guidata(hObject, handles); 

     function flaeche_Callback(hObject, eventdata, handles)
     flaeche_value = str2num(get(hObject,'String')); 
     if (isempty(flaeche_value)) 
     set(hObject,'String','0') 
      end 
     guidata(hObject, handles);

     function start_Callback(hObject, eventdata, handles)
     k= str2double(get(hObject,'string'));
     f= str2double(get(hObject,'string'));
     sim('Steifigkeit');


    function static_CreateFcn(hObject, eventdata, handles)

但我得到了这些错误:

     Error using Gui>start_Callback (line 215)
      Error due to multiple causes.

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

      Error in Gui (line 17)
     gui_mainfcn(gui_State, varargin{:});

        Error in                     @(hObject,eventdata)Gui('start_Callback',hObject,eventdata,guidata(hObject))


      Caused by:
     Error using Gui>start_Callback (line 215)
    Error evaluating parameter 'Value' in 'Steifigkeit/f'
    Error using Gui>start_Callback (line 215)
    Undefined function or variable 'f'.
    Error using Gui>start_Callback (line 215)
    Error evaluating parameter 'Value' in 'Steifigkeit/k'
    Error using Gui>start_Callback (line 215)
    Undefined function or variable 'k'.

谁能帮帮我

【问题讨论】:

    标签: matlab user-interface simulink


    【解决方案1】:

    我认为 Simulink 正在基础工作区中寻找 kf,但它们仅在您的回调函数工作区中定义。你可能需要使用assignin:

    function start_Callback(hObject, eventdata, handles)
    k= str2double(get(hObject,'string'));
    f= str2double(get(hObject,'string'));
    assignin('base','f',f);
    assignin('base','k',k);
    sim('Steifigkeit');
    

    我不知道您的 GUI 是如何构建的,但在我看来,根据您的代码,k 和 f 是相同的。这就是你的本意吗?

    【讨论】:

    • k和f不一样,k是一个constant_block的常数值,f是另一个constant_block的常数值。我想在 GUI 中输入这些常量值的值,然后,simulink 模型应该运行,这些值的结果应该再次显示在 GUI 中,在 Static_textfield 中。
    • 我会上传我的 gui 和 Simulink 的图片,但我的声誉还不够高。 :)
    • 据我所知,您的 GUI 代码使 kf 具有相同的值:您从同一个对象中获取 string 属性并将其转换为双精度值。
    • 是的,但同时我使用这个:k = str2double(get(handles.kraft,'String')); f = str2double(get(handles.flaeche,'String'));
    • 是的,我现在收到 3 个警告 :)... 但是结果 deos 没有显示在 gui 中。在 simulink 模型中,我在 divide_block 之后加入了一个 To workSpace_block 以获取除法运算的结果并显示在 Gui 中。但它不起作用。
    【解决方案2】:

    运行模拟的命令语法的一般形式是:

    SimOut = sim('model', Parameters)
    

    因此,您可以使用命令从任何地方运行 simulink 模型。您还可以将参数添加到模型并运行它。

    以下示例展示了如何创建配置集并将其与 sim 语法一起使用。

    model = 'vdp';
    load_system(model)
    simMode = get_param(model, 'SimulationMode');
    set_param(model, 'SimulationMode', 'rapid')
    cs = getActiveConfigSet(model);
    model_cs = cs.copy;
    set_param(model_cs,'AbsTol','1e-5',...
             'SaveState','on','StateSaveName','xoutNew',...
             'SaveOutput','on','OutputSaveName','youtNew')
    simOut = sim(model, model_cs);
    set_param(model, 'SimulationMode', simMode)
    

    所以你只需要替换文本框中的值就可以了……

    我通常用这个在simulink中设置一个值:

    Control_Gains(1,1)=str2double(get_param([ModelName,'/PID1/PIDx'],'P'));
    

    或:

    NewString               =   ['[',(num2str(KT)),']'];
    set_param([ModelName,'/System/Model/Gain'],'Gain',NewString);
    

    【讨论】:

    • 感谢您的回答,但我无能为力。我应该在回调函数中写这个吗???在我的情况下是 vdp = Steifigkeit????和快速= k ????或者这些参数是什么意思?
    • vdp 是 simulink 的名称,您可以将其替换为您的名称。如果您检查最后两个命令,您会看到我正在使用参数“KT”,将其转换为字符串,并将其传递给我的 simulink。所以我可以从命令行更改我的 simulink 中的参数值。以及您可以在 gui 中使用的大多数命令行命令...
    【解决方案3】:

    我浏览了您的代码,但似乎没有可以更新常量块的函数。我创建了一个类似的 GUI 来在运行时调整输入。 试试这个方法:

    在 GUI 的 编辑框的回调中,编写这些命令

    valstr=get(hObject,'String');
    val=str2double(valstr);
    assignin('base','nameofvariableinmatlabworkspace',val);
    set_param('constantblockpath','Value','nameofvariableinmatlabworkspace');
    

    将 nameofvariableinmatlabworkspace 替换为出现在常量块中的变量的名称,该变量的值应根据在 GUI 中输入的值而改变。 将 constantblockpath 替换为该常量块的路径,例如mymodel/Constant12

    您可能还想对编辑框进行一些数据验证,然后在 matlab 工作区变量中分配它们的值。

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多