Simulinkのシミュレーションを実行中に伝達関数等のパラメータを計算結果をもとに変更する方法
29 views (last 30 days)
Show older comments
現在、Simulinkで制御モデルの設計を実施しており、伝達関数(s)を利用しています。その係数を、Matlab上で定義した変数を初期値に使っています。例えば、一次遅れ系では1/(s+t)、sはラプラス変数、tは時間遅れの定数です。このtを、最初にMatlab上で定義し、Simulinkで実行しております。係数を変えなければいけないのですが、応答の値がある閾値を超えたら時定数tを変更したい場合にシミュレーション中の変更する方法があれば教えて頂けないでしょうか。一応、Workspaceに保存、読み込みでトライしたのですが、Workspace変数は、時間を含む構造体でなければ使えないようで、今回のような定数のような形には対応していないようでした。W
0 Comments
Accepted Answer
Hiroumi Mita
on 24 Jan 2018
Edited: Hiroumi Mita
on 24 Jan 2018
伝達関数に限らず、以下のような用途ではsimulinkのsimstateという機能が使えます。 詳細はマニュアルをご参照ください。
#1. シミュレーションモデルのパラメータ変更後、シミュレーション継続
#2. 状態量の継続
また、伝達関数のパラメータを時変にしたいということであれば、 伝達関数を元の微分方程式に変換して、係数(パラメータ)を条件で切り替えるように モデル化する手もあります。
2 Comments
Hiroumi Mita
on 25 Jan 2018
simstateは、Simulinkの標準機能です。特別なoptionは必要ありません。
特別な資料は特にありませんが、documentの中の標準デモや、マニュアルを参照していただければだいじょうぶかと思います。
例
シミュレーション入力、ログおよび信号の表示
SimState を使用したシミュレーション状態の保存と復元
多少、Simulinkのモデルの外部からの制御(set_param,get_param)コマンドの 知識が必要になるかもしれません。
簡単なモデルで練習してから、複雑なモデルに適用するとよいかと思います。
More Answers (1)
Yoko
on 24 Jan 2018
Edited: Yoko
on 24 Jan 2018
MATLAB の S-Functionに関するデモに、Transfer Function ブロックのパラメータを時変で与える S-function ブロックが提供されています。 なお、デモモデルはコマンドウィンドウにてsfcndemo_stvctf(離散の場合はsfcndemo_stvdtf)を実行して起動できます。
注意点として、以下の3点があります。
1) 入力信号、分子係数ベクトル、分母係数ベクトルの順番で信号をまとめて、S-Functionブロックへ入力すること
2) S-Functionに入力する分子係数ベクトルと分母係数ベクトルのベクトルの長さを一致させること(S-Function のサンプルモデルで確認してみてください)
3) S-Functionをダブルクリックして表示されるブロックパラメータの分子係数ベクトル'num'と分母係数ベクトル'den'の長さを一致させること
2 Comments
Yoko
on 25 Jan 2018
該当 S-Function ブロックは、伝達関数の係数をポートから入力できます。なので、S-Function 以外で計算した信号から伝達関数の係数が出るようにブロックを組み、入力ポートに入れることで、伝達関数の係数がシミュレーション中に変えられます。
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!