2つのファイル間で、​​値(I/O)のやり​取​りは出来る?例:​A.​slxのOut​値をB​.slxのI​nに渡す​。

5 views (last 30 days)
Katotyan_pe
Katotyan_pe on 19 Oct 2020
Commented: stozaki on 26 Oct 2020
2つのモデルファイル(.slx)間での値のやり取りをするにはどの様にすれば良いでしょうか?
例えばA.slxのOut値をB.slxのInへ受け渡し実行。最後にシミュレートにかかった時間を表示。

Answers (1)

stozaki
stozaki on 19 Oct 2020
Katotyan_pe 様
ご質問の回答ですが、2通り考えてみました。
添付モデルを使って試してみてください。
解1 : モデル参照を使ってモデルAとモデルBを一つのモデルとして呼び出して実行する
モデル参照という機能・ブロックを使用します。モデル参照は複数のモデル、ここではモデルAとモデルBをモデルCから呼び出して、一つのモデルとしてシミュレーションを実行出来るようにしました。
モデル参照の境界では、「信号属性は伝播しない」等の制約があるのでドキュメントをよく読んでください。
bdclose all;
clear all;
load_system('A');
load_system('B');
load_system('C');
tic;
COut = sim('C');
toc;
out1 = COut.logsout{1}.Values.Data;
time1 = COut.logsout{1}.Values.Time;
f1 = figure;
plot(time1,out1);
解2 : コンフィグレーションパラメータの「データのインポート・アウトポート」の設定を使い実行する
モデルAとモデルBのコンフィグレーションパラメーターの「データのインポート・アウトポート」の設定をカスタマイズしてモデルAを実行した後にモデルBを実行して、結果を得ます。
bdclose all;
clear all;
load_system('A');
load_system('B');
set_param('A','ReturnWorkspaceOutputs','on');
set_param('A','ReturnWorkspaceOutputsName','myOut');
set_param('B','ReturnWorkspaceOutputsName','on');
set_param('B','ExternalInput','[myOut.yout.get(1).Values.Time, myOut.yout.get(1).Values.Data]');
tic;
myOut = sim('A');
result = sim('B');
toc;
out2 = result.logsout{1}.Values.Data;
time2 = result.logsout{1}.Values.Time;
f2 = figure;
plot(time2,out2);
各々の方法で処理が異なるため、シミュレーション時間は異なります。
stozaki
  6 Comments
Katotyan_pe
Katotyan_pe on 22 Oct 2020
Edited: Katotyan_pe on 22 Oct 2020
 データーインスペクターで基本サンプル時間通りに実行出来る事を確認しました。また、情報のオーバレイ内の機能を使う事で、視覚的に検証しやすく大変為になりました。
 先日の質問の続きですが、異なるサンプル周期でモデルをシミュレートする場合、From WorkspaceやData store Memoryで再現できますか?また、他にもっとスマートな手法など御座いましたらご教示頂きたいです。
※添付ファイル有。
stozaki
stozaki on 26 Oct 2020
添付頂いたAB2.slxを少々編集いたしました。
Rate Transitionブロックで異なるサンプル周期で駆動するようにしました。
0.01[s]のみで、2回に1回だけデータを取得するのであれば、Stateflow若しくはカウンタを作成する必要があります。
ご確認お願いいたします。
stozaki

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!