我有一个Gui和一个Simulink模型,我想在Gui的文本字段中输入一些值并按下开始按钮,然后我的simulink模型应该取这些值并运行,结果应该显示在gui statictext中
simulink:我必须不断阻挡,这个名字是卡夫和flaeche。并且块中的oarameter是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'.
有人可以帮助我
答案 0 :(得分:1)
我认为Simulink正在基础工作区中查找k
和f
,但它们仅在回调函数工作区中定义。您可能需要使用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看起来是一样的。这是你的意思吗?
答案 1 :(得分:0)
运行模拟的命令语法的一般形式是:
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);
答案 2 :(得分:0)
我查看了你的代码,但似乎没有更新常量块的函数。我创建了一个类似的GUI来在运行时调整输入。 试试这种方法:
在GUI中的
valstr=get(hObject,'String');
val=str2double(valstr);
assignin('base','nameofvariableinmatlabworkspace',val);
set_param('constantblockpath','Value','nameofvariableinmatlabworkspace');
将nameofvariableinmatlabworkspace替换为常量块内出现的变量的名称,该值的值应根据GUI中输入的值更改。 将constantblockpath替换为该常量块的路径,例如为MyModel / Constant12
在matlab工作空间变量中赋值之前,您可能还希望对编辑框进行一些数据验证。