主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

Simulink.ModelReference.modifyProtectedModel

修改现有受保护模型

说明

harnessHandle = Simulink.ModelReference.modifyProtectedModel(mdl) 修改由 mdl 指定的现有受保护模型的选项。如果不指定名称-值参量,则修改后的受保护模型将更新为默认值,并且仅支持仿真。

当模型保护创建并打开框架模型时,框架模型的句柄由 harnessHandle 返回。默认情况下,harnessHandle 返回 0

示例

harnessHandle = Simulink.ModelReference.modifyProtectedModel(mdl,Name=Value) 支持上述语法中的输入参量,且可使用一个或多个名称-值参量指定选项。例如,更改只读视图、仿真和代码生成的加密密码。当您向受保护模型添加功能或更改加密密码时,非受保护模型必须可用。软件会在 MATLAB® 路径中搜索模型。

示例

[harnessHandle,neededVars] = Simulink.ModelReference.modifyProtectedModel(___)neededVars 中返回受保护模型使用的基础工作区变量的名称。指定上述语法中的一个输入参量组合。

示例

示例

全部折叠

创建一个支持代码生成的可修改的受保护模型,然后将受保护模型重置为使用默认值。

打开包含名为 sldemo_mdlref_counter 的引用模型的示例。

mdl = "sldemo_mdlref_counter";
openExample(mdl)

添加修改受保护模型时的密码。如果跳过此步骤,则当创建可修改的受保护模型时,系统会提示您设置密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

创建一个支持代码生成的可修改的受保护模型。

Simulink.ModelReference.protect(mdl, Mode="CodeGeneration", ...
Modifiable=true, Report=true);

提供修改受保护模型的密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

修改模型以使用默认值。

Simulink.ModelReference.modifyProtectedModel(mdl);

生成的受保护模型会更新为默认值,并且仅支持仿真。

创建一个支持代码生成和 Web 视图的可修改的受保护模型,然后修改受保护模型以删除 Web 视图支持。

打开包含名为 sldemo_mdlref_counter 的引用模型的示例。

mdl = "sldemo_mdlref_counter";
openExample(mdl)

添加修改受保护模型时的密码。如果跳过此步骤,则当创建可修改的受保护模型时,系统会提示您设置密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

创建一个支持代码生成和 Web 视图的可修改的受保护模型。

Simulink.ModelReference.protect(mdl, Mode="CodeGeneration", ...
Webview=true, Modifiable=true, Report=true);

提供修改受保护模型的密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

从您创建的受保护模型中删除对 Web 视图的支持。

Simulink.ModelReference.modifyProtectedModel(mdl, ...
Mode="CodeGeneration", Report=true);

更改可修改的受保护模型的加密密码。

打开包含名为 sldemo_mdlref_counter 的引用模型的示例。

mdl = "sldemo_mdlref_counter";
openExample(mdl)

添加修改受保护模型时的密码。如果跳过此步骤,则当创建可修改的受保护模型时,系统会提示您设置密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

添加受保护模型用户在生成代码时必须提供的密码。

Simulink.ModelReference.ProtectedModel.setPasswordForSimulation(...
mdl, "simpassword");

创建一个可修改的受保护模型,该模型包含报告并支持采用加密的代码生成。

Simulink.ModelReference.protect(mdl, Mode="CodeGeneration", ...
Encrypt=true, Modifiable=true, Report=true);

提供修改受保护模型的密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

更改仿真的加密密码。

Simulink.ModelReference.modifyProtectedModel(mdl, ...
Mode="CodeGeneration", Encrypt=true, Report=true, ...
ChangeSimulationPassword={'simpassword','new_password'});

为现有受保护模型创建框架模型。

打开包含名为 CounterAlgorithm 的引用模型的示例。

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

添加修改受保护模型时的密码。如果跳过此步骤,则当创建可修改的受保护模型时,系统会提示您设置密码。

mdl = "CounterAlgorithm";
Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

创建一个可修改的受保护模型,该模型包含报告并支持采用加密的代码生成。

Simulink.ModelReference.protect(mdl, Mode="CodeGeneration", ...
Modifiable=true, Report=true);

提供修改受保护模型的密码。

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
mdl, "password");

确定受保护模型所需的变量。

[harness,neededVars] = Simulink.ModelReference.modifyProtectedModel(...
mdl, Mode="CodeGeneration", Report=true);

