LoginSignup
3
10

More than 1 year has passed since last update.

Pythonで学ぶ制御工学 第5弾:ブロック線図

Last updated at Posted at 2021-02-22

#Pythonで学ぶ制御工学< ブロック線図 >

はじめに

基本的な制御工学をPythonで実装し,復習も兼ねて制御工学への理解をより深めることが目的である.
その第5弾としてブロック線図を扱う.

ブロック線図

システムを図示する際によく用いられるもの.例えば,入力が$u$で出力が$y$のシステム$S(y=Su)$をブロック線図で表すと,次のようになる.

image.png

複数のシステムをどのように組み合わせるかによりその表現は様々である.以下に代表的なものを示す.

直列結合

image.png
このとき,システム全体$S$は次のように求められる.
$S = S_1 \times S_2$

並列結合

image.png
このとき,システム全体$S$は次のように求められる.
$S = S_1 + S_2$

フィードバック結合

image.png
このとき,システム全体$S$は次のように求められる.(詳細には,誤差など各箇所で方程式を立て連立方程式を解くことで求められる.公式として覚えるものではないとは個人的に思う.)
$S = \frac{S_1}{1 + S_1 S_2}$

実装

ここでは,Pythonで全体のシステムを計算するプログラムを学ぶ.以下にソースコードとそのときの出力を示す.プログラムの説明はソースコード内にコメントしている.なお,全体のシステムの計算は数値計算であるため,ここでは適当なシステム2つに対して実行している.

ソースコード
block.py
"""
2021/02/21
@Yuya Shimizu

ブロック線図
"""
from control import tf, series, parallel, feedback

##例で使用する2つのシステムを生成
#numerator: 分子 denominator: 分母
num1 = [0, 1]
den1 = [1, 1]
S1 = tf(num1, den1)

num2 = [1, 1]
den2 = [1, 1, 1]
S2 = tf(num2, den2)


##直列結合
S = S1 * S2
print(f"<直列結合>\n(式より){S}")
S = series(S1, S2)
print(f"(series関数より){S}\n")


##並列結合
S = S1 + S2
print(f"<並列結合>\n(式より){S}")
S = parallel(S1, S2)
print(f"(parallel関数より){S}\n")


##フィードバック結合
S = S1 / (1+ S1*S2)
print(f"<並列結合>\n(式より){S}\n\t↓約分\n{S.minreal()}")    #Pythonではうまく約分されない 約分するには,minrealメソッドを使う
S = feedback(S1, S2)
#フィードバック部分にシステムがない場合は,第2引数を1として考える,もしくは第1引数のみで実行する.
#また,ポジティブフィードバックの場合は,第3引数目sign=1と指定する
print(f"(feedback関数より){S}\n")
出力
<直列結合>
(式より)
        s + 1
---------------------
s^3 + 2 s^2 + 2 s + 1

(series関数より)
        s + 1
---------------------
s^3 + 2 s^2 + 2 s + 1


<並列結合>
(式より)
   2 s^2 + 3 s + 2
---------------------
s^3 + 2 s^2 + 2 s + 1

(parallel関数より)
   2 s^2 + 3 s + 2
---------------------
s^3 + 2 s^2 + 2 s + 1


<並列結合>
(式より)
    s^3 + 2 s^2 + 2 s + 1
-----------------------------
s^4 + 3 s^3 + 5 s^2 + 5 s + 2

	↓約分

     s^2 + s + 1
---------------------
s^3 + 2 s^2 + 3 s + 2

(feedback関数より)
     s^2 + s + 1
---------------------
s^3 + 2 s^2 + 3 s + 2

controlライブラリ

今回使用した3つの結合に対する関数はcontrolライブラリの中にあり,それぞれ表にまとめておく.使用方法については,ソースコードを参照されたい.

直列結合 並列結合 フィードバック結合
series( ) parallel( ) feedback( )

感想

ブロック線図から全体のシステムをプログラムで求めることはないが,数値計算という点においては活用の機会はありそうである.次回は,状態空間モデルと伝達関数モデルの関係性についてまとめる.

参考文献

Pyhtonによる制御工学入門  南 祐樹 著  オーム社

3
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
10