個々のブロックに対する線形化の指定
著しい不連続性をもつブロックなど、一部の Simulink® ブロックでは良好な線形化の結果が得られないことがあります。たとえば、不連続点から離れた領域でモデルが動作する場合、ブロックの線形化はゼロになります。一般的に、このようなブロックまたはサブシステムに対しては、以下のいずれかを使用してカスタム線形化を指定しなければなりません。
MATLAB® 式
コンフィギュレーション関数
これらの手法を使用して、ブロックの線形化を次のように指定できます。
D 行列形式の線形モデル。
Control System Toolbox™ モデル オブジェクト。
不確かさをもつ状態空間オブジェクトまたは不確かさをもつ実際のオブジェクト (Robust Control Toolbox™ ソフトウェアが必要)。
MATLAB の式を使用したブロック線形化の指定
以下の例では、Simulink モデルでブロックを置き換えることなくブロック、サブシステム、モデル参照の線形化を指定する方法を説明します。
[線形化マネージャー] を開きます。Simulink モデル ウィンドウの [アプリ] ギャラリーで、[線形化マネージャー] をクリックします。
モデルで、線形化を指定するブロックを選択します。
[線形化] タブで、[ブロックの線形化の指定] をクリックします。
[ブロックの線形化の指定] ダイアログ ボックスにある [次のいずれかを使用してブロックの線形化を指定] のリストで [MATLAB 式] を選択します。
テキスト フィールドで、線形化を指定する式を入力します。
たとえば、ゲインが k の積分器として線形化を指定してください (G(s) = k/s)。
状態空間形式の場合、この伝達関数は
ss(0,1,k,0)
に相当します。[OK] をクリックします。
モデルを線形化します。
関数を使用したブロック線形化の D 行列システムの指定
以下の例では、関数を使用して飽和ブロックのカスタム線形化を指定する方法を説明します。
Simulink® モデルを開きます。
mdl = 'configSatBlockFcn';
open_system(mdl)
このモデルにおいて、Saturation ブロックの上下限は –satlimit
と satlimit
です。
飽和限界を定義します。飽和限界は、Saturation ブロックの線形化関数が必要とするパラメーターです。
satlimit = 10;
モデル内で定義されている線形解析ポイントを使用して、モデルの操作点でモデルを線形化します。これにより、Saturation ブロックの線形化が返されます。
io = getlinio(mdl); linsys = linearize(mdl,io)
linsys = D = Constant Saturation 0.5 Static gain.
モデルの操作点で、Saturation ブロックへの入力は 10 です。この値は飽和の境界上にあります。この値において、Saturation ブロックは 1 に線形化されます。
入力が飽和の境界にあるときに、ブロックを 0.5 の遷移値に線形化するのが望ましいと仮定します。このように動作する Saturation ブロックの線形化を定義する関数を記述します。この例では、mySaturationLinearizationFcn.m
のコンフィギュレーション関数を使用します。
function blocklin = mySaturationLinearizationFcn(BlockData) % This function customizes the linearization of a saturation block. The % linearization of the block is as follows % BLOCKLIN = 0 when |U| > saturation limit % BLOCKLIN = 1 when |U| < saturation limit % BLOCKLIN = 0.5 when U = saturation limit % Get the saturation limit specified in the parameters of the block. satlimit = BlockData.Parameters.Value; % Compute the linearization based on the input signal level to the block. if abs(BlockData.Inputs.Values) > satlimit blocklin = 0; elseif abs(BlockData.Inputs.Values) < satlimit blocklin = 1; else blocklin = 0.5; end
このコンフィギュレーション関数は、ブロック入力信号のレベルに基づいて Saturation ブロックの線形化を定義します。飽和限界外の入力値に対して、ブロックはゼロに線形化されます。限界内では、ブロックは 1 に線形化されます。境界値では、ブロックは内挿値である 0.5 に線形化されます。関数への入力 BlockData は、この関数を使用するように Saturation ブロックの線形化を設定するときに自動的に作成される構造体です。コンフィギュレーション関数は、そのデータ構造体から飽和の上下限を読み取ります。
関数への入力 BlockData
は、ソフトウェアがブロックを線形化するたびに自動的に作成する構造体です。ブロックの線形化コンフィギュレーション関数を指定すると、ソフトウェアによって BlockData
が自動的に関数に渡されます。コンフィギュレーション関数で追加のパラメーターが必要な場合は、ブロックを構成して BlockData.Parameters
フィールドでそれらのパラメーターを設定できます。
mySaturationLinearizationFcn
を Controller ブロックの線形化として指定します。
Simulink モデル内で Saturation ブロックを右クリックし、[線形解析]、[選択したブロック線形化を指定] を選択します。
[ブロックの線形化の指定] ダイアログ ボックスで、[次のいずれかを使用してブロックの線形化を指定] を選択します。
ドロップダウン リストで
[Configuration Function]
を選択します。テキスト ボックスに関数名「
mySaturationLinearizationFcn
」を入力します。飽和限界を関数のパラメーターとして指定します。[パラメーター値] 列に変数名「
satlimit
」を入力します。[パラメーター名] 列に対応する記述名「
SaturationLimit
」を入力します。[OK] をクリックします。
あるいは、コンフィギュレーション関数をプログラムで定義することもできます。
satblk = 'configSatBlockFcn/Saturation'; set_param(satblk,'SCDEnableBlockLinearizationSpecification','on') rep = struct('Specification','mySaturationLinearizationFcn',... 'Type','Function',... 'ParameterNames','SaturationLimit',... 'ParameterValues','satlimit'); set_param(satblk,'SCDBlockLinearizationSpecification',rep)
モデルを再度線形化します。これで、Saturation ブロックのカスタムの線形化がこの線形化で使用されるようになります。
linsys_cust = linearize(mdl,io)
linsys_cust = D = Constant Saturation 0.5 Static gain.
モデルの操作点で、Saturation ブロックへの入力は 10 です。したがって、ブロックはコンフィギュレーション関数で指定された線形化の値 0.5 に線形化されます。