Main Content

MATLAB Function ブロックを使用した C コードの統合

Simulink® モデルに使用する C コードがある場合、MATLAB Function ブロックを使用してモデルに外部 C コードを呼び出すことができます。MATLAB Function ブロックは、MATLAB® コマンドを使用して C コードを呼び出します。外部 C コードを呼び出す MATLAB Function ブロックを含むモデルからコードを生成することもできます。

Simulink モデルからの C コードの呼び出し

Simulink モデルの外部 C コードを呼び出すには、次の手順に従います。

  1. モデルで使用する C コードを含むソース (.c) ファイルとヘッダー (.h) ファイルを特定します。

  2. MATLAB Function ブロックをモデルに挿入します。

  3. MATLAB Function ブロックで、関数 coder.ceval を使用して C コードを呼び出します。データを参照によって渡すには、coder.refcoder.rref または coder.wref を使用します。

  4. [コンフィギュレーション パラメーター] ウィンドウの [シミュレーション ターゲット] ペインで C ソースおよびヘッダー ファイルを指定します。二重引用符を使用してヘッダー ファイルを含めます (たとえば、#include "program.h")。作業フォルダー外の C ソースおよびヘッダー ファイルにアクセスする必要がある場合は、[シミュレーション ターゲット] ペインで、[インクルード ディレクトリ] テキスト ボックスにパスの一覧を作成します。

    または、関数 coder.cinclude および関数 coder.updateBuildInfo を使用して、MATLAB コード内でソース ファイルおよびヘッダー ファイルを指定します。外部コードへのインターフェイスを開発するために、coder.ExternalDependency クラスを使用できます。サポートされるワークフローを確認するには、カスタム コードのインポートを参照してください。

  5. Simulink モデルをテストし、正しく機能することを確認します。

  6. Simulink Coder™ ライセンスがある場合は、ターゲットのコードを生成できます。コード生成で同じソースおよびヘッダー ファイルを使用するには、[コンフィギュレーション パラメーター] を開き、[コード生成][カスタム コード] ペインに移動して、[シミュレーション ターゲットと同じカスタム コードの設定を使用] を有効にします。異なるソースおよびヘッダー ファイルを指定することもできます。

    シミュレーションおよびコード生成用のさまざまなコマンドを実行するコードに条件を付ける場合、関数 coder.target を使用できます。

MATLAB Function ブロックの例での coder.ceval の使用

この例では、単純な C プログラム doubleItMATLAB Function ブロックから呼び出す方法を示します。

  1. 現在の作業フォルダーにソース ファイル doubleIt.c を作成します。

    #include "doubleIt.h"
    
    double doubleIt(double u)
    {
         return(u*2.0);
    }
    
  2. 現在の作業フォルダーにヘッダー ファイル doubleIt.h を作成します。

    #ifndef MYFN
    #define MYFN
    
    double doubleIt(double u);
    
    #endif
    
  3. 新しい Simulink モデルを作成します。myModel として保存します。

  4. ライブラリ ブラウザーで、[Simulink][User-Defined Functions] ライブラリに移動し、MATLAB Function ブロックをモデルに追加します。

  5. ブロックをダブルクリックして MATLAB Function ブロック エディターを開きます。doubleIt プログラムを呼び出すコードを入力します。

    function y = callingDoubleIt(u)
    
    y = 0.0;
    y = coder.ceval("doubleIt",u);
    
  6. 3.5 の値をもつ Constant ブロックを MATLAB Function ブロックの入力端子に接続します。

  7. Display ブロックを出力端子に接続します。

    This image shows a MATLAB Function block set to output to a Display block. The MATLAB Function uses a constant block with a value of 3.5 as an input.

  8. [コンフィギュレーション パラメーター] ウィンドウを開き、[シミュレーション ターゲット] ペインに移動します。

  9. [コード情報] タブで、[インクルード ヘッダー] をクリックし、「#include "doubleIt.h"」と入力します。

    This image shows the Simulation Target pane. The text #include "doubleIt.h" has been included in the Include headers section.

  10. [ソース ファイル] タブをクリックし、「doubleIt.c」と入力します。[OK] をクリックします。

    This image shows the Simulation Target pane. The text #include doubleIt.c has been included in the Source file section.

  11. シミュレーションを実行します。値 7Display ブロックに表示されます。

インポートされたバスと列挙型定義の制御

MATLAB Function ブロックまたは Stateflow® を使用して外部 C コードを呼び出すと、モデルでインポートされたバスと列挙型の型定義を制御できます。Simulink で型定義を生成するか、ユーザーによる型定義を含むヘッダー ファイルを与えることができます。この動作は、[インポートしたバスと列挙型に対して typedef を生成する] パラメーターを切り替えて制御できます。このパラメーターを見つけるには、[コンフィギュレーション パラメーター] ウィンドウを開き、[シミュレーション ターゲット] ペインに移動して、[詳細設定パラメーター] セクションを展開します。

Simulink で自動的に型定義を生成するように構成するには、[インポートしたバスと列挙型に対して typedef を生成する] を有効にします。列挙型とバス型を定義するカスタム ヘッダー ファイルを含めるには、[インポートしたバスと列挙型に対して typedef を生成する] をオフにし、[ヘッダー ファイル] テキスト ボックスでヘッダー ファイルをリストします。

参考

| | | | | | | |

関連するトピック