首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用图形用户界面matlab运行simulink

用图形用户界面matlab运行simulink
EN

Stack Overflow用户
提问于 2013-05-12 21:43:28
回答 3查看 3.3K关注 0票数 0

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

对于simulink:我必须常量块,它的名字是kraft和flaeche。分块的划桨是k和f。

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

代码语言:javascript
复制
      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)

但是我得到了这些错误:

代码语言:javascript
复制
     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'.

有人能帮帮我吗?

EN

回答 3

Stack Overflow用户

发布于 2013-05-13 16:39:57

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

代码语言:javascript
复制
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是相同的。这是你想要的样子吗?

票数 1
EN

Stack Overflow用户

发布于 2013-05-12 23:57:44

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

代码语言:javascript
复制
SimOut = sim('model', Parameters)

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

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

代码语言:javascript
复制
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)

所以你只需要替换textbox中的值,就是这样…

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

代码语言:javascript
复制
Control_Gains(1,1)=str2double(get_param([ModelName,'/PID1/PIDx'],'P'));

或者:

代码语言:javascript
复制
NewString               =   ['[',(num2str(KT)),']'];
set_param([ModelName,'/System/Model/Gain'],'Gain',NewString);
票数 0
EN

Stack Overflow用户

发布于 2016-07-13 20:50:10

我看了你的代码,但似乎没有更新常量块的函数。我已经创建了一个类似的GUI来在运行时调优输入。尝试以下方法:

在GUI的编辑框的回调中,编写以下命令

代码语言:javascript
复制
valstr=get(hObject,'String');
val=str2double(valstr);
assignin('base','nameofvariableinmatlabworkspace',val);
set_param('constantblockpath','Value','nameofvariableinmatlabworkspace');

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

在将编辑框的值赋给matlab工作区变量之前,您可能还需要对编辑框执行一些数据验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16508006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档