Main Content

ライブ エディターにおける測定されたプラント データからの PID コントローラーの調整

この例では、既知の入力信号に対して測定されたプラント応答を基に、ライブ エディター タスクを使用してプラント用の PID コントローラーを調整する方法を説明します。この例では、状態空間モデルの推定タスクを使用して、パラメトリックなプラント モデルを推定するためのコードを生成します。次に、モデル レートの変換タスクを使用して、同定された連続時間モデルを離散化します。最後に、PID コントローラーの調整タスクを使用して、設計要件を満たす閉ループ応答を達成する PID コントローラーを設計します (状態空間モデルの推定を使用するには、System Identification Toolbox™ のライセンスが必要です)。

ライブ エディター タスクを使用すると、計算結果への影響を観察しながら、パラメーターと設定を対話的に反復できます。タスクは、表示された結果を実現する MATLAB® コードを自動的に生成します。このスクリプトのライブ エディター タスクを試行するには、この例を開きます。ライブ エディター タスク一般に関する詳細については、ライブ スクリプトへの対話型タスクの追加を参照してください。

プラント データの読み込み

測定された入出力データを読み込みます。この例では、データはエンジンからチャープへの入力の応答で構成されます。入力 u は、0.04 秒ごとにサンプリングされた入力信号を含むベクトルです。出力ベクトル y には、これに対応する測定された応答が含まれます。

load IdentPlantPIDExample u y
t = 0.04*(0:length(u)-1);
plot(t,u,t,y)
legend('input u','response y')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent input u, response y.

状態空間モデルの推定

このデータから状態空間モデルを推定するには、Estimate State-Space Model (System Identification Toolbox)ライブ エディター タスクを使用します。ライブ エディターの [タスク] メニューを使用して、スクリプトにタスクを挿入できます。このスクリプトには、状態空間モデルの推定が既に挿入されています。例を開き、タスクを試行します。

推定を実行するには、タスクで、読み込んだ入力信号 u および出力信号 y を指定し、サンプル時間を 0.04 秒に設定します (この例には検証データはありません)。また、プラントの次数も指定する必要があります。通常、プラントの次数はシステムに関する知識から推測できます。一般に、適度に良好な推定適合度が得られる、最も小さいプラントの次数を使用します。状態空間モデルの推定タスクで、さまざまなプラントの次数値を試行し、出力プロットに表示される近似結果を観察します。利用可能なオプションおよびパラメーターの詳細については、Estimate State-Space Model (System Identification Toolbox)タスクのリファレンス ページを参照してください。

タスクのパラメーターを変化させると、推定の実行とプロットの作成用に、生成されたコードが自動的に更新されます (生成されたコードを確認するには、タスクの下部にある をクリックします。)

Live Task
% Create object for time series data
estimationData = iddata(y,u,0.04);

% Estimate state-space model
sys_id = ssest(estimationData,4);

% Display results
compare(estimationData,sys_id);
clear estimationData;
title('Estimation data:');

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Validation data (y1), sys\_id: 72.04%.

この例では、プラントの次数が 4 のとき、推定適合度は約 72% です。プラントの次数を大きくしてみると、その操作で適合度はあまり向上しないことがわかります。そのため、4 次のプラントを使用します。コードは、状態空間モデルの推定タスクのサマリ行に入力した変数名で、同定された状態空間モデルを生成します。この例では、sys_id を使用します。タスクの試行が完了後、同定された状態空間モデル sys_id が MATLAB® ワークスペースに入ります。それを利用して、他の LTI モデル オブジェクトを使用する場合と同様に、さらに設計および解析を行えます。たとえば、同定された状態空間モデル sys_id の周波数応答を調査します。

bode(sys_id)
grid on

Figure contains 2 axes objects. Axes object 1 with title From: u1 To: y1 contains an object of type line. This object represents sys\_id. Axes object 2 contains an object of type line. This object represents sys\_id.

モデルの離散化

