
12.3
シミュレーションのフレームワーク
■
137
この機能があることによって制御器ゲインを常に正の値におくことができます。さら
に、制御器とプラントの間には任意のアクチュエータを置くことができ、帰還路に信号
のノイズを除去するようなフィルタを挿入することもできます。このような制御ループ
の実装を、つぎのような数行のコードで実現することができます。
def closed_loop( setpoint, controller, plant, tm=5000,
inverted=False, actuator=Identity(),
returnfilter=Identity() ):
z = 0
for t in range( tm ):
r = setpoint(t)
e = r - z
if inverted == True: e = -e
u = controller.work(e)
v = actuator.work(u)
y = plant.work(v)
z = returnfilter.work(y)
print t, t*DT, r, e, u, v, y, z, plant.monitoring()
いずれのケースにおいても、プラントとセットポイントとなる関数の実装を行う必要
があります。ここまで行えば、シミュレーションはつぎのようなコードだけで実行する
ことができます。
class Plant( Component ):
...
def setpoint( t ):