2016-10-27 31 views
0

私は現在、simulinkを大量に使用するより大きなプロジェクトの基礎を学んでいます。 今、私は自分のsimulinkブロックをフィードバックしたいと思います。これは、入力の1つが出力でもあることを意味します(すべてが正しいことを保証するために、それらの間に 'メモリ'ブロックがあります)。私は「アウト」にリンクされている「に」と言ったようmatlab関数ブロック(simulink)の初期条件を設定します

私のコードは

function out = func(cmd,in) 

if in == 0 && cmd == 1 
    out = 1; 
elseif in == 1 && cmd == 0 
    out = 0; 
else 
    disp('error') 
end 

のように見えます。不幸にも、初期値を設定する必要があります。それ以外の場合はエラーが発生します。もちろん、そのようなコードではできません:

この場合、値outは各タイムステップで0に設定されます。

アドバイスをお願いしますか?私は、S-functionとフラグを使用できると読んだことがありますが、どのように動作するのか分かりません。

答えて

1

モデルの初期化中に関数が呼び出され(t = 0)、outの値は、t = 0の値cmdinの値に基づいて計算されます。

cmdinが正しく初期化されていることを確認する必要があります。outに明示的に値を設定しないでください。

本当に必要な場合は、このブロックの後にInitial Conditionブロックを使用するのが最も簡単です。

この例は、例のように状態のないブロックにのみ適用できます。あなたの大規模なプロジェクトでは、状態が記述されたブロックを作成している場合があります。その場合は、MATLAB FunctionブロックとS-Functionのどちらを使用しているかによって州の初期条件を設定する方法が異なります。

最後に、エラーをスローしたい場合は、errorを通常のMATLABの方法でスローします。 dispを使用してシミュレーションを停止するのではなく、不適切なコーディングであるoutの値を設定していません。

+0

ありがとうございました。 まず、 'disp'コマンドはここで私が何をしようとしているのかを説明するためのものです。これは私の実際のコードではありません。それで、そこに奇妙なものがあるのです! 'Matlab関数 'の直後に' Initial condition'ブロックを使用しようとしましたが、何も変更されていません。たぶん私は間違った方法でそれを使用しています。私はそれを調べます。 私もあなたが私に言ったことをしました。シミュレーションを実行する前に 'cmd = 0'と' in = 0'をワークスペースに設定しましたが、同じエラーメッセージが出ました_アウトパス引数 'out'がいくつかの実行パスに割り当てられていません とにかくお返事ありがとうございます – Ezor

+0

おそらく 't = 0'を使って初期条件を設定してください。クロックと新しい入力を追加せずに私の関数で時間を得る方法を知っていますか?私はすべての私の将来のブロックのための余分な入力を追加したくない! – Ezor

+0

ブロックへの入力として時間をかけたくありません。それの必要はありません。表示されたコードでは発生していない、コード内のすべての可能なパスに出力が割り当てられていることを確認してください。 –

0

私はその問題を解決したと思います。私は時計を追加することにより、

  • 他の誰かを助け、if time <=0 out = ... はしかし、それは非常にconvinientでない余分な入力を追加する必要がありif文で出て初期化することができ、ここでそれを置きます。たぶん誰かが私にそれを解決する方法を教えてくれるかもしれません。
  • 適切ifを行うと、私はここでの主な問題だった信じelse out = in;

ことによってそれを終了します。私はまた、incmdを初期化するマスクを持つサブシステムに私のmatlab-functionブロックを配置しました。

もう一度お手伝いをしていただきありがとうございました。 しかし、if t<0というステートメントが何らかの理由で動作しないため、私の問題はまだ解決されていません。

+0

't <0 'パスは決して実行されません。なぜなら、' t'は決して0より小さくないからです。余分な時間入力を追加するのは、Simulinkを使用する間違った方法です。私の答えによると、状態を含まないブロックの場合、出力は純粋に入力の関数であり、その値(t = 0またはそうでない場合)と正しい出力を得るために正しく初期化する必要がある入力です。 –

関連する問題