0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MBD的Simulink使用技巧:Simulink代码生成的基本概念(1)

冬至子 来源:autoMBD 作者:autoMBD 2023-07-13 15:11 次阅读

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核心算法模型:

图片

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测试就是使用的这个方法。

这两个模块位于下图所示的位置:

图片

模型引用模块 - From autoMBD

特别注意,Model和Subsystem Refence模块都能实现模型引用,但它们是有区别的:

  • Subsystem Refence引用的是子系统模型,而Model引用的是普通模型;
  • Model模块可以用于PIL和SIL测试,而Subsystem Refence不行;
  • 它们在生成代码的处理方式有区别,Subsystem Refence在生成代码时,与模型中的子系统没有区别,但Model不能当作模型中的子系统,它是一个独立的模型。

而使用数据导入/导出的方式不需要新建Top模型,但需要准备 具有时间序列格式的输入数据 ,将其导入到MATLAB工作区中;而输出数据会直接生成在MATLAB工作区中。

时间序列数据如下图所示:

图片

时间序列数据 - From autoMBD

创建时间序列数据可以使用如下语句:

ts = timeseries(rand(5,1));

将模型与MATLAB工作区的时间序列数据连接在一起的方法如下图所示。在Input框中输入变量名即可连接输入;图中下面的选项可以配置Output输出数据的格式,仿真完成后输出数据会保存在MATLAB工作区。

图片

Data Import/Export - From autoMBD

2.4 模型生成代码的基本要求

一个模型要能生成嵌入式代码,至少需要满足以下两个要求:

  • Simulink求解器设置为定步长;
  • 选择代码生成的系统目标文件ert.tlc。

设置模型求解器的步长的方法如下图所示。求解器的其他配置可以保持默认,也可以根据实际需求修改。

图片

设置求解器定步长 - From autoMBD

系统目标文件ert.tlc描述了模型如何生成代码完整方法和流程,由MathWorks开发,可以在MATLAB的安装目录中找到该文件。

但该文件只是模型生成代码的一部分,它的背后隐藏了大量关于模型生成代码的细节。完整的ert.tlc文件用户是不可见的。

选择代码生成的系统目标文件ert.tlc的方法如下图所示。

图片

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

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

图片

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    40

    文章

    3430

    浏览量

    128221
  • MATLAB仿真
    +关注

    关注

    4

    文章

    174

    浏览量

    19639
  • MBD
    MBD
    +关注

    关注

    0

    文章

    22

    浏览量

    8818
  • simulink仿真
    +关注

    关注

    0

    文章

    75

    浏览量

    8457
  • FOC算法
    +关注

    关注

    1

    文章

    15

    浏览量

    9632
收藏 人收藏

    评论

    相关推荐

    CCS打开simulink生成的dsp代码

    simulink生成DSP代码,并成功下载到板子上后,用CCS选中生成代码文件确却不能打开,这是为什么?
    发表于 10-29 18:33

    Simulink模型生成代码

    有一定的STM32开发调试经验和Simulink代码生成经验。关于Simulink代码生成可以参
    发表于 08-11 07:56

    simulink自动生成C代码

    ,也希望可以和更多的人交流simulink/STM32CubeMX联合生成STM32串口发送代码,Keil编译下载到单片机,发送给上位机显示1.在CubeMX里设置好相关参数后,在si
    发表于 08-17 07:17

    通过一个简单的Simulink模型生成代码

    本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个Arduino路径中去编译软件。最后将软件下载到Arduino Uno中,通过串口输出
    发表于 08-18 06:22

    手把手教你SIMULINK代码生成

    FrancisZhao:专栏文章列表以及一些说明​zhuanlan.zhihu.comFrancisZhao:手把手教你代码生成(下):SIMULINK代码
    发表于 08-18 06:03

    Simulink模型架构的设计资料分享

    更多精彩干货分享,请关注我的个人微信公众号:MBD开发者星球;​1、na_0006: Guidelines for mixed use of Simulink and StateflowID
    发表于 11-11 06:52

    怎样使用stm32+simulink进行MBD的开发呢

    怎样使用stm32+simulink进行MBD的开发呢?有哪些实验步骤呢?
    发表于 11-18 06:05

    请问simulink代码如何生成2020a?

    请问simulink代码如何生成2020a?
    发表于 11-22 06:38

    基于Simulink代码生成过程是怎样的?

    基于Simulink代码生成过程是怎样的?
    发表于 02-18 07:46

    Simulink 自动代码生成原理分享

    多出来一些目标系统可以选择。自定义目标系统是为了让Simulink生成代码能根据用户的需要,与底层驱动做集成。我们首先需要了解Simulink目标编译的流程,如下图,
    发表于 05-31 11:19

    MathWorks推出新款代码生成工具Simulink

      MathWorks 今日宣布 Simulink 代码生成工具箱已通过 Embedded Coder 嵌入到 Freescale 的新款 Motor Control Development Toolbox 中。该工具箱包括
    发表于 04-26 08:39 1168次阅读

    软件集成:Simulink与STM32联合开发

    本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个STM32工程中去编译软件。最后将软件下载到STM32F407中,通过串口输出
    发表于 12-24 19:13 13次下载
    软件集成:<b class='flag-5'>Simulink</b>与STM32联合开发

    MBDSimulink使用技巧:详解代码生成中的模型与代码(2)

    上一篇文章中提到,生成嵌入式代码,必须选择定步长求解器。实际中,生成嵌入式代码几乎不会使用Simulink模型库中的连续模型,往往需要通过最
    的头像 发表于 07-13 15:13 2972次阅读
    <b class='flag-5'>MBD</b>的<b class='flag-5'>Simulink</b>使用技巧:详解<b class='flag-5'>代码</b><b class='flag-5'>生成</b>中的模型与<b class='flag-5'>代码</b>(2)

    利用Simulink自动生成STM32串口代码

    功能:利用Simulink自动生成STM32串口代码,在Keil中编译后直接下载到主芯片,实现串口通讯的功能。
    的头像 发表于 10-25 17:04 1041次阅读
    利用<b class='flag-5'>Simulink</b>自动<b class='flag-5'>生成</b>STM32串口<b class='flag-5'>代码</b>

    simulink自动生成ROS代码

    当我们用simulink完成控制程序的搭建后,我们期望下一次可以直接对ROS进行控制,而不是每次都需要启动matlab和simulink,因此我们可以使用simulink代码
    的头像 发表于 11-15 17:53 336次阅读
    <b class='flag-5'>simulink</b>自动<b class='flag-5'>生成</b>ROS<b class='flag-5'>代码</b>