メインコンテンツ

S-Function の例

ここで取り上げる例では、C/C++ S-Function、Fortran S-Function、S-Function Builder、Level 2 MATLAB® S-Function、ブロックセット デザイナーなど、さまざまな S-Function または S-Function を使用するプログラムを操作する方法を示します。各セクションでは、ファイルを開く方法とファイルの内容について説明します。これらは、基礎を学んだ後に S-Function の理解をさらに深めるのに適しています。これらは S-Function で使用できるすべての例を表すものではなく、関連するサブセクションを表します。

S-Function の例へのアクセス

S-Function の例のほとんどは、sfundemos を介して実行されます。このサンプル ライブラリには S-Function モデルが含まれており、C S-Function や C++ S-Function などのコーディング タイプ別にグループ化されています。

sfundemos から例を実行するには、次のようにします。

  1. MATLAB コマンド ウィンドウで「sfundemos」と入力します。

    S-Function のサンプル ライブラリが開きます。

    各ブロックは、S-Function の例のカテゴリを表します。

  2. カテゴリをダブルクリックすると、そのカテゴリに含まれている例が表示されます。たとえば、[C-files] をクリックします。

  3. ブロックをダブルクリックして、それが表す例を開いて実行します。

以降の章を読むときに、いくつかのサンプル S-Function を調べてみると役立つかもしれません。例のコードは、MATLAB ルート フォルダーの下の次のフォルダーに保存されます。

MATLAB コード

toolbox/simulink/sfuntemplates

C、C++、および Fortran のコード

toolbox/simulink/sfuntemplates/src

Level 2 MATLAB S-Function の例

matlabroot/toolbox/simulink/sfuntemplates フォルダー (開く) には、Level 2 MATLAB S-Function が多数含まれています。これらのファイルを確認することから開始することを検討してください。Level 2 MATLAB S-Function の詳細については、Write Level-2 MATLAB S-Functionsを参照してください。

ファイル名モデル名説明
msfcn_dsc.mmsfcndemo_sfundsc1継承したサンプル時間を使用して S-Function を実装します。
msfcn_limintm.mmsfcndemo_limintm出力が下限と上限によって制限され、初期条件を含む連続制限付き積分器を実装します。
msfcn_multirate.mmsfcndemo_multirateマルチレート システムを実装します。
msfcn_times_two.mmsfcndemo_timestwo入力を 2 倍にする S-Function を実装します。
msfcn_unit_delay.mmsfcndemo_sfundsc2単位遅延を実装します。
msfcn_varpulse.mmsfcndemo_varpulseLevel 2 MATLAB S-Function 内で set_param 関数を呼び出すことによって、可変パルス幅の発生器を実装します。また、ブロック操作点に対してカスタム set メソッドおよび get メソッドを使用する方法も示します。
msfcn_vs.mmsfcndemo_vsfunc最初の入力が 2 番目の入力によって決定される時間だけ遅延される可変サンプル時間ブロックを実装します。

C S-Function の例

matlabroot/toolbox/simulink/sfuntemplates/src フォルダー (開く) には、C MEX S-Function の例が含まれており、その多くには対応する MATLAB S-Function があります。次の表に C MEX S-Function の一覧を示します。C S-Function の詳細については、C/C++ S-Function の基礎およびBuild S-Functions Automatically Using S-Function Builderを参照してください。

