Main Content

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

Simulink.ModelReference.modifyProtectedModel

修改现有受保护模型

说明

示例

Simulink.ModelReference.modifyProtectedModel(model) 修改从指定的 model 创建的现有受保护模型的选项。如果未指定 Name,Value 对组参量,则修改后的受保护模型将更新为默认值,并且仅支持仿真。

示例

Simulink.ModelReference.modifyProtectedModel(model,Name,Value) 使用由一个或多个 Name,Value 对组参量指定的其他选项。这些选项与 Simulink.ModelReference.protect 函数提供的选项相同。不过,这些选项还带有附加选项,可用于更改只读视图、仿真和代码生成的加密密码。当您向受保护模型添加功能或更改加密密码时,非受保护模型必须可用。软件会在 MATLAB® 路径中搜索模型。如果找不到模型,软件会报告错误。

示例

[harnessHandle] = Simulink.ModelReference.modifyProtectedModel(model,'Harness',true) 为受保护模型创建框架模型。它在 harnessHandle 中返回框架模型的句柄。

[~ ,neededVars] = Simulink.ModelReference.modifyProtectedModel(model) 返回一个元胞数组,其中包含受保护模型所使用的基础工作区变量的名称。

示例

全部折叠

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

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

openExample('sldemo_mdlref_counter');
Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

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

Simulink.ModelReference.protect('sldemo_mdlref_counter','Mode',...
'CodeGeneration','Modifiable',true,'Report',true);

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

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

修改模型以使用默认值。

Simulink.ModelReference.modifyProtectedModel(...
'sldemo_mdlref_counter');

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

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

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

openExample('sldemo_mdlref_counter');
Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

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

Simulink.ModelReference.protect('sldemo_mdlref_counter','Mode',...
'CodeGeneration','Webview',true,'Modifiable',true,'Report',true);

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

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

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

Simulink.ModelReference.modifyProtectedModel(...
'sldemo_mdlref_counter', 'Mode', 'CodeGeneration','Report',true);

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

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

openExample('sldemo_mdlref_counter');
Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

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

Simulink.ModelReference.ProtectedModel.setPasswordForSimulation(...
'sldemo_mdlref_counter','cgpassword');

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

Simulink.ModelReference.protect('sldemo_mdlref_counter','Mode',...
'CodeGeneration','Encrypt',true,'Modifiable',true,'Report',true);

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

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

更改仿真的加密密码。

Simulink.ModelReference.modifyProtectedModel(...
'sldemo_mdlref_counter','Mode','CodeGeneration','Encrypt',true,...
'Report',true,'ChangeSimulationPassword',...
{'cgpassword','new_password'});

为现有受保护模型添加框架模型。

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

openExample('sldemo_mdlref_counter');
Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

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

Simulink.ModelReference.protect('sldemo_mdlref_counter','Mode',...
'CodeGeneration','Modifiable',true,'Report',true);

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

Simulink.ModelReference.ProtectedModel.setPasswordForModify(...
'sldemo_mdlref_counter','password');

为受保护模型添加框架模型。

[harnessHandle] = Simulink.ModelReference.modifyProtectedModel(...
'sldemo_mdlref_counter','Mode','CodeGeneration','Report',true,...
'Harness',true);

输入参数

全部折叠

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

数据类型: char | string

名称-值参数

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

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'Mode','CodeGeneration','OutputFormat','Binaries','ObfuscateCode',true 指定为受保护模型生成经过混淆处理的代码。它还指定只有生成代码中的二进制文件和头文件对受保护模型的用户可见。

文件选项

全部折叠

自 R2023b 起

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

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

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

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

示例: 'Project',true

提示

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

依存关系

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

数据类型: logical

自 R2023b 起

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

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

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

示例: 'ProjectName','myname'

依存关系

要启用 ProjectName,请将 Project 设置为 true

数据类型: char | string

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

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

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

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

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

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

示例: 'Harness',true

依存关系

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

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

数据类型: logical

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

示例: 'Path','C:\Work'

依存关系

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

数据类型: char | string

功能选项

全部折叠

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

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

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

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

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

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

示例: 'Report',true

依存关系

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

数据类型: logical

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

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

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

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

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

  • 当前文件夹浏览器:双击受保护模型文件 (.slxp)。

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

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

示例: '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 许可证。

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

示例: 'Mode','Simulation'

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

  • 模型引用 - 编译模型引用 Simulink Coder 目标。代码是作为模型层次结构的一部分从引用模型生成的。代码生成使用以下命令。

    slbuild('model','ModelReferenceCoderTarget')
  • 顶层模型 - 使用当前模型配置设置,为指定的模型编译独立的 Simulink Coder 二进制可执行文件。此接口还为引用模型编译模型引用代码生成器目标。代码是使用独立的代码接口从顶层模型生成的。代码生成使用以下命令。

    slbuild('model','StandaloneCoderTarget')

您指定的值确定软件在环 (SIL) 和处理器在环 (PIL) 仿真如何为受保护模型部署生成的代码。

  • 模型引用 - 软件将生成的代码作为使用引用模型的大型应用程序的一部分进行部署。

  • 顶层模型 - 软件将生成的代码作为独立应用程序进行部署。

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

要支持为引用受保护模型的模型生成代码,请指定模型引用

不管代码接口如何,您都可以在加速模式下对受保护模型进行仿真。

示例: 'CodeInterface','Top model'

依存关系

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

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

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

示例: 'hdl',true

提示

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

依存关系

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

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

数据类型: logical

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

示例: 'Callbacks',{pmcallback_sim, pmcallback_cg}

数据类型: cell

保护选项

全部折叠

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

示例: 'ObfuscateCode',true

依存关系

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

数据类型: logical

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

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

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

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

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

示例: 'OutputFormat','AllReferencedHeaders'

依存关系

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

选择是否对受保护模型进行加密,指定为布尔值。当您在保护期间指定了密码或使用以下函数时,此选项适用:

示例: 'Encrypt',true

数据类型: logical

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

示例: 'ChangeSimulationPassword',{'old_password','new_password'}

数据类型: cell

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

示例: 'ChangeViewPassword',{'old_password','new_password'}

数据类型: cell

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

示例: 'ChangeCodeGenerationPassword',{'old_password','new_password'}

数据类型: cell

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

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

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

示例: 'CustomPostProcessingHook',@(protectedMdlInf)myHook(protectedMdlInf)

输出参量

全部折叠

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

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

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

该元胞数组包括:

  • 模型接口使用的参数

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

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

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

版本历史记录

在 R2014b 中推出

全部展开