您必须发送到接收方的变量由 neededVars 给出。neededVars 的值是元胞数组,包含受保护模型所需的变量的名称。但是,该元胞数组还可以包含模型不需要的变量的名称。

提示

要将所需的变量定义与受保护模型自动打包在一个工程中,请将 Project 设置为 true

在共享受保护模型之前,请编辑 neededVars 以删除模型不需要的任何变量的名称。将所需变量保存在数据字典中。

输入参数

全部折叠

模型名称,指定为字符串或字符向量。指定要修改的受保护模型的名称或引用受保护模型的 Model 模块的路径。

数据类型: char | string

名称-值参数

全部展开

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但参量对组的顺序无关紧要。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Mode="CodeGeneration",OutputFormat="Binaries",ObfuscateCode=true) 指定为受保护模型生成的经过模糊处理的代码,并且只有生成代码中的二进制文件和头文件对受保护模型的用户可见。

文件选项

全部展开

自 R2023b 起

用于收集工程中依赖关系的选项,指定为 falsetrue

指定是否将支持文件(包括框架模型)与受保护模型一起打包到工程存档中。支持文件的类型和数量取决于受保护模型。支持文件的示例是具有基础工作区定义的 MAT 文件和删减成相关定义的数据字典。支持文件不受保护。

  • false - 仅创建受保护模型。如果该受保护模型有依赖关系,您必须单独共享它们。同样,如果为受保护模型创建框架模型,则必须单独共享该框架模型。

  • true - 创建一个工程存档 (.mlproj),其中包含受保护模型、其依赖关系及其框架模型。支持文件不受保护。工程存档是一个单独的文件,可方便地进行共享。要创建交互式工程,请打开工程存档。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Project=true)

提示

在共享工程之前,请检查工程是否包含必需的支持文件。如果缺失支持文件,对相关的框架模型进行仿真或生成代码有助于识别这些文件。将缺失的依赖关系添加到工程中,并根据需要更新框架模型。有关详细信息,请参阅管理工程文件

依赖关系

要将 Project 设置为 true,请将 Mode 设置为支持仿真的值。例如,将 Mode 设置为 "Simulation"(默认值)。

数据类型: logical

自 R2023b 起

自定义工程名称,指定为字符向量或字符串标量。

指定包含生成文件的工程存档的名称。存档中的工程使用相同的名称。

如果不指定自定义工程名称,则工程的默认名称为受保护模型名称后跟 _protected

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Project=true,ProjectName="MyProject")

依赖关系

要启用此参量,请将 Project 设置为 true

数据类型: char | string

选择是否创建框架模型,指定为布尔值。

指定是否为受保护模型创建框架模型的位置。框架模型为受保护模型提供隔离的环境,该模型由 Model 模块引用。

  • false - 不为受保护模型创建框架模型。

  • true - 为受保护模型创建框架模型。

当您为依赖基础工作区定义的受保护模型创建框架模型时,软件会创建一个包含基础工作区定义的 MAT 文件。

框架模型必须能够访问支持文件,例如具有基础工作区定义的 MAT 文件或数据字典。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Harness=true)

依赖关系

  • 要将 Harness 设置为 true,请将 Mode 设置为支持仿真的值。例如,将 Mode 设置为 "Simulation"(默认值)。

  • 当您将 Project 设置为 true 时,Harness 将设置为 true

数据类型: logical

受保护模型的文件夹,指定为字符向量或字符串标量。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Path="C:\Work")

依赖关系

受保护模型必须位于 MATLAB 路径中。

数据类型: char | string

自 R2024b 起

其他信息的自定义文本字符串,指定为字符向量或字符串标量。

将受保护模型追溯到设计文件的对应版本的能力对于调试很有用。要在受保护模型中存储文件来源信息,请使用与创建受保护模型相关联的信息(如作业号、Git™ 提交或持续集成系统标记)来指定自定义文本标记。

标记长度不能超出 256 个字符。

要基于环境变量生成标记,请使用 getenv 函数。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Tag=myTag)

数据类型: char | string

自 R2024b 起

编译过程信息的详尽输出,指定为数值或逻辑值 1 (true) 或 0 (false)。

默认情况下,模型保护过程显示有限的编译过程信息。要在模型保护期间显示详尽的编译过程信息,请将 Verbose 设置为 true

