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

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

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
ご対応ありがとうございました。
また、何卒よろしくお願いします。

Products

Community Treasure Hunt

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

Start Hunting!