2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2016-10-08 SimulinkのS-Functionビルダを使ってみる [長年日記]

_

=======

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

のコーディングをあーだこーだしなくても済む。