メインコンテンツ

C Caller

Simulink で C コードを統合

  • C Caller block

ライブラリ:
Simulink / User-Defined Functions

説明

C Caller ブロックは、外部 C コードを Simulink® に統合します。このブロックによって外部 C コードに含まれる関数がインポートされてリストされ、Simulink モデルで統合する関連付けられた C 関数を選択できます。

[ライブラリ ブラウザー][Simulink][ユーザー定義関数] を使用して、C Caller ブロックを Simulink キャンバスに取得します。

次に、ブロック ダイアログ ボックスの Gear アイコンをクリックします。これにより、[コンフィギュレーション パラメーター] ダイアログ ボックスが開きます。[コンフィギュレーション パラメーター] ダイアログ ボックス内で [シミュレーション ターゲット] ペインに移動し、[コード情報] タブのパラメーターを使用してソース コードとサポート ファイルを定義します。ソース コードの関数の定義を参照するには、Go to function button. アイコンを使用します。ソース コードとサポート ファイルの定義の詳細については、Specify and Configure Custom C/C++ Codeを参照してください。

ソース コードとサポート ファイルを変更するには、[コンフィギュレーション パラメーター] ダイアログ ボックスの [シミュレーション ターゲット] ペインにある [コード情報] タブの同じパラメーターを使用します。ソース コードとサポート ファイルを変更したら、ブロック ダイアログ ボックスで Circular arrow ボタンをクリックして関数のリストを更新します。

制限

  • カスタム コード設定の初期化/終了 — カスタム コードにメモリを割り当てたり割り当て解除したりする必要がある場合は、カスタム コード設定の [初期化関数] および [終了関数] フィールドに割り当ておよび割り当て解除を挿入するか、C Function ブロックを使用します。

  • 複素数データのサポート — ブロックは Simulink の複素数データ型をサポートしません。

  • 可変引数 — C の可変引数はサポートされません (たとえば、int sprintf(char *str, const char *format, ...))。

  • C++ 構文 — ブロックはネイティブの C++ 構文を直接サポートしません。C++ コードとインターフェイスする C 関数ラッパーを記述する必要があります。

  • Simulink Test™ オブザーバーのサポート — R2026a 以降では、Observer Port ブロックと Observer Reference ブロックを使用して、C Caller ブロック内のエクスポートされたグローバル変数を確認できます。これらのブロックを使用して、静的グローバル変数または n 次元行列のグローバル変数を確認することはできません。

端子

入力

すべて展開する

入力端子の数と名前は、外部 C コードの選択した関数から推定されます。C Caller ブロックにデータを提供するには、入力信号を入力端子に接続します。

入力ラベルは、[ブロック ダイアログ][端子仕様][ラベル] 列を編集して変更しない限り、入力端子と同じ名前になります。ラベルの名前を入力端子に変更すると、C Caller ブロックで端子の名前が変更されます。

入力変数については、[スコープ] 列を使用して、入力スコープをパラメーターまたは定数に変更できます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | string

出力

すべて展開する

出力端子の数と名前は、外部 C コードの選択した関数から推定されます。C Caller ブロックからデータを送信するには、ブロックを C Caller ブロックの出力端子に接続します。

出力端子ラベルは、[ブロック ダイアログ][端子仕様][ラベル] 列を編集して変更しない限り、出力端子と同じ名前になります。ラベルの名前を入力端子に変更すると、C Caller ブロックで端子の名前が変更されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | enumerated | bus | string

パラメーター

すべて展開する

C Caller ブロックで解析される関数の名前。文字ベクトルまたは string スカラーとして指定します。使用可能な関数の一覧については、使用可能な関数を参照してください。

調整可能: Yes

プログラムでの使用

ブロック パラメーター: FunctionName
型: 文字ベクトルまたは string スカラー

myFunctionName = get_param(gcb,"FunctionName")
myFunctionName =

    'mean_filter'

端子のプロパティ。table として指定します。table は、ブロックのそれぞれの入力要素と出力要素の属性を示します。スコープが入力の場合、その変数はパラメーターまたは定数に変更することができます。これらのプロパティには以下が含まれます。

