2026a

# 模型文件操作


模型文件操作,主要为对模型文件进行新建、打开、加载、重命名、保存、卸载、复制模型等操作。

# OpenFile

打开模型文件。

# 语法

/**
	*  @brief 打开模型文件(mo,bmf,mef)
	*  @param [in]  strFile  模型文件路径
	*  @return 模型是否打开成功
	*/
bool MwMoHandler::OpenFile(const std::wstring& str_file);

# 说明

用于打开模型,包括mo,bmf,mef类型的模型,以及加密模型。调用该接口打开模型之前需使用LoadMoLibrary加载相关依赖的模型库。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
QString str_file = “C:\\Users\admin\Documents\\MWorks\\PID_Controller.mo”
classMgr->GetMoHandler()->OpenFile(str_file.toStdWString());

# NewModel

新建模型。

# 语法

/*
	*  @brief 新建模型
	*  @param [in]  class_info  新建模型信息
	*  @return 新建模型的键值
	*/
MWint MwMoHandler::NewModel(const MwNewClassInfo& class_info);

# 说明

用于新建模型文件,可指定模型名称、模型类型、模型存储路径,会自动为模型生成键值(key)。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
MwNewClassInfo new_info("model");
	new_info.strIdent = "new_model";
	new_info.strDescription = "hello world";
class_info.strMoDir = “D:/”;
	bool actual_res = classMgr->GetMoHandler()->NewModel(new_info);

# RenameModel

模型重命名。

# 语法

/**
	* @brief  模型重命名,包括指定的引用点。
	* @param [in]cls_key         模型键值
	* @param [in]new_ident       新的模型名称
	* @param [in]ref_info        引用点集合,空集合则只重命名类型本身
	* @return 是否重命名成功
	*/
bool MwMoHandler::RenameModel(MWint cls_key, 
const std::string& new_ident,
const std::list<MwTypeRefInfo>& ref_info = std::list<MwTypeRefInfo>());

# 说明

模型重命名,包括指定的引用点。通过模型的 key 对模型本身进行重命名,此处需要注意当重命名后模型原来的 key 将无效,需要获取新的 key,可以使用模型名获取,即调用 GetKeyByTypeName。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
std::string new_ident = “Model1”
bool res  
= classMgr->GetMoHandler()->RenameModel(cls_key,new_ident);

# LoadMoLibrary

打开模型库。

# 语法

/*
	*  @brief 打开模型库
	*  @param [in]  strLibName  模型库名称
	*  @param [in]  strLibVersion  模型库版本
	*  @return 模型库是否打开成功
	*/
bool MwMoHandler::LoadMoLibrary(
const std::string& str_lib_name, 
const std::string& str_lib_version);

# 说明

一般用于加载带版本号的模型库,例如 Modelica 3.2.1,也可加载用户自己的模型库文件,可将模型库放在bin/Library目录下,并按照内置库模型库的放置规则进行相关配置,即可直接使用该接口加载内置模型库。
内置模型库放置规则:(1)内置模型库放在软件安装包或者 SDK 安装包下 bin 目录中的 Library 文件夹下(2)模型库文件夹命名为名称+空格+版本号(3)模型库文件夹下放置名为 MWorksCustomLibrary.ini 内容为空的文件,该文件标志为可加载的内置库文件夹。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
bool is_success = 
classMgr->GetMoHandler()->LoadMoLibrary("Modelica", "3.2.1");

# SaveModel

将模型保存到文件中。

# 语法

/*
	*  @brief 将模型保存到文件中
	*  @param [in]  model_name  模型名
	*  @param [in]  save_encoding 采用编码方式(-1-默认(同原来模型编码方式),0-ANSI,1-UNI16_LE,2-UNI16_BE,3-UTF_8)
	*  @param [in]  ignore_encoding_lost 是否忽略编码转换时字符丢失,默认是false
	*  @note  根据输入模型查找到模型所在文件,然后保存文件中的唯一顶层模型
	*/
MWstatus MwMoHandler::SaveModel(
const std::string& model_name, 
bool ignore_encoding_lost=false, 
int save_encoding=-1);

# 说明

保存模型,对模型进行相关修改后,如设置模型参数,需调用该接口对模型进行保存。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
ClassMgrPtr->GetMoHandler()->SaveModel(ClassMgrPtr->GetMoHandler()->GetFullnameProp(top_class_key)) == MWStat_Ok)

# UnloadModel

卸载模型。

# 语法

/*
	*  @brief 卸载模型
	*  @param [in]  model_name  模型名称
	*  @return 模型库是否卸载成功
	*/
bool MwMoHandler::UnloadModel(const std::string& model_name);

# 说明

将模型从内存中卸载,不会删除本地文件,若移除的模型处于package中整个package模型将被卸载。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
std::string mo_name = ClassMgrPtr->GetMoHandler()->GetFullnameProp(mo_key);
	ClassMgrPtr->GetMoHandler()->UnloadModel(mo_name);

# DuplicateModel

模型复制。

# 语法

/**
	* @brief 模型复制
	* @param [in]cls_key             模型键值
	* @param [in/out]new_ident       复制后模型的新名字
	* @param [in]new_par_key         复制后模型的新父类键值
	* @param [in/out]storage_loc     复制后模型的存储位置,不指定则不自动设置新模型文件路径
	* @return new_cls_key       复制后模型的键值
	* @note 复制后的模型文件名跟模型名一致,调用者负责文件可覆盖性检查并提醒用户
	*/ 
MWint MwMoHandler::DuplicateModel(
MWint cls_key, 
const std::string& new_ident, 
 MWint new_par_key, 
const std::wstring& storage_loc = std::wstring());

# 说明

复制模型,并可输入复制后的名称,若复制后的模型文件名跟模型名一致调用者负责文件可覆盖性检查并提醒用户。

# 示例

MwClassManager* classMgr = new MwClassManager();
classMgr->Initialize();
MwMoHandlerPtr->DuplicateModel(cls_key, ident.toStdString(), parentKey);