本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

保存模型

如何判断模型需要保存

要判断模型是否需要保存,请查看 Simulink® Editor 的标题栏。如果模型层次结构中的模型需要保存,标题栏中将出现星号(称为修改标志:*)。

要通过编程方式确定模型是否需要保存,请使用模型参数 Dirty。例如:

if strcmp(get_param(gcs,'Dirty'),'on')
	save_system;
end

保存模型

第一次保存模型时,请在 Simulink Editor 中,在 Simulation 选项卡上,点击 Save。为模型文件提供位置和名称。有关名称的要求,请参阅模型名称

要保存之前保存过的模型,请执行以下操作:

  • 要替换文件内容,请在 Simulink Editor 中,在 Simulation 选项卡上,点击 Save

  • 要使用新名称或在新位置保存顶层模型,或者要从 MDL 格式更改为 SLX 格式,请在 Simulink Editor 中,在 Simulation 选项卡上,选择 Save > Save As

    注意

    有关 SLX 格式的详细信息,请参阅将模型升级到 SLX

  • 要用新名称、位置或格式保存引用模型,请将其作为顶层模型打开,然后在 Simulation 选项卡上,选择 Save > Save As

  • 要将顶层模型保存为与早期版本兼容的格式,请在 Simulation 选项卡上,选择 Save > Previous Version。请参阅将模型导出到以前的 Simulink 版本

模型名称