グローバル引数 — R2026a 以降では、C Caller ブロックのダイアログ ボックスにあるボタンを使用して、外部カスタム コードのグローバル変数を追加、削除、または自動的に推定することができます。これらのボタンを使用するには、[コンフィギュレーション パラメーター] ダイアログ ボックスで [シミュレーション ターゲット] を選択します。[インポート設定] タブで、[グローバル変数を関数インターフェイスとして自動的に推定する] チェック ボックスがオンになっていないことを確認します。

  • Add ボタンを使用して、外部 C コードのグローバル変数をブロックに追加します。このボタンを使用すると、一度に 1 つの変数を追加できます。プログラムによりグローバル変数を追加するには、R2024b 以降のバージョンで利用可能な addGlobalArg 関数を使用します。

  • Remove ボタンを使用してブロックからグローバル変数を削除します。変数を削除するには、[端子仕様] テーブルでその行を選択してボタンをクリックします。一度に複数の変数を削除するには、それらの変数に対応する行を選択してボタンを使用します。プログラムによりグローバル変数を削除するには、R2024b 以降のバージョンで利用可能な deleteGlobalArg 関数を使用します。

  • 選択した C 関数で使用されるグローバル変数を一度にすべて追加するには、Magic wand ボタンを使用します。

名前 — ソース コードから推定された変数名を示します。

太字の引数名は、端子またはパラメーターがグローバル引数であることを示します。

スコープ — ソース コードでの変数の役割を示します。変数が C Caller ブロックのソース コード内の入力引数である場合、スコープ タイプを定数またはパラメーターに変更できます。変数がソース コード内の出力引数である場合は、スコープ タイプを変更することはできません。

ラベル — Simulink モデルの入力変数または出力変数にラベルを付けます。この表を使用してラベルを変更することができます。スコープがパラメーターの場合は、このフィールドにパラメーター名を入力します。スコープが定数の場合は、定数値を入力します。

タイプ — 端子からのデータ型を示します。

サイズ — 入力データまたは出力データのサイズを示します。

名前、スコープ、型、サイズは、ソース コードから推定されます。

プログラムでの使用

ブロック パラメーター: FunctionPortSpecification
型: FunctionPortSpecification オブジェクト

C Caller ブロックにマッピングできる使用可能なすべての関数のリスト。cell 配列として指定します。

モデル内の C Caller ブロックで外部ソース コードに含まれるすべての関数がインポートされ、それらの関数の名前がブロック ダイアログ ボックスの関数名の横に表示されます。関数を選択してブロックで使用するには、関数名が [使用可能な関数] テーブルに表示されていることを確認します。表示されない関数がある場合は、ブロック ダイアログ ボックスで Circular arrow ボタンをクリックしてソース コードを再度読み込みます。関数の名前を変更するには、ソース コードを変更し、[リフレッシュ] ボタンをクリックして再度読み込みます。

プログラムでの使用

ブロック パラメーター: AvailableFunctions
型: cell 配列

allAvailableFunctions = get_param(gcb, "AvailableFunctions")
allAvailableFunctions =

  1×1 cell array

    {'add'}

サンプル周期。秒単位で指定します。サンプル時間のタイプおよびサンプル時間の指定を参照してください。

プログラムでの使用

ブロック パラメーター: SampleTime
: string スカラーまたは文字ベクトル
既定の設定: "-1"

ブロックの特性

データ型

Booleana | busa | doublea | enumerateda | fixed pointa | integera | singlea | stringa

直達

いいえ

多次元信号

はいa

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

a 実際のデータ型または機能のサポートは、ブロックの実装に依存します。

詳細

すべて展開する

ヒント

  • C Caller ブロックを含むモデルをテストする場合は、Test Integrated C Code (Simulink Test)を参照してください。

  • モデルにカスタム コードが含まれる場合、モデルが更新または実行されると、読み込まれたカスタム コードのシミュレーション実行可能ファイルが原因で slprj フォルダーがロックされる場合があります。ロックされているフォルダーは削除できません。実行可能ファイルをアンロードして、slprj フォルダーのロックを解除するには、clear mex コマンドを使用します。clearを参照してください。

拡張機能

すべて展開する

固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。

バージョン履歴

R2018b で導入

すべて展開する