ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

コシミュレーションの実行と数値補償

Simulink® は、ローカル ソルバーをもつコンポーネント間のコシミュレーションをサポートするか、外部シミュレーション ツールを含めます。たとえば、コシミュレーションには、Simulink とサードパーティ製のツールまたはカスタム コードの間にコシミュレーション ゲートウェイとして実装される S-Function を含めることができます。コシミュレーション コンポーネントは Simulink にインポートされるコシミュレーション モードの Functional Mockup Unit (FMU) であることがあります。

実行タイミング

Simulink シミュレーションでは、ソルバー ステップ サイズは、各周期的な離散型ブロックのサンプル時間の整数の約数でなければなりません。つまり、コシミュレーション コンポーネントがその独自のサンプル時間を定義する場合、Simulink はそれらのタイム ステップでコンポーネントと通信しなければなりません。コシミュレーションには、タイム ステップが内部的に決定され、Simulink に既知ではないコンポーネントを含めることができます。Simulink で利用可能な情報は、FMU ブロックの通信ステップ サイズ パラメーターまたは S-Function 実装のサンプル時間の定義を介するブロック サンプル時間のみです。ブロックのサンプル時間は、Simulink がコシミュレーション コンポーネントと通信しなければならないタイム ステップを決定します。ソルバー ステップ サイズが自動ではない場合、通信ステップ サイズはソルバー ステップ サイズの整数倍でなければなりません。

コシミュレーション コンポーネントがローカル ソルバーを内部的に使用する場合、ブロックの通信ステップ サイズを決定する際に、このローカル ソルバーも考慮される必要があります。ローカル ソルバーのステップ サイズは Simulink に公開されず、通信ステップ サイズを正しく設定するには実装の知識が必要です。非互換性の可能性がある場合のコシミュレーションの動作も、この内部ソルバーの実装により異なります。

数値補償

通常、コシミュレーション信号は、コシミュレーションにより離散化された連続的な物理量を表します。C MEX S-Function やコシミュレーション FMU ブロックなどのコシミュレーション コンポーネント間のデータ交換では、信号遅延による数値誤差が発生することがあります。数値補償を使用して、独自のソルバーを使用するコンポーネントを伴うシミュレーションの数値的動作を改善します。モデル アドバイザーには、コシミュレーション コンポーネントを検出し、数値補償を指示するチェックが含まれます。

数値補償の前提条件

Simulink は、コシミュレーション コンポーネント間のコシミュレーション信号について、数値補償を自動的に実行します。Simulink は、宛先ブロックの入力時に数値補償を実行します。信号は、そのソース端子と接続先端子が以下の条件を満たす場合、数値補償の条件を自動的に満たします。

  • 信号のソース端子は以下の要件を満たしていなければなりません。

    • S-Function

      • 出力端子のデータ型が double であること

      • 出力端子のサンプル時間が周期的かつ離散であること

      • 出力端子の実数/複素数が実数であること

      • 端子に対して ssSetOutputPortIsContinuousQuantity()true に設定されていること

    • FMU

      • 出力端子のデータ型が double であること

      • FMU がコシミュレーション モードであること

      • ブロックのサンプル時間が周期的かつ離散であること

      • 出力端子が modelDescription.xmlvariability='continuous' を使用して変数にマッピングされていること

  • 信号の接続先端子は以下の要件を満たしていなければなりません。

    • S-Function

      • 入力端子のデータ型が double であること

      • 入力端子のサンプル時間が周期的かつ離散であること

      • 入力端子の実数/複素数が実数であること

      • この端子に対して ssSetInputPortIsContinuousQuantity()true に設定されていること

      • この端子に対して ssSetInputPortDirectFeedThrough()false に設定されていること

    • FMU

      • 入力端子のデータ型が double であること

      • FMU がコシミュレーション モードであること

      • ブロックのサンプル時間が周期的かつ離散であること

      • 入力端子が modelDescription.xmlvariability='continuous' を使用して変数にマッピングされていること

数値補償の対象とするコシミュレーション信号を特定する例については、slexCoSimTripleMassSpringExample モデルを参照してください。

ダイアログを使用した数値補償オプションの管理

Simulink で数値補償が可能な信号が検出されると、対応する入力端子が アイコンでマークされます。

