0

私はGuiとSimulinkモデルを持っています.Guiのテキストフィールドに値を入力してスタートボタンを押したいと思います.この後、simulinkモデルはこれらの値を取得して実行し、結果はGUIの静的テキストに表示されます.

simulinkへ:私は一定のブロックを持っている必要があります.thes name ist kraft and 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'.

誰か助けてくれませんか

4

3 に答える 3

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 が同じように見えます。これがあなたが意図した方法ですか?

于 2013-05-13T08:39:56.673 に答える
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 ワークスペース変数に割り当てる前に、エディット ボックスのデータ検証も行う必要がある場合があります。

于 2016-07-13T12:50:10.387 に答える
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);
于 2013-05-12T15:57:43.540 に答える