我需要检测 RealInput 值 X 何时发生变化。我尝试检查 X == pre(X),但只收到一个错误和警告,即 Real 无法比较相等性。我也考虑过使用 X 的导数,但没有明确的表达方式。
我的其他想法是尝试将连续输入采样为我可以比较的离散变量。这能以某种方式起作用吗?
试试change()
运营商。Modelica 规范的 $3.7.3.1 中对此进行了描述。根据规范,它将扩展为X<>pre(X)
,因此也可以正常工作。
change()
运算符仅对非Real
信号实际有用。原因是<>
没有为Real
类型定义。相反,您需要创建一个模型来检查信号与最后记录的值的偏差是否超过给定的“epsilon”。我还没有测试过,但代码看起来像这样:
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;
同样,我还没有测试过这个。但它给了你一些想法。