古典制御理論 1

古典制御理論について考えます。
最初はP制御です。

偏差

古典制御理論における偏差とは、目標値との差の値のことです。

P制御

Pは、Proportional、のPです。比例制御です。

入力に対して、一定の値を掛け算して出力にします。目標値に向かわせることができます。

移動式温度調節機を考えます。
暖房を考えます。

入力を今の温度とします。
出力を電気を熱に変換したものとします。出力は熱とします。

目標値を10とします。

偏差に応じて出力が比例的に変わるとします。なにかしらの係数の値で示します。

こんな感じ

Let’s Python Simulator

超簡易シミュレーターを実装します。

p_controller.py

import sys
import numpy as np
import matplotlib.pyplot as pyplot

x = np.arange( 1, 2000, 1 )
y = []

argv = sys.argv
COEFF = float( argv[1] )
TARGET = 10
COLD = 1

input = 0

for i in np.arange( 1, 2000, 1 ):
    y.append(input)
    diff = TARGET - input
    ## with a heater
    output = diff * COEFF
    ## It's cold outside.
    input += output - COLD

pyplot.plot( x,y )

y = np.full( 1999, TARGET )
pyplot.plot( x,y, color='r' )

pyplot.xlabel("x")
pyplot.ylabel("y", rotation=0)

pyplot.xlim(0, 200)
pyplot.ylim(0, 20)

pyplot.savefig('p.png')

TARGET – inputが、よくあるr-yです。
rが目標値で、yがセンサーで読み取った現在値です。
COEFFが、よくあるKpです。
outputが、よくあるuです。(下記のような狡いことを考えているのでほぼyです。)

ある程度は温度を保つことができる部屋のようなものを想定しています。そして暖房の出力がそのまま温度上昇と同じになることを考えます。(1を入力すると、1が出力されるブロックがuの後段にある、と考える。)
暖房がKpにより暖める量outputを変えて、外気温で強制的にCOLD分だけ冷える場合を考えると上のソースコードで表すことができます。

使い方です。


> python3 p_controller.py 0.9

ざっくりの温度の変化の遷移を示します。

Kp = 0.4
001

Kp = 0.9
002

Kp = 1.2
003

下記について断言して良さそうです。

  • 係数が大きくても小さくても駄目。(COEFFの値を変える。)
  • 外部の状況が変わったら、係数の変更が必要。(COLDの値が変わったら、COEFFも変える。)
  • 係数が適切でないとP制御でもHuntingする。(当たり前。)

よくあるP制御の説明ですね。

P制御でどうしても残る偏差を定常偏差と呼びます。
この場合、COLD=1が大きすぎるのでしょう。

flyball governor

1788年、James Wattが、flyball governorを設計しました。
1868年、Maxwellが論文を書きました。定常偏差を無くすために、I制御が必要であることを示したらしいです。

まとめ

Huntingを、昔の人が日本語にしたら、ハンチングになります。
シーデー(CD)とか、デーブイデー(DVD)とか言わない時代になったのだから見直せばいいのに、と思います。

目標値を追いかける動作になってしまうだけなのに、「ハンチングが発生する」と言うと、制御理論にだけ特有の何か特別な事象が起きているように誤解してしまいます。

参考

温度制御の種類と特長

広告

IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』
さくらのレンタルサーバ
ムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
Cheesecake HOLIC
海鮮・肉グルメの高級ギフト【築地わだつみ】

コメントを残すために、Twitter OAuthを必要としています。ご了承ねがいます。
コメントは、Twitterに影響しません。

Twitter OAuth