不同的 Modelica 仿真环境之间有什么区别?
What are the differences between diffferent Modelica Simulation Environments?
有不同的 Modelica 仿真环境,包括 Dymola、Wolfram SystemModeler、OpenModelica 和 Jmodelica。所以,我尝试加载一个热流体库(ThermoSysPro https://github.com/Dwarf-Planet-Project/ThermoSysPro),但除了Dymola,其他软件的结果都以错误结束。
如果库和仿真环境都是基于Modelica Specification Standard,为什么会出现兼容性问题?我认为该库可能包含一些仅由 Dymola 支持的功能。谁能说明一下这些模拟环境的区别?
总的来说:
您使用的工具可能不支持某些 Modelica 语言元素
仅仅因为一个工具支持 Modelica,并不意味着它已经实现了 Modelica 标准定义的所有内容。以OpenModelica为例,在v1.12之前并没有完全支持同步特性
库的代码可能与您的工具使用的 Modelica 语言规范 (Modelica spec) 版本不一致
有些工具允许某些未在 Modelica 规范中定义的东西:可能是因为 Modelica 规范在某个主题上不够精确,或者它们可能有点超前并且已经支持可能成为未来一部分的东西规格版本。
在 Dymola 中,如果您的代码符合当前的 Modelica 语言规范,您有两个选项可以更严格地检查:使用迂腐模式进行检查并设置标志 Advanced.EnableAnnotationCheck=true
让 Dymola 也检查注释
在您的具体示例中:ThermoSysPor
库存在各种问题,这可能会解释您的问题。
该库是使用相当古老的 Modelica 标准库 (MSL) 3.2.1 编写的,它基于 Modelica 语言规范 3.2。
当前的 Dymola 版本 (2020) 使用 Modelica 语言规范 3.4(请参阅每个版本的 Dymola 发行说明以了解这一点)。
OpenModelica 显然支持 Modelica 3.3(如发行说明中所述)。
同时,MSL 也有所改进,当前版本为 3.2.3。
因此,需要将 ThermoSysPro 更新到最新的 MSL 版本 3.2.3 和该工具支持的 Modelica 规范。然后你就可以开始比较它在哪些工具中有效,在哪些工具中无效。
库在 Dymola 中也不能完全工作
我使用最新的 Dymola 版本和 Dymola 2016 FD01 进行了测试,其中包含 MSL 3.2.1。
- Dymola 2016 FD01:31 个错误,62 个警告
- Dymola 2020:175 个错误,095 个警告
该库包含无效的语言元素。两个例子:
在 ThermoSysPro.Examples.SimpleExamples.TestCentrifugalPump
OpenModelica v1.14 beta 2 中抱怨说,cardinality
没有以合法的方式使用。显然 Dymola 2020 并不关心(即使在迂腐模式下),但它违反了 Modelica 规范 3.4。
许多模型包含注释DymolaStoredErrors
,这不符合标准。自定义工具注释必须以“__”开头。
有不同的 Modelica 仿真环境,包括 Dymola、Wolfram SystemModeler、OpenModelica 和 Jmodelica。所以,我尝试加载一个热流体库(ThermoSysPro https://github.com/Dwarf-Planet-Project/ThermoSysPro),但除了Dymola,其他软件的结果都以错误结束。
如果库和仿真环境都是基于Modelica Specification Standard,为什么会出现兼容性问题?我认为该库可能包含一些仅由 Dymola 支持的功能。谁能说明一下这些模拟环境的区别?
总的来说:
您使用的工具可能不支持某些 Modelica 语言元素
仅仅因为一个工具支持 Modelica,并不意味着它已经实现了 Modelica 标准定义的所有内容。以OpenModelica为例,在v1.12之前并没有完全支持同步特性
库的代码可能与您的工具使用的 Modelica 语言规范 (Modelica spec) 版本不一致
有些工具允许某些未在 Modelica 规范中定义的东西:可能是因为 Modelica 规范在某个主题上不够精确,或者它们可能有点超前并且已经支持可能成为未来一部分的东西规格版本。
在 Dymola 中,如果您的代码符合当前的 Modelica 语言规范,您有两个选项可以更严格地检查:使用迂腐模式进行检查并设置标志
Advanced.EnableAnnotationCheck=true
让 Dymola 也检查注释
在您的具体示例中:ThermoSysPor
库存在各种问题,这可能会解释您的问题。
该库是使用相当古老的 Modelica 标准库 (MSL) 3.2.1 编写的,它基于 Modelica 语言规范 3.2。
当前的 Dymola 版本 (2020) 使用 Modelica 语言规范 3.4(请参阅每个版本的 Dymola 发行说明以了解这一点)。 OpenModelica 显然支持 Modelica 3.3(如发行说明中所述)。
同时,MSL 也有所改进,当前版本为 3.2.3。
因此,需要将 ThermoSysPro 更新到最新的 MSL 版本 3.2.3 和该工具支持的 Modelica 规范。然后你就可以开始比较它在哪些工具中有效,在哪些工具中无效。
库在 Dymola 中也不能完全工作
我使用最新的 Dymola 版本和 Dymola 2016 FD01 进行了测试,其中包含 MSL 3.2.1。
- Dymola 2016 FD01:31 个错误,62 个警告
- Dymola 2020:175 个错误,095 个警告
该库包含无效的语言元素。两个例子:
在
ThermoSysPro.Examples.SimpleExamples.TestCentrifugalPump
OpenModelica v1.14 beta 2 中抱怨说,cardinality
没有以合法的方式使用。显然 Dymola 2020 并不关心(即使在迂腐模式下),但它违反了 Modelica 规范 3.4。许多模型包含注释
DymolaStoredErrors
,这不符合标准。自定义工具注释必须以“__”开头。