主要内容

Simulink.ModelReference.protect

对引用模型的内容进行模糊处理以保护知识产权

说明

harnessHandle = Simulink.ModelReference.protect(mdl)mdl 指定的模型创建受保护模型。受保护模型与源模型具有相同的名称,但文件扩展名为 .slxp。默认情况下,软件将受保护模型放置在当前工作文件夹中。

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

示例

harnessHandle = Simulink.ModelReference.protect(mdl,Name=Value) 支持上述语法中的输入参量,且可使用一个或多个名称-值参量指定选项。例如,要收集一个工程中的依赖项,请将 Project 设置为 true

示例

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

示例

示例

全部折叠

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

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

保护引用的模型。

mdl = "CounterAlgorithm";
Simulink.ModelReference.protect(mdl);

Simulink.ModelReference.protect 函数在当前工作文件夹中创建一个名为 CounterAlgorithm.slxp 的受保护模型。

在基础工作区中,该函数为框架句柄返回 0,因为模型保护过程默认不创建框架模型。

Model 模块未指定文件扩展名时,该模块将引用受保护模型,而不是原始模型。默认情况下,引用受保护模型的模型可以在普通、加速或快速加速模式下运行。

当您为受保护模型生成代码时,引用该受保护模型的模型可以支持代码生成。

例如,当您保护名为 CounterAlgorithm 的引用模型时,将生成 C 和 C++ 代码。

打开一个包含引用模型的示例。

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

保护该引用模型,为受保护模型生成 C 和 C++ 代码,并且不对生成代码进行混淆处理。为受保护模型生成可读代码有助于接收方将受保护模型代码与他们自己的代码进行集成。

mdl = "CounterAlgorithm";
Simulink.ModelReference.protect(mdl, Mode="CodeGeneration", ...
ObfuscateCode=false);

该函数创建一个名为 CounterAlgorithm.slxp 的受保护模型。引用该受保护模型的模型可以支持 C 和 C++ 代码生成。

再如,当您保护名为 hdlcoder_referenced_model_gain 的引用模型时生成 HDL 代码。

打开一个包含引用模型的示例。

mdl = "hdlcoder_referenced_model_gain";
openExample(mdl)

保护该引用模型,并为受保护模型生成 HDL 代码。

Simulink.ModelReference.protect(mdl, Mode="HDLCodeGeneration");

该函数创建一个名为 hdlcoder_referenced_model_gain.slxp 的受保护模型。引用该受保护模型的模型可以支持 HDL 代码生成。

要创建一个支持 C、C++ 和 HDL 代码生成的受保护模型,请将 Mode 设置为 "CodeGeneration",并将 hdl 设置为 true

当您计划与第三方共享受保护模型时,请将受保护模型、框架模型和支持文件一起打包到一个工程中。

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

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

保护引用模型,并收集一个工程中的受保护模型的依赖项。(可选)生成描述支持的功能的报告。

mdl = "CounterAlgorithm";
Simulink.ModelReference.protect(mdl, Project=true, Report=true);

该函数创建一个名为 CounterAlgorithm.slxp 的受保护模型和一个名为 CounterAlgorithm_protected.mlproj 的工程存档。

该工程存档包含:

  • 名为 CounterAlgorithm.slxp 的受保护模型

  • 名为 CounterAlgorithm_harness.slx 的框架模型

  • 名为 BusTypes.sldd 的数据字典

  • 名为 CounterAlgorithm_harness.slxc 的 Simulink® 缓存文件

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

要与第三方共享受保护模型,请共享工程存档。有关如何创建工程存档的详细信息,请参阅共享工程

有关接收方如何使用受保护模型和工程存档的信息,请参阅引用来自第三方的受保护模型

受保护模型会自动存储一些信息,例如设计文件的名称和版本以及用于创建受保护模型的平台。当一个持续集成系统创建受保护模型时,请考虑包含来源信息,例如作业编号、Git™ 提交或与创建受保护模型关联的持续集成系统标记。