为了控制编译过程信息的显示,模型保护过程会临时覆盖详尽的加速编译详尽编译配置参数的值。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Verbose=true)

数据类型: logical

功能选项

全部展开

选择是否生成报告,指定为布尔值。

要查看报告,请执行以下操作之一:

  • Simulink® 编辑器:在 Model 模块上,右键点击受保护模型徽章图标 。然后,选择显示报告

  • MATLAB 命令行窗口:使用 Simulink.ProtectedModel.open 函数。例如,要显示名为 sldemo_mdlref_counter 的受保护模型的报告,请输入以下命令。

    Simulink.ProtectedModel.open("sldemo_mdlref_counter","report");

报告以 HTML 格式生成。它包括有关受保护模型的环境、功能和接口的信息。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Report=true)

依赖关系

要将 Report 设置为 true,请将 Mode 设置为支持仿真的值。例如,将 Mode 设置为 "Simulation"(默认值)。

数据类型: logical

包含只读 Web 视图的选项,指定为布尔值。

指定是否共享接收者可以在 Web 浏览器中查看的 Simulink 模型的交互式呈现。此模型的只读 Web 视图包括模型的内容和模块参数。

  • false - 不共享您保护的模型的 Web 视图。

  • true - 共享您保护的模型的 Web 视图。

要打开受保护模型的 Web 视图,请执行以下操作之一:

  • “文件”面板:双击受保护模型文件 (.slxp)。

  • MATLAB 命令行窗口:使用 Simulink.ProtectedModel.open 函数。例如,要显示名为 sldemo_mdlref_counter 的受保护模型的 Web 视图,请输入以下命令。

    Simulink.ProtectedModel.open("sldemo_mdlref_counter","webview");

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Webview=true)

依赖关系

创建模型的只读 Web 视图需要 Simulink Report Generator™ 许可证。

数据类型: logical

模型保护模式,指定为以下值之一:

  • "Simulation" (自 R2023b 起) - 引用受保护模型的模型可以在普通、加速或快速加速模式下运行。

    在 R2023b 之前的版本中: 使用 "Accelerator" 而不是 "Simulation"

  • "CodeGeneration" - 引用受保护模型的模型可以在普通、加速、快速加速或外部模式下运行,并且可以支持 C 和 C++ 代码生成。此选项需要 Simulink Coder™ 许可证。

  • "HDLCodeGeneration" - 引用受保护模型的模型可以在普通、加速或快速加速模式下运行,并且可以支持 HDL 代码生成。此选项需要 HDL Coder™ 许可证。

  • "ViewOnly" - 受保护模型仅支持只读 Web 视图。受保护模型不支持仿真或代码生成。此选项需要 Simulink Report Generator 许可证。

有关模型层次结构中仿真模式的信息,请参阅为模型层次结构选择仿真模式

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Mode="Simulation")

生成代码的接口,指定为以下值之一:

  • "Model reference" - 引用受保护模型的 Model 模块可以支持在加速、软件在环 (SIL) 或处理器在环 (PIL) 模式下的 C 和 C++ 代码生成和仿真。对于 SIL 和 PIL 仿真,软件将生成的代码作为使用引用模型的大型应用程序的一部分进行部署。生成的工件与由 slbuild 函数用 "ModelReferenceCoderTarget" 编译设定生成的工件匹配。

  • "Top model" - 引用受保护模型的 Model 模块可以支持加速、软件在环 (SIL) 或处理器在环 (PIL) 模式下的仿真。对于 SIL 和 PIL 仿真,软件将生成的代码作为独立应用程序进行部署。生成的工件与由 slbuild 函数用 "StandaloneCoderTarget" 编译设定生成的工件匹配。

SIL 和 PIL 仿真可以验证受保护模型代码。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,CodeInterface="Top model")

依赖关系

系统目标文件配置参数必须设置为基于 ERT 的系统目标文件,例如 ert.tlc。此选项需要 Embedded Coder® 许可证。

选择是否生成 HDL 代码,指定为布尔值。

要使受保护模型支持仿真、C 和 C++ 代码生成以及 HDL 代码生成,请将 Mode 设置为 "CodeGeneration",将 hdl 设置为 true

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Mode="CodeGeneration",hdl=true)

提示

