このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
C Function
ライブラリ:
Simulink /
User-Defined Functions
説明
C Function ブロックは外部 C/C++ コードを Simulink® モデルから統合し、呼び出します。このブロックを使用して、データの前処理または後処理を行うことで、外部コードを定義し、コードの統合をカスタマイズします。また、カスタマイズされたコードをシミュレーションと C コードの生成に指定できます。コードで定義されている関数を条件付きで呼び出すことも、1 つのブロックで複数の関数を呼び出すこともできます。このブロックを使用して、永続データを初期化し、外部関数に渡すことができます。
C Function ブロックは永続データの初期化とブロックのダイアログ ボックスからの外部関数の呼び出しをサポートします。永続データには、カスタム コードで定義されている C++ クラスのオブジェクトを含めることができます。Interface with C++ Classes Using C Function Blockを参照してください。このブロックは、永続データの初期化と終了のみをサポートします。ブロックは、シミュレーション中のデータの更新をサポートしません。連続状態をもつ動的システムをモデル化するには、S-Function ブロックを使用します。S-Function の詳細については、S-Function とはを参照してください。
C Function ブロックによって呼び出されるソース コードとサポート ファイルを、[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [シミュレーション ターゲット] ペインで定義します。モデル コンフィギュレーション パラメーター: Simulation Targetを参照してください。
メモ
Simulink へのカスタム C コード統合でサポートされる C 言語の標準バージョンは C99 です。
C ライブラリ関数の呼び出し
C Function ブロックから以下の C Math Library 関数を直接呼び出すことができます。
abs | acos | asin | atan | atan2 | ceil |
cos | cosh | exp | fabs | floor | fmod |
labs | ldexp | log | log10 | pow | sin |
sinh | sqrt | tan | tanh |
これらの関数を呼び出すとき、すべての入力引数が明示的に単精度でなければ、倍精度が適用されます。型の不一致が発生した場合、必要な型に入力引数をキャストすると、元の引数が置換されます。たとえば、関数 sin
を整数の引数で呼び出した場合は、入力引数を double
型の浮動小数点数にキャストすることで、元の引数が置換されます。
その他の C ライブラリ関数を呼び出すには、その C ライブラリ関数を呼び出す外部ラッパー関数を作成して呼び出します。
abs
、関数 fabs
、および関数 labs
の呼び出しC Function ブロックでの関数 abs
、fabs
および labs
の解釈は、以下に示す整数および浮動小数点の引数に対応している点で標準的な C バージョンよりも優れています。
x
が整数の場合、標準 C 関数abs
はx
に適用され、abs(x)
となります。x
が double の場合、標準 C 関数labs
はx
に適用され、labs(x)
となります。x
が single の場合、標準 C 関数fabs
はx
に適用され、fabs(x)
となります。
関数の呼び出しでは、関数に渡されるデータ型に基づいて正しい CRL が呼び出されます。CRL が指定されない場合、関数の呼び出しで型固有のライブラリが呼び出されます。C99 の CRL は、型固有の関数を生成します。以下に例を示します。
渡される型 | コード生成の呼び出し |
---|---|
sin(doubleIn) | sin(doubleIn) |
sin(floatIn) | sinf(floatIn) |
例
制限
C Function ブロックで Simulink の次の機能を使用する場合、制限が適用されます。
Simulink Coverage™
C Function ブロックの実行カバレッジのみが計測されます。
Simulink Design Verifier™
Simulink Design Verifier は C Function ブロック内のカバレッジ オブジェクティブのテスト ケースを生成しません。C/C++ S-Function に適用される制限は C Function ブロックの C/C++ コードにも適用されます。特に、外部関数またはライブラリ関数の呼び出しは分析のためにスタブに置き換えられます。これらの制限の詳細については、S-Function および C/C++ コードのサポートの制限事項と考慮事項 (Simulink Design Verifier)を参照してください。
Simulink Code Inspector™
Simulink Code Inspector は、C Function ブロックから生成されたコードを検査しません。
C Function ブロックで指定する C コードには次の制限が適用されます。
static
キーワードを使用するローカルの静的変数はサポートされません。タイム ステップを超えて値をキャッシュするには、シンボルをブロック ダイアログ ボックスの [シンボル] テーブルで[Persistent]
として定義します。コードでファイルの
#include
は実行できません。外部関数を含むファイルは、[コンフィギュレーション パラメーター] ウィンドウの [シミュレーション ターゲット] ペインで指定しなければなりません。[Constant]
シンボルのアドレスを取ることはサポートされません。前述の「C Library 関数の呼び出し」にリストされている C Math Library 関数以外の C ライブラリ関数を直接呼び出すことはサポートされません。その他の C ライブラリ関数を呼び出すには、その C ライブラリ関数を呼び出すラッパー関数を作成して呼び出します。
端子
入力
出力
パラメーター
ブロックの特性
拡張機能
バージョン履歴
R2020a で導入