=======
1. 背景
=======
SimulinkのS-Functionが、うんともすんとも動いてくれないので、
Youtubeから"Simulink" "S-Function"で検索した
↓
S-Functionビルダの使い方(ML06 (english) - Simulink S-Function Builder basics)
というのが出てきたので、
(https://www.youtube.com/watch?v=rJfKX2W1WPQ#t=25.657259)
そっくりそのまま、やり方を真似てみたら、動いた。
忘れないうちにそのやり方を、私の為だけにメモしておく。
===========
2. 手順メモ
===========
(Step.1)
Simulinkライブラリブラウザ→"User-Defined Function"→"S-Function Builder"をドラッグ
(Step.2)
"S-Function Builder"の箱をクリック→ S-function名に"s_func_calc_power"と入力
(Step.3)
「データプロパティ」タブ→「入力端子」タブ→端子名"voltage"を作成(後はほっておく)
2つめの入力端子は「入力端子」タブの横にあるボタンで作れるので、端子名"current"を作成(後はほっておく)
(Step.4)
「データプロパティ」タブ→「出力端子」タブ→端子名"power"を作成(後はほっておく)
2つめの入力端子は「入力端子」タブの横にあるボタンで作れるので、端子名"resistance"を作成(後はほっておく)
(Step.5)
画面右上にある「ビルド」ボタンを押下
→"s_func_calc_power"という箱ができる
(Step.6)
Simulinkライブラリーブラウザ→"Commonly Used Blocks"→"Constant"を2つドラッグ
"Constant"とクリックして、片方に定数値"10"を、もう一方に定数値"2"を入力する。
そのブロックからの入力を、"s_func_calc_power"の"voltage"と"current"につなぐ
(Step.7)
Simulinkライブラリーブラウザ→"Commonly Used Blocks"→"Display"を2つドラッグ
"s_func_calc_power"の"power"と"resistance"から、"Display"につなぐ
(Step.8)
コマンドから、"mex s_func_calc_power.c s_func_power_wrapper.c" でコンパイル
(Step.9)
s_func_power_wrapper.cをクリックして、
==============================================================
/*
* Output functions
*
*/
void s_func_calc_power_Outputs_wrapper(const real_T *voltage,
const real_T *current,
real_T *power,
real_T *resistance)
==============================================================
↓
==============================================================
/*
* Output functions
*
*/
void s_func_calc_power_Outputs_wrapper(const real_T *voltage,
const real_T *current,
real_T *power,
real_T *resistance)
{
*power = *voltage * *current;
*resistance = *voltage / *current;
==============================================================
と、入出力関係を追加する
(Step.10)
シミュレーションのボタンを押すと、2つのdisplayに、それぞれ20、5と表示される
=======
3. 結論
=======
こうすれば、s-functionのテンプレートプログラムは作れるので、わざわざS-functino
のコーディングをあーだこーだしなくても済む。