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_COMMIT 和 BUILD_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) 指定为受保护模型生成的经过模糊处理的代码,并且只有生成代码中的二进制文件和头文件对受保护模型的用户可见。
文件创建选项
用于收集工程中依赖项的选项,指定为 false 或 true。
指定是否将支持文件(包括框架模型)与受保护模型一起打包到工程存档中。支持文件的类型和数量取决于受保护模型。支持文件的示例是具有基础工作区定义的 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)
依赖项
数据类型: logical
受保护模型的文件夹,指定为字符向量或字符串标量。
示例: Simulink.ModelReference.protect(mdl,Path="C:\Work")
依赖项
受保护模型必须位于 MATLAB® 路径中。
数据类型: char | string
自 R2024b 起
其他信息的自定义文本字符串,指定为字符向量或字符串标量。
将受保护模型追溯到设计文件的对应版本的能力对于调试很有用。要在受保护模型中存储文件来源信息,请使用与创建受保护模型相关联的信息(如作业号、Git 提交或持续集成系统标记)来指定自定义文本标记。
标记长度不能超出 256 个字符。
要基于环境变量生成标记,请使用 getenv 函数。
示例: Simulink.ModelReference.protect(mdl,Tag=myTag)
数据类型: char | string
功能选项
选择是否生成报告,指定为布尔值。
要查看报告,请执行以下操作之一:
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" 时,此参量才会影响输出。
选择是否对受保护模型进行加密,指定为布尔值。
当您在保护期间指定了密码或使用以下函数时,此选项适用:
用于模型的只读视图的密码:
Simulink.ModelReference.ProtectedModel.setPasswordForView用于仿真的密码:
Simulink.ModelReference.ProtectedModel.setPasswordForSimulation用于代码生成的密码:
Simulink.ModelReference.ProtectedModel.setPasswordForCodeGeneration用于 HDL 代码生成的密码:
Simulink.ModelReference.ProtectedModel.setPasswordForHDLCodeGeneration(HDL Coder)
要将指定的密码应用于受保护模型,请将 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.ProtectedModel.setPasswordForModify函数添加用于修改的密码。如果在创建可修改的受保护模型时尚未添加密码,系统将提示您创建一个密码。首先使用
Simulink.ModelReference.ProtectedModel.setPasswordForModify函数提供修改密码,然后修改受保护模型的选项。然后,使用Simulink.ModelReference.modifyProtectedModel函数更改选项。
示例: 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"。
输出参量
备选方法
版本历史记录
在 R2012b 中推出新 Tag 参量允许您使用与受保护模型相关的信息来指定自定义文本。
将受保护模型追溯到设计文件的对应版本的能力对于调试很有用。要在受保护模型中存储文件来源信息,请使用与创建受保护模型相关联的信息(如作业号、Git 提交或持续集成系统标记)来指定自定义文本标记。
当为具有模型参量的受保护模型创建框架模型时,框架模型对 Model 模块使用默认实例参数值。以前,框架模型不一致地应用实例参数值。
当您将 Mode 设置为 'CodeGeneration' 时,受保护模型支持外部模式仿真。
默认 Mode 值的名称已从 'Accelerator' 更改为 'Simulation'。默认值的行为没有更改。
不推荐将 Mode 设置为 'Accelerator'。请将 Mode 设置为 'Simulation'。
'Simulation'和'Accelerator'的行为相同。'Simulation'与“创建受保护模型”对话框中的仿真选项的作用更加一致。'Accelerator'仅指其中一种受支持的仿真模式。引用支持仿真的受保护模型的模型可以在普通、加速或快速加速模式下运行。
目前没有删除 'Accelerator' 的计划。
不推荐将 Mode 设置为 'Normal'。请将 Mode 设置为 'Simulation'。
当您将
Mode设置为'Normal'时,该函数会创建一个受保护模型,仅当父模型在普通模式下仿真时,该模型才支持仿真。'Simulation'与“创建受保护模型”对话框中的仿真选项的作用更加一致。当您将Mode设置为'Simulation'时,该函数会创建一个受保护模型,该模型在父模型以普通、加速或快速加速模式进行仿真时支持仿真。
目前没有删除 'Normal' 的计划。
Mode 参量的默认值为 'Accelerator'。引用受保护模型的模型可以在普通、加速或快速加速模式下运行。
通过此更改,“创建受保护模型”对话框与 Simulink.ModelReference.protect 函数将使用相同的默认模型保护模式。
以前,Mode 参量的默认值为 'Normal'。'Normal' 模型保护模式限制受保护模型的使用,使得受保护模型仅在父模型以普通模式进行仿真时才支持仿真。
您必须使用 TunableParameters 名称-值参量来指定希望在仿真期间可调的受保护模型的参数。默认情况下,仿真期间没有参数是可调的。
要获取受保护模型的可调参数列表,请使用 Simulink.ProtectedModel.getTunableParameters 函数。
以前,当一个参数的代码生成存储类设置为 Auto 以外的值时,该参数是可调的。默认情况下,单个数据元素的存储类为 Auto。
当您创建受保护模型时,您可以自动将它与其依赖项和框架模型一起打包到工程存档中。当接收方提取工程存档的内容并打开框架模型时,他们应该能够对受保护模型进行仿真,而不需要定义缺失的变量或对象。在共享工程存档之前,请检查工程是否包含所需的支持文件,并根据需要更新框架模型。
使用 Project 以将受保护模型、其依赖项及其框架模型保存到工程存档中 (.mlproj)。有了工程存档,您可以在单个文件中共享工程。
使用 ProjectName 指定自定义工程名称。
有关详细信息,请参阅Package and Share Protected Models。
另请参阅
工具
函数
Simulink.ModelReference.modifyProtectedModel|Simulink.ModelReference.ProtectedModel.setPasswordForModify|Simulink.ModelReference.ProtectedModel.setPasswordForCodeGeneration|Simulink.ModelReference.ProtectedModel.setPasswordForHDLCodeGeneration(HDL Coder) |Simulink.ModelReference.ProtectedModel.setPasswordForSimulation|Simulink.ModelReference.ProtectedModel.setPasswordForView|Simulink.ModelReference.ProtectedModel.clearPasswords|Simulink.ModelReference.ProtectedModel.clearPasswordsForModel|Simulink.ProtectedModel.getTunableParameters
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)