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

8 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
stozaki
stozaki on 26 Oct 2020
添付頂いたAB2.slxを少々編集いたしました。
Rate Transitionブロックで異なるサンプル周期で駆動するようにしました。
0.01[s]のみで、2回に1回だけデータを取得するのであれば、Stateflow若しくはカウンタを作成する必要があります。
ご確認お願いいたします。
stozaki

Sign in to comment.

Categories

Find more on プログラムによるモデル編集 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!