MATLAB Answers

0

Simulinkのシ​ミュレーションを実行​中に伝達関数等のパラ​メータを計算結果をも​とに変更する方法

Asked by Yoshi Minami on 24 Jan 2018
Latest activity Commented on by Yoko
on 25 Jan 2018
現在、Simulinkで制御モデルの設計を実施しており、伝達関数(s)を利用しています。その係数を、Matlab上で定義した変数を初期値に使っています。例えば、一次遅れ系では1/(s+t)、sはラプラス変数、tは時間遅れの定数です。このtを、最初にMatlab上で定義し、Simulinkで実行しております。係数を変えなければいけないのですが、応答の値がある閾値を超えたら時定数tを変更したい場合にシミュレーション中の変更する方法があれば教えて頂けないでしょうか。一応、Workspaceに保存、読み込みでトライしたのですが、Workspace変数は、時間を含む構造体でなければ使えないようで、今回のような定数のような形には対応していないようでした。W

  0 Comments

Sign in to comment.

2 Answers

Answer by Hiroumi Mita on 24 Jan 2018
Edited by Hiroumi Mita on 24 Jan 2018
 Accepted Answer

伝達関数に限らず、以下のような用途ではsimulinkのsimstateという機能が使えます。 詳細はマニュアルをご参照ください。
#1. シミュレーションモデルのパラメータ変更後、シミュレーション継続
#2. 状態量の継続
また、伝達関数のパラメータを時変にしたいということであれば、 伝達関数を元の微分方程式に変換して、係数(パラメータ)を条件で切り替えるように モデル化する手もあります。

  2 Comments

Yoshi Minami on 25 Jan 2018
返答ありがとうございました。伝達関数に拘っておりましたが、微分方程式に戻せば直接扱えることが分かりました。参考になりました。まだ、Simstateを使ったことがないのですが、具体的にSimulinkのモデル上で利用する場合にどのようにするのでしょうか。また、特別なToolboxがなくてもSimulinkがあれば使えるということでしょうか。MathworksのFAQを見ていても実例がないので良く分かりませんでした。何か良い資料をご存じでしょうか。
Hiroumi Mita on 25 Jan 2018
simstateは、Simulinkの標準機能です。特別なoptionは必要ありません。
特別な資料は特にありませんが、documentの中の標準デモや、マニュアルを参照していただければだいじょうぶかと思います。
シミュレーション入力、ログおよび信号の表示
SimState を使用したシミュレーション状態の保存と復元
多少、Simulinkのモデルの外部からの制御(set_param,get_param)コマンドの 知識が必要になるかもしれません。
簡単なモデルで練習してから、複雑なモデルに適用するとよいかと思います。

Sign in to comment.


Yoko
Answer by Yoko
on 24 Jan 2018
Edited by 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

Yoshi Minami on 25 Jan 2018
早速、ご回答を頂きありがとうございました。このS-functionは、時間で変数が変わることは確認できました。実際に、シミュレーション中に、同じモデル内の当該S-function以外からの信号(数値)を参照して伝達関数の変数を変えることができるのでしょうか。
Yoko
on 25 Jan 2018
該当 S-Function ブロックは、伝達関数の係数をポートから入力できます。なので、S-Function 以外で計算した信号から伝達関数の係数が出るようにブロックを組み、入力ポートに入れることで、伝達関数の係数がシミュレーション中に変えられます。

Sign in to comment.