以下のモデルには、数値補償が可能なコシミュレーション信号が含まれます。

  1. モデルを開きます。

    slexCoSimTripleMassSpringExample

  2. ブロック線図を更新します。Simulink で数値補償が可能な信号が検出され、対応する端子が アイコンでマークされます。

  3. 補償精度に関するパラメーターを調整します。アイコンを右クリックして [コシミュレーション信号補償の構成] を選択し、次の計算パラメーターを調整します。

    • 外挿法 — これは、ソルバーがまだ計算していないデータ点の計算に使用される方法です。数値補償がない場合、信号の前の値が使用されます。リストから以下を選択します。

      • [線形] は既定の設定です。前の 2 つのデータ点を使用して、未計算の値を線形に推定します。

      • [2 次] は、前の 3 つの点を使用して、データを 2 次多項式に近似します。

      • [3 次] は、前の 4 つの点を使用して、データを 3 次多項式に近似します。

      シミュレーションの開始時に、十分なデータ点が利用できない場合、低い次元の方法が自動的に使用されます。高次元の外挿法では、より多くのデータ点を使用して次の点をより詳細に予測しますが、数値的不安定性が発生しやすくもなります。最適な外挿法は、信号の特性によって異なります。

    • 信号補正係数 — このパラメーターを使用して、前の点からの推定誤差に基づいて外挿を補正します。係数を 0 から 1 の間で指定します。ここで、0 は、以前のステップに基づく補正を行わないことを意味します。既定の設定は 1 です。信号補正係数が大きくなればなるほど、推定誤差の外挿に対する影響は大きくなります。これによって、フィルター処理の効果が実質的に生み出されます。

    数値補償の効果が低い場合、 アイコンを左クリックしてこれを無効にします。無効のとき、アイコンは赤い斜線付きで表示されます。

コマンド ラインからの数値補償オプションの管理

自動補償ができない場合は、CoSimSignalCompensationMode プロパティを使用して数値補償を手動で有効にできます。

CoSimSignalCompensationMode プロパティには以下の値があります。

アイコン設定動作

'Auto'

自動数値補償を有効にします。端子に数値補償の対象となる信号があるかどうか Simulink が検出できるようになります。

'Auto_Off'

自動数値補償を無効にします。アイコンは赤い斜線付きで表示されます。

'Always'

信号が数値補償の対象でなかったとしても、端子を強制的に数値補償対応とみなします。この設定にすると補償を連続として宣言せずに追加できます。

'Always_Off'

端子への数値補償対応の強制を無効にします。

たとえば、前のモデルからの 1 番目の入力端子について数値補償を無効にするには、以下のようにします。

  1. 数値補償の対象として選択する端子が含まれるブロックを選択します。たとえば、現在選択されているブロック gcb のすべての端子ハンドルを取得します。

    p = get_param(gcb, 'PortHandles')

    この関数は、現在選択されているブロックのすべての端子を返します。以下に例を示します。

    p = 
    
      struct with fields:
    
          Inport: [22.0001 20.0001]
         Outport: [23.0001 25.0001]
          Enable: []
         Trigger: []
           State: []
           LConn: []
           RConn: []
        Ifaction: []
           Reset: []
  2. 1 番目の端子について数値補償を無効にするには、以下のようにします。

    set_param(p.Inport(1), 'CoSimSignalCompensationMode', 'Auto_Off')
    

    関連する端子が赤い斜線付きで表示されます。

信号補償のパラメーターをコマンド ラインから設定することもできます。最初の手順で、再度端子ハンドルを取得します。

p = get_param(block, 'PortHandles')

CoSimSignalCompensationConfig パラメーターを次の形式で使用して、補償パラメーターを設定します。

set_param(p.Inport,'CoSimSignalCompensationConfig','{<CompensationParam>:<ParamValue>}' )

補償パラメーターの名前と可能な値を次の表に示します。

補償パラメーターパラメーター名パラメーター値
ExtrapolationMethod外挿法'LinearExtrapolation''QuadraticExtrapolation'、または 'CubicExtrapolation'
CompensationCoefficient補正係数01 の間のスカラー

たとえば、次の端子の外挿方法を設定します。

set_param( p.Inport, 'CoSimSignalCompensationConfig', '{"ExtrapolationMethod":"LinearExtrapolation"}' ))

外挿方法と補償係数の両方を設定します。

set_param(p.Inport,'CoSimSignalCompensationConfig', '{"ExtrapolationMethod":"QuadraticExtrapolation", "CompensationCoefficient":"0.7"}' ))

参考

| | | | |

関連するトピック