目录
从头开始创建引用模型
准备工作:
1、新建文件夹ref专门存放需引用的模型,可根据功能分为子文件夹
2、在MATLAB中添加ref文件夹及子文件夹路径
架构设计:(更适用从上至下的开发模式)
1、根据通讯协议,通讯组件建模(可通过m脚本自动导入)
2、根据需求搭建功能组件框架,其中仅接口
3、从LIB拖取新Model reference模块,直接填功能组件的名称(MATLAB会根据名称在路径中自动引用该模型)
4、根据引入的模型接口,创建集成模型的from goto接口(可通过m脚本自动创建)(所有功能模型的交互均通过from goto)
软件开发tips:
1、保证模型配置与集成模型统一。可通过在集成模型的配置中进行配置传播设置,使引用模型配置与集成模型保持一致。
优点:
1、功能组件模型与集成模型相互独立。各功能组件可以分别版本管理,方便功能模型成熟时多项目开发引用
2、功能组件模型与集成模型保持一致性。若一边改动,另一边会同步自动更新,避免集成模型上变更但组件模型不会迭代更新
3、数据字典可以跟随各功能模型,集成时也是引用的状态
4、方便功能模型测试,避免一个集成模型只有一个大的数据字典,单独功能测试时都需加载很多数据
缺点:
1、一般模型生成代码会在xx_ert_rtw文件中,但使用引用模型后,最外层主模型生成的代码在xx_ert_rtw文件中,内部的引用模型slprj-ert中按照引用模型名称再各个引用模型文件夹中。虽然在代码层面也将引用模型像原子系统一样独立出来,但是代码集成太多较为麻烦。建议通过脚本汇总代码文件方便集成
2、生成代码时会给每个引用模型单独生成缓存文件.slxc,默认生成在当前模型路径下。建议通过matlab-simulink配置自动汇总缓存文件到单独的文件夹中方便管理。
3、每次生成代码时,没有变动的部分会读取缓存文件,引用模型一个个执行生成代码,时间较长;若数据字典中有定义改变,与缓存文件中不同,会导致报错,需要删去MATLAB模型路径,然后删去缓存文件,最好统一删去所有缓存文件及xx_ert_rtw slprj代码文件,然后重新加载模型路径,重新生成代码,由于没有缓存文件,执行生成代码的时间会更长。
4、项目使用中,偶尔会出现生成代码没有识别到数据字典中几个数据变动,仍根据缓存文件生成代码。
对于已有集成模型转换为引用模型:
方式1:转换为引用模型
1、右键功能模型如下选择
保持默认选项,进行转换的静态扫描
2、会自动在当前模型路径中生成功能模型,集成模型中也已转换为模型引用
3、生成代码无影响
Tips:
静态扫描时经常报错导致转换不太方便。
方式2:转换为引用子系统
1、右键模型可直接转换
或通过菜单栏转换:
2、在当前matlab路径下生成同名引用模型
3、若将ref model转移到单独的文件夹管理,记得将ref路径重新选择
后言:
刚开始为了多功能模型团队协同开发,所以考虑使用引用模型的方式,优缺点就像上文中提到的那样,由于每次迭代代码的时间更长还有生成代码时的诸多麻烦,所以后面放弃了这种形式。可能在平台化功能模型定型后想做成库的时候再采用model ref更好,开发过程中使用优势并不明显。
刚好提到了模型库,至于模型库与引用模型的区别,个人观点,在生成代码上我认为是一样的,模型库更适用于基础功能模块,方便功能建模,适用所有项目软件开发共同使用;而引用模型更适用于功能模型,适用平台项目引用成熟功能模块快速集成。
另,介绍说model ref可以用于保护模型的功能,可以给模型可读、仿真、生成代码分别设置密码。有待后面有机会再研究。