ドキュメンテーション

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

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

Simulink® は、コンポーネント間のコシミュレーションをサポートします。通常、コシミュレーション信号は、コシミュレーションにより離散化された連続的な物理量を表します。Simulink では、コシミュレーションはローカル ソルバーまたは関連するシミュレーション ツールを持つコンポーネント間で行われます。たとえば、コシミュレーションは、Simulink とサードパーティ製のツールまたはカスタム コードの間にコシミュレーション ゲートウェイとして実装される S-Function であることがあります。または、Simulink にインポートされるコシミュレーション モードの Functional Mockup Unit (FMU) であることもあります。

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' を使用して変数にマッピングされていること

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

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

  1. モデルを開きます。

    slexCoSimTripleMassSpringExample

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

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

    • 外挿法 — リストから、[線形][2 次]、または [3 次] を選択します。[線形] が既定の設定です。

    • 信号補正係数 — 係数を 0 から 1 の間で指定します。ここで、0 は、以前のステップに基づく補正を行わないことを意味します。1 が既定の設定です。信号係数は、以前のステップに基づきます。

  4. 数値補償を無効にするには、 アイコンを左クリックします。無効のとき、アイコンは赤い斜線付きで表示されます。

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

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

動作設定

自動数値補償を有効にします。端子に数値補償の対象となる信号があるかどうか Simulink が検出できるようになります。Simulink では、以下の条件がすべて満たされている場合、 バッジが示されます。

  • 信号線は、どちらも double、実数、および連続である 2 つの端子を接続している

  • 信号に離散サンプル時間がある

  • 信号の接続先は非直達である

'Auto'

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

'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')
    

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

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

参考

| | | | |

関連するトピック