ファイル名モデル名説明
csfunc.csfcndemo_csfunc連続システムを実装します。
dlimintc.c利用可能なモデルはありません離散時間制限付き積分器を実装します。
dsfunc.csfcndemo_dsfunc離散システムを実装します。
limintc.c利用可能なモデルはありません制限付き積分器を実装します。
mixedm.csfcndemo_mixedm単位遅延 (1/z) と直列に接続された連続積分器 (1/s) で構成されるハイブリッド動的システムを実装します。
mixedmex.csfcndemo_mixedmex1 つの出力と 2 つの入力を持つハイブリッド動的システムを実装します。
slexQuantizeSFcn.csfcndemo_sfun_quantizeベクトル化された量子化器を実装します。量子化間隔パラメーター q で指定されたステップに入力を量子化します。
sdotproduct.csfcndemo_sdotproduct2 つの実数ベクトルまたは複素数ベクトルのドット積 (積和) を計算します。
sfbuilder_bususage.csfbuilder_bususageバス入力および出力を使用して S-Function Builder にアクセスします。
sfbuilder_movingAverage.csfbuilder_movingAverage[Start][Terminate] を使用して、単純な時間枠移動平均を実装します。
sftable2.csfcndemo_sftable22 次元テーブル ルックアップを実装します。
sfun_atol.csfcndemo_sfun_atol連続状態ごとに異なる絶対許容誤差を設定します。
sfun_cplx.csfcndemo_cplx1 つの入力端子と 1 つのパラメーターを持つ S-Function に複素数データを追加します。
sfun_directlook.c利用可能なモデルはありません直接 1 次元ルックアップを実装します。
sfun_dtype_io.csfcndemo_dtype_io入力と出力に Simulink® データ型を使用する S-Function を実装します。
sfun_dtype_param.csfcndemo_dtype_paramパラメーターに Simulink データ型を使用する S-Function を実装します。
sfun_dynsize.csfcndemo_sfun_dynsize動的にサイズが変更される出力を実装します。
sfun_errhdl.csfcndemo_sfun_errhdlmdlCheckParameters S-Function ルーチンを使用してパラメーターを確認します。
sfun_fcncall.csfcndemo_sfun_fcncall最初の出力要素と 2 番目の出力要素に対して Function-Call Subsystem を実行します。
sfun_frmad.csfcndemo_frameフレームベースの A/D コンバーターを実装します。
sfun_frmda.csfcndemo_frameフレームベースの D/A コンバーターを実装します。
sfun_frmdft.csfcndemo_frameマルチチャネル フレームベースの離散フーリエ変換 (およびその逆変換) を実装します。
sfun_frmunbuff.csfcndemo_frameフレームベースの Unbuffer ブロックを実装します。
sfun_multiport.csfcndemo_sfun_multiport複数の入力端子と出力端子を構成します。
sfun_manswitch_mode.c利用可能なモデルはありません手動スイッチを実装します。
sfun_matadd.csfcndemo_matadd1 つの入力端子、1 つの出力端子、および 1 つのパラメーターを持つ S-Function で行列を加算します。
sfun_multirate.csfcndemo_sfun_multirate端子ベースのサンプル時間を指定する方法を示します。
sfun_port_constant.csfcndemo_port_constant端子ベースの定数サンプル時間を指定する方法を示します。
sfun_port_triggered.csfcndemo_port_triggeredTriggered Subsystem で端子ベースのサンプル時間を使用する方法を示します。
sfun_runtime1.csfcndemo_runtimeすべての調整可能なパラメーターに対して実行時パラメーターを実装します。
sfun_runtime2.csfcndemo_runtime個々の実行時パラメーターを登録します。
sfun_runtime3.csfcndemo_runtimeダイアログ パラメーターを実行時パラメーターとして登録します。
sfun_runtime4.csfcndemo_runtime実行時パラメーターを複数のダイアログ パラメーターの関数として実装します。
sfun_zc.csfcndemo_sfun_zcサンプリングされていないゼロクロッシングを使用して abs(u) を実装する方法を示します。この S-Function は、可変ステップ ソルバーで使用するように設計されています。
sfun_zc_sat.csfcndemo_sfun_zc_sat飽和でのゼロクロッシングを示します。
sfun_zc_cstate_sat.csfcndemo_sfun_zc_cstate_sat飽和制限とゼロクロッシング検出を使用して連続積分器を実装します。
sfun_integrator_localsolver.csfcndemo_sfun_localsolverモデルで使用されているソルバーの代わりに別のローカル ソルバーを使用して連続状態が解かれる連続積分器を示します。
sfun_angle_events.csfcndemo_angle_events指定角度を越えた回転体を堅牢かつ効率的に検出するメソッドを実装します。
sfun_angle_events.c利用可能なモデルはありません角度の検出を示し、関数呼び出しをスケジュールするために Stateflow® を組み込みます。
sfunmem.csfcndemo_sfunmem1 積分ステップ遅れとメモリ保持機能を実装します。
simomex.c sfcndemo_simomex

