我需要检测RealInput值X何时发生变化。我试图检查 如果X == pre(X),但只接收错误并且警告Real无法进行相等性比较。我也考虑过使用X的导数,但是没有明确的表达式。
我的其他想法是尝试将连续输入采样为我可以比较的离散变量。这可能会以某种方式发挥作用吗?
答案 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;
同样,我还没有对此进行过测试。但它给你一些想法。