制御システムの解析と設計における対象信号のマーク
制御システムをモデル化するのが MATLAB® であれ Simulink® であれ、モデル内で対象とするポイントは "解析ポイント" を使用してマークします。解析ポイントにより、内部信号へのアクセス、開ループ解析の実行、あるいはコントローラー調整の要件の指定が可能になります。ブロック線図表現での解析ポイントは、1 つのブロックから別のブロックに流れる信号へのアクセス端子と考えることができます。Simulink では、解析ポイントは Simulink ブロックの出力端子に取り付けられます。たとえば、次のモデルの基準信号 r
および制御信号 u
は、それぞれ setpoint
ブロックと C
ブロックの出力から生じる解析ポイントです。
mdl1 = "simpleFeedback";
open_system(mdl1)
各解析ポイントは、以下の目的を 1 つ以上果たすことができます。
入力 — ある解析ポイントに、加法的入力信号がソフトウェアによって与えられます。たとえば、プラント入力における外乱をモデル化するためにこれを行います。
出力 — あるポイントにおける信号の値がソフトウェアによって測定されます。たとえば、プラント出力における外乱の影響を調べるためにこれを行います。
ループ開始点 — あるポイントにおける信号の流れの中断がソフトウェアによって挿入されます。たとえば、プラント入力における開ループ応答を調べるためにこれを行います。
これらの目的は同時に適用できます。たとえば、u
から y
への開ループ応答を計算する際は、u
をループ開始点と入力の両方として扱うことが可能です。解析ポイントを複数の目的に使用する場合、ソフトウェアは常にこれらの目的を、まず出力測定、次にループ開始点、その次に入力、という特定の順序で適用します。
解析ポイントを使用して、制御システム モデルから開ループ応答および閉ループ応答を抽出できます。たとえば、T
は上の図のモデルの閉ループ システムを表し、u
と y
は解析ポイントとしてマークされていると想定します。T
は、一般化状態空間モデルにも、Simulink モデルの slLinearizer
または slTuner
インターフェイスにもなります。プラント入力におけるステップ外乱に対する閉ループ応答は、次のコマンドを使用してプロットできます。
T = slTuner(mdl1,"C",["u" "y"]); Tuy = getIOTransfer(T,"u","y"); stepplot(Tuy)
また、解析ポイントは、systune
コマンドで制御システムを調整する際に設計要件を指定するのにも有用です。たとえば、プラント入力における外乱を 10 倍 (20 dB) 以上減衰させる要件を作成することができます。
Req = TuningGoal.Rejection("u",10);
MATLAB モデルでの解析ポイントの指定
simpleFeedback
システムの LTI モデルについて考えます。
G = tf(10,[1 3 10]); C = pid(0.2,1.5); T = feedback(G*C,1);
このモデルで、r
から y
への閉ループ応答を取得できます。しかし、プラント入力における開ループ応答の解析や、プラント入力におけるステップ外乱の抑制のシミュレーションは実行できません。そのような解析を可能にするには、プラントとコントローラーの間に AnalysisPoint
ブロックを挿入することで、信号 u
を解析ポイントとしてマークします。
AP = AnalysisPoint("u"); T = feedback(G*AP*C,1); T.OutputName = "y";
これで、プラント入力 u
が解析できるようになりました。
モデル T
の作成に際しては、解析ポイントブロック AP
を手動で作成し、これをフィードバック ループに明示的に含めました。connect コマンドを使用してモデルを組み合わせる場合は、解析ポイントが指定位置に自動的に挿入されるようソフトウェアに指示できます。詳細については、connect
を参照してください。
Simulink モデルの解析ポイントの指定
Simulink では、解析ポイントをブロック線図内で明示的にマークするか、slLinearizer
または slTuner
インターフェイスで addPoint
コマンドを使用してプログラムによりマークすることができます。
解析ポイントを Simulink モデル内に直接指定するには、まず [線形化] タブを開きます。そのためには、[アプリ] ギャラリーで [線形化マネージャー] をクリックします。
解析ポイントを指定するには、以下を行います。
モデル内で、解析ポイントとして定義する信号をクリックします。
[線形化] タブの [解析ポイントの挿入] ギャラリーで、定義する解析ポイントのタイプを選択します。解析ポイントを指定すると、ソフトウェアは線形解析ポイント タイプを示す注釈をモデルに追加します。
解析ポイントとして定義するすべての信号に対して、手順 1 と 2 を繰り返します。
次の閉ループ解析ポイント タイプから任意に選択できます。これらは特定の slLinearizer
または slTuner
インターフェイス内で等価であり、getIOTransfer
などの解析関数と TuningGoal.StepTracking
などの調整目標によって同様に処理されます。
入力の摂動
出力の測定
感度
相補感度
信号で永続的なループ開始点を導入する場合にも、次の開ループ解析ポイント タイプのいずれかを選択します。
開ループの入力
開ループの出力
ループ伝達
ループの中断
信号を開ループ ポイントとして定義すると、getIOTransfer
などの解析関数は、線形化中に常にその信号でループの中断を適用します。開ループ解析ポイントのタイプはすべて、特定の slLinearizer
または slTuner
インターフェイス内で等価です。線形化中にソフトウェアでループ開始点がどのように処理されるかの詳細については、ソフトウェアでループ開始点を処理する方法を参照してください。
モデルに slLinearizer
または slTuner
インターフェイスを作成すると、モデルで定義されているすべての解析ポイントがインターフェイスに自動的に追加されます。解析ポイントの定義方法に応じて次が行われます。
閉ループ タイプの場合、信号は解析ポイントとしてのみ追加されます。
開ループ タイプの場合、信号は解析ポイントと永続的な開始点の両方として追加されます。
解析ポイントをプログラムでマークするには、addPoint
コマンドを使用します。たとえば、scdcascade
モデルについて考えてみます。
open_system("scdcascade")
解析ポイントをマークするには、まず slTuner
インターフェイスを作成します。
ST = slTuner("scdcascade");
信号を解析ポイントとして追加するには、addPoint
コマンドを使用して信号のソース ブロックおよび端子番号を指定します。
addPoint(ST,"scdcascade/C1",1);
ソース ブロックの出力端子が 1 つの場合、端子番号を省略できます。
addPoint(ST,"scdcascade/G2");
便宜上、次を使用して解析ポイントをマークすることもできます。
信号の名前。
addPoint(ST,"y2");
ソース ブロック パスと端子番号の組み合わせ。
addPoint(ST,"scdcascade/C1/1")
ソース ブロックの絶対パスの末尾 (確定的な場合)。
addPoint(ST,"G1/1")
addOpening
コマンドを使用して addPoint
と同じ方法で信号を指定することで、slLinearizer
または slTuner
インターフェイスに永続的な開始点を追加することもできます。線形化中にソフトウェアでループ開始点がどのように処理されるかの詳細については、ソフトウェアでループ開始点を処理する方法を参照してください。
addOpening(ST,"y1m");
linio
コマンドを使用して線形化 I/O オブジェクトを作成する方法で解析ポイントを定義することもできます。
io(1) = linio("scdcascade/C1",1,"input"); io(2) = linio("scdcascade/G1",1,"output"); addPoint(ST,io);
モデル内に直接解析ポイントを定義する場合と同様に、線形化 I/O オブジェクトの指定方法に応じて次が行われます。
閉ループ タイプの場合、信号は解析ポイントとしてのみ追加されます。
開ループ タイプの場合、信号は解析ポイントと永続的な開始点の両方として追加されます。
"モデル線形化器" や "制御システム調整器" などのツールで応答 I/O を指定する場合は、必要に応じて解析ポイントが作成されます。
解析と調整での解析ポイントの参照
解析ポイントをマークすると、次の解析関数を使用して、マークした任意のポイントにおける応答を解析できるようになります。
getIOTransfer
— 指定された入出力の伝達関数getLoopTransfer
— 指定されたポイントでの加法的入力から同じポイントでの測定値への開ループ伝達関数getSensitivity
— 指定されたポイントでの感度関数getCompSensitivity
— 指定されたポイントでの相補感度関数
また、これらのポイントにおけるシステム応答を制約する調整目標を作成することもできます。これらの操作を実行するためのツールは、コマンド ラインで作成したモデルでも Simulink で作成したモデルでも同様の動作をします。
使用可能な解析ポイントを表示するには、関数 getPoints
を使用します。作成されたモデルの解析を次の方法で表示できます。
コマンド ライン:
getPoints(T)
ans = 1x1 cell array
{'u'}
Simulink で以下のようにします。
getPoints(ST)
ans = 3x1 cell
{'scdcascade/C1/1[u1]'}
{'scdcascade/G2/1[y2]'}
{'scdcascade/G1/1[y1]'}
コマンド ラインで作成された閉ループ モデルの場合、次の処理でもモデルの入力名と出力名を使用することができます。
閉ループ応答の計算。
ioSys = getIOTransfer(T,"u","y"); stepplot(ioSys)
開ループ応答の計算。
loopSys = getLoopTransfer(T,"u",-1);
bodeplot(loopSys)
systune
の調整目標の作成。
R = TuningGoal.Margins("u",10,60);
同じ方法を使用して、Simulink で作成されたモデルの解析ポイントを参照します。Simulink モデルでは便宜上、getPoints
によって返された解析ポイント名の略称が確定していれば、それを使用できます。
ioSys = getIOTransfer(ST,"u1","y1"); sensG2 = getSensitivity(ST,"G2"); R = TuningGoal.Margins("u1",10,60);
さらに、いくつかの解析ポイントがベクトル値の信号またはマルチチャネルの位置にある場合は、インデックスを使用して特定の要素またはチャネルを選択できます。たとえば、u
が閉ループ MIMO モデル内の 2 つの要素をもつベクトルであると仮定します。
G = ss([-1 0.2;0 -2],[1 0;0.3 1],eye(2),0); C = pid(0.2,0.5); AP = AnalysisPoint("u",2); T = feedback(G*AP*C,eye(2)); T.OutputName = "y";
2 番目のチャネルの開ループ応答を計算し、1 番目のチャネルに対する外乱の影響を測定することができます。
L = getLoopTransfer(T,"u(2)",-1); stepplot(getIOTransfer(T,"u(1)","y"))
調整目標を "制御システム調整器" で作成する場合は、必要に応じて解析ポイントが作成されます。