Main Content

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

C Function

外部 C コードの Simulink モデルからの統合と呼び出し

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

  • C Function block

説明

C Function ブロックは外部 C コードを Simulink® モデルから統合し、呼び出します。このブロックを使用して、データの前処理または後処理を行うことで、外部コードを定義し、コードの統合をカスタマイズします。また、カスタマイズされたコードをシミュレーションと C コードの生成に指定できます。コードで条件付きで定義されている関数を呼び出すことも、1 つのブロックで複数の関数を呼び出すこともできます。このブロックを使用して、ブロックの永続データを初期化し、外部関数に渡すことができます。

C Function ブロックを使用して C Math Library 関数のサブセットを呼び出すこともできます。詳細については、C Function ブロックからの C ライブラリ関数の呼び出しを参照してください。

C Function ブロックは永続データの初期化とブロックのダイアログからの外部関数の呼び出しをサポートします。C Function ブロックは、永続データの初期化と終了のみをサポートします。ブロックは、シミュレーション中のデータの更新をサポートしません。連続状態をもつ動的システムをモデル化するには、S-Function ブロックを使用します。S-Function の詳細については、What Is an S-Function?を参照してください。

C Function ブロックによって呼び出されるソース コードとサポート ファイルを、コンフィギュレーション パラメーターの [シミュレーション ターゲット] ペインで定義します。

制限

Simulink の次の機能は C Function ブロックとは互換性がありません。

  • Simulink Coverage™

    実行カバレッジのみが計測されます。

  • Simulink Code Inspector™

  • Simulink Design Verifier™

  • Simulink Test™

    – テスト ハーネス

  • Simulink Report Generator™ での C Function ブロックの使用

さらに、C Function ブロックで参照されるソース コードには次の制限が適用されます。

  • C のキーワード static はサポートされない。

    タイム ステップを超えて値をキャッシュするには、シンボルをブロック ダイアログの [シンボル] テーブルで [Persistent] として定義します。

  • スクリプトにはファイルを含めることができない。

    外部関数は、コンフィギュレーション パラメーター ダイアログの [シミュレーション ターゲット] ペインで指定しなければなりません。

    新しいインクルードと混在させられない、[シミュレーション ターゲット] ペインで定義された既存のインクルードがある場合、そのインクルードと C Function ブロックをライブラリ モデルに追加することを考慮し、メイン モデルでブロックへのリンクを使用します。詳細については、カスタム ライブラリの作成を参照してください。

  • 異なる型のポインターを相互に割り当てることはできない。外部関数を呼び出す際にはポインターの型は一致していなければなりません。

  • コードは定数のアドレスを取ることができない。

  • C Function ブロックから C ライブラリ関数の一部を直接呼び出すことはサポートされない。直接呼び出すことができる C Math Library 関数のリストを確認するには、<ここにリンク> を参照してください。その他の C ライブラリ関数を呼び出すには、その C ライブラリ関数を呼び出すラッパー関数を作成します。

端子

入力

すべて展開する

C Function ブロックへの入力。

入力の数とその名前は、外部 C コードでの定義と、ブロック パラメーター ダイアログの [シンボル] テーブルでのシンボルの定義によって決定されます。

入力端子のラベルは、ブロック ダイアログの [シンボル] テーブルの [ラベル] フィールドを編集して変更しない限り、入力シンボルの名前と同じです。

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

出力

すべて展開する

C Function ブロックからの出力。

出力の数とその名前は、外部 C コードでの定義と、ブロック パラメーター ダイアログの [シンボル] テーブルでのシンボルの定義によって決定されます。

出力端子のラベルは、ブロック パラメーター ダイアログの [シンボル] テーブルの [ラベル] フィールドを編集して変更しない限り、出力シンボルの名前と同じです。

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

パラメーター

すべて展開する

C Function ブロックがシミュレーション中に実行するコードを指定します。たとえば、[シミュレーション ターゲット] ペインで指定された外部 C コードから関数を呼び出し、結果に変更を加え、他のブロックに結果を渡す操作を実行することができます。

C Function ブロックの初期化コードを指定します。このコードはシミュレーションの開始時に 1 回実行されます。たとえば、永続データを初期化できます。

モデルの終了時に C Function ブロックが実行するクリーンアップ コードを指定します。このコードはシミュレーションの終了時に 1 回実行されます。たとえば、このコードを使用して、void ポインターとして指定された永続シンボルについてキャッシュされたメモリを解放します。

[シンボル] テーブルは、C コードのシンボルの属性を指定します。テーブル内のシンボルそれぞれの属性を入力しなければなりません。

  • 名前 — ソース コード内のシンボル名。

  • スコープ — シンボルのスコープ。シンボルのスコープはいつでも変更できます。次のスコープが使用できます。

    • InputC Function ブロックへの入力シンボル。

    • OutputC Function ブロックへの出力シンボル。

    • InputOutput — シンボルを C Function ブロックへの入力と出力の両方として定義します。

    • Parameter — シンボルをパラメーターとして指定。パラメーター名はシンボルの Label プロパティによって定義されます。

    • Persistent — シンボルを永続データとして定義します。

      Persistent スコープを使用して void ポインターを定義できます。"void ポインター" は、作成する、または割り当てるあらゆる型のデータを格納できるポインターです。

    • Constant — 値とサイズの式、または数値式を使用して、定数としてシンボルを定義します。

  • ラベル — シンボルのラベル。スコープが [Input] または [Output] に設定されたシンボルでは、このラベルはブロックの端子名として表示されます。スコープが [Parameter] に設定されたシンボルでは、このラベルはブロック パラメーター マスクに表示されるラベルです。スコープが [Constant] の場合、ラベルは定数式です。[Persistent] シンボルにラベルを定義することはできません。

  • タイプ — シンボルのデータ型。ドロップダウン リストからデータ型を選択するか、またはカスタム データ型を指定します。

    Simulink.BusSimulink Enum、または C Function ブロックに関連付けられている外部ヘッダー定義のないSimulink.AliasTypeなどのカスタム タイプを使用するには、[シンボル] テーブルで型を適宜設定します。

  • サイズ — シンボル データのサイズ。C Function ブロックはスカラーおよびベクトルのみをサポートします。行列と高次元の配列はサポートされません。サイズ式を使用して出力のサイズを定義することも、-1 を使用してサイズを継承することもできます。

  • 端子 — 入力シンボルおよび出力シンボルでは、Port はシンボル データのブロックの端子インデックスを示します。パラメーター シンボルの場合、Port はブロック パラメーター マスクにシンボルが表示される順序を示します。

ブロックの特性

データ型

Boolean[a] | bus[a] | double[a] | enumerated[a] | integer[a] | single[a]

直接フィードスルー

いいえ

多次元信号

はい

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

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

拡張機能

R2020a で導入