中国汽车工程师之家--聚集了汽车行业80%专业人士 

论坛口号:知无不言,言无不尽!QQ:542334618 

本站手机访问:直接在浏览器中输入本站域名即可 

  • 197查看
  • 0回复

[Simulink] MBD的Simulink使用技巧①:Simulink代码生成的基本概念

[复制链接]


该用户从未签到

发表于 2-3-2024 09:45:30 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


全文约2100字,你将看到以下内容:


    写在前面

    Simulink代码生成的基本概念
    下期预告
autoMBD最近发布了《autoMBD原创技术文章合集》
合集包含156页丰富的MBD入门基础和MBDT硬件支持包的使用还包含基于MBD的电机控制算法开源项目——AMBD-MC合集配备了丰富的视频讲解
和大量的模型、文档和软件资源

如何获取请参考@所有读者:autoMBD发布《autoMBD原创技术文章合集》。

1  写在前面

有的工程师会“抱怨”MBD生成的代码可读性差,执行效率低,其原因可能就是没有对Simulink生成代码的机制有清晰的了解,没有很好地利用Simulink为MBD代码生成提供的配置选项。

而这些内容,目前网络上还很少有相关的介绍和分享。接下来autoMBD将通过一系列的文章分享Simulink生成代码的机制,以及如何配置MBD代码生成选项来生成自己想要的代码。

这个系列的文章,将围绕Simulink的代码生成展开,所以不包含硬件支持包相关内容,但介绍的部分方法是适用于硬件支持包的。读者只需要正确安装MATLAB/Simulink即可完成内容的学习和实践。

本系列文章采用的MATLAB/Simulink的版本为2020b,其他版本可能在窗口布局、部分功能方面会有差别,不过应该也能参考本系列的文章。

2  Simulink代码生成的基本概念

2.1 代码生成工具

MATLAB/Simulink中一共提供三个代码生成的工具:


    MATLAB Coder

    Simulink Coder
    Embedded Coder
从名字能看出来,MATLAB Coder用于m脚本生成C/C++代码;而Simulink Coder用于模型、Stateflow等生成C/C++代码;而Embedded Coder是上述两者的集成,同时扩展了在嵌入式开发中必不可少的特性。也正是Embedded Coder提供了针对MATLAB Coder和Simulink Coder的配置选项和代码优化选项,从而精细控制生成代码的函数、数据和接口。这可以提高代码的执行效率和可读性,利于代码的集成。所以文章介绍的以Embedded Coder为主。关于这三个代码生成工具的更多介绍,可以查看资源库中的“临时资源分享”文件夹下的tA21。资源库的获取可以在《autoMBD原创技术文章合集》中找到。2.2 Simulink生成应用代码MathWorks官方一直强调,使用Simulink生成应用代码(Application Code),而不是其他代码(虽然利用硬件支持包可以生成底层驱动等代码)。何为应用代码?简单的可以认为应用代码是执行算法的程序,可以参考开源项目AMBD-MC中的FOC核心算法模型:
MBD的Simulink使用技巧①:Simulink代码生成的基本概念w1.jpg

FOC核心算法模型 - From autoMBD在MBD代码生成中,它应该部分或全部具有以下接口:


    一个被主程序调用的接口(必须);

    与其他模块交换数据的接口;

    与底层I/O驱动交换数据的接口;

    数据的记录接口(即log,用于调试);

    软件库调用接口。
上图中的FOC核心算法模型中,包含了上述的前三种接口。这些接口用于代码集成时的函数调用、数据交换、代码调试等(代码集成的过程可以参考《文章合集》第十七篇)。2.3 有接口的模型如何仿真如上图FOC核心算法模型所示,该模型有很多Input和Output接口,这些接口表明对该模型仿真需要接收外部数据,同时需要将运算结果输出到外部。这种模型的仿真有两种方式:


    模型引用(Model Reference)
    数据导入/导出(Data Import/Export)
模型引用,即使用Simulink模型库中的Model或Subsystem Reference模块来实现数据的输入和输出,这意味着需要额外的一个上层模型(Top Model)来提供输入数据和接受输出数据。善用模型引用可以提高模型算法开发的独立性、重用性,在《文章合集》第十六篇中,实现PIL测试就是使用的这个方法。这两个模块位于下图所示的位置:

MBD的Simulink使用技巧①:Simulink代码生成的基本概念w2.jpg
模型引用模块 - From autoMBD
特别注意,Model和Subsystem Refence模块都能实现模型引用,但它们是有区别的:


    Subsystem Refence引用的是子系统模型,而Model引用的是普通模型;

    Model模块可以用于PIL和SIL测试,而Subsystem Refence不行;
    它们在生成代码的处理方式有区别,Subsystem Refence在生成代码时,与模型中的子系统没有区别,但Model不能当作模型中的子系统,它是一个独立的模型。
而使用数据导入/导出的方式不需要新建Top模型,但需要准备具有时间序列格式的输入数据,将其导入到MATLAB工作区中;而输出数据会直接生成在MATLAB工作区中。时间序列数据如下图所示:
MBD的Simulink使用技巧①:Simulink代码生成的基本概念w3.jpg

时间序列数据 - From autoMBD创建时间序列数据可以使用如下语句:
ts = timeseries(rand(5,1));将模型与MATLAB工作区的时间序列数据连接在一起的方法如下图所示。在Input框中输入变量名即可连接输入;图中下面的选项可以配置Output输出数据的格式,仿真完成后输出数据会保存在MATLAB工作区。
MBD的Simulink使用技巧①:Simulink代码生成的基本概念w4.jpg
Data Import/Export - From autoMBD
2.4 模型生成代码的基本要求一个模型要能生成嵌入式代码,至少需要满足以下两个要求:


    Simulink求解器设置为定步长;
    选择代码生成的系统目标文件ert.tlc。
设置模型求解器的步长的方法如下图所示。求解器的其他配置可以保持默认,也可以根据实际需求修改。
MBD的Simulink使用技巧①:Simulink代码生成的基本概念w5.jpg

设置求解器定步长 - From autoMBD
系统目标文件ert.tlc描述了模型如何生成代码完整方法和流程,由MathWorks开发,可以在MATLAB的安装目录中找到该文件。但该文件只是模型生成代码的一部分,它的背后隐藏了大量关于模型生成代码的细节。完整的ert.tlc文件用户是不可见的。
选择代码生成的系统目标文件ert.tlc的方法如下图所示。

MBD的Simulink使用技巧①:Simulink代码生成的基本概念w6.jpg

设置代码生成目标文件ert.tlc - From autoMBD

点击“Browse”可以看到很多不同类型的系统目标文件(如下图所示),这些目标文件适用于不同的应用场景。对应嵌入式开发,选择ert.tlc即可(ert的全称为Embedded Real Time)。

MBD的Simulink使用技巧①:Simulink代码生成的基本概念w7.jpg

不同类型的系统目标文件 - From autoMBD

满足定步长和系统目标文件的条件,模型就能生成嵌入式代码了。

3  下期预告

本期的内容到此结束,关于Simulink代码生成的基本概念的内容还有一部分,下一期继续。

为了提高更新频率,autoMBD从本期开始将改变文章更新的方式,采用“精简、多次”的方式更新文章,在系列结束后统一整理到《文章合集》中。


快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 22-11-2024 21:00 , Processed in 0.476317 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.