状態空間方程式で記述された単入力、2 出力の状態空間動的システムを実装します。

dx/dt = Ax + Bu
y = Cx + Du
ここで、x は状態ベクトル、u は入力のベクトル、y は出力のベクトルです。

stspace.c sfcndemo_stspace状態空間方程式のセットを実装します。S-Function ブロックとマスク機能を使用して、これを新しいブロックに変更できます。このサンプル MEX ファイルは、組み込みの State-Space ブロックと同じ機能を実行します。これは、入力、出力、および状態の数が、ワークスペースから渡されるパラメーターに依存する MEX ファイルの例です。
stvctf.c sfcndemo_stvctf入力ベクトルを介して伝達関数多項式が渡される連続時間伝達関数を実装します。これは連続時間適応制御アプリケーションで役立ちます。
stvdtf.csfcndemo_stvdtf入力ベクトルを介して伝達関数多項式が渡される離散時間伝達関数を実装します。これは離散時間適応制御アプリケーションで役立ちます。
stvmgain.csfcndemo_stvmgain時変行列ゲインを実装します。
table3.c利用可能なモデルはありません3 次元ルックアップ テーブルを実装します。
timestwo.csfcndemo_timestwo入力を 2 倍にする C MEX S-Function を実装します。
vdlmintc.c利用可能なモデルはありません離散時間ベクトル化制限付き積分器を実装します。
vdpmex.csfcndemo_vdpmexファン デル ポールの方程式を実装します。
vlimintc.c 利用可能なモデルはありませんベクトル化制限付き積分器を実装します。
vsfunc.csfcndemo_vsfunc可変サンプル時間ブロックを作成する方法を示します。このブロックは、最初の入力が 2 番目の入力によって決定される時間だけ遅延される可変ステップ遅延を実装します。
sfun_pwm.csfcndemo_pwm制御可能なサンプル時間ブロックを作成する方法を示します。
sfun_d2csfcndemo_d2c離散入力信号を滑らかな連続出力信号に変換する方法を示します。
sfun_pulse_delay.csfcndemo_vco可変サンプル時間を使用して、離散値の入力信号を可変量だけ効率的に遅延させるアルゴリズムを実装する方法を示します。

Fortran S-Function の例

次の表に、matlabroot/toolbox/simulink/sfuntemplates/src フォルダー (開く) で使用可能なサンプル Fortran® S-Function をリストします。Fortran S-Function の詳細については、Create Level-2 Fortran S-Functionsを参照してください。

ファイル名モデル名

説明

sfun_atmos.c
sfun_atmos_sub.F
sfcndemo_atmosFortran サブルーチンを使用して、1976 年の標準大気を 86 km まで計算します。

C++ S-Function の例

次の表に、matlabroot/toolbox/simulink/sfuntemplates/src フォルダー (開く) で使用可能なサンプル C++ S-Function をリストします。C++ S-Function の詳細については、C/C++ S-Function の基礎およびBuild S-Functions Automatically Using S-Function Builderを参照してください。

ファイル名モデル名説明
sfun_counter_cpp.cppsfcndemo_counter_cppC++ オブジェクトをポインター ベクトル PWork に保存します。
sfbuilder_permute.cppsfbuilder_permutation[Start] と [Terminate] を使用して外部 C++ クラスを呼び出すことで順列を実装します。
sfbuilder_linfilt.cppsfbuilder_upsampling正弦波のアップサンプリング用に C++ STL アルゴリズムを使用して線形フィルター処理を実装します。

プロジェクトでの S-Function の整理

次の例は、S-Function アーティファクトをプロジェクトに整理する方法を示します。これは、Blockset Designer 機能を使用して実現されます。ブロックセット デザイナーの詳細については、ブロックセット プロジェクトの作成を参照してください。

ファイル名説明
slexBlocksetDesignerExampleブロックセット デザイナーを使用して、S-Function アーティファクトを単一のプロジェクトに整理します。

参考

| | |

トピック