Simulink代码生成: 信号线、参数配置

在汽车嵌入式软件开发中,需要正确地配置Simulink的信号和参数,才能生成相应的标定量、输入输出变量和观测量。本文通过一个例子总结笔者工作中所用的配置方法。

1 问题引入

Simulink代码生成(一) Embedded Coder配置这一篇博客中,没有对输入输出信号做任何配置就生成了代码。此时生成的代码表现为结构体的形式,并且是在模块内定义的。
在这里插入图片描述
一个模型的输入信号可能来源于其他模型的输出或者底层软件,因此这样直接在自身代码内部的定义方式显然是不符合实际开发需求的。笔者在工作中是通过配置输入输出信号线对象,即Simulink.Signal对象,生成了特定存储方式的代码。

2 输出信号配置

首先建立一个Simulink模型demo1.slx,并将输出信号线命名为Output1,如图所示。
在这里插入图片描述
在Matlab命令行输入:

>> Output1 = Simulink.Signal;

此时,在右侧的工作区创建了一个名为Output1Signal对象。双击该对象,将其配置如下图:
在这里插入图片描述
其中,Data Type表示其数值类型为single型,Initial Value表示初始值设为10,Storage Class设为ExportToFile表示该变量输出到外部文件,下面的HeaderFile和DefinitionFile表示外部的C文件和头文件。1

然后回到模型demo1.slx,右击Output1信号线,选择Properties打开该信号线的属性窗口。在窗口中勾选Signal name must resolve to Simulink signal object,将该信号线和刚刚定义的Signal对象关联起来2。关联后模型中会出现一个小叉子的图标。
在这里插入图片描述
然后生成代码,打开报告。在demo1.c的step函数中可以看到,输出变量命名为了Output1,而不是之前的Demo_Y.Out的结构体。initialize函数中可以看到,将Output1初始化为了10,与之前配置相吻合。
在这里插入图片描述
那么,这个Output1是在哪儿定义的呢?打开Demo1_Output.c就可以看到Output1的定义了,这与之前的StorageClass配置相吻合。
在这里插入图片描述
然后,在Demo1_Output.h中用extern关键字外部定义了Output1,也就是说其他的模型如果要输入Output1这个变量,代码中只需要包含Demo1_Output.h这个头文件即可。可以注意到,demo.c文件中包含了demo.h头文件,demo1.h头文件中包含了Demo1_Output.h头文件。
在这里插入图片描述

3 输入信号配置

配置输入信号的步骤与输出信号相似,要给信号线命名并关联。但是在Signal对象中要把StorageClass设置为ImportFromFile,并且只需要填入HeaderFile头文件。这里假设Input1是Demo2输出的。
在这里插入图片描述在这里插入图片描述
生成的代码中,demo1_private.h包含Demo2_Output.h头文件。但是不会生成这个头文件,因为这个变量是Import的,属于别的文件中定义的。并且Input1这个变量也不会在initialize函数中初始化。
在这里插入图片描述
在这里插入图片描述

4 观测量配置

观测量和输出信号配置类似,都是输出到外部文件。不过最好在C文件命名上体现其中的是观测量。

5 标定量配置

标定量在汽车软件中是可以被标定工具所修改的,因此需要有volatile关键字修饰。标定量在模型中不是以信号线存在的,而是作为某个模块的参数,常见的是作为Const模块的参数。

如图所示,将Simulink中Const的参数定为一个标定量。
在这里插入图片描述
然后,在Matlab命令行定义一个Parameter对象

>> Calibration1 = Simulink.Parameter;

打开该对象,配置参数信息。
在这里插入图片描述
其中,Value表示代码中的赋值,StorageClass、HeaderFile和DefinitionFile表示存储类型为Volatile和所在文件。

然后,不需要像信号线一样关联对象,直接生成代码。就会多生成标定量的C文件和头文件,其中定义了标定量。
在这里插入图片描述
在step函数中用了这个标定量。如果用标定工具修改了这个量,就会在MCU中生效。
在这里插入图片描述

6 总结

本文只是笔者所用到的对信号线和参数的配置方法。在实际工作中根据不同的项目特点可以进行其他配置。

>>返回个人博客总目录


  1. Signal对象也可以在数据字典里定义。 ↩︎

  2. 也可以通过Matlab脚本批量勾选,详见Matlab技巧(三) 通过脚本获取/修改Simulink信号线参数 ↩︎

  • 30
    点赞
  • 250
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
Simulink是由MathWorks公司开发的一款用于建模、仿真和生成代码的工具。Simulink提供了一个可视化的图形界面,使用户可以通过拖拽和连接各种模块来构建系统模型。 对于初学者来说,进入Simulink仿真和代码生成技术的世界需要掌握一些基础知识。首先,你需要学习如何创建一个新的模型,并了解基本的模块类型,如数学运算、信号生成和显示。你还需要学会如何使用信号线连接这些模块,以实现数据的流动和处理。 一旦掌握了Simulink的基本操作,你可以深入研究更高级的功能。你可以学习如何使用状态空间模型、离散事件系统或非线性系统来建模。此外,你还可以学习如何使用Simulink中的优化工具来优化系统的性能。 当你熟悉了Simulink的建模功能后,你可以开始学习如何进行仿真。你可以了解不同的仿真方法,并学习如何设置仿真参数,如仿真时间和步长。你还可以学习如何使用Scope模块来可视化仿真结果,以便分析和调试系统模型。 最后,你可以学习如何使用Simulink生成代码。Simulink可以将系统模型转换为可执行的C代码,并与外部硬件进行集成。你可以学习如何配置代码生成选项,并使用生成的代码在实际硬件上进行部署和测试。 在从入门到精通的过程中,建议多实践和尝试不同的示例项目。参考MathWorks官方文档和社区论坛可以让你获得更多的帮助和支持。通过不断练习和探索,你将逐渐掌握Simulink仿真和代码生成技术,并能够应用到各种实际工程项目中。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值