在 Modelica 模型中声明包和导入包有什么区别?
What is the difference between declaring a package and importing a package in a Modelica model?
我可以在 Modelica 模型中声明一个包或导入一个包,但我不确定它们之间是否有任何区别,我尝试了以下代码,它们都可以正常工作。
我的问题是:
使用这两种方法有什么需要注意的吗?
partial model A
package SI1=Modelica.SIunits;
import SI2=Modelica.SIunits;
SI1.Voltage u1;
SI2.Voltage u2;
end A;
只有 import 子句似乎触发了对尚未加载的包的查找。例如使用 Modelica_LinearSystems2 库:
- 导入:检查并加载 Modelica_LinearSystems2
partial model A
import ls2=Modelica_LinearSystems2;
end A;
- 包:它检查了,但是 Modelica_LinearSystems2 没有加载
partial model B
package ls=Modelica_LinearSystems2;
end B;
我想如果在尝试模拟时没有加载所有依赖项,这可能会破坏您的模型。
Dymola(甚至 Modelica,因为迂腐的检查不会抛出任何错误)似乎不太关心使用 package 而不是 import,当涉及到已经加载的包时,这仍然很有趣.我没想到以下模型会起作用:
model C
package SI1=Modelica.SIunits;
SI1.Voltage u1;
parameter SI1.Current R=1;
equation
u1=2*R;
end C;
事实证明,即使自动完成 (Ctrl+Space) 也有效:
你在这里做了两件根本不同的事情,它们都适用于这种情况:
package SI1=Modelica.SIunits;
称为短 class 定义。
您创建一个名为 SI1
的新包,它继承了 Modelica.SIunits
.
的所有内容
短class定义与写作基本相同
package SI1
extends Modelica.SIunits;
end SI1;
有关详细信息,请参阅 Modelica 规范中的第 4.5.1 Short Class Definitions 章。
另一方面,import SI2=Modelica.SIunits
只会影响 Modelica 工具查找 class 定义的位置 - 因此此处没有定义新的 class。 13.2.1.1 Lookup of Imported Names 章在 Modelica 规范中对此进行了解释。
如果你只是想使用这个包,导入它。这就是 import
的设计目的。只有当你想添加功能或改变任何东西时,声明一个新包才有意义(如果你使用短 class 定义,这是非常有限的)。
我可以在 Modelica 模型中声明一个包或导入一个包,但我不确定它们之间是否有任何区别,我尝试了以下代码,它们都可以正常工作。 我的问题是: 使用这两种方法有什么需要注意的吗?
partial model A
package SI1=Modelica.SIunits;
import SI2=Modelica.SIunits;
SI1.Voltage u1;
SI2.Voltage u2;
end A;
只有 import 子句似乎触发了对尚未加载的包的查找。例如使用 Modelica_LinearSystems2 库:
- 导入:检查并加载 Modelica_LinearSystems2
partial model A
import ls2=Modelica_LinearSystems2;
end A;
- 包:它检查了,但是 Modelica_LinearSystems2 没有加载
partial model B
package ls=Modelica_LinearSystems2;
end B;
我想如果在尝试模拟时没有加载所有依赖项,这可能会破坏您的模型。
Dymola(甚至 Modelica,因为迂腐的检查不会抛出任何错误)似乎不太关心使用 package 而不是 import,当涉及到已经加载的包时,这仍然很有趣.我没想到以下模型会起作用:
model C
package SI1=Modelica.SIunits;
SI1.Voltage u1;
parameter SI1.Current R=1;
equation
u1=2*R;
end C;
事实证明,即使自动完成 (Ctrl+Space) 也有效:
你在这里做了两件根本不同的事情,它们都适用于这种情况:
package SI1=Modelica.SIunits;
称为短 class 定义。
您创建一个名为 SI1
的新包,它继承了 Modelica.SIunits
.
短class定义与写作基本相同
package SI1
extends Modelica.SIunits;
end SI1;
有关详细信息,请参阅 Modelica 规范中的第 4.5.1 Short Class Definitions 章。
另一方面,import SI2=Modelica.SIunits
只会影响 Modelica 工具查找 class 定义的位置 - 因此此处没有定义新的 class。 13.2.1.1 Lookup of Imported Names 章在 Modelica 规范中对此进行了解释。
如果你只是想使用这个包,导入它。这就是 import
的设计目的。只有当你想添加功能或改变任何东西时,声明一个新包才有意义(如果你使用短 class 定义,这是非常有限的)。