如何确定SimulationX中混合时间连续时间离散信号的最大值?

时间:2015-06-30 09:16:55

标签: modelica simulationx

questions如何用Modelica确定混合时间连续和时间离散信号x(t)的最大值,即

y(t)= max {x(s),其中s在[startTime,t]}。

这是Modelica错误跟踪器中的一个未解决的问题(请参阅https://trac.modelica.org/Modelica/ticket/109)。

我将提供特定于SimultionX的解决方案。

2 个答案:

答案 0 :(得分:3)

SimulationX通过last - 运算符扩展Modelica,该运算符返回参数的最后接受值。在事件时间点,它返回在事件迭代之前集成停止的值。 last - 运算符可用于计算当前x值和最后一个最大值的最大值。请参阅以下工作示例。

model test "test.ism"
    extends SimModel;
    Real x=2*sin(2*pi*time)+sin(20*pi*time)+(if time < 0.5 then 0 else 3) "some input signal with jump";
    Real y=if noEvent( time > time.start ) then max(x,last(y)) else x  "Calculate the maximum with the help of the last-operator";
    Real z(start=0,fixed=true)=-der(z)+y "Just any dymanics.";
end test;

输入信号x和相应的输出信号y如下图所示。

enter image description here

答案 1 :(得分:1)

我不确定last()到底是什么。但是,根据您的描述,它似乎与标准modelica中的pre()做同样的事情。这在OpenModelica中提供了相同的结果:

model minTest
Real x;
Real y;
equation      
x = 2. * sin(2.0 * Modelica.Constants.pi * time) + sin(20.0 * Modelica.Constants.pi * time)+ (if time < 0.5 then 0. else 3.);
      y=max(x,pre(y))  ;
end minTest;