Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデルおよび生成コードからの外部 C コードの呼び出し

レガシ コード ツールを使用して、既存の外部関数をシミュレーションまたは生成されたコードから呼び出します。

以下の方法について説明します。

  • Simulink® モデル シミュレーションの一部である C 関数を評価する。

  • C 関数をモデルから生成したコードから呼び出す。

モデル例の詳細については、C コード生成のためのコントロール アルゴリズム モデルの準備を参照してください。

置換プロセス

モデル例 rtwdemo_PCG_Eval_P4 を開きます。

Simulink® モデルだけでなく、多くのモデルベース デザイン アプリケーションの設計に含まれる既存の C 関数のセットは、テストおよび検証が行われています。これらの関数を Simulink® モデルと統合し、関数を使用するコードを生成できます。

この例では、既存の C 関数を呼び出すカスタム Simulink® ブロックを作成します。その後、ブロックをモデルに追加し、Simulink® のモデル シミュレーションを介してシステム全体をテストをすることができます。

モデル例では、PI コントローラーの Lookup ブロック (ルックアップ テーブル) を既存の C 関数への呼び出しと置き換えることができます。この関数はファイル SimpleTable.cSimpleTable.h で定義されています。

SimpleTable.c を表示します。

SimpleTable.h を表示します。

C 関数を呼び出すブロックの作成

既存の C 関数の呼び出しを指定するには、S-Function ブロックを使用します。レガシ コード ツールを使用すると、S-Function ブロックの作成を自動化することができます。このツールを使用して、最初に既存の C 関数とのインターフェイスを指定します。そして、そのインターフェイスを使用して S-Function ブロックを作成します。

レガシ コード ツールを使用して SimpleTable.c 内の既存の C 関数用の S-Function ブロックを作成します。

1. 関数インターフェイスの定義を含む構造体を作成します。

def = legacy_code('initialize')

構造体 def を使用して既存の C コードとの関数インターフェイスを定義できます。

2. 構造体のフィールドに入力します。

3. S-Function を作成します。

legacy_code('sfcn_cmex_generate',def)

4. S-Function をコンパイルします。

legacy_code('compile',def)

5. S-Function ブロックを作成します。

legacy_code('slblock_generate',def)

生成された S-Function ブロックにより、SimpleTable.c で C 関数が呼び出されます。これで、この S-Function ブロックをモデル内で使用できます。

6. TLC ファイルを作成します。

legacy_code('sfcn_tlc_generate',def)

このコマンドは、ブロック用コードの生成方法を指定する S-Function のコンポーネントである TLC ファイルを作成します。

シミュレーションによる外部コードの確認

Simulink® モデル内で既存の C コードを統合する場合、生成された S-Function ブロックを確認します。

Lookup ブロックの置換を確認するために、Lookup ブロックで生成されたシミュレーション結果を新しい S-Function ブロックで生成された結果と比較します。

1. 確認モデルを開きます。

  • Sine Wave ブロックは範囲が [-2 : 2] の出力値を生成します。

  • ルックアップ テーブルの入力範囲は次のとおりです。[-1 :1]。

  • ルックアップ テーブルは入力の絶対値を出力します。

  • ルックアップ テーブルは、入力の限界値で出力を切り取ります。

2. 確認モデルを実行します。

次の図に検証結果を示します。既存の C コードと Simulink® テーブル ブロックは同じ出力値を生成します。

C コードを Simulink® モデルの一部として検証

既存の C 関数コードをスタンドアロン コンポーネントとして検証した後、S-Function をモデル内で検証します。検証作業を完了するには、テスト ハーネス モデルを使用します。

1. テスト ハーネスを開きます。

2. テスト ハーネスを実行します。

シミュレーション結果はゴールデン値と一致しています。

生成コードからの C 関数の呼び出し

コード ジェネレーターは S-Function ブロックをシステムの他のブロックと同様に処理するために TLC ファイルを使用します。コード ジェネレーターは、S-Function ブロックによって、複数の計算を単一の出力計算にまとめる演算である "式の畳み込み" を実装することができます。

1. フル モデルをビルドします。

2. 生成コードを PI_Control_Reusable.c で調査します。

生成コードは C 関数 SimpleTable を呼び出します。

次の図に、C コードを統合する前後の生成コードを示します。統合前は、コードは生成されたルックアップ ルーチンを呼び出します。統合後は、生成コードは C 関数 SimpleTable を呼び出します。

関連するトピック