检测Dymola中RealInput变量的变化

时间:2014-07-04 12:07:16

标签: modelica dymola

我需要检测RealInput值X何时发生变化。我试图检查 如果X == pre(X),但只接收错误并且警告Real无法进行相等性比较。我也考虑过使用X的导数,但是没有明确的表达式。

我的其他想法是尝试将连续输入采样为我可以比较的离散变量。这可能会以某种方式发挥作用吗?

2 个答案:

答案 0 :(得分:2)

尝试使用change()运算符。它在$3.7.3.1 of the Modelica Specification中描述。根据规范,它将扩展为X<>pre(X),因此也可以使用。

答案 1 :(得分:2)

change()运算符仅对非Real信号有用。原因是没有为<>类型定义Real。相反,您需要创建一个模型,检查信号是否偏离最后记录的值超过给定的&#34; epsilon&#34;。我还没有对它进行测试,但代码看起来像这样:

model DetectChange
  parameter Real eps;
  input Real signal;
  output Boolean change;
protected
  Real last_value;
initial algorithm
  last_value = signal;
algorithm
  when pre(change) then
    last_value := signal;
  end when;
  change := abs(signal-last_value)>=eps;
end DetectChange;

同样,我还没有对此进行过测试。但它给你一些想法。