MATLAB Answers

simulink ifブロックのエラーについて

35 views (last 30 days)
akhiro morimot
akhiro morimot on 3 Oct 2018
Edited: michio on 28 Oct 2019
simulinkでifを用いて条件分岐させたいと思い使用しているのですがif subsystem内でintegratorブロックを使った際に以下のエラーが表示されます
untitled/If Action Subsystem2/Integrator' のサンプル時間 0 が、実行を制御する If ブロック 'untitled/If' のサンプル時間 0.1 と一致しません。
integratorブロックのプロパティを見てみてもサンプル時間を変更できる項目は見当たらず困っています

  2 Comments

Atsushi Matsumoto
Atsushi Matsumoto on 5 Oct 2018
If Action Subsystemの中にIntegratorブロックを置いただけでは同様のエラーは発生しないようです。モデルを添付するか、設定条件など詳細を書いてもらえませんか?
&nbsp
こちらのExampleと比較して、設定はどのように異なるでしょうか? https://jp.mathworks.com/help/releases/R2018b/simulink/examples/if-then-else-blocks.html
akhiro morimot
akhiro morimot on 5 Oct 2018
当初やりたかったこととしては条件に応じてアクチュエータを変更して制御を行いたかったためアクチュエータモデルをif  action subsystemの中に入れたところエラーが生じました そこで確認のため画像の様なモデルを作成したところ同じようなエラーが出ています if action subsystemの中は[in1]-[integrator]-[out1]となっています
提示していただいたサンプルも見ましたがサンプルモデルのif action subsystem内にintegratorブロックを挿入してシミュレーションを行ったところ次のエラーが発生しました "VariableStepDiscrete" のソルバーは、連続状態を含むブロック線図 'sldemo_ifsub' をシミュレーションできません。

Sign in to comment.

Answers (4)

Hiroumi Mita
Hiroumi Mita on 5 Oct 2018
状況によると、Simulinkモデルでは、VariableStepDiscreteソルバーをお使いのようです。
VariableStepDiscreteソルバーを用いた場合、
モデルでは連続の状態量(=Integrator Blockの出力)を持つことができません。
そこで、添付のようにIntegrator Blockではなく、
Discrete Time Inytegrator Block(離散系の積分)を使えば
問題は回避できると思います。

  1 Comment

Atsushi Matsumoto
Atsushi Matsumoto on 5 Oct 2018
または、コンフィギュレーションパラメータ/ソルバー設定を &nbsp
タイプ:可変ステップ &nbsp
ソルバー:自動 &nbsp
などにすればIntegratorブロックを使えるのではないでしょうか。

Sign in to comment.


akhiro morimot
akhiro morimot on 9 Oct 2018
返事が遅くなり申し訳ありません
あれからいろいろと触ってみて確認用のモデルではif action subsystem内でのintegratorブロックが使用可能なことが確認できました そこで当初の目的であった条件によるアクチュエータの変更に用いたのですが設定を変更してもintegratorブロックのエラーが生じます またDiscrete Time Integratorブロックを使った場合はそのエラーは生じなくなるのですが今度はなぜか2次遅れを実装するためのTransfer Fcnにおいて同様のエラーが生じています

  0 Comments

Sign in to comment.


Hiroumi Mita
Hiroumi Mita on 9 Oct 2018
画像を見る限りでは、以下のような状況とお見受けしました。
連続系でシステムをモデリングしたいようですね。
制御工学で言えば、連続系とはラプラス演算子sで表現した系です。 離散系とはz演算子zで表現した系です。
このどちらでモデル化するかの判断は、以下となります。 系が時間微分d/dt、時間積分、連続系の伝達関数など (A)
(A)を1つでも含むのであれば、連続系でモデル化しなくてはいけません。
連続系にするには、Atsushi Matsumotoさんのコメントのように
コンフィギュレーションの設定を
ソルバーの選択 タイプ:可変ステップ、ソルバーの選択を自動かode45
にしてください。これであれば、連続系の積分器(Integrator Block)、連続系の伝達関数(Transfer Function)が 問題なく使えます。
 

  1 Comment

akhiro morimot
akhiro morimot on 9 Oct 2018
ソルバーの設定を添付画像のように可変ステップ,自動と設定しても同様にエラーが生じてしまっているのですがこれはそもそもモデルの作り方がダメなのかそれとも他の設定が間違っているのでしょうか(現在はifではなくswitchで構築していますが処理的にifとの違いはほとんどないと思っています)
このエラーが生じるようになったのは今まで単一のアクチュエータで制御を行っていたのを状況により2個のアクチュエータを切り替えるようにしたいと思い変更しています もしこれがダメであればifもしくはswitchブロックを使用せずにシミュレーション中でアクチュエータの変更を行うといったことは可能なのでしょうか

Sign in to comment.


Hiroumi Mita
Hiroumi Mita on 9 Oct 2018
Switch Case Block が離散系(サンプル時間1)で動いているようです。
どこかで、このブロックの動作指示がサンプル時間1で起動しています。
これを解消して、連続系(サンプル時間=0)で動くように変更してください。

  0 Comments

Sign in to comment.

Sign in to answer this question.