Main Content

関数を使用したブロック線形化の D 行列システムの指定

以下の例では、関数を使用して飽和ブロックのカスタム線形化を指定する方法を説明します。

Simulink モデルを開きます。

mdl = 'configSatBlockFcn';
open_system(mdl)

このモデルにおいて、Saturation ブロックの上下限は –satlimitsatlimit です。

飽和限界を定義します。飽和限界は、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 ブロックの線形化として指定します。

  1. Simulink モデル内で Saturation ブロックを右クリックし、[線形解析]、[選択したブロック線形化を指定] を選択します。

  2. [ブロックの線形化の指定] ダイアログ ボックスで、[次のいずれかを使用してブロックの線形化を指定] を選択します。

  3. ドロップダウン リストで [Configuration Function] を選択します。

  4. テキスト ボックスに関数名「mySaturationLinearizationFcn」を入力します。

  5. 飽和限界を関数のパラメーターとして指定します。[パラメーター値] 列に変数名「satlimit」を入力します。

  6. [パラメーター名] 列に対応する記述名「SaturationLimit」を入力します。

  7. [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 に線形化されます。

関連するトピック