Modelica中的when语句中的离散状态机变量方程过多

wat*_*pet 1 modelica openmodelica

我有一个人为设计的Modelica模型,其中有一个由多个when语句操纵的状态机变量:

model WhenExample
  type State = enumeration(first, second, third);

  State   state;
initial equation
  state = State.first;

equation
  when sample(0, 1) then
    state = State.second;
  end when;

  when sample(0, 3) then
    state = State.third;
  end when;
end WhenExample;
Run Code Online (Sandbox Code Playgroud)

在OpenModelica OMC下进行编译时,出现以下错误:

[1] 16:46:39 Symbolic Error
Too many equations, over-determined system. The model has 2 equation(s) and 1 variable(s).
Run Code Online (Sandbox Code Playgroud)

这有点有意义,因为我的单身确实有两个方程式state变量。但是,这些方程式仅适用于离散时间点,对吗?

我是否需要确保对特定变量的所有“操纵”仅在单个when语句中发生?

Adr*_*Pop 5

请参阅Modelica规范的第8.5节``事件和同步'':https : //www.modelica.org/documents/ModelicaSpec33Revision1.pdf

在第8.6节之前,有一个示例可以为您提供帮助。下面给出了一些基于此的代码:

model WhenExample
  parameter Integer multiplySample = 3;
  Boolean fastSample, slowSample;
  Integer ticks(start=0);
  type State = enumeration(first, second, third);
  State state(start = State.first);
equation
  fastSample = sample(0,1);
algorithm
  when fastSample then
    ticks := if pre(ticks) < multiplySample then pre(ticks)+1 else 0;
    slowSample := pre(ticks) == 0;
    state := State.second;
  end when;
  when slowSample then
    state := State.third;
  end when;
end WhenExample;
Run Code Online (Sandbox Code Playgroud)