【发布时间】:2020-04-21 14:39:01
【问题描述】:
我想弄清楚在 Modelica 中是否可以(并且在语义上合法)模拟一阶传递函数的模型,时间常数等于 0 (T以下)。我使用的是 OpenModelica 1.15.0~dev-48-g3656b95,但我在一般 Modelica 上下文中提出问题。
我的上下文是在 Modelica 模型上试验模型降阶,这让我尝试使用具有 有时为 null 时间常数的 Modelica.Blocks.Continuous.FirstOrder。但是,为了使讨论更简单,这里是我正在研究的平面模型(标准 FirstOrder 块的简化和改编):
model FirstOrderZero
import Modelica.SIunits;
Real u "input";
Real y "output";
parameter Real k(unit="1")=1 "Gain";
constant SIunits.Time T=0 "Time Constant";
equation
u = 1;
der(y) = (k*u - y)/T;
end FirstOrderZero;
我了解 Modelica 工具执行符号方程分析的方式,时间常数 T 应该是 constant 而不是 parameter。实际上,对于T=0,微分方程退化为代数方程y = k*u。除非 Modelica 模拟工具可以为 T 的不同值生成不同的代码路径(我认为没有 Modelica 工具可以,除了将来可能是 Modia?),T 是否为空的事实应该在方程分析的开始。
我不明白为什么上述模型无法模拟(“在时间 0 处除以零 [...] 其中除数表达式为 0.0”,使用 OM 1.15 开发)而 它可以工作 当最后一个方程改写为:
T*der(y) = (k*u - y);
我会假设符号方程分析应该自动重新制定方程? (我可以使用 OM Transformational Debugger 看到等式变为 der(y) = (k - y)/0.0,当然,在模拟时会中断)。
或者,编写 Modelica 方程除以一个空常数是否语法上非法?
【问题讨论】:
标签: modelica openmodelica