simulinkのmuxブロックについて

25 visualizzazioni (ultimi 30 giorni)
sumitaka honji
sumitaka honji il 8 Giu 2020
Commentato: sumitaka honji il 9 Giu 2020
現在,simulinkを用いて1リンクアームのシミュレーションを作成しています.
その際,添付のブロック図に示すように,2つのスカラー信号(ここでは速度,位置)をmuxブロックを使用してベクトルにし,matlab functionブロック(viscosity)に入力しています.
matlab functionブロック内では,以下のコードで,入力uからそれぞれ速度,位置を変数に割り当て,計算に使用します.
ところが,このシミュレーションのコンパイルを行った際に,次のようなエラーが表示されました.
入力は2次元になっていると思うのですが,どのような原因に基づくものなのか,ご教示願います.
エラーコード
範囲外のインデックス式です。要素 2 にアクセスしようとしています。有効な範囲は 1 ~ 1 です。 詳細情報関数 'MATLAB Function' (#30.98.99)、行 9、列 8: "2" 診断レポートを起動してください。
コンポーネント:MATLAB Function | カテゴリ:Coder エラー
関数または変数 'w' が未定義です。ローカル変数への 1 番目の代入は、そのクラスを特定します。 関数 'MATLAB Function' (#30.176.177)、行 17、列 9: "w" 診断レポートを起動してください。
コンポーネント:MATLAB Function | カテゴリ:Coder エラー
matlab function ブロック内のコード
function y = viscosity(u)
r = 0.005 * 100;
h = 0.015 * 100;
b = 0.01 * 100;
q = u( 1 );
w = u( 2 ); ←エラーに表示されている部分1
q_max = 2 * atan2( r , h );
if q > q_max
b = b * 100;
end
y = b * w; ←エラーに表示されている部分2
  2 Commenti
Toshinobu Shintai
Toshinobu Shintai il 9 Giu 2020
私の環境で上記関数をコピーして実行してみましたが、特に問題無く実行できました。
入力を別の信号にしてみたり、viscosityだけを取り出して別の環境で実行してみたりして、確認してみるのはどうでしょうか。
sumitaka honji
sumitaka honji il 9 Giu 2020
コメント,検証ありがとうございます.
本日,もう一度シミュレーションを実行してみたところ,エラー表示2件は消えませんでしたが,シミュレーション自体は実行することができました.
Muxブロックからの出力もスコープで確認しましたが,2つの値が取れていましたので,どこかに不整合(?)がある様です.
とりあえず,実行までできましたので,回答とさせていただきます.

Accedi per commentare.

Risposte (0)

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!