ブロックを積みながら(186) Scilab/Xcos、Xcosデモに学ぶ 基本制御器?

Joseph Halfmoon

Scilab/Xcosのデモを動かしながら「制御」を学ぼうと素人老人の野望。前回はバンバン制御でした。これは素人老人にも分かりやすかったかも。ONとOFFだけだし。今回は「基本制御器」です。「基本」というからにはわかりやすいんじゃね?基本というわりには一気に高度化?素人老人はついていけませぬ。先が思いやられる?

※「ブロックを積みながら」投稿順 index はこちら

※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。

    Scilab 2024.0.0

今回練習してみるデモ

今回のデモは以下のメニューから選択する「基本制御器」です。demoMenu

実を言えば、前回がバンバン制御だったので、今回は伝達関数使ったPID制御くらいにとどめて欲しかったんであります。しかし「基本制御器」開いたらば、状態空間システム使ったフローでした。連続、線形なのでいいだろ~?3変数なので行列もちょっと大きめ。もうちっとステップ踏んでほしかったのう。

さて開いた画面が以下に。controllerFlow

まあフィードバックループがあって、くるくる回ることと末尾で誤差を計算してそれを表示しているのは素人老人にも分かります。しかし、中ほどにはSuper Blockが2つ。肝心なものはこの中に押し込められてるみたいです。

しかし、一番大事なところは Context 設定の画面でしたぜ。controllerContext

開けば、行列ABCDが並んでおります。状態空間モデルで使われる係数なんでありましょう。変数は3つあるみたいね。何だか具体的なことは分からんけど。

しかし ppol って関数でKとLという核心的なものどもを計算しているけれどもこれは何?HELPファイルから1か所引用させていただきます。

K=ppol(A,B,poles) は, A-B*Kの固有値がpolesとなるような mxn 次のゲイン行列 K を返します. (A,B) は可制御である必要があります. polesが複素数の場合,共役の組で指定する必要があります. (A,C)の出力注入ゲイン F は 以下のように得られます: Ft=ppol(A’,C’,poles); F=Ft’

この説明よんでもナンジャラホイだな~。も少し「手前」のところをGoogleの生成AI、Gemini様に教えてもらったところが以下に。poleGemini

極を制御できればいろいろ出来るんだと。

実際にContextで定義されているABCDは以下のようです(やっぱり4角に並べないと行列な感じがしない。。。)ABCD

そして ppol関数で計算したK、Lが以下に。KL

計算は出来るが、意味はサッパリだな。

フローの中の左下のSuper Blockの中身を調べてみたところが以下に。ControllerTSetting

どうもこちらは制御対象の「状態空間システム」みたいだね。

一方、右上の方のSuper Blockの中身が以下に。Controller

こちら側こそが、制御器(どうも各変数をゼロに近づけようとするのが今回のお題みたい)の実体でありそうっす。ABCDの各値の実際はこんな感じ。controllerABCD

なお乱数ジェネレータの設定が以下に。これもテク使っているぜよ。RandomGenerator

デモの実行

上記よりフローに勝手にコメント書き加えたものが以下に。controllerFlowEC

そして実行結果が以下に。controllerResult

黒、緑、赤の順に3変数(何なのか具体的なことは分からんけど、線形システムの変数ということで)デス。各変数を0に近づけようと制御器がフィードバックをかけてくるので徐々に落ち着いてくる。ホントか?

ブロックを積みながら(185) Scilab/Xcos、Xcosデモに学ぶ? バンバン制御 へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です