matlab建模生成代码注意事项

一、代码生成后,查看生成报告。

如下图所示:

代码文件简介:

1、ert_main.c

该文件中会调用 “模型名称_step();”函数,用于单步执行,可以根据实际情况放在定时器中断或者任务调度里面执行该函数。
除此之外,该文件中的main函数会初始化模型,调用“模型名称_initialize();”函数。该函数实际使用时也必须在模型执行前初始化。
在实际使用时该文件不必添加进工程。

2、模型名称_Y100.c

该文件是根据模型生成的代码,包含“模型名称_step();”函数,“模型名称_initialize();”函数,“模型名称_terminate(void);”函数。

3、模型名称_Y100.h

该文件包含模型中的模块数据结构定义。

4、模型名称_Y100_private.h

该文件包含模型中的私有变量,主要是声明的全局变量。

5、模型名称_Y100_types.h

该文件包含模型中的结构体定义。

6、shared_files

该文件夹中的文件是一些乘除法的函数方法,需要添加至工程中。文件在./slprj/ert/_sharedutils目录中。
model_gen_2.png

7、OtherFiles

该文件夹中是在配置中的source files,如图所示。需要添加至工程中进行编译。
model_gen_3.png

model_gen_4.png

8、模型中使用C CALLER或者S-Function模块

模型中使用C CALLER或者S-Function模块调用C文件中的函数时,需要将对应的文件添加至simulation target中。
model_gen_5.png

9、模型中调用其他模型文件

这种情况生成的代码报告在下图所示中。
model_gen_6.png

生成的代码在./slprj/ert目录下,对应的模型名称的文件夹中,生成代码后要在编译环境如KEIL中添加对应的搜索路径。

在这里插入图片描述

model_gen_8.png

二、模型制作中的数据结构

1、声明使用全局变量

采用数据字典定义我们的数据结构便于管理,如要想使用全局变量,存储类型要选“importedExtern”,生成的代码会在.h文件中进行声明。
在这里插入图片描述

如果是定义全局变量,要选择“exportedGlobal”。
在这里插入图片描述

调用如下图所示
在这里插入图片描述

2、定义全局信号对象

如下图所示,如果是数组,在dimensions中可以输入[1 8]。
model_gen_12.png
调用如下图所示:
model_gen_13.png
这里选中信号名称和模型信号对象绑定,生成的代码输出也将使用对应的信号对象名称。如果是全局变量可以方便在其他地方调用。
在这里插入图片描述

三、模型制作中的一些其他操作

1、任务调度

实际使用过程中,通常会对不同的模块按不同的间隔执行,也就是任务调度,比如taskA需要10ms间隔执行,taskB需要100ms时间间隔执行,所以这里我们利用“Function-Call Generator”模块配合状态机实现任务调度。分别实现10ms、100ms、200ms的任务调度。
model_gen_15.png
Function-Call Generator”模块中的采样时间设为1,不使用小数,提高计算精度,实际调用的时候1ms执行一次本模块。
状态机的模型如下:
在这里插入图片描述

设置对应的输入输出事件,如下图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TyaMafXk-1576656105754)(https://img.rayu.me/2019/12/1732009053.png)]
在这里插入图片描述

实际测试结果无误。

model_gen_19.png

2、初始化变量

在模型设计过程中,可能会出现这样的需求,比如ECU上电后,从EEPROM读出上次断电前保存的数据,而且只赋值一次,后续使用新计算的值。
如下图所示,上电后从EEPROM读取的值是SOC_From_EE,然后需要进行第一次累加,不然第一次的值是0,又要从0开始累加,并不是上次断电后的值。
model_gen_20.png
这里首先想到的是使用IC模块赋值,如下图所示。
在这里插入图片描述

但是IC模块的参数不能是变量,所以放弃了这种操作,使用状态机来进行。
model_gen_22.png
状态机如下图所示:使用一个IF-ELSE模块,上电init_i=0,初始化一次,然后init_i置1,不再执行SOC_From_EE赋值。
在这里插入图片描述

下图为状态机的数据和事件。
model_gen_24.png
生成的代码如下:
model_gen_25.png

3、Data Store Memory

使用data store memory进行局部变量的存储。
model_gen_26.png
然后使用data store write将变量存储,data store read读出变量。
model_gen_27.png
model_gen_28.png
生成的代码如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值