fc2ブログ

制御工学その16

4.4 MATLAB/Simulinkによる演習



今回もMATLABは手に入らなかったのでscilabが頑張る。もう半分来てしまった。

4.4.1 ブロック線図の結合と目標値応答、入力外乱応答

MATLABだと便利な関数feedbackがあるらしいが以下略
scilabにもある「/.」演算子とか*とか+で頑張る。

直列結合は*で

並列結合は+-で

フィードバック結合は/.で計算することができる。


-->sysP1 = 1/(s^2+3*s+2)
sysP1 =

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

-->sysP2 = 1/(10*s+1)
sysP2 =

1
-------
1 + 10s



という二つの伝達関数に対し、それぞれの結合を行う。

上から直列結合、並列結合(+)、並列結合(-)



-->sysP1*sysP2
ans =

1
-------------------
2 3
2 + 23s + 31s + 10s

-->sysP1+sysP2
ans =

2
3 + 13s + s
-------------------
2 3
2 + 23s + 31s + 10s

-->sysP1-sysP2
ans =

2
- 1 + 7s - s
------------------
2 3
2 + 23s + 31s + 10s



フィードバック結合


-->fb = sysP1/.sysP2
fb =

1 + 10s
-------------------
2 3
3 + 23s + 31s + 10s


それぞれの内部の入力はG_yrやG_ydはMALABならfeedback関数でできるらしいがscilabはよくわからん。
ので直接計算

制御対象、コントローラの伝達関数はそれぞれ


-->sysp = 5/(s^2+2*s+2)
sysp =

5
---------
2
2 + 2s + s

-->sysc = 2
sysc =

2.



ここへ内部伝達関数を求める



-->sysGyr = sysp*sysc/(1+sysp*sysc)
sysGyr =

10
----------
2
12 + 2s + s


-->sysGyd = sysp/(1+sysp*sysc)
sysGyd =

5
-----------
2
12 + 2s + s

-->sysGer = 1 - sysGyr
sysGer =

2
2 + 2s + s
----------
2
12 + 2s + s

-->sysGed = -sysGyd
sysGed =

- 5
-----------
2
12 + 2s + s



なので、目標値をr(t)=ステップ入力としたときの目標値応答を書くには

plot2d(t,csim('step',t,sysGyr))

んで



入力外乱応答の場合は

plot2d(t,csim('step',t,sysGyd))

んで



4.4.2 simulinkを使ったブロック線図の結合

複雑なブロック線図はSimulinkを使うといいらしい。もちろん無いのでXcosががんばる。

ブロック線図を作ったまではいいけど、xcosでその先のブロック図から式を導出する方法がわからなかったので断念。
ScilabはMATLABと同じくらいできるってのは、本当にわかってる奴の話なんだな。




4.4.3 Simulinkを使ったシミュレーション

Simulinkだとわざわざ時間の計測を行う変数やブロック作ってたけど、Xcosはそもそもシミュレートに時間軸必須なので
自動的に時間も記録される。

今回の図をXcosで作ると




ここで、右側のTo Workspaceが出力y(t)、上が偏差e(t)
左のstep入力が目標値r(t)、真ん中が入力外乱d(t)である。

目標値応答を求めるなら、r(t)=1,d(t)=0

でシミュレートした後プロット

plot(y.time,y.values)

ここで、Xcosでは変数yにすでに時間が含まれている。

結果




入力外乱応答ならr(t)=0,d(t)=1

結果




問題4.9

コントローラ(ゲイン)を

C(s) = (2s+1.25)/s

としてシミュレートしてみる。

ブロック図は



目標値応答は




入力外乱応答は




で、入力外乱応答が0に収束してて非常によさそうな結果になった。

4.4.4 根軌跡

MATLABでは以下略

Scilabではevansという関数

つまり



-->sysPCd = 1/((s+1)*(s+4)*(s+7))
sysPCd =

1
-----------------
2 3
28 + 39s + 12s + s

-->evans(sysPCd)



結果




いまいちMATLABのサンプルと合わないが、観察すると同じ感じではある。

問題4.10

めんどいのでひとつだけ

P(s)C'(s) = (s+1)/(s+2)(s^2+2s+2)

結果




軸のスケールが違うせいで模範解答に見えないけど多分合ってる。


まとめ

Scilabなかなかやる。

スポンサーサイト



コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR