如何正确使用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)的结构,方便后续维护、共享和版本管理。
使用细节
- 前置验证:调用函数前,必须确保源包已成功加载到OMShell中,可以用
list(包名)命令验证包的结构是否正常读取。 - 参数说明:
- 第一个参数:已加载的源包名称(字符串格式,如
"TestLibrary") - 第二个参数:目标输出目录的完整路径(字符串格式,函数会自动创建不存在的目录)
- 第三个参数:库的版本号(字符串格式,如
"0.0.1") - 可选参数:
overwrite=true(默认false),用于覆盖已存在的目标目录内容
- 第一个参数:已加载的源包名称(字符串格式,如
- 输出结构:执行完成后,目标目录会生成标准的Modelica库结构:
- 根目录下的
package.mo(包含库的顶层定义)和package.order(定义子包/模型的加载顺序) - 每个子包对应独立文件夹,内部包含该子包的
package.mo和package.order - 所有模型文件会被自动拆分到对应的子包文件夹中
- 根目录下的
内容的提问来源于stack exchange,提问作者Dummer Horst
相关产品推荐
相关产品推荐

