インラインでない S-Function の記述
インラインでない S-Function は、Simulink® エンジンおよび生成コードによって同一のものとして処理される C または C++ MEX S-Function です。アルゴリズムは S-Function API に従って 1 回実装します。Simulink エンジンおよび生成コードは、モデルの実行中に S-Function ルーチン (mdlOutputs
など) を呼び出します。
インラインでない S-Function は、S-Function の
ファイルが存在しないことによって識別されます。ファイル名はプラットフォームによって異なります。たとえば、64 ビットの Microsoft® Windows® システムの場合、ファイル名は sfunction
.tlc
です。MATLAB® コマンド ウィンドウで sfunction
.mexw64
mexext
と入力し、お使いのシステムで使用されている拡張子を確認します。
インラインでない S-Function の記述に関するガイドライン
MEX ファイルは MATLAB 関数を呼び出せません。
MEX ファイルで MATLAB 外部インターフェイス ライブラリの関数を使用する場合は、
mex.h
またはsimulink.c
の代わりにヘッダー ファイルcg_sfun.h
を含めます。ヘッダー ファイルcg_sfun.h
の場合、S-Function の末尾に次の行を含めます。#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ #include "simulink.c" /* MEX-file interface mechanism */ #else #include "cg_sfun.h" /* Code generation registration function */ #endif
コード ジェネレーターがサポートする MATLAB API 関数のみを使用します。サポートされている API 関数は次のとおりです。
mxGetDoubles
mxGetEps
mxGetInf
mxGetM
mxGetN
mxGetNaN
mxGetPr
(推奨されません。代わりにmxGetDoubles
を使用してください。)mxGetScalar
mxGetString
mxIsEmpty
mxIsFinite
mxIsInf
MEX ライブラリの呼び出しは、生成コードでサポートされません。生成コードではなく MEX ファイルでこのような呼び出しを使用するには、次の条件を付けます。
#ifdef MATLAB_MEX_FILE #endif
実際のデータのみを含んでいる非スパース行列だけを使用します。
関数
mxGetString
の呼び出しに戻り値を指定しないでください。戻り値を指定すると、MEX ファイルがコンパイルされません。代わりに、関数の 2 番目の入力引数を使用します。これは文字ベクトルにポインターを返します。正しい
#define
ステートメントを使用します。指定する S-Function の名前は、S-Function のファイル名と一致していなければなりません。s-function_name
可能であれば、データ型は
double
やint
ではなくreal_T
とint_T
を使用してください。データ型real_T
およびint_T
はより一般的で、複数の環境で使用することが可能です。S-Function の作成に使用するモジュールの名前を含めてビルド プロセスを行います。テンプレート make ファイル、関数
set_param
または S-Function ブロック パラメーター ダイアログ ボックスのS-function modules
フィールドを使用します。たとえば、このコマンドで S-Function をビルドするとします。mex sfun_main.c sfun_module1.c sfun_module2.c
続いて、次の
set_param
の呼び出しを使用して必要とされるモジュールを含めます。set_param(sfun_block, "SFunctionModules","sfun_module1 sfun_module2")
コードを生成する準備ができたら、コード ジェネレーターで最上位モデルを強制的にリビルドします。詳細については、最上位モデル コードの再生成の制御を参照してください。
インラインでない S-Function パラメーターのタイプについての制約
インラインでない S-Function パラメーターには次のタイプがあります。
倍精度
スカラー、ベクトルまたは 2 次元行列の文字列
S-Function や S-Function での演算に指定できるパラメーターにより柔軟性をもたせるには、S-Function をインライン化し、mdlRTW
S-Function ルーチンを使用することを検討してください。
MATLAB matrix.h
API やその他の mex.h
、mat.h
などの MATLAB API からの他の関数の使用はサポートされていません。S-Function ソース ファイルからサポートされていない API を呼び出すと、コンパイラ エラーが発生します。サポートされている MATLAB API 関数の詳細については、ファイル
および matlabroot
/rtw/c/src/rt_matrx.h
を参照してください。 matlabroot
/rtw/c/src/rt_matrx.c
空の行列で関数 mxGetPr
を使用すると、関数は NULL
を返しません。これは乱数値を返します。そのため、mxIsEmpty
を使用して mxGetPr
の呼び出しを保護しなければなりません。