模型文件名必须以字母开头,可以包含字母、数字和下划线。文件名不能为:

  • 语言关键字(例如 ifforend

  • 保留名称:'simulink''sl''sf'

  • MATLAB® 软件命令

模型名称中的字符总数不能超过某个最大值,通常为 63 个字符。要确定您的系统的最大值是否大于 63 个字符,请使用 MATLAB 中的 namelengthmax 命令。

注意

复制和粘贴名称后跟数字顺序(Gain1、Gain2 等)的模块将按照 ASCII 字符的标准排序约定生成模块名称。这种排序方法可能会导致模块名称中出现一串难以理解的数字。如果编号方案对您很重要,请显式命名模块,使复制和粘贴操作生成的模块名称遵循常见的阅读顺序。为此,请在模块名称中使用前导零,例如 Gain001、Gain002 等。

要了解当您指定模型名称时 MATLAB 如何确定调用哪个函数,请参阅函数优先顺序 (MATLAB)。

保存模型时会执行哪些操作?

Simulink 将模型(模块图)和模块属性保存在模型文件中。

如果您指定了任何要在保存前或保存后执行的函数,它们将按以下顺序执行:

  1. 先执行所有模块的 PreSaveFcn 回调例程,然后执行模型的 PreSaveFcn 回调例程。

  2. Simulink 写入模型文件。

  3. 执行所有模块 PostSaveFcn 回调例程,然后执行模型 PostSaveFcn

在保存过程中,Simulink 会维护一个临时备份副本(名为 modelname.bak),用于在发生错误时还原。如果在保存时,或者在保存过程中执行任何回调时发生错误,Simulink 会:

  • 还原原始文件

  • 将发生错误之前保存的任何内容写入到名为 modelname.err 的文件中

  • 发出一条错误消息

保存从 SLX 文件中加载的模型时,原始 SLX 文件必须依然存在。Simulink 对 SLX 文件执行增量加载和保存,因此,如果保存时原始文件不存在,Simulink 将发出警告,告诉您它无法完全重新构造该文件。

将模型保存为 SLX 文件格式

将新模型另存为 SLX

默认情况下,Simulink 将新模型和库保存为 SLX 格式,文件扩展名为 .slx。SLX 是符合开放打包约定 (OPC) 互操作性标准的压缩包。SLX 使用 Unicode® UTF-8 以 XML 和其他国际格式存储模型信息。将 Simulink 模型保存为 SLX 格式:

  • 通常可以减小文件大小(与 MDL 格式相比)。MDL 与 SLX 之间减小的文件大小因模型而异。

  • 解决以前的版本中加载和保存包含韩语和中文字符的 MDL 文件时出现的一些问题。

  • 启用增量加载和保存。Simulink 通过只加载需要的模型部分并且只保存修改的模型部分,来优化性能和内存使用。

您可以使用 Simulink 预设File format for new models and libraries,指定用来保存新模型和库的文件格式。

将模型升级到 SLX

如果您将 MDL 文件升级到 SLX 文件格式,文件中包含的信息与 MDL 文件相同,并且您始终拥有一个备份文件。当前存在的适用于模型的所有功能和 API,例如 get_paramset_param 命令,在使用 SLX 文件格式时依然可用。如果您将 MDL 文件升级到 SLX 文件格式而没有更改模型名称或位置,Simulink 将通过重命名 MDL(如果可写)来创建备份文件。

如果您通过点击 Simulation 选项卡上的 Save 来保存现有 MDL 文件,Simulink 将保留文件的当前格式,并以 MDL 格式保存您的模型。

要将现有 MDL 文件保存为 SLX 文件格式,请执行以下操作:

  1. Simulation 选项卡上,选择 Save > Save As

  2. 保留 Save as type 的默认值 SLX,然后点击 Save

    Simulink 将以 SLX 格式保存您的模型,并通过将 MDL(如果可写)重命名为 mymodel.mdl.releasename(例如 mymodel.mdl.R2010b)来创建备份文件。

此外,还可以使用 save_system

save_system mymodel mymodel.slx
此命令将创建 mymodel.slx,如果现有文件 mymodel.mdl 可写,则将其重命名为 mymodel.mdl.releasename

SLX 文件的优先级高于 MDL 文件,因此,如果存在两个同名文件,而您没有指定文件扩展名,则将加载 SLX 文件。

Simulink Projects 可以帮助您将文件迁移到 SLX。有关示例,请参阅Convert from MDL to SLX in a Project and Preserve Revision History

小心

如果您使用第三方源代码管理工具,请务必将模型文件扩展名 .slx 注册为二进制文件格式。否则,当您提交 SLX 文件时,这些第三方工具可能会导致文件损坏。

使用 SLX 时可能存在兼容性问题的操作发生的情况 操作
硬编码引用带有 .mdl 扩展名的文件名。 脚本找不到或无法处理用新文件扩展名 .slx 保存的模型。 确保您的代码兼容 .mdl.slx 扩展名。
使用函数(如 whichwhat),而不是文件名。
第三方源代码管理工具默认情况下采用文本格式。 提交二进制格式的 SLX 文件可能导致文件被第三方工具所破坏。使用第三方源代码管理工具将 .slx 注册为二进制文件格式。建议对 .mdl 文件也如此处理。请参阅Register Model Files with Source Control Tools
更改字符编码。某些情形已得到改进,例如,SLX 解决了以前的版本中加载和保存包含韩语和中文字符的 MDL 文件时出现的一些问题。但是,在不同的区域设置之间共享模型依然存在问题。请参阅 SLX 文件和字符编码

MDL 和 SLX 文件内容的格式可能随时更改。要处理模型数据,请使用文档中介绍的 API(例如 get_paramfind_systemSimulink.MDLInfo)。

保存具有不同字符编码的模型

MDL 文件和字符编码

当您保存模型时,将使用当前字符编码方式对模型文件中存储的文本进行编码。对于 MDL 文件,如果您原来保存模型时使用的编码方式与当前编码方式不同,可能会导致模型损坏。

如果您更改字符编码方式,可能会引入当前编码方式无法表示的字符。如果是这种情况,模型将另存为 model.mdl.err(其中 model 是模型名称),而保留原始模型文件不变。Simulink 还会显示一条错误消息,指出无法表示的第一个字符所在的行号和列号。

要修复此错误,请执行以下操作之一:

  • 以 SLX 格式保存模型(请参阅将模型保存为 SLX 文件格式)。

  • 找到这些字符并逐个删除。

    1. 使用文本编辑器,在 .err 文件中找到保存时显示的错误消息中指示的位置处的字符。

    2. 在打开的模型中找到并删除对应的字符,然后重新保存模型。

    3. 重复此过程,直到您能够成功保存模型,而不发生任何错误为止。

模型的原始编码方式也许能够显示您在当前会话中所做的所有文本更改,但有可能不正确。例如,假设您在会话中打开一个模型,模型的原始编码方式为 A,会话的当前编码方式为 B。再假设您编辑了该模型,引入一个在 A 和 B 中具有不同编码的字符,然后保存模型。进一步假设字符 x 在 B 中的编码与字符 y 在 A 中的编码相同,假如您在 B 有效时在模型中插入了字符 x,保存模型,然后使用 A 重新打开模型,则 Simulink 软件会将字符 x 显示为 y。为了提醒您发生此类损坏的可能性,每当您保存模型时,如果模型的当前编码方式与原始编码方式不同,但原始编码方式可以对保存到模型文件中的所有字符进行编码(但可能不正确)时,就会显示警告消息。

SLX 文件和字符编码

将 Simulink 模型保存为 SLX 格式通常可以减小文件大小,并解决在以前的版本中加载和保存包含韩语和中文字符的 MDL 文件时出现的一些问题。

选择模型文件格式时的注意事项:

  • 如果您要加载并保存包含韩语或中文字符的模型,请使用 SLX

  • 如果您希望通过压缩模型文件而获益,请使用 SLX

  • 不管您使用 SLX 还是 MDL,如果模型中包含当前区域设置不支持的字符,Simulink 都能检测出来并发出警告。对于 SLX,您可以使用 Model Advisor 来帮助您,请参阅Check model for foreign characters

将模型导出到以前的 Simulink 版本

您可以将使用最新版本的 Simulink 软件创建的模型导出(保存)为旧版本软件使用的格式。例如,要与只能访问旧版本 Simulink 产品的同事共享模型时。

要将模型导出为旧版本格式,请执行以下操作:

  1. 在 Simulink Editor 中,在 Simulation 选项卡上,点击 Save。此操作用最新版本的 Simulink 保存一个副本。这一步可以避免兼容性问题。

  2. 在 Simulink Editor 中,在 Simulation 选项卡上,选择 Save > Previous Version

  3. 在 Export to Previous Version 对话框中,从 Save as type 列表中选择要将模型导出到的旧版本。此列表支持过去 7 年的版本。

  4. 点击 Save

当您将模型导出为旧版本格式时,不管模型中是否包含在该版本之后引入的模块和功能,都会以旧版本格式保存模型。如果模型中包含的模块或使用的功能是在旧版本之后引入的,则当您在旧版本 Simulink 软件中运行模型时,可能无法得到正确的结果。而且,Simulink 会将旧版本之后的模块转换为空的黄色封装 Subsystem 模块。例如,如果您使用 save_system 将模型导出到版本 R2007b,而模型中包含 Polynomial 模块,则 Simulink 会将 Polynomial 模块转换为空的黄色封装 Subsystem 模块。Simulink 还会从模型中删除任何不支持的功能。请参阅 save_system

从一个旧版本 Simulink 保存到另一个旧版本

您可以打开在旧版本 Simulink 中创建的模型,并将其导出到另一个旧版本。如果您需要将模型从一个旧版本保存到另一个旧版本,为了防止出现兼容性问题,请按以下步骤操作。

  1. 使用最新版本的 Simulink 打开用旧版本创建的模型。

  2. 在您进行任何更改之前,通过点击 Simulation 选项卡上的 Save,用最新版本保存模型。

    用最新版本保存模型之后,您可以根据需要进行更改并重新保存。

  3. 将模型保存为 Simulink 的旧版本格式。在 Simulation 选项卡上,选择 Save > Previous Version

  4. 启动旧版本 Simulink,并使用它打开您导出到该版本的模型。

  5. 将模型保存为旧版本格式。

现在即可在旧版本 Simulink 中使用该模型了,就好像它是在该版本中创建的一样。

另请参阅 Simulink 预设,它们可以帮助您处理旧版本的模型:

另请参阅

相关主题