このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
鉄の梁の厚さの制御
この例では、熱間鋼板圧延機の鉄の梁の水平および垂直方向の厚さを制御するために、MIMO LQG 制御器を設計する方法を示します。
圧延スタンド モデル
図 1 と図 2 は、熱間鋼板の鉄の梁を圧延シリンダーで圧縮することで成型するプロセスを示しています。
図 1: 圧延シリンダーによる梁の成型
図 2: 圧延機スタンド
目的の H 形状は、油圧アクチュエータで位置を調整する、2 組の圧延シリンダー (各軸に 1 個) で圧延加工されます。2 つのシリンダーの隙間のことを圧延ギャップといいます。目標は、x 軸および y 軸方向の厚さを指定の許容値内に収めることです。厚さの変動は主に、入力ビーム (入力外乱) の厚さと硬さ、および圧延シリンダーの偏心の変動によって生じます。
x 軸または y 軸の開ループ モデルを図 3 に示します。偏心による外乱は、バンドパス フィルター Fe
を通過するホワイト ノイズ w_e
としてモデル化されます。入力の厚さによる外乱は、ローパス フィルター Fi
を通過するホワイト ノイズ w_i
としてモデル化されます。このような外乱に対処するにはフィードバック制御が必要です。圧延ギャップ delta
はスタンドの近くでは測定できないため、フィードバックには圧延力 f
が使用されます。
図 3: 開ループ モデル
開ループ モデルの作成
x 軸に対するフィルター Fe
および Fi
の経験的モデルは次のとおりです。
アクチュエータおよびギャップから力のゲインは次のようにモデル化されます。
図 3 に示す開ループ モデルを作成するには、各ブロックを指定することから始めます。
Hx = tf(2.4e8 , [1 72 90^2] , 'inputname' , 'u_x'); Fex = tf([3e4 0] , [1 0.125 6^2] , 'inputname' , 'w_{ex}'); Fix = tf(1e4 , [1 0.05] , 'inputname' , 'w_{ix}'); gx = 1e-6;
次に、連結と append
を以下のように使用して、u,we,wi
から f1,f2
への伝達関数を作成します。数値精度を向上させるために、モデルを接続する前に状態空間表現に切り替えます。
T = append([ss(Hx) Fex],Fix);
最後に、f1,f2
から delta,f
への変換マッピングを適用します。
Px = [-gx gx;1 1] * T; Px.OutputName = {'x-gap' , 'x-force'};
正規化された外乱 w_e
および w_i
から出力への周波数応答の振幅をプロットします。
bodemag(Px(: , [2 3]),{1e-2,1e2}), grid
(周期的な) 偏心外乱に対応している 6 rad/sec のピークに注目してください。
X 軸に対する LQG 制御器の設計
まず、偏心外乱 w_e
および入力の厚さの外乱 w_i
による厚さの変動を小さくするために LQG 制御器を設計します。LQG 制御器は、アクチュエータ コマンド u = -K x_e を生成します。ここで、x_e はプラントの推定状態です。この推定は、"カルマン フィルター" と呼ばれるオブザーバーを使用して圧延力 f
の利用可能な測定値から導出されます。
図 4: LQG 制御構造
lqry
を使用して、適切な状態フィードバック ゲイン K を計算します。ゲイン K は、次の形式のコスト関数を最小化するために選択されます。
ここで、パラメーター beta
は、性能と制御操作とのトレードオフを行うために使用されます。beta
= 1e-4 に対しては、以下のように入力して最適なゲインを計算できます。
Pxdes = Px('x-gap','u_x'); % transfer u_x -> x-gap Kx = lqry(Pxdes,1,1e-4)
Kx = 0.0621 0.1315 0.0222 -0.0008 -0.0074
次に、kalman
を使用してプラントの状態のカルマン推定器を設計します。測定ノイズ共分散は 1e4 に設定して高周波数でのゲインを制限します。
Ex = kalman(Px('x-force',:),eye(2),1e4);
最後に、lqgreg
を使用して Kx
および Ex
から LQG 制御器 Regx
を組み立てます。
Regx = lqgreg(Ex,Kx); zpk(Regx)
ans = From input "x-force" to output "u_x": -0.012546 (s+10.97) (s-2.395) (s^2 + 72s + 8100) ---------------------------------------------------------- (s+207.7) (s^2 + 0.738s + 32.33) (s^2 + 310.7s + 2.536e04) Input groups: Name Channels Measurement 1 Output groups: Name Channels Controls 1 Continuous-time zero/pole/gain model.
bode(Regx),
grid, title('LQG Regulator')
LQG 制御器の評価
図 4 に示すレギュレーション ループを閉じます。
clx = feedback(Px,Regx,1,2,+1);
このコマンドでは、+1 によって、lqgreg
が正のフィードバック補償器を計算するという事実が考慮されていることに注意してください。
これで、偏心外乱と入力の厚さの外乱に対する開ループ応答と閉ループ応答を比較できるようになりました。
bodemag(Px(1,2:3),'b',clx(1,2:3),'r',{1e-1,1e2}) grid, legend('Open Loop','Closed Loop')
ボード線図は、外乱の影響が 20 dB 減衰していることを示しています。これを確認するには、以下のように LQG 制御器を使用して、および使用せずに、外乱による厚さの変動をシミュレートします。
dt = 0.01; % simulation time step t = 0:dt:30; wx = sqrt(1/dt) * randn(2,length(t)); % sampled driving noise h = lsimplot(Px(1,2:3),'b',clx(1,2:3),'r',wx,t); h.Input.Visible = 'off'; legend('Open Loop','Closed Loop')
2 軸設計
y 軸に対しても同じような LQG 制御器を設計できます。次のアクチュエータ、ゲイン、および外乱のモデルを使用します。
Hy = tf(7.8e8,[1 71 88^2],'inputname','u_y'); Fiy = tf(2e4,[1 0.05],'inputname','w_{iy}'); Fey = tf([1e5 0],[1 0.19 9.4^2],'inputn','w_{ey}'); gy = 0.5e-6;
開ループ モデルは以下のように入力することで作成できます。
Py = append([ss(Hy) Fey],Fiy); Py = [-gy gy;1 1] * Py; Py.OutputName = {'y-gap' 'y-force'};
次に、以下のように入力し、対応する LQG 制御器を計算します。
ky = lqry(Py(1,1),1,1e-4); Ey = kalman(Py(2,:),eye(2),1e4); Regy = lqgreg(Ey,ky);
x 軸および y 軸が分離していると仮定すると、これらの 2 つの制御器を個別に使用して、2 つの軸の圧延機を制御できます。
相互干渉の影響
各軸を個別に取り扱うことは、これらの軸が完全に切り離されている場合に限り有効です。残念ながら、圧延機では軸間にある程度の相互干渉が発生します。これは、x 軸上の力の増加により材料が圧縮され、y 軸上の力が相対的に減少するためです。
相互干渉の影響は、図 5 において gxy=0.1 および gyx=0.4 を使用してモデル化されています。
図 5: 相互干渉の影響
切り離されている SISO ループに対する相互干渉の影響を調べるには、図 5 の 2 軸モデルを作成し、以前設計した LQG 制御器を使用して x 軸および y 軸のループを閉じます。
gxy = 0.1; gyx = 0.4; P = append(Px,Py); % Append x- and y-axis models P = P([1 3 2 4],[1 4 2 3 5 6]); % Reorder inputs and outputs CC = [1 0 0 gyx*gx ;... % Cross-coupling matrix 0 1 gxy*gy 0 ;... 0 0 1 -gyx ;... 0 0 -gxy 1 ]; Pxy = CC * P; % Cross-coupling model Pxy.outputn = P.outputn; clxy0 = feedback(Pxy,append(Regx,Regy),1:2,3:4,+1);
次に、2 軸モデルの x 軸および y 軸方向の厚さのギャップをシミュレートします。
wy = sqrt(1/dt) * randn(2,length(t)); % y-axis disturbances wxy = [wx ; wy]; h = lsimplot(Pxy(1:2,3:6),'b',clxy0(1:2,3:6),'r',wxy,t); h.Input.Visible = 'off'; legend('Open Loop','Closed Loop')
x 軸上で厚さの変動が大きくなっていることに注目してください。各軸を個別に取り扱うことは不適切であり、相互干渉の影響に正しく対処するには、軸を連結させた MIMO 設計を使用する必要があります。
MIMO の設計
MIMO の設計は、力の測定値 fx
および fy
を両方使用してアクチュエータ コマンド u_x
および u_y
を計算する単一の制御器で構成されています。この制御アーキテクチャは図 6 に示されています。
図 6: MIMO 制御構造
2 軸モデル用の MIMO LQG 制御器は、前の SISO 設計と同じ手順を使用して設計できます。まず、状態フィードバック ゲインを計算してから、状態推定器を計算し、最後に lqgreg
を使用して 2 つのコンポーネントを組み合わせます。これらの手順を実行するには、次のコマンドを使用します。
Kxy = lqry(Pxy(1:2,1:2),eye(2),1e-4*eye(2)); Exy = kalman(Pxy(3:4,:),eye(4),1e4*eye(2)); Regxy = lqgreg(Exy,Kxy);
MIMO 設計とマルチループの SISO 設計の性能を比較するために、図 6 の MIMO ループを閉じます。
clxy = feedback(Pxy,Regxy,1:2,3:4,+1);
次に、2 軸モデルの x 軸および y 軸方向の厚さのギャップをシミュレートします。
h = lsimplot(Pxy(1:2,3:6),'b',clxy(1:2,3:6),'r',wxy,t); h.Input.Visible = 'off'; legend('Open Loop','Closed Loop')
MIMO の設計では、x 軸上の性能の損失は見られず、外乱減衰レベルは個々の軸に対して取得したレベルと一致しています。入力外乱から厚さのギャップ x-gap, y-gap
への閉ループ応答の主ゲインを比較することでも、明らかに改善が見られます。
sigma(clxy0(1:2,3:6),'b',clxy(1:2,3:6),'r',{1e-2,1e2}) grid, legend('Two SISO Loops','MIMO Loop')
MIMO 制御器はすべての方向においてゲインを低く保つ上でより優れた機能をもっていることに注目してください。
Simulink® モデル
Simulink® ユーザーは、以下のリンクをクリックして、マルチループの SISO および MIMO 制御アーキテクチャの両方を実装する、あらかじめビルドされた Simulink® モデルを開いてください。このモデルを使用すると、シミュレーション中に 2 つの設計を切り替えることで、これらの設計を比較できます。