simulink側か​らモデルワークスペー​ス上に変数を作成する​簡単な方法が知りたい

5 ビュー (過去 30 日間)
yuuya suzuki
yuuya suzuki 2019 年 9 月 11 日
回答済み: Toshinobu Shintai 2019 年 9 月 17 日
MATLAB側からsimulinkで計算した結果をgetVariablePartを使ってロードしたいのですが
そもそもsimulink側で計算結果をモデルワークスペースに書き込む方法が分かりません。
どうすればいいのでしょうか?
または別の方法がありますか?
  2 件のコメント
Toshinobu Shintai
Toshinobu Shintai 2019 年 9 月 14 日
MATLAB側からSimulinkの計算結果を読みたいということでしょうか。
作成したSimulinkモデルのデフォルト設定のままでOutportブロックを信号線に接続することで、ベースワークスペースに結果が格納されるはずです。
それを読むという方法はだめでしょうか。
yuuya suzuki
yuuya suzuki 2019 年 9 月 16 日
編集済み: yuuya suzuki 2019 年 9 月 16 日
質問内容に抜けている部分がございました。
デフォルト状態でsim関数を使ってsimulinkを呼び出すと50回実行されますよね?
その1回毎の出力を取りたいのですが、OutPutやToWorkspaceですと50回ステップされた後にしか出力されないので困っています。
実際に使用する際には50回ではなく、MATLABから指令を送るまで半永久的に実行するのでどうしても1回ずつの結果がほしいのです。
なので実際getVariablePartを必ず使う必要はありません。

サインインしてコメントする。

回答 (1 件)

Toshinobu Shintai
Toshinobu Shintai 2019 年 9 月 17 日
以下のWebページにあるset_paramコマンドを用いると、おっしゃっていることが可能になります。コマンドの使い方とSimulinkとのデータのやり取りについても書かれていますのでご確認ください。
ただし、1ステップごとに実行を止めるやり方については記載されていませんので、私の方でサンプルを作成しました。
添付のzipを解凍し、MATLAB R2019aで作業ディレクトリを指定してください。
次に「ctrl_model.m」内の処理をセクションごとに上から実行してください。参考までにコマンドを以下に記載します。
%%
model_name = 'my_model';
%% モデルを開く
open_system(model_name);
%% Simulinkのシミュレーションを開始する
set_param(model_name, 'SimulationCommand', 'start');
pause(2); %念のため2秒待機
%% Simulinkのパラメータを更新する
LastSimTime = get_param(bdroot, 'SimulationTime');
set_param(model_name, 'SimulationCommand', 'update');
pause(2); %念のため2秒待機
%% 次のステップに進める
set_param(model_name, 'SimulationCommand', 'continue');
pause(2); %念のため2秒待機
モデル内では、一定の処理時間が過ぎたら一時停止するようにAssertionが組み込まれています。今回は1計算ステップ分に指定しています。
上記の「%% パラメータを更新する」と「%% 次のステップに進める」を繰り返し行うことでステップごとに実行させることができます。

カテゴリ

Help Center および File Exchangeイベント関数 についてさらに検索

製品


リリース

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!