>不感帯内(26℃~28℃)の操作量は、不感帯に入る直前の操作量を使用し続けるようなシミュレーションを行いたい
簡単な解決策としては、MPCブロックの外部にて処理を行う方法があります。
±1℃の不感帯であれば、absブロックとswitchブロックの組み合わせが便利です。下記図を参照下さい。
緑色は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);
以上