1

我是 Modelica 的新手,但我想用 2 个变量构建一个简单的状态机:初始步骤是“关闭”(变量 Light_cabin==0),然后如果 button_Evac == 1(第二个变量)然后转到“打开”步骤" 并且 Light_Cabin == 1 如果 Button_Evac==0 返回到初始步骤。这是我的状态机: state_machine

但是当我启动模拟时 Light_Cabin = 0 即使 button_Evac = 1 并且活动步骤是初始步骤。

这是我的代码:

model StateMachine

block Off
  outer output Integer Light_Cabin;
equation 
Light_Cabin = 0;
end Off;

block On
  outer output Integer Light_Cabin;
equation 
  Light_Cabin = 1;
end On;

  parameter Integer Button_Evac(start=0);
  inner Integer Light_Cabin(start=0);

  Off off;
  On on;

equation 
  transition(
    off,
    on,
    Button_Evac == 1,
    immediate=true,
    reset=false,
    synchronize=false,
    priority=1); 
  transition(
    on,
    off,
    Button_Evac == 0,
    immediate=true,
    reset=false,
    synchronize=false,
    priority=1);

  initialState(off);
end StateMachine;

如果您知道我的错误在哪里,请告诉我。谢谢你的帮助,埃洛伊丝

4

1 回答 1

2

这是由于 Modelica 中的状态机设计,可以在https://specification.modelica.org/v3.4/Ch17.html#semantics-summary中看到

  • 即使转换是立即的,状态也会在一个时钟周期内处于活动状态。如果不是这种情况,如果所有转换都是立即的,就会有无限循环的风险——这需要额外的语义检查。
  • 从技术上讲,它不是从“关闭”开始,而是一个单独的“初始状态”,并且在第一个时钟滴答中,状态机转换为“关闭”,因此无法在该时钟滴答中进一步转换。
于 2020-06-25T10:01:49.833 回答