You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用OpenModelica.Scripting.convertPackageToLibrary函数?

OpenModelica.Scripting.convertPackageToLibrary 用法解析与问题修复

问题修复:你的调用错误原因及修正方案

1. 先修正测试用例的语法错误

你的测试Modelica代码存在语法问题,子包定义后缺少分号,导致包无法正常加载。修正后的代码如下:

package TestLibrary
  package Subpackage1
    model Model1
    end Model1;
  end Subpackage1;

  package Subpackage2
    model Model2
    end Model2;
  end Subpackage2;
end TestLibrary;

2. 修正OMShell命令的错误

你遇到的解析错误,核心原因有两个:

  • 未指定函数的完整命名空间:convertPackageToLibrary属于OpenModelica.Scripting模块,OMShell不会自动导入该模块的函数,必须显式调用或导入。
  • 参数类型与格式错误:版本号需要是字符串类型,且参数顺序需匹配函数定义。

正确命令示例(二选一)

方式一:直接使用完整命名空间调用
loadFile("/home/roman/Modelica/TestLibrary.mo");
// 验证包是否加载成功(可选)
list(TestLibrary);
// 调用转换函数,参数为:源包名(字符串)、目标目录(字符串)、版本号(字符串)
OpenModelica.Scripting.convertPackageToLibrary("TestLibrary", "/home/roman/Modelica/ConvertedTestLibrary", "0.0.1");
方式二:先导入模块再调用
loadFile("/home/roman/Modelica/TestLibrary.mo");
import OpenModelica.Scripting;
Scripting.convertPackageToLibrary("TestLibrary", "/home/roman/Modelica/ConvertedTestLibrary", "0.0.1");

适用场景

  • 单文件库转标准库结构:当你将整个库的所有子包、模型都写在单个.mo文件中(未使用within语句和文件夹结构),需要转换成OpenModelica标准的模块化库结构时使用。
  • 旧库批量整理:对遗留的单文件Modelica库进行拆分,生成每个子包对应独立文件夹(含package.mo和package.order)的结构,方便后续维护、共享和版本管理。

使用细节

  1. 前置验证:调用函数前,必须确保源包已成功加载到OMShell中,可以用list(包名)命令验证包的结构是否正常读取。
  2. 参数说明:
    • 第一个参数:已加载的源包名称(字符串格式,如"TestLibrary")
    • 第二个参数:目标输出目录的完整路径(字符串格式,函数会自动创建不存在的目录)
    • 第三个参数:库的版本号(字符串格式,如"0.0.1")
    • 可选参数:overwrite=true(默认false),用于覆盖已存在的目标目录内容
  3. 输出结构:执行完成后,目标目录会生成标准的Modelica库结构:
    • 根目录下的package.mo(包含库的顶层定义)和package.order(定义子包/模型的加载顺序)
    • 每个子包对应独立文件夹,内部包含该子包的package.mo和package.order
    • 所有模型文件会被自动拆分到对应的子包文件夹中

内容的提问来源于stack exchange,提问作者Dummer Horst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:04:51