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

조회 수: 10 (최근 30일)
Katotyan_pe
Katotyan_pe 2020년 10월 19일
댓글: stozaki 2020년 10월 26일
2つのモデルファイル(.slx)間での値のやり取りをするにはどの様にすれば良いでしょうか?
例えばA.slxのOut値をB.slxのInへ受け渡し実行。最後にシミュレートにかかった時間を表示。

답변 (1개)

stozaki
stozaki 2020년 10월 19일
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
Katotyan_pe
Katotyan_pe 2020년 10월 22일
편집: Katotyan_pe 2020년 10월 22일
 データーインスペクターで基本サンプル時間通りに実行出来る事を確認しました。また、情報のオーバレイ内の機能を使う事で、視覚的に検証しやすく大変為になりました。
 先日の質問の続きですが、異なるサンプル周期でモデルをシミュレートする場合、From WorkspaceやData store Memoryで再現できますか?また、他にもっとスマートな手法など御座いましたらご教示頂きたいです。
※添付ファイル有。
stozaki
stozaki 2020년 10월 26일
添付頂いたAB2.slxを少々編集いたしました。
Rate Transitionブロックで異なるサンプル周期で駆動するようにしました。
0.01[s]のみで、2回に1回だけデータを取得するのであれば、Stateflow若しくはカウンタを作成する必要があります。
ご確認お願いいたします。
stozaki

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 モデル コンポーネントのスケジュール에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!