【问题标题】:How to make Modelica Standard Library version readable from an FMU?如何使 Modelica 标准库版本可以从 FMU 中读取?
【发布时间】:2022-08-16 22:10:24
【问题描述】:

我希望能够使用 PyFMI 从 FMU 中读取 MSL 版本号。 (\"description-strings\" 是 cmets,但它是 Modelica 语言的一部分,请参见规范 3.5 第 2.2 节)。 MSL 版本位于包的“描述字符串”中,代码​​为:

MSL/Modelica/package
package
within;
package Modelica \"Modelica Standard Library - version 3.2.2\"
extends Modelica.Icons.Package;

在 PyFMi 中,有一种方法可以使用 model.get_variable_description()

但此功能仅限于变量,不会读取包、模型或块的文档字符串。有许多“get”函数,但似乎没有一个合适,或者有吗?

另一种解决方案是在用户 Modelica 代码中能够在导入时读出包的 \"description-string\" 并将其存储在字符串常量(或参数)中,然后从 FMU 中读取命令 model.get()

但是您如何在 Modelica 中从包或模型中读出“描述字符串”?

    标签: modelica fmi pyfmi


    【解决方案1】:

    我认为这些信息在 FMU 中不可用。至少 Dymola 不会将 MSL 版本写入导出的 FMU 的modelDescription.xml。我建议检查您的 FMU 的 modelDescription.xml(文件被打包到 FMU 中;FMU 是 zip 文件,可以使用 7zip 等存档程序解压缩).

    但它包含字段generationTool

      generationTool="Dymola Version 2023 (64-bit), 2022-04-13"
    

    Dymola 始终附带一个 MSL 版本,因此当您知道 Dymola 版本时,您可以猜出 MSL 版本。

    关于你的替代解决方案: 在 Dymola 中,可以使用 ModelManagement 库检索类信息:

    model GetMSLVersion
    
      import ModelManagement.Structure.AST.Classes.{GetClassAttributes, ClassAttributes, GetAnnotationString};
      import Modelica.Utilities.Streams.print;
    
      // Get class description string
      ClassAttributes atr = GetClassAttributes("Modelica");
      String dscr = atr.description;
    
      // Get version annotation
      String version = GetAnnotationString("Modelica", "version");
    
    initial equation 
    
      print(dscr);
      print(version);
    
      annotation(uses(ModelManagement(version="1.3")));
    end GetMSLVersion;
    

    上面的代码显示了如何访问描述字符串。此外,我从相应的注释中获得了版本,这是我为您的用例推荐的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多