C Caller ブロックを使用した C 関数の呼び出し
この例では、C Caller ブロックを使用して Simulink® で手書きの C 関数を呼び出す方法を示します。
この例では、5 つのカスタム C 関数が my_func.h
に定義されており、my_func.c
に実装されています。
カスタム コードで使用される C 構造体と列挙型のインポート
C Caller ブロックは C 構造体と列挙型をサポートします。コマンド Simulink.importExternalCTypes
を使用して、これらの型を Simulink に一致する Simulink.Bus
オブジェクトまたは Simulink.IntEnumType
クラスとしてインポートします。これにより、バス型 LIMITBUS
および COUNTERBUS
と列挙型 TrafficLightColor
がインポートされます。これらの型は MATLAB ワークスペースに表示されます。
Simulink.importExternalCTypes('my_func.h', 'EnumClass', 'dynamic');
モデルを開きます。
model = 'slexCCallerExample';
open_system(model);
[シミュレーション ターゲット] コンフィギュレーションへのヘッダー ファイルの追加
[モデル コンフィギュレーション パラメーター] の [シミュレーション ターゲット] ペインでカスタム ヘッダー ファイルとカスタム ソース ファイルを指定します。モデルのディレクトリまたは現在の MATLAB ディレクトリの絶対パスまたは相対パスを指定します。
[インクルード ヘッダー] ペインで C プリプロセッサ構文を使用して、カスタム ヘッダー ファイルを含めます。たとえば、my_func.h
ヘッダーを含めるには、次の行を入力します。
#include "my_func.h"
configset.highlightParameter(model, "SimCustomHeaderCode");
[シミュレーション ターゲット] コンフィギュレーションへのソース ファイルの追加
[シミュレーション ターゲット] コンフィギュレーションの [ソース ファイル] ペインでソース ファイルのスペース区切りリストを使用します。ファイル名にスペースが含まれている場合は、これを二重引用符で囲みます (例: "my c file.c"
)。
configset.highlightParameter(model, "SimUserSources");
モデルのシミュレーションを実行します。
モデルのシミュレーションを実行すると、Simulink は各タイムステップでカスタム C 関数を呼び出します。
sim(model);