If ブロックの条件切り替え時の値について

7 次查看(过去 30 天)
Kimiyasu Sasaki
Kimiyasu Sasaki 2019-9-26
回答: stozaki 2020-1-30
MATLAB R2016b
以下のようにモデルを組みました。
model.png
シミュレーション時間は10sです。固定ステップでソルバーは離散です。サンプリング時間は0.1sです。
flag: 0sから5.0sまで1, 5.1sから10.0sまで0です。
data: 0sのとき1でサンプリング時間ごとに1増えるデータです。ですので、10.0sのときは101です。
Ifブロックでflag = 1のとき0を出力し、flag = 0のとき'data'を出力をしたいのですが、下記のように5.0sのときflag = 1ですが、結果は(simout)は0ではなく、'data'の51出力しています。
ためしに、MATLAB Functionで下記のようにコードを書きました。
function y = fcn(flag,data)
if flag == 1
y = 0;
else
y = data;
end
end
結果は同じでした。
excel.png
Actionブロックのパラメータは下記の通りです。
blockparam.png
flag = 1のときに0を出力させるにはどのようにしたらよろしいでしょうか?
大変恐縮ですが、お分かりの方いらっしゃいましたら、ご回答よろしくお願いいたします。
  1 个评论
Atsushi Matsumoto
Atsushi Matsumoto 2019-10-1
モデルファイルも添付してくれると助かります。

请先登录,再进行评论。

回答(1 个)

stozaki
stozaki 2020-1-30
問題は解決されましたでしょうか?
添付のモデルにて、
時刻5.0[s]のとき : flag = 1, simout = 0
時刻5.1[s]のとき : flag = 0, simout = 52
となります。
条件付き実行サブシステムの出力をMergeブロックに接続する際は、モデルの振る舞いが分かりにくくなります。
Mergeブロックのガイドラインに従った設定を行うようにしてください。Sasaki様のモデルを拝見していないのでわかりませんが、ブロックの設定だけでなく、コンフィギュレーションセットの設定、入力信号のタイミング等見直してみてください。

类别

Help CenterFile Exchange 中查找有关 イベント関数 的更多信息

产品


版本

R2016b

Community Treasure Hunt

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

Start Hunting!