我正在使用Dymola,但是我不确定检查模型和转换模型之间的区别。 所以我做了一个测试。
这是连接器和模型文件的代码
connector Port
flow Real Q;
Real P;
Real T;
end Port;
model Inlet
parameter Real Q = 1;
parameter Real P = 2;
parameter Real T = 3;
Port a;
equation
a.Q = Q;
a.P = P;
a.T = T;
end Inlet;
如果我检查模型,Dymola将生成一个.mof文件:
model lab.Inlet
parameter Real Q = 1;
parameter Real P = 2;
parameter Real T = 3;
Real a.Q;
Real a.P;
Real a.T;
// Equations and algorithms
// Component
// class lab.Inlet
equation
a.Q = Q;
a.P = P;
a.T = T;
end lab.Inlet;
如果我翻译模型,则.mof文件如下所示:
model lab.Inlet
parameter Real Q = 1;
parameter Real P = 2;
parameter Real T = 3;
Real a.Q;
Real a.P;
Real a.T;
// Equations and algorithms
// Component
// class lab.Inlet
equation
a.Q = Q;
a.P = P;
a.T = T;
a.Q = 0.0;
end lab.Inlet;
我可以看到在翻译生成的.mof文件中,还有一行: a.Q = 0.0; 。
那么,我的问题是检查和翻译之间的详细区别是什么?是否有关于此主题的详细文档?
答案 0 :(得分:2)
检查模型应该只创建一个小的中间模型,该模型可以检查逻辑错误(#eqs == #unknowns等),但此后不用于符号操作。
实例化模型应该创建一个可以用于符号操作的平面模型。
转换模型应首先运行实例化,然后执行符号操作(BLT等)并实际创建仿真代码。
OpenModelica就是这样,我不能肯定说出dymoa是做什么的,但是我想这给了你一个主意。我不知道对此是否有任何进一步的书面解释。
答案 1 :(得分:2)
添加到其他答案中。
TL:DR;
长版:
对于“检查”,将假定与连接器a
的通用连接(通常是与所有连接器的通用连接)正常进行检查。该连接将添加一个方程式,因此在该模型中将有一个方程式过多-但我们不确定确切的方程式。
另外还有一些实例化检查,但是通常缺少修饰符(参数值和部分模型的重新声明)被视为非问题-因为它不是完整的模型。
对于“翻译”,假设您正在翻译一个完整的模型,并且非因果连接器(例如a
)将默认连接,即流设置为零-这给出了您看到的特定错误消息。 (而且公共顶级输入将从dsu.txt中读取。)此外,该模型还转换为C代码,需要更多代码。
通常例如,“检查”会在“翻译”之前停止,而不是像另一个答案所示那样求解方程组。
但是,在Dymola的最新版本中,如果模型带有“实验”注释,则“检查”还将检查(假设您正在检查完整的模型)-忽略上面的通常。
最新版的Dymola也将报告连接器Port
的问题:
连接器不平衡,具有1个流量变量和2个 非因果非流动变量(包括可能过度确定的) 个)。
对于“检查”,在某些模型中将是一个问题,因为Dymola必须为每个Port
连接器添加1或2个方程式。