1

Dymola でステート マシンを使用しようとしているときに (ところで: 私はまったくの初心者です)、正弦曲線を入力変数として宣言するのに問題があります。次の最初のエラー メッセージが表示されます (先頭のみを貼り付けます)。

Continuous time parts and discrete parts don't decompose for:
_StateMachines.state1.activeReset
_StateMachines.state1.act... 

そして2番目のもの:

Decomposition in base clocks failed.
See the file dsmodelBaseClockDecomposition.mof.

この問題は、連続時間変数、つまりサイン関数を離散ブロック、つまりステート マシンの入力として使用しようとすることによって引き起こされることを理解しています。

サイン関数をステート マシンに接続するにはどうすればよいですか?

編集:

私のコードは次のようになります (注釈を削除しました):

model ZLG3_v2 "2nd Version of ZLG3"

  inner Real T_2(start=283);
  Real T_ZuL(start=295);

  model State1
    outer output Real T_2;

  equation
    T_2=previous(T_2)+2;

  end State1;
  State1 state1;

  model State3
    outer output Real T_2;
  equation
    T_2=previous(T_2)-1;

  end State3;
  State3 state3;

  Modelica.Blocks.Sources.Sine sine(freqHz=0.25, offset=305);
equation
//T_ZuL = 295;
T_ZuL=sine.y;

  initialState(state1);
  transition(
    state3,
    state1,T_2 <= T_ZuL,
    immediate=false,
    reset=true,
    synchronize=false,
    priority=1);
  transition(
    state1,
    state3,T_2 > T_ZuL,
    immediate=false,
    priority=1,
    reset=true,
    synchronize=false);
end ZLG3_v2;

二本の線

//T_ZuL = 295;
T_ZuL=sine.y;

興味があります。sine.y で (現在コメントされていない) 方程式を使用すると、エラー メッセージが表示されます。逆に言えば、すべてがうまく機能します。

よろしくお願いいたします。

4

1 に答える 1

1

問題は、明示する必要がある推定クロックです。それ以外の場合は、独自の個別クロックを持つ個別ステート マシンで連続信号 (sine.y) を使用しています。ステート マシンのクロックで sin 信号をサンプリングするには、サンプル ブロックで十分です。

model ZLG3_v3 "3rd Version of ZLG3"
  inner Real T_2(start=283);
  State1 state1;
  State2 state2;
  Modelica.Blocks.Logical.Greater greater;
  Modelica.Blocks.Sources.RealExpression realExpression(y=T_2);
  Modelica.Blocks.Sources.Sine sin(y(start=295),freqHz=0.25, offset=305);
  Modelica_Synchronous.RealSignals.Sampler.Sample sample;
  model State1
    outer output Real T_2;
  equation 
    T_2=previous(T_2)+2;
  end State1;
  model State2
    outer output Real T_2;
  equation 
    T_2=previous(T_2)-1;
  end State2;
equation 
  transition(
    state2,
    state1,greater.y,immediate=true,reset=true,synchronize=false,priority=1);
  transition(
    state1,
    state2,not greater.y,immediate=true,reset=true,synchronize=false,priority=1);
  connect(realExpression.y, greater.u2);
  connect(sin.y, sample.u);
  connect(sample.y, greater.u1);
end ZLG3_v3;

編集:

遷移のトリガーと同じ実際の入力信号を持つステート マシンのスナップショットの下に、ステート マシン自体に問題があることに気付きました。これにはエラー チェックがなく、シミュレートされます。 ここに画像の説明を入力

于 2014-06-18T14:51:38.337 に答える