例如,假设您使用 Jenkins® 进行持续集成。创建一个包含受保护模型来源信息的标记。例如,使用来自 Jenkins 环境的 GIT_COMMITBUILD_ID 变量构造该标记。

JenkinsInfo = [getenv("GIT_COMMIT")+"@"+getenv("BUILD_ID")];

保护该模型,并将该标记包含在文件来源信息中。(可选)生成包含用于生成受保护模型的模型版本的报告。在此示例中,要保护的模型由 mdl 指定。

Simulink.ModelReference.protect(mdl, Tag=JenkinsInfo, Report=true);

该函数创建一个受保护模型。要获取存储在标记中的信息,请打开受保护模型报告或使用 slxpinfo 函数。

要对引用受保护模型的模型进行仿真,您可能需要在基础工作区或数据字典中定义变量。例如,CounterAlgorithm 模型需要用于指定模型根输入端口和输出端口上的总线的变量。当您发布受保护模型时,必须包含必需变量的定义,否则该模型将不可用。

提示

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

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

openExample('simulink/ComponentInterfaceSpecificationUsingBusesExample')

生成受保护模型,为受保护模型创建一个框架模型,并确定受保护模型所需的变量。

mdl = "CounterAlgorithm";
[harnessHandle,neededVars] = Simulink.ModelReference.protect(mdl, ...
Harness=true)

框架模型句柄由 harnessHandle 给出。

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

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

输入参数

全部折叠

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

数据类型: char | string

名称-值参数

全部展开

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

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

文件创建选项

全部展开

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

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

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

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

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

提示

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

依赖项

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

数据类型: logical

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

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

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

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

依赖项

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

数据类型: char | string

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

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

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

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

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

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

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

依赖项

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

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

数据类型: logical

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

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

依赖项

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

数据类型: char | string

自 R2024b 起

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

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

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

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

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

数据类型: char | string

自 R2024b 起

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

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

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

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

数据类型: logical

功能选项

全部展开

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

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

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

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

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

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

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

依赖项

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

数据类型: logical

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

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

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

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

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

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

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

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

示例: Simulink.ModelReference.protect(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.protect(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.protect(mdl,CodeInterface="Top model")

依赖项

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

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

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

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

提示

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

依赖项

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

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

数据类型: logical

自 R2022a 起

用于仿真的可调参数,指定为 "None"{}"All"、字符串数组或字符向量元胞数组。

指定您要接收方能够在仿真期间进行调节的来自外部数据源的参数。

模型保护过程遵循模型工作区中参数的可调性。模型参量本质上是可调的。您无需指定模型参量的可调性。

当您保护引用一个或多个受保护模型的模型时,请将每个引用的受保护模型的可调参数指定为对父模型也是可调的。要获取受保护模型的可调参数列表,请使用 Simulink.ProtectedModel.getTunableParameters 函数。

有关用于仿真的可调参数的详细信息,请参阅使用模块参数值进行调优和试验

示例: Simulink.ModelReference.protect(mdl,TunableParameters=["param1","param2"])

数据类型: char | string | cell

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

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

数据类型: cell

保护选项

全部展开

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

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

依赖项

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

数据类型: logical

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

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

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

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

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

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

依赖项

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

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

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

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

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

数据类型: logical

使用数字证书签署受保护模型的选项,指定为用于指定数字证书的字符向量或字符串标量。如果证书文件受密码保护,请在使用证书之前使用 Simulink.ModelReference.ProtectedModel.setPasswordForCertificate 函数提供密码。

示例: Simulink.ModelReference.protect(mdl,Sign="certificate_file.pfx")

数据类型: char | string

创建可修改的受保护模型的选项,指定为布尔值。

要使用此选项,请执行以下操作:

示例: Simulink.ModelReference.protect(mdl,Modifiable=true)

数据类型: logical

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

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

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

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

依赖项

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

输出参量

全部折叠

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

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

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

该元胞数组包括:

  • 可调参数

  • 模型接口使用的参数

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

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

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

版本历史记录

在 R2012b 中推出

全部展开