概述
![72643d45142be5cebe1cdaedf5168d4c.png](https://file2.kaopuke.com:8081/files_image/20230308/212001583310.png)
希望关注本专栏的朋友,也能一并关注微信公众号。
![562e0559315925cac0c5e22188f01cfc.png](https://file2.kaopuke.com:8081/files_image/20230308/212001854521.png)
原文地址:Simulink迭代器及其代码生成
需求分析
在传统手工撸代码过程中迭代器是十分常见的,土鳖点的叫法是“循环”。“For循环”、“While循环”、“do…while循环”、“递归函数”等。在Simulink中如何实现迭代功能呢?先来了解Simulink建模的原理!
![c262a8cfb6e47e412b603d4891ade938.png](https://file2.kaopuke.com:8081/files_image/20230308/212001396222.png)
以定步长的离散场景为例,开始时间0s结束时间1s,采样时间0.1s。
![fd58265983923034eb20694737fd60d4.png](https://file2.kaopuke.com:8081/files_image/20230308/212001798403.png)
配置完成后,上图的模型就会以0.1s为周期共运行10次。类似我们控制器中的100ms任务。看到这很多老铁可能又要问,上面这图里不是已经用unit dely模块实现了累加了吗?但是这仅仅是每一个周期+1,如果我需要在一个周期中在加入一个迭代器进行运算那又该怎么做?
迭代器模块
老铁放心,Matlab的工程师早就想到大家有这个需求,已经开发了迭代器模块
![2e410f3db0357985651938d28ed42eb8.png](https://file2.kaopuke.com:8081/files_image/20230308/212001426624.png)
如上图在Library Broswer中的Port&Subsystem选项卡中,有三个迭代器模块
![da33e5a2ec6ec1070df0360e6eedc562.png](https://file2.kaopuke.com:8081/files_image/20230308/212001910355.png)
从名字上看对应了For循环、For Each循环(这个好像C语言没有)、While循环,下面【思想】以While迭代器为例子演示下迭代器模块如何使用代码生成的效果。
![2df104e6bed3d0ab56e93d2346389e8a.png](https://file2.kaopuke.com:8081/files_image/20230308/212001566076.png)
从While模块可以看到有2个输入,分别是输入的初始信号In1当然也可以根据自己的需要增加,另一个是IC这个是个布尔型数据,用于判断当前步长是否要运行while迭代器。IC这个信号一定要由迭代器的外部输入!
![54e973986465763253ddcac13e65030d.png](https://file2.kaopuke.com:8081/files_image/20230308/212001297107.png)
进入子系统中,有一个cond口,是用来判断推出循环的条件,该信号来自迭代器子系统内部的逻辑判断。
![815435e590598f2f2f8c14569a160cd7.png](https://file2.kaopuke.com:8081/files_image/20230308/212001307198.png)
双击进入While Iterator后有四个地方需要进行配置
1、Maximum number ofiterations:设置最大的循环次数,防止死循环,如果你对自己设计的退出逻辑很有把握也可以设置为-1,无限循环模式
2、while loop type:设置循环模式While与do…While,这两个有什么区别就不多做介绍了,不清楚的就复习下《C语言程序设计》;
3、Status when starting:值为rest或held,设置进入迭代器时候的状态,具体的看我们后面的演示;
4、Show interation numberport:是否输出迭代器次数,勾选While Iterator会多一个output口,输出退出循环时一共迭代了几次,具体的看我们后面的演示;
演示模型
![5f7908866c85778547d055531de642e6.png](https://file2.kaopuke.com:8081/files_image/20230308/212001143029.png)
While Iterator中States when starting设置为held,保留迭代器的过程数据,让下一次迭代引用!
![32404ade303366cd32137c90b9808a73.png](https://file2.kaopuke.com:8081/files_image/20230308/2120012210410.png)
算法配置:时长0.2s,周期0.1s,共运行3次,有迭代器执行的结果是30,对照组执行结果是6,循环次数为5。迭代器比对照组每一个步长多执行5次累加运算。
![d92f1859e547264751ab0491e8b24145.png](https://file2.kaopuke.com:8081/files_image/20230308/2120013575811.png)
接着,把While Itertor中的Stateswhen starting设置为reset。再来看看结果!
![00b99aaf005bcd9a8e68ad3d9f3c5418.png](https://file2.kaopuke.com:8081/files_image/20230308/2120011818112.png)
结果发生变化,就不会出现执行3次的结果叠加,而只会显示1次循环的结果。看到这你明白了States when starting这个选项如何使用的了吗?
代码生成
![d0bdf5e86d4053bbb049e08026b73c84.png](https://file2.kaopuke.com:8081/files_image/20230308/2120015733113.png)
配置好生成代码时会用到的信号变量还有算法等。如果不知道怎么配置的可以看看我们前面的文章:
1.Simulink代码生成应用教程
2.Simulink代码生成提高教程
![a8060453d69d0835665cc3526ade8c73.png](https://file2.kaopuke.com:8081/files_image/20230308/2120016188814.png)
这里就是While迭代器生成的C语言程序,左边的是States When Starting为Reset,右边为Held。可以看到Reset在每个step都会对UnitDelay_DSTATE进行清零。
精彩预告
1.行星排混动从入门到精通(结构)
2.行星排混动从入门到精通(控制)
3.仿真与实测数据对不上怎么办?
4.工程师眼里的LKAS
5.如何优雅的编辑数学公式
以下是推荐阅读:
- Simulink迭代器及其代码生成
- 让【思想】头疼的Motorola编码
- 大开脑洞——虚拟测功机
- 跟【思想】一起,在家里玩HIL(VCU仿真实例)
- 跟【思想】一起,在家里玩HIL(1)
- 【旁门左道】提取万有特性数据
- 动力经济性信息系统(2)
- 动力经济性信息系统(1)
- CRUISE&CRUISE M傻傻分不清楚
- 换挡策略如何影响动力经济性
- Amesim电动车仿真
- Amesim与Simulink联合仿真演示
- Amesim与Simulink联合仿真
- 增程式发动机仿真控制逻辑详解(二)
- 增程式发动机仿真控制逻辑详解(一)
- 增程式混合动力系统动力经济性仿真
- 工况路谱的采集与数据处理
- 路谱数据滤波工具
- 混合动力节油的秘密-发动机万有特性
- AVL-CRUISE纯电动仿真策略提高教程
- AVL-CRUISE纯电动模型仿真策略
- 燃料电池车(FCHEV)动力经济性建模与仿真
- CRUISE与Isight联合仿真优化
- CRUISE与Simulink联合仿真介绍
- 部分仿真软件对比介绍
- 体验整车控制器程序设计
- 永磁同步电机是什么?
- 【科普】整车控制器-软件篇
- 【科普】整车控制器-硬件篇
- Simulink中浮点数的优化表示法
- 嵌入式C语言中CAN报文字节序问题的处理方法
- 嵌入式C语言环境下的CAN总线通讯协议
- Simulink代码生成提高教程
- S-Funciton应用实例
- 汽车工程师眼中的C#
- Simulink代码生成应用教程
- Sinmulink代码生成基础体验教程
- CAN总线(J1939)速成指南【1】
- DBC文件助手~三月累计更新
- DBC文件助手-基础功能介绍2
- DBC文件助手-基础功能介绍1
- 路谱数据滤波工具
- Excel与DBC文件的互相转换
- 电机效率MAP生成工具
最后
以上就是自然水壶为你收集整理的simulink仿真及代码生成技术入门到精通_Simulink迭代器及其代码生成的全部内容,希望文章能够帮你解决simulink仿真及代码生成技术入门到精通_Simulink迭代器及其代码生成所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复