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

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

 采纳的回答

Toshinobu Shintai
Toshinobu Shintai 2019-12-20

0 个投票

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

2 个评论

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

请先登录,再进行评论。

更多回答(2 个)

TOMOHISA WAKASUGI
TOMOHISA WAKASUGI 2019-12-23

0 个投票

1 个评论

モデリング(ブロックの結線)をループ処理したいということでしたら、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);

请先登录,再进行评论。

TOMOHISA WAKASUGI
TOMOHISA WAKASUGI 2019-12-23

0 个投票

ご対応ありがとうございました。
また、何卒よろしくお願いします。

类别

帮助中心File Exchange 中查找有关 Specialized Power Systems 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!