S-function 内でワークベクトルを使用した Simulink 例はありますか?

MATLAB コマンドプロンプトにて以下のコマンドの実行で表示されるドキューメントを参考に S-function 内でワークベクトルを使用したモデルを作成したいと考えています。
web([docroot '/toolbox/simulink/sfg/sfun_features18.html'])
上記のドキュメントとは別にワークベクトルを使用した簡単な例があれば教えてください。

 Respuesta aceptada

MathWorks Support Team
MathWorks Support Team el 18 de Oct. de 2013

0 votos

関連ドキュメントの URL より具体的な例が記載してあります。
ページ下の "sfun_with_work_vector.mdl" 及び "work_vector_example.c" をダウンロードしてご利用ください。
Simulink モデル (sfun_with_work_vector.mdl) で使用されている S-function ブロックは定数を入力とし、その定数値と S-function 内(のワークベクトル)に保持されたカウンター値を出力します(カウンターは各タイムステップにおいてインクリメントされます)。
S-function の実装 (work_vector_example.c) においてワークベクトルを用いてカウンター"が実現されています。シミュレーションの開始から終了においてワークベクトルの値が保持され、新しく実行されるシミュレーションでは値がリセットされます。変数を static として宣言した場合も同様な振る舞いをしますが、各シミュレーションで値がリセットされない点が異なります。
S-function work_vector_example.c は MATLAB コマンドプロンプトにて "sfundemos" で表示される画面の "C-File S-functinos" --> "Basic C-MEX Template" (sfuntmpl_basic.c) を基に作成されています。ワークベクトルを使用するように以下の変更が施されています。
1. mdlInitializeSizes
出力信号の幅を 2 と指定
ssSetOutputPortWidth(S, 0, 2);
2. mdlInitializeSizes
ワークベクトルの長さを 1 に指定 (counter 値が格納されます)
ssSetNumRWork(S, 1);
3. mdlOutputs
(a) ワークベクトルの定義
real_T counter = ssGetRWorkValue(S,0);
(b) 変数のインクリメント
counter++;
(c) 出力のセット
y[0] = u[0];
y[1] = counter;
(d) ワークベクトルに counter 更新値の書き込み
ssSetRWorkValue(S,0,counter);
動作確認のため、まず MATLAB コマンドプロンプトにて
mex work_vector_example.c
を実行し、MEX-化を行います。その後、Simulink モデルでシミュレーションの実行で、カウンター値がシミュレーションのステップ毎にインクリメントされることは確認できます。

Más respuestas (0)

Etiquetas

Aún no se han introducido etiquetas.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!