MPCを用いたシミュ​レーションに不感帯(​デッドバンド)を設け​たい

4 views (last 30 days)
yu uchimura
yu uchimura on 12 Jul 2018
Commented: michio on 12 Feb 2019
現在、simulinkのMPCを用いて空調制御のシミュレーションを行っております。その際に、MPCの操作量に不感帯を設けつつ、MPCで最適化問題を解くようなシミュレーションを行いたいのですが、どうすれば良いでしょうか? 具体的には、目標値を27℃とし、そこに±1.0℃の不感帯(26℃~28℃)を設け、不感帯外の操作量は目標値(27℃)より計算される操作量を使用し、不感帯内(26℃~28℃)の操作量は、不感帯に入る直前の操作量を使用し続けるようなシミュレーションを行いたいのですが、そのようなシミュレーションは可能でしょうか? 現在行っている不感帯無しのシミュレーションのsimulinkでのブロック線図と、行いたい不感帯有りのシミュレーションのイメージ図を添付しておきますので、ご参考になれば幸いです。 ご多忙のところ恐縮ですが、ご回答のほど、どうぞよろしくお願いいたします。
  1 Comment
michio
michio on 12 Feb 2019
質問の投稿、ありがとうございました。
回答の内容で課題や疑問が解決されましたら、
ぜひ「この回答を採用」ボタンのクリックをお願いいたします。

Sign in to comment.

Accepted Answer

Yosuke Matsuki
Yosuke Matsuki on 10 Feb 2019
>不感帯内(26℃~28℃)の操作量は、不感帯に入る直前の操作量を使用し続けるようなシミュレーションを行いたい
簡単な解決策としては、MPCブロックの外部にて処理を行う方法があります。
±1℃の不感帯であれば、absブロックとswitchブロックの組み合わせが便利です。下記図を参照下さい。
mpc.JPG
result.JPG
緑色はMemoryブロックで、本来の意図からすると不要ですが本ブロックがない場合、シミュレーションエラーが発生します。(計算が収束しなくなるため)
switch処理にプラント出力の前回値を使用すること自体は、MPCの挙動からすると不自然ではないので上記で問題がないとは思います。
ただし、上記における「出力の前回値」は「シュミレーションの前回ステップにおける値」になるので、MPCにてサンプルされた「出力の前回値」とはサンプルタイミングがずれる可能性があります。
上記現象の対策としては、MPCおよび不感帯処理を Triggered subsystem内で実施すればよいものと思います。この場合、Memoryブロックは不要になります。なお、MPCブロックのオプションOthersのSample Timeにチェックを入れる必要がある点にご注意下さい。
また、Triggered subsystem の実施周期とMPCのサンプル時間Tsを合致させる必要があります。詳しくは、添付しますモデルファイルを参照下さい。(2018b 必要あらば別バージョンも用意します)
モデル実施前に下記コマンドを入力下さい。
Ts = 0.01;
plant = tf(1,[0.05 0.1]);
mpcobj = mpc(plant, Ts, 10, 3);
以上

More Answers (0)

Community Treasure Hunt

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

Start Hunting!