主要内容

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

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

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

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

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

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

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

置換プロセス

モデル例rtwdemo_PCG_Eval_P4を開きます。

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

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

モデル例では、圆周率コントローラーの 查找ブロック (ルックアップ テーブル) を既存の C関数への呼び出しと置き換えることができます。この関数はファイル可简化的可简化的で定義されています。

可简化的を表示します。

可简化的を表示します。

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

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

レガシ コード ツールを使用して可简化的内の既存の C関数用の S函数ブロックを作成します。

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

def=遗留_代码(“初始化”)

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

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

3.S函数を作成します。

旧式代码(“sfcn\u cmex\u生成”,def)

4.S函数をコンパイルします。

旧式代码(“编译”,def)

5.S函数ブロックを作成します。

旧式代码(“slblock_生成”,def)

生成された S函数ブロックにより、可简化的で C関数が呼び出されます。これで、この S函数ブロックをモデル内で使用できます。

6.薄层色谱ファイルを作成します。

旧式代码(“sfcn\u tlc\u生成”,def)

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

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

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

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

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

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

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

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

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

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

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

Cコードを S金宝appimulink®モデルの一部として検証

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

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

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

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

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

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

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

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

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

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

関連するトピック