Simulink代码生成: Model Reference及其代码

本文研究Simulink中的Model Reference配置过程,以及生成的代码。

1 问题引入

在团队合作开发或者几个公司合作开发的时候,可能会在算法上做一些保密工作,不让对方看到自己模型的内容。但是,又需要把模型交给对方,以便对方用完整地模型进行仿真或者生成代码。

想要实现这个功能,可以使用Simulink的一种特殊的子系统Model Reference,或称为模型引用。通过模型引用,就可以将模型封装起来,然后由其他模型引用它,从而完成了保密。被引用的加密模型也可以进行仿真或者生成代码。

2 Model Reference建模示例

本章用一个简单的例子演示Model Reference建模的方法。

2.1 模型搭建过程

1)首先新建一个模型 demo_1.slx ,搭建如下的模型内容;
在这里插入图片描述
2)将 demo_1.slx 配置好离散求解器和Embedded Coder(可以参照博主以前的博客),保存并关闭;

3)再新建一个模型 demo.slx ,拖出一个 Model Reference 模块;
在这里插入图片描述
4)双击该模块,将其中的Model Name选为刚刚创建的 demo_1.slx;
在这里插入图片描述
然后模块就会由之前的红色边框转为黑色边框,并且标识出 demo_1 的被引用的模型。

5)这时给这个模块加上输入和输出,就能够正常的仿真;
在这里插入图片描述

2.2 转换封装模型

2.1 章节的 Model Reference 还没有进行封装,通过双击模块还是能够进入 demo_1.slx 中的。本章在上一章的基础上,对其进行封装。

1)右键这个模块,选择Create Protected Model for Selected Model Block;
在这里插入图片描述
2)接着会弹出一个窗口,用于配置被保护模型的封装程度;
在这里插入图片描述
其中可以勾选三种行为,并设置密码:

  • Open read-only view of model 表示可以查看模型,但是无法修改;
  • Simulate 表示可以仿真;
  • Use generated code 表示可以生成代码;

3)这里我们只勾选Simulate,并设置密码为 123456,保持默认路径,然后点击Create;
在这里插入图片描述
4)等待一段时间后,在当前路径下会出现demo_1.slxp文件,这就是封装后的文件;
在这里插入图片描述
5)双击该模块,会提示输入密码,然后会弹出一个模型报告,而不是直接打开模型;
在这里插入图片描述
这是因为我们已经将其设置为只能用于仿真的加密模型,所以看不到其中的算法模块。

6)这个slxp文件不能直接用于仿真,而是要回到demo.slx中,把被引用的模型改成demo_1.slxp;
在这里插入图片描述
点击OK后,Model Reference模块的样式也会改变,左下角多出一个保护标志。

7)在demo.slx中就可以仿真改模型;

3 Model Reference生成代码

在2.2章节最后,如果Ctrl + B尝试生成代码,就会报错;
在这里插入图片描述
提示说被保护的模型不能用于生成代码,这时因为没有勾选生成代码,本章节尝试生成代码。

3.1 生成可读的代码

1)重新将 demo_1.slx 封装,但是这次勾选 Use generated code ,并将content type选择成Readable source code;
在这里插入图片描述
2)重新引用slxp文件,并且Ctrl + B生成代码;在生成的代码中,会为 demo.slx 生成一个demo_step()函数,其中引用了 demo_1() 函数。
在这里插入图片描述
另外,为demo_1单独生成了一组文件,其中包含了demo_1()函数的定义和声明,函数的输入输出都是以传参的形式体现的,对应了模型中的输入和输出端口;
在这里插入图片描述
生成的代码还是比较规范的,包含了许多注释,以及合理的变量名和缩进。

3.3 生成不可读的代码

1)如果将content type选为Obfuscated source code,就会生成不一样的代码
在这里插入图片描述
2)重新封装、引用模型,生成代码如下:
在这里插入图片描述
可以看出,生成的代码更加混乱,可读性非常差。这样,也就从代码的层面上保护了算法。

4 总结

Model Reference模块在算法保护方面有很大的价值,比较适合多方团队的合作开发。

>>返回个人博客总目录

猜你喜欢

转载自blog.csdn.net/u013288925/article/details/114594510