古典制御理論 3

古典制御理論について考えます。
PI制御です。

PI制御

P制御とI制御を組み合わせます。
目標値に速く向かわせて、かつ定常偏差を消し去ることを狙っていると思います。

Let’s Python Simulator

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

pi_controller.py

import sys
from collections import deque
import numpy as np
import matplotlib.pyplot as pyplot

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

argv = sys.argv
kp = float( argv[1] )
ki = float( argv[2] )
TARGET = 10
COLD = 1

input = 0
## q : FIFO queue depth
# q = int( argv[3] )
q = 10000
history = deque([])

counter = 0
for i in np.arange( 1, 2000, 1 ):
    y.append(input)
    diff = TARGET - input
    ## with a heater
    if counter < q:
        history.append( diff )
    else:
        history.append( diff )
        history.popleft()
    output = (diff * kp) + (sum( history ) * ki)
    ## It's cold outside.
    input += output - COLD
    counter += 1

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('pi.png')

queueを使って、ある程度過去より前を捨てることが出来るような実装をしています。
本稿においては余計な実装です。

TARGET – inputが、よくあるr-yです。
rが目標値で、yがセンサーで読み取った現在値です。
outputが、よくあるuです。

使い方です。


> python3  pi_controller.py  0.3  0.4

Kp = 0.4 / Ki = 0.05
001

Kp = 0.5 / Ki = 0.05
002

Kp = 0.6 / Ki = 0.03
003

まとめ

定常偏差が消えた !!

何がおきているのか / What’s Going on

Let’s Python Simulator

完全にやっつけですが、超簡易シミュレーターを実装します。

pi_controller_2.py

import sys
from collections import deque
import numpy as np
import matplotlib.pyplot as pyplot

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

argv = sys.argv
kp = float( argv[1] )
ki = float( argv[2] )
TARGET = 10
COLD = 1

input = 0
## q : FIFO queue depth
# q = int( argv[3] )
q = 10000
history = deque([])

counter = 0
for i in np.arange( 1, 2000, 1 ):
    y.append(input)
    diff = TARGET - input
    ## with a heater
    if counter < q:
        history.append( diff )
    else:
        history.append( diff )
        history.popleft()
    output = (diff * kp) + (sum( history ) * ki)
    y_p.append(diff * kp)
    y_i.append(sum( history ) * ki)
    ## It's cold outside.
    input += output - COLD
    counter += 1

pyplot.plot( x,y )
pyplot.plot( x,y_p )
pyplot.plot( x,y_i )

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

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

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

pyplot.savefig('pi.png')

Kp = 0.6 / Ki = 0.03
004

橙がP制御成分で、緑がI制御成分です。これらを足しこんでいくと、外気温も影響もありますが、青の線になります。
Kpがいい感じに大きくて、Kiがいい感じに小さいと、ぴたっとな感じで制御できるでしょう。

総まとめ

定常偏差が消えた !!

広告

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

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

Twitter OAuth