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 から例を実行するには、次のようにします。
MATLAB コマンド ウィンドウで「
sfundemos」と入力します。S-Function のサンプル ライブラリが開きます。

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

ブロックをダブルクリックして、それが表す例を開いて実行します。
以降の章を読むときに、いくつかのサンプル S-Function を調べてみると役立つかもしれません。例のコードは、MATLAB ルート フォルダーの下の次のフォルダーに保存されます。
MATLAB コード |
|
C、C++、および Fortran のコード |
|
Level 2 MATLAB S-Function の例
フォルダー (開く) には、Level 2 MATLAB S-Function が多数含まれています。これらのファイルを確認することから開始することを検討してください。Level 2 MATLAB S-Function の詳細については、Write Level-2 MATLAB S-Functionsを参照してください。matlabroot/toolbox/simulink/sfuntemplates
| ファイル名 | モデル名 | 説明 |
|---|---|---|
msfcn_dsc.m | msfcndemo_sfundsc1 | 継承したサンプル時間を使用して S-Function を実装します。 |
msfcn_limintm.m | msfcndemo_limintm | 出力が下限と上限によって制限され、初期条件を含む連続制限付き積分器を実装します。 |
msfcn_multirate.m | msfcndemo_multirate | マルチレート システムを実装します。 |
msfcn_times_two.m | msfcndemo_timestwo | 入力を 2 倍にする S-Function を実装します。 |
msfcn_unit_delay.m | msfcndemo_sfundsc2 | 単位遅延を実装します。 |
msfcn_varpulse.m | msfcndemo_varpulse | Level 2 MATLAB S-Function 内で set_param 関数を呼び出すことによって、可変パルス幅の発生器を実装します。また、ブロック操作点に対してカスタム set メソッドおよび get メソッドを使用する方法も示します。 |
msfcn_vs.m | msfcndemo_vsfunc | 最初の入力が 2 番目の入力によって決定される時間だけ遅延される可変サンプル時間ブロックを実装します。 |
C S-Function の例
フォルダー (開く) には、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を参照してください。matlabroot/toolbox/simulink/sfuntemplates/src
| ファイル名 | モデル名 | 説明 |
|---|---|---|
csfunc.c | sfcndemo_csfunc | 連続システムを実装します。 |
dlimintc.c | 利用可能なモデルはありません | 離散時間制限付き積分器を実装します。 |
dsfunc.c | sfcndemo_dsfunc | 離散システムを実装します。 |
limintc.c | 利用可能なモデルはありません | 制限付き積分器を実装します。 |
mixedm.c | sfcndemo_mixedm | 単位遅延 (1/z) と直列に接続された連続積分器 (1/s) で構成されるハイブリッド動的システムを実装します。 |
mixedmex.c | sfcndemo_mixedmex | 1 つの出力と 2 つの入力を持つハイブリッド動的システムを実装します。 |
slexQuantizeSFcn.c | sfcndemo_sfun_quantize | ベクトル化された量子化器を実装します。量子化間隔パラメーター q で指定されたステップに入力を量子化します。 |
sdotproduct.c | sfcndemo_sdotproduct | 2 つの実数ベクトルまたは複素数ベクトルのドット積 (積和) を計算します。 |
sfbuilder_bususage.c | sfbuilder_bususage | バス入力および出力を使用して S-Function Builder にアクセスします。 |
sfbuilder_movingAverage.c | sfbuilder_movingAverage | [Start] と [Terminate] を使用して、単純な時間枠移動平均を実装します。 |
sftable2.c | sfcndemo_sftable2 | 2 次元テーブル ルックアップを実装します。 |
sfun_atol.c | sfcndemo_sfun_atol | 連続状態ごとに異なる絶対許容誤差を設定します。 |
sfun_cplx.c | sfcndemo_cplx | 1 つの入力端子と 1 つのパラメーターを持つ S-Function に複素数データを追加します。 |
sfun_directlook.c | 利用可能なモデルはありません | 直接 1 次元ルックアップを実装します。 |
sfun_dtype_io.c | sfcndemo_dtype_io | 入力と出力に Simulink® データ型を使用する S-Function を実装します。 |
sfun_dtype_param.c | sfcndemo_dtype_param | パラメーターに Simulink データ型を使用する S-Function を実装します。 |
sfun_dynsize.c | sfcndemo_sfun_dynsize | 動的にサイズが変更される出力を実装します。 |
sfun_errhdl.c | sfcndemo_sfun_errhdl | mdlCheckParameters S-Function ルーチンを使用してパラメーターを確認します。 |
sfun_fcncall.c | sfcndemo_sfun_fcncall | 最初の出力要素と 2 番目の出力要素に対して Function-Call Subsystem を実行します。 |
sfun_frmad.c | sfcndemo_frame | フレームベースの A/D コンバーターを実装します。 |
sfun_frmda.c | sfcndemo_frame | フレームベースの D/A コンバーターを実装します。 |
sfun_frmdft.c | sfcndemo_frame | マルチチャネル フレームベースの離散フーリエ変換 (およびその逆変換) を実装します。 |
sfun_frmunbuff.c | sfcndemo_frame | フレームベースの Unbuffer ブロックを実装します。 |
sfun_multiport.c | sfcndemo_sfun_multiport | 複数の入力端子と出力端子を構成します。 |
sfun_manswitch_mode.c | 利用可能なモデルはありません | 手動スイッチを実装します。 |
sfun_matadd.c | sfcndemo_matadd | 1 つの入力端子、1 つの出力端子、および 1 つのパラメーターを持つ S-Function で行列を加算します。 |
sfun_multirate.c | sfcndemo_sfun_multirate | 端子ベースのサンプル時間を指定する方法を示します。 |
sfun_port_constant.c | sfcndemo_port_constant | 端子ベースの定数サンプル時間を指定する方法を示します。 |
sfun_port_triggered.c | sfcndemo_port_triggered | Triggered Subsystem で端子ベースのサンプル時間を使用する方法を示します。 |
sfun_runtime1.c | sfcndemo_runtime | すべての調整可能なパラメーターに対して実行時パラメーターを実装します。 |
sfun_runtime2.c | sfcndemo_runtime | 個々の実行時パラメーターを登録します。 |
sfun_runtime3.c | sfcndemo_runtime | ダイアログ パラメーターを実行時パラメーターとして登録します。 |
sfun_runtime4.c | sfcndemo_runtime | 実行時パラメーターを複数のダイアログ パラメーターの関数として実装します。 |
sfun_zc.c | sfcndemo_sfun_zc | サンプリングされていないゼロクロッシングを使用して abs(u) を実装する方法を示します。この S-Function は、可変ステップ ソルバーで使用するように設計されています。 |
sfun_zc_sat.c | sfcndemo_sfun_zc_sat | 飽和でのゼロクロッシングを示します。 |
sfun_zc_cstate_sat.c | sfcndemo_sfun_zc_cstate_sat | 飽和制限とゼロクロッシング検出を使用して連続積分器を実装します。 |
sfun_integrator_localsolver.c | sfcndemo_sfun_localsolver | モデルで使用されているソルバーの代わりに別のローカル ソルバーを使用して連続状態が解かれる連続積分器を示します。 |
sfun_angle_events.c | sfcndemo_angle_events | 指定角度を越えた回転体を堅牢かつ効率的に検出するメソッドを実装します。 |
sfun_angle_events.c | 利用可能なモデルはありません | 角度の検出を示し、関数呼び出しをスケジュールするために Stateflow® を組み込みます。 |
sfunmem.c | sfcndemo_sfunmem | 1 積分ステップ遅れとメモリ保持機能を実装します。 |
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.c | sfcndemo_stvdtf | 入力ベクトルを介して伝達関数多項式が渡される離散時間伝達関数を実装します。これは離散時間適応制御アプリケーションで役立ちます。 |
stvmgain.c | sfcndemo_stvmgain | 時変行列ゲインを実装します。 |
table3.c | 利用可能なモデルはありません | 3 次元ルックアップ テーブルを実装します。 |
timestwo.c | sfcndemo_timestwo | 入力を 2 倍にする C MEX S-Function を実装します。 |
vdlmintc.c | 利用可能なモデルはありません | 離散時間ベクトル化制限付き積分器を実装します。 |
vdpmex.c | sfcndemo_vdpmex | ファン デル ポールの方程式を実装します。 |
vlimintc.c | 利用可能なモデルはありません | ベクトル化制限付き積分器を実装します。 |
vsfunc.c | sfcndemo_vsfunc | 可変サンプル時間ブロックを作成する方法を示します。このブロックは、最初の入力が 2 番目の入力によって決定される時間だけ遅延される可変ステップ遅延を実装します。 |
sfun_pwm.c | sfcndemo_pwm | 制御可能なサンプル時間ブロックを作成する方法を示します。 |
sfun_d2c | sfcndemo_d2c | 離散入力信号を滑らかな連続出力信号に変換する方法を示します。 |
sfun_pulse_delay.c | sfcndemo_vco | 可変サンプル時間を使用して、離散値の入力信号を可変量だけ効率的に遅延させるアルゴリズムを実装する方法を示します。 |
Fortran S-Function の例
次の表に、 フォルダー (開く) で使用可能なサンプル Fortran® S-Function をリストします。Fortran S-Function の詳細については、Create Level-2 Fortran S-Functionsを参照してください。matlabroot/toolbox/simulink/sfuntemplates/src
| ファイル名 | モデル名 | 説明 |
|---|---|---|
sfun_atmos.csfun_atmos_sub.F | sfcndemo_atmos | Fortran サブルーチンを使用して、1976 年の標準大気を 86 km まで計算します。 |
C++ S-Function の例
次の表に、 フォルダー (開く) で使用可能なサンプル C++ S-Function をリストします。C++ S-Function の詳細については、C/C++ S-Function の基礎およびBuild S-Functions Automatically Using S-Function Builderを参照してください。matlabroot/toolbox/simulink/sfuntemplates/src
| ファイル名 | モデル名 | 説明 |
|---|---|---|
sfun_counter_cpp.cpp | sfcndemo_counter_cpp | C++ オブジェクトをポインター ベクトル PWork に保存します。 |
sfbuilder_permute.cpp | sfbuilder_permutation | [Start] と [Terminate] を使用して外部 C++ クラスを呼び出すことで順列を実装します。 |
sfbuilder_linfilt.cpp | sfbuilder_upsampling | 正弦波のアップサンプリング用に C++ STL アルゴリズムを使用して線形フィルター処理を実装します。 |
プロジェクトでの S-Function の整理
次の例は、S-Function アーティファクトをプロジェクトに整理する方法を示します。これは、Blockset Designer 機能を使用して実現されます。ブロックセット デザイナーの詳細については、ブロックセット プロジェクトの作成を参照してください。
| ファイル名 | 説明 |
|---|---|
slexBlocksetDesignerExample | ブロックセット デザイナーを使用して、S-Function アーティファクトを単一のプロジェクトに整理します。 |
参考
Level-2 MATLAB S-Function | S-Function Builder | S-Function | MATLAB Function