要使受保护模型支持仿真和 HDL 代码生成但不支持 C 或 C++ 代码生成,请将 Mode 设置为 "HDLCodeGeneration"。您不必将 hdl 设置为 true

依赖关系

  • 要生成 HDL 代码,您必须有 HDL Coder 许可证。

  • 仅当您将 Mode 设置为 "CodeGeneration" 时,此参量才会影响输出。

数据类型: logical

为受保护模型指定回调的选项,指定为由 Simulink.ProtectedModel.Callback 对象组成的元胞数组。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Callbacks={pmcallback_sim,pmcallback_cg})

数据类型: cell

保护选项

全部展开

选择是否对生成的代码进行混淆处理,指定为布尔值。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Mode="CodeGeneration",ObfuscateCode=true)

依赖关系

仅当您将 Mode 设置为 "CodeGeneration" 时,才会应用此选项。HDL 代码生成不支持混淆处理。

数据类型: logical

受保护代码可见性,指定为以下值之一:

  • "CompiledBinaries" - 仅包括生成代码的已编译二进制文件。二进制文件和头文件可见。

  • "MinimalCode" - 只包含用所选编译设置编译代码所需的最少头文件。编译文件夹中的代码可见。接收者可以检查受保护模型报告中的代码,并根据自己的目的重新编译它。

  • "AllReferencedHeaders" - 包括包含路径上的头文件。编译文件夹中的代码可见。代码引用的头文件也可见。

此参量确定为受保护模型生成的代码的哪一部分对用户可见。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Mode="CodeGeneration",OutputFormat="AllReferencedHeaders")

依赖关系

仅当您将 Mode 设置为 "Simulation""Accelerator""CodeGeneration" 时,此参量才会影响输出。

选择是否对受保护模型进行加密,指定为布尔值。

当您在保护期间指定了密码或使用以下函数时,此选项适用:

要将指定的密码应用于受保护模型,请将 Encrypt 设置为 true

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Encrypt=true)

数据类型: logical

更改仿真的加密密码的选项,指定为由两个字符向量组成的元胞数组。第一个向量是旧密码。第二个向量是新密码。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Encrypt=true,ChangeSimulationPassword={'old_password','new_password'})

依赖关系

要启用此参量,请将 Encrypt 设置为 true

数据类型: cell

更改只读视图的加密密码的选项,指定为由两个字符向量组成的元胞数组。第一个向量是旧密码。第二个向量是新密码。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Encrypt=true,ChangeViewPassword={'old_password','new_password'})

依赖关系

要启用此参量,请将 Encrypt 设置为 true

数据类型: cell

更改代码生成的加密密码的选项,指定为由两个字符向量组成的元胞数组。第一个向量是旧密码。第二个向量是新密码。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Encrypt=true,ChangeCodeGenerationPassword={'old_password','new_password'})

依赖关系

要启用此参量,请将 Encrypt 设置为 true

数据类型: cell

为受保护模型文件添加后处理函数的选项,指定为函数句柄。

该函数接受 Simulink.ModelReference.ProtectedModel.HookInfo 对象作为输入变量。此对象提供关于受保护模型创建期间生成的源代码文件和其他文件的信息。该对象还提供有关您不能修改的导出符号的信息。在打包受保护模型之前,软件调用后处理函数。

对于具有顶层模型接口的受保护模型,Simulink.ModelReference.ProtectedModel.HookInfo 对象无法提供有关导出符号的信息。

示例: Simulink.ModelReference.modifyProtectedModel(mdl,Mode="CodeGeneration",CustomPostProcessingHook=@(protectedMdlInf)myHook(protectedMdlInf))

依赖关系

要启用此参量,请将 Mode 设置为 "CodeGeneration"

输出参量

全部折叠

框架模型的句柄,以双精度形式返回。当模型保护不创建框架模型或将框架模型打包到工程存档中时,返回值为 0

要创建在模型保护后打开的框架模型,请将 Harness 设置为 true,将 Project 设置为 false(默认值)。

受保护模型使用的基础工作区变量的名称,以元胞数组形式返回。

该元胞数组包括:

  • 模型接口使用的参数

  • 指定部分数据类型的参数,如总线对象、枚举类型或值类型

  • 数据存储内存使用的参数

该元胞数组还可以包含受保护模型不使用的变量。

版本历史记录

在 R2014b 中推出

全部展开