1.将子系统转换为模型的引用:
(1)将待转换的部分使用CTRL + G合成子系统,并为该子系统命名保存。
(2)使用如下的matlab语句进行子系统向模型引用转换
Simulink.SubSystem.convertToModelReference(...
'simulink文件名称/要保护的子系统名称', ...
'新模型引用名称,与之前的子系统名称不同', ...
'AutoFix',true,...
'ReplaceSubsystem',true,...
'CheckSimulationResults',true);
(3)将转换后的模型引用进行保存。
2.模型保护:
(1)对上述保存的模型引用右键,选择Subsystem&Model Reference->Create Protected Model for Selected Model Block.
(2)出现对话框,勾选simulink与use generated code,并填写密码(每一行填写相同的密码,该密码至少为4位)。
(3)存储地址与create hardness model for protected model,可以选择性勾选。
(4)点击create,构建受保护模型。
(5)文件夹中出现的后缀为.slxp的即为创建的受保护模型。
3.使用受保护的模型
(1)对模型左下角的盾牌符号右键,选择Authorize,输入Simulation与Code Generation的密码,点击OK,即可对该模型进行仿真与代码生成。
(2)授权的时间为本次matlab软件使用时间。
上述方法针对于2016b等高版本,该方法在2012b等低版本上会出现不适配的情况,所以做新的方法说明:
1.子系统转换为模型引用
(1)右键子系统->Block Parameters->勾选 Treat as atomic unit -> Sample time = -1->Apply.
(2)右键子系统->Subsystem & Model Reference->Convert Subsystem to -> Referenced Model(如果出现提示,选择continue conversion)。
(3)模型引用生成,保存新的simulink模型引用。
2.模型引用转换为受保护的模型
(1)右键模型引用-> Subsystem & Model Reference->Create Protected Model for Selected Model Block.
(2)出现对话框,如果需要将模型转换为代码,则勾选Include generated code(Create harness model for protecred model按需勾选)。
(3)点击create,完成创建。
3.受保护模型的使用
(1)点击受保护模型,出现模型说明文档,点击代码生成(勾选include generated code),则直接生成代码,无需填写密码。
1.如果在模型保护过程中出现“cannot be used with a variable-step solver”问题,请将原模型引用的解算器更改为离散定步长。
2.受保护模型中不能出现另一个受保护模型。
关于Protected Models for Model Reference
1.加密方法采用AES-265
2.要定位受保护的模型,需要查找
(1)MATLAB文件夹浏览器中带有徽章图标的文件
(2)在左下角带有徽章图标的Model模块
(3)扩展名为.slxp的文件
(p.s.受保护的模型不会出现在Model Explorer的模型层次结构中)
3.引用受保护的模型
(1)检查受保护模型是否支持所需的功能(受保护模型报告将显示所支持的功能)
(2)检查自己的simulink版本是否支持该受保护模型
目的 | 跨版本支持 |
只读视图 | 在R2018b或更高版本中保护的模型可以在其原始版本和更高版本中使用 |
Normal模式下的方针 | 在R2018b或更高版本中保护的模型可以在其原始版本和更高版本中使用 |
Accelerator模式下的仿真 | 不支持跨版本 |
SIL或PIL模式下的仿真 | 不支持跨版本 |
Rapid Accelerator模式下的仿真 | 不支持跨版本 |
代码生成 | 不支持跨版本 |
(3)确认可以访问在受保护模型中使用的许可证。如果可用,受保护模型报告会显示所需的许可证。
(4)如果计划对受保护模型进行仿真,请使用曾用于创建受保护模型的相同平台。软件将受保护模型存储为已编译的 MEX 二进制文件。
(5)如果接收了一个受保护的模型包,请按照随附的说明解包文件。
(6)确保受保护模型位于 MATLAB 路径上。
(7)如果接收了一个框架模型,请将框架模型中的 Model 模块复制到您的模型中。否则,请在 Model 模块中引用受保护模型。
(8)当设置 Model 模块以引用受保护模型时,模块的 Simulation mode 变为 Accelerator
。不能更改此模式或在外部模式下使用此 Model 模块。
在对保护模型进行代码生成时,需要对受保护模型的基础模型进行环境设置,如果需要在autobox上运行,需要按照autobox的环境配置进行设置,
如果需要在其他的处理器上运行,则需要按照该处理器对模型环境的要求进行修改。
环境变量设置(autobox):
1.fundamental sample time,需要与调用模型的仿真周期设置一致。
2.Singal Logging:一般设置为最终的输出值
3.Inline Prameter:针对2012版matlab,不进行选择
4.其余的设置按照dspace的要求进行
==============================================================================================================
Error解释:
1.Input port 1 of the specified subsystem block has constant sample time. Cannot convert subsystems with constant inputs to model reference.
该Error的解决方式是断开所有的输入,再次进行引用操作
2.The model 'xxxxx' cannot be protected because it or a model that it directly or indirectly references contains a non-inlined S-Function.
该Error出现在保护模型过程中,目前定位问题为模型中大量使用了属性为Global的goto/from标签