このモデルの PID コントローラーを設計する前に、このモデルを離散化するとします。これを行うには、モデル レートの変換タスクを使用します。タスクで、同定されたモデル sys_id を選択します。サンプル時間を、同定されたモデル応答の共振に対応するのに十分な速度に指定します (たとえば 0.025 秒)。共振の近傍で周波数応答によく一致させるため、別の変換メソッドを選択することもできます。たとえば、[メソッド]Bilinear (Tustin) approximation に設定し、またピーク応答の位置 38.4 rad/s のプリワープ周波数を設定してみます。タスクの設定を試行しながら、ボード線図で元のモデルと変換後のモデルを比較し、一致に問題がないか確認します (パラメーターとオプションの詳細については、モデル レートの変換タスクのリファレンス ページを参照してください)。

モデル レートの変換は、タスクのサマリ行に入力した変数名で、離散化モデルを作成するコードを生成します。この例では、sys_d を使用します。

Live Task
% Convert model from continuous to discrete time
sys_d = c2d(sys_id,0.025);

% Visualize the results
bodeplot(sys_id,sys_d);
legend('Original Model','Converted Model');
grid on;

Figure contains 2 axes objects. Axes object 1 with title From: u1 To: y1 contains 2 objects of type line. These objects represent Original Model, Converted Model. Axes object 2 contains 2 objects of type line. These objects represent Original Model, Converted Model.

離散化モデルが共振による過渡応答を捉えていることを確認するため、元の同定されたモデル sys_id と離散化モデル sys_d 間でステップ応答の最初の数秒を比較します。

step(sys_id,sys_d,3)
legend('identified model sys_id','discretized model sys_d')

Figure contains an axes object. The axes object with title From: u1 To: y1 contains 2 objects of type line. These objects represent identified model sys\_id, discretized model sys\_d.

離散化されたプラント モデルのコントローラーの調整

最後に、PID コントローラーの調整タスクを使用して、離散化されたプラント sys_d の PI または PID コントローラーを調整するコードを生成します。このタスクは、次の図に示す標準的な単位フィードバック制御構成を仮定して、特定のプラント用の PID コントローラーを設計します。

タスクで、プラントとして sys_d を選択し、コントローラー タイプや応答時間などの設定をさまざまに試行します。設定を変更するとともに、タスクによって生成された閉ループ応答を観察する出力プロットを選択します。[システム応答の特性] をオンにし、立ち上がり時間やオーバーシュートなどの閉ループ ステップ応答特性の数値を表示させます。

Live Task
% Convert Response Time to Bandwidth
% Bandwidth is equivalent to 2 divided by the Response Time
wc = 2/11;

% PID tuning algorithm for linear plant model
[C,pidInfo] = pidtune(sys_d,'PIDF',wc);

% Clear Temporary Variables
clear wc

% Get desired loop response
Response = getPIDLoopResponse(C,sys_d,'closed-loop');

% Plot the result
stepplot(Response)
title('Step Plot: Reference tracking')
grid on

Figure contains an axes object. The axes object with title From: In(1) To: y1 contains an object of type line. This object represents Response.

% Display system response characteristics
disp(stepinfo(Response))
         RiseTime: 8.3250
    TransientTime: 43.2750
     SettlingTime: 43.3500
      SettlingMin: 0.9008
      SettlingMax: 1.0741
        Overshoot: 7.4059
       Undershoot: 0.5440
             Peak: 1.0741
         PeakTime: 22.3250
% Clear Temporary Variables
clear Response

この例では、閉ループ システムが 50 秒以内に整定することを目標とし、システムは 10% 以内のオーバーシュートを許容できるものとします。[コントローラー タイプ][応答時間] などのコントローラーの設定を調整し、目標を達成します。使用可能なパラメーターとオプションの詳細については、PID コントローラーの調整タスクのリファレンス ページを参照してください。

設計のさらなる解析

他のライブ エディター タスクと同様に、PID コントローラーの調整は、タスクのサマリ行に入力した変数名で調整されたコントローラーを作成するコードを生成します。この例では、C を使用します。調整されたコントローラー C は、MATLAB ワークスペース内の pid モデル オブジェクトであり、さらなる解析に使用できます。たとえば、このコントローラーを使用して、プラント sys_d の出力における外乱に対する閉ループ応答を計算します。応答とその特性を確認します。

CLdist = getPIDLoopResponse(C,sys_d,"output-disturbance");
step(CLdist)
grid on

Figure contains an axes object. The axes object with title From: In(1) To: y1 contains an object of type line. This object represents CLdist.

モデル sys_idsys_d、および C は他の任意の制御設計または解析タスクに使用できます。

参考

ライブ エディター タスク

関連するトピック