从 Modelica 中的嵌套可替换 class 扩展 class
Extend a class from a nested replaceable class in Modelica
我想知道 Modelica 是否符合从嵌套可替换模型扩展模型,即在特定示例中:
package ReplaceableBaseClass
model ExampleUseReplaceable
ModelWithReplaceableExtend replaceableExtend1(
redeclare model LocalModelBase = Extend1,
input1 = time)
"Instance with one input and one output";
ModelWithReplaceableExtend replaceableExtend2(
redeclare model LocalModelBase = Extend2,
input1 = Modelica.Math.sin(4*time + 0.3))
"Instance with one input and two output";
end ExampleUseReplaceable;
model ModelWithReplaceableExtend
"Model which extends from its nested replaceable class"
extends LocalModelBase;
replaceable model LocalModelBase = Extend1
constrainedby PartialToBeExtended;
end ModelWithReplaceableExtend;
partial model PartialToBeExtended
input Real input1;
output Real output1;
end PartialToBeExtended;
model Extend1
extends PartialToBeExtended;
equation
output1 = 3*input1;
end Extend1;
model Extend2
extends PartialToBeExtended;
output Real output2;
equation
output1 = input1 + 0.2;
output2 = input1 * input1;
end Extend2;
end ReplaceableBaseClass;
这实际上在 Dymola 中有效,但我对此有一种奇怪的感觉,不确定使用它是否真的是个好主意。
这不是合法的 Modelica(自 Modelica 3.0 起),自 Dymola 2017 起,Dymola 将生成诊断(但只是警告)。
Modelica 中的限制是 base-class 必须是传递不可替换的(第 7.1.4 节和 6.2.1 节)。
我想知道 Modelica 是否符合从嵌套可替换模型扩展模型,即在特定示例中:
package ReplaceableBaseClass
model ExampleUseReplaceable
ModelWithReplaceableExtend replaceableExtend1(
redeclare model LocalModelBase = Extend1,
input1 = time)
"Instance with one input and one output";
ModelWithReplaceableExtend replaceableExtend2(
redeclare model LocalModelBase = Extend2,
input1 = Modelica.Math.sin(4*time + 0.3))
"Instance with one input and two output";
end ExampleUseReplaceable;
model ModelWithReplaceableExtend
"Model which extends from its nested replaceable class"
extends LocalModelBase;
replaceable model LocalModelBase = Extend1
constrainedby PartialToBeExtended;
end ModelWithReplaceableExtend;
partial model PartialToBeExtended
input Real input1;
output Real output1;
end PartialToBeExtended;
model Extend1
extends PartialToBeExtended;
equation
output1 = 3*input1;
end Extend1;
model Extend2
extends PartialToBeExtended;
output Real output2;
equation
output1 = input1 + 0.2;
output2 = input1 * input1;
end Extend2;
end ReplaceableBaseClass;
这实际上在 Dymola 中有效,但我对此有一种奇怪的感觉,不确定使用它是否真的是个好主意。
这不是合法的 Modelica(自 Modelica 3.0 起),自 Dymola 2017 起,Dymola 将生成诊断(但只是警告)。
Modelica 中的限制是 base-class 必须是传递不可替换的(第 7.1.4 节和 6.2.1 节)。