ブロックを積みながら(151) Scilab/Xcos、PID「レギュレータ」ブロック

Joseph Halfmoon

前回に続き「連続時間パレット」内のブロックの練習です。今回は1個だけ。PIDブロックとな。泣く子も黙る(黙らないか)古典制御の華?です。PはProportional(比例)、IはIntegral(積分)、DはDifferential(微分)な制御のための「コンパイル済スーパーブロック」らしいです。これ一つあればOK?

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

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

Scilab 2024.0.0

PIDレギュレータ

皆大好きPID制御については自動制御素人の老人がとやかくいいますまい。もしあまりご存じない場合は、Googleの生成AI、Gemini様にでも問いかけてくだされ。きっと立派に教えてくれます。

さて、今回練習のブロック PID のHELPページが以下です。

PIDレギュレータ

年寄は「レギュレータ」というお言葉にしびれましたぞ。この一言で内部構造を持つらしい、ある程度複雑なこのブロックの本質が腑に落ちるというもの。まあ大抵の被制御対象に対してこのブロックを接続し、比例、積分、微分のゲインを「テキトーに」調整すれば制御可能じゃないかと。

今回はアリガチに、「比例のみ」「比例+微分」「比例+微分+積分」の3段階を踏んで、前回実験した「伝達関数ブロック」を被制御対象として制御してみようと思います。古典制御じゃなあ。

今回実験のフロー

今回実験のフローの全貌は以下です。FlowPID

最左端のステップ関数は設定値の入力です。時刻1で設定値1を入力してきます。上記のシステム全体としては、被制御対象の出力をこの設定値に合わせるように制御して再右端のグラフにその経緯を描くことになります。

設定値の次のΣは設定値と出力値の差分(誤差)を計算するためのブロックです。これで計算された誤差が今回のメインのPIDブロックに入力されます。通常PIDブロックの出力で被制御対象を駆動すれば良い筈ですが、今回は意図的なオフセットを混入させてます。これで被制御対象が定常的に「ズレてる」様子をエミュレート。こういう余計な奴もひっくるめてPID制御するっと。

以下は最初のΣのところの設定。フィードバック側をマイナスにしてます。

Feedback

つづいて肝心のPIDブロック、これは比例、積分、微分すべて係数1のとき。PIDsetting

以下の被制御対象は、前回実験に使用した伝達関数ブロックのコピー。underControl

制御の様子
    • まずは比例制御(P)のみでどうよ。こんな感じ。

GraphKp1振動しておるなあ。。。

    • つづいて比例制御(P)+微分制御(D)

GraphKp1Kd1振動がとまったよ。ある程度時間がたったら一定値になっている。でも、値が1じゃない、かなりオフセットが載っているのは「意図的」な奴のせい。

    • 比例制御(P)+微分制御(D)+ 積分制御(I)

真打登場ということでPID制御です。最初ちょっとオーバーシュートした後は落ち着くべきところに落ち着いてる感じ。GraphKp1Kd1Ki1

PID制御しているみたい。「現物合わせ」だけれども。

ブロックを積みながら(150) Scilab/Xcos、連続時間パレットその2 へ戻る

ブロックを積みながら(152) Scilab/Xcos、離散時間パレットその1 へ進む