MATLAB Answers

複数のサンプル時間によるエラー

2 views (last 30 days)
SimulinkのFor iteratorサブシステム内にSimscapeモデルを記載し実行すると、
「”サブシステム名”/solver Configuration/EVAL_KEY/OUTPUT_1_1には複数うのサンプル時間があります。
一定(inf)か継承されたサンプル時間(-1)のみiteratorのサブシステムで許可されます」とブロックエラーが出ます。
接続端子はすべて継承(-1)であることを確認しましたが問題は解決しません。
どうすれば、エラーを回避することができるでしょうか?

  0 Comments

Sign in to comment.

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 20 Dec 2019
Simscapeのブロックそのものが継承(-1)に対応していないため、エラーになります。
そもそもSimscapeの物理計算をForループさせる必要性がないと思うのですが、どういう目的で行っていますでしょうか。

  2 Comments

TOMOHISA WAKASUGI
TOMOHISA WAKASUGI on 23 Dec 2019
ご回答ありがとうございます。
Mathworks社の事例でthermal conductiveというのがあると思うのですが、
分割要素を連結するところでForループを回すことはできないかと考えたからです。
やはり、事例同様分割個数分を連結しなくてはいけないのでしょうか?
Toshinobu Shintai
Toshinobu Shintai on 23 Dec 2019
おっしゃっている事例が見つけられませんでした。どの事例でしょうか。良ければリンクを貼ってもらえますか。

Sign in to comment.

More Answers (2)

TOMOHISA WAKASUGI
TOMOHISA WAKASUGI on 23 Dec 2019

  1 Comment

Toshinobu Shintai
Toshinobu Shintai on 23 Dec 2019
モデリング(ブロックの結線)をループ処理したいということでしたら、Simulinkのapiを駆使しなければなりません。
試しに作ってみました。リンク先のSegments Setの中身を自動で作るスクリプトです。ele_numを変更することで連結個数を変更できます。バージョンはR2019bで作成しました。
ブロックのパラメータのセットやサブシステム化も同様にapiを使えばできると思います。
%% コマンドで任意の連結数のSegmented Rodを作ります
%% パラメータ
ele_num = 5;
model_name = 'temp_model';
Conduction_name = 'Conduction';
Thermal_Mass_name = 'Thermal_Mass';
Convection_name = 'Convection_Cyl';
ConductiveHeatTransfer_address = 'fl_lib/Thermal/Thermal Elements/Conductive Heat Transfer';
Thermal_Mass_address = 'fl_lib/Thermal/Thermal Elements/Thermal Mass';
ConvectiveHeatTransfer_address = 'fl_lib/Thermal/Thermal Elements/Convective Heat Transfer';
Connection_Port_address = 'nesl_utility/Connection Port';
%% 新規モデル
new_system_handle = new_system;
open_system(new_system_handle);
save_system(new_system_handle, model_name);
%%
add_block(ConductiveHeatTransfer_address, [model_name, '/', Conduction_name, '0']);
add_block(Thermal_Mass_address, [model_name, '/', Thermal_Mass_name]);
h_C = get_param([model_name, '/', Conduction_name, '0'], 'PortHandles');
h_T = get_param([model_name, '/', Thermal_Mass_name], 'PortHandles');
add_line(model_name, h_C.RConn, h_T.LConn);
add_block(ConvectiveHeatTransfer_address, [model_name, '/', Convection_name, '0']);
h_C = get_param([model_name, '/', Conduction_name, '0'], 'PortHandles');
h_V = get_param([model_name, '/', Convection_name, '0'], 'PortHandles');
add_line(model_name, h_C.RConn, h_V.LConn);
%%
for i = 1:ele_num
add_block(ConductiveHeatTransfer_address, [model_name, '/', [Conduction_name, num2str(2 * i - 1)]]);
h_C = get_param([model_name, '/', Conduction_name, num2str(2 * i - 2)], 'PortHandles');
h_C1 = get_param([model_name, '/', Conduction_name, num2str(2 * i - 1)], 'PortHandles');
add_line(model_name, h_C.RConn, h_C1.LConn);
add_block(ConductiveHeatTransfer_address, [model_name, '/', [Conduction_name, num2str(2 * i)]]);
h_C2 = get_param([model_name, '/', Conduction_name, num2str(2 * i)], 'PortHandles');
add_line(model_name, h_C1.RConn, h_C2.LConn);
add_block(Thermal_Mass_address, [model_name, '/', Thermal_Mass_name, num2str(i)]);
h_T = get_param([model_name, '/', Thermal_Mass_name, num2str(i)], 'PortHandles');
add_line(model_name, h_C2.RConn, h_T.LConn);
add_block(ConvectiveHeatTransfer_address, [model_name, '/', Convection_name, num2str(i)]);
h_V = get_param([model_name, '/', Convection_name, num2str(i)], 'PortHandles');
add_line(model_name, h_C2.RConn, h_V.LConn);
end
%%
for i = 1:ele_num
h_V = get_param([model_name, '/', Convection_name, num2str(i - 1)], 'PortHandles');
h_V1 = get_param([model_name, '/', Convection_name, num2str(i)], 'PortHandles');
add_line(model_name, h_V.RConn, h_V1.RConn);
end
add_block(ConductiveHeatTransfer_address, [model_name, '/', [Conduction_name, num2str(2 * ele_num + 1)]]);
h_C1 = get_param([model_name, '/', Conduction_name, num2str(2 * ele_num)], 'PortHandles');
h_C2 = get_param([model_name, '/', Conduction_name, num2str(2 * ele_num + 1)], 'PortHandles');
add_line(model_name, h_C1.RConn, h_C2.LConn);
%%
add_block(Connection_Port_address, [model_name, '/', 'A']);
h_N = get_param([model_name, '/', 'A'], 'PortHandles');
h_C = get_param([model_name, '/', Conduction_name, '0'], 'PortHandles');
add_line(model_name, h_N.RConn, h_C.LConn);
add_block(Connection_Port_address, [model_name, '/', 'B']);
h_N = get_param([model_name, '/', 'B'], 'PortHandles');
h_C = get_param([model_name, '/', Conduction_name, num2str(2 * ele_num + 1)], 'PortHandles');
add_line(model_name, h_N.RConn, h_C.RConn);
add_block(Connection_Port_address, [model_name, '/', 'Cyl']);
h_N = get_param([model_name, '/', 'Cyl'], 'PortHandles');
h_C = get_param([model_name, '/', Convection_name, '0'], 'PortHandles');
add_line(model_name, h_N.RConn, h_C.RConn);
%%
Simulink.BlockDiagram.arrangeSystem(model_name);

Sign in to comment.


TOMOHISA WAKASUGI
TOMOHISA WAKASUGI on 23 Dec 2019
ご対応ありがとうございました。
また、何卒よろしくお願いします。

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products