我是靠谱客的博主 自然水壶,最近开发中收集的这篇文章主要介绍simulink仿真及代码生成技术入门到精通_Simulink迭代器及其代码生成,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

72643d45142be5cebe1cdaedf5168d4c.png

希望关注本专栏的朋友,也能一并关注微信公众号。

562e0559315925cac0c5e22188f01cfc.png

​原文地址:Simulink迭代器及其代码生成

需求分析

在传统手工撸代码过程中迭代器是十分常见的,土鳖点的叫法是“循环”。“For循环”、“While循环”、“do…while循环”、“递归函数”等。在Simulink中如何实现迭代功能呢?先来了解Simulink建模的原理!

c262a8cfb6e47e412b603d4891ade938.png

以定步长的离散场景为例,开始时间0s结束时间1s,采样时间0.1s。

fd58265983923034eb20694737fd60d4.png

配置完成后,上图的模型就会以0.1s为周期共运行10次。类似我们控制器中的100ms任务。看到这很多老铁可能又要问,上面这图里不是已经用unit dely模块实现了累加了吗?但是这仅仅是每一个周期+1,如果我需要在一个周期中在加入一个迭代器进行运算那又该怎么做?

迭代器模块

老铁放心,Matlab的工程师早就想到大家有这个需求,已经开发了迭代器模块

2e410f3db0357985651938d28ed42eb8.png

如上图在Library Broswer中的Port&Subsystem选项卡中,有三个迭代器模块

da33e5a2ec6ec1070df0360e6eedc562.png

从名字上看对应了For循环、For Each循环(这个好像C语言没有)、While循环,下面【思想】以While迭代器为例子演示下迭代器模块如何使用代码生成的效果。

2df104e6bed3d0ab56e93d2346389e8a.png

从While模块可以看到有2个输入,分别是输入的初始信号In1当然也可以根据自己的需要增加,另一个是IC这个是个布尔型数据,用于判断当前步长是否要运行while迭代器。IC这个信号一定要由迭代器的外部输入!

54e973986465763253ddcac13e65030d.png

进入子系统中,有一个cond口,是用来判断推出循环的条件,该信号来自迭代器子系统内部的逻辑判断。

815435e590598f2f2f8c14569a160cd7.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

While Iterator中States when starting设置为held,保留迭代器的过程数据,让下一次迭代引用!

32404ade303366cd32137c90b9808a73.png

算法配置:时长0.2s,周期0.1s,共运行3次,有迭代器执行的结果是30,对照组执行结果是6,循环次数为5。迭代器比对照组每一个步长多执行5次累加运算。

d92f1859e547264751ab0491e8b24145.png

接着,把While Itertor中的Stateswhen starting设置为reset。再来看看结果!

00b99aaf005bcd9a8e68ad3d9f3c5418.png

结果发生变化,就不会出现执行3次的结果叠加,而只会显示1次循环的结果。看到这你明白了States when starting这个选项如何使用的了吗?

代码生成

d0bdf5e86d4053bbb049e08026b73c84.png

配置好生成代码时会用到的信号变量还有算法等。如果不知道怎么配置的可以看看我们前面的文章:

1.Simulink代码生成应用教程

2.Simulink代码生成提高教程

a8060453d69d0835665cc3526ade8c73.png

这里就是While迭代器生成的C语言程序,左边的是States When Starting为Reset,右边为Held。可以看到Reset在每个step都会对UnitDelay_DSTATE进行清零。

精彩预告

1.行星排混动从入门到精通(结构)

2.行星排混动从入门到精通(控制)

3.仿真与实测数据对不上怎么办?

4.工程师眼里的LKAS

5.如何优雅的编辑数学公式

以下是推荐阅读:

  1. Simulink迭代器及其代码生成
  2. 让【思想】头疼的Motorola编码
  3. 大开脑洞——虚拟测功机
  4. 跟【思想】一起,在家里玩HIL(VCU仿真实例)
  5. 跟【思想】一起,在家里玩HIL(1)
  6. 【旁门左道】提取万有特性数据
  7. 动力经济性信息系统(2)
  8. 动力经济性信息系统(1)
  9. CRUISE&CRUISE M傻傻分不清楚
  10. 换挡策略如何影响动力经济性
  11. Amesim电动车仿真
  12. Amesim与Simulink联合仿真演示
  13. Amesim与Simulink联合仿真
  14. 增程式发动机仿真控制逻辑详解(二)
  15. 增程式发动机仿真控制逻辑详解(一)
  16. 增程式混合动力系统动力经济性仿真
  17. 工况路谱的采集与数据处理
  18. 路谱数据滤波工具
  19. 混合动力节油的秘密-发动机万有特性
  20. AVL-CRUISE纯电动仿真策略提高教程
  21. AVL-CRUISE纯电动模型仿真策略
  22. 燃料电池车(FCHEV)动力经济性建模与仿真
  23. CRUISE与Isight联合仿真优化
  24. CRUISE与Simulink联合仿真介绍
  25. 部分仿真软件对比介绍
  26. 体验整车控制器程序设计
  27. 永磁同步电机是什么?
  28. 【科普】整车控制器-软件篇
  29. 【科普】整车控制器-硬件篇
  30. Simulink中浮点数的优化表示法
  31. 嵌入式C语言中CAN报文字节序问题的处理方法
  32. 嵌入式C语言环境下的CAN总线通讯协议
  33. Simulink代码生成提高教程
  34. S-Funciton应用实例
  35. 汽车工程师眼中的C#
  36. Simulink代码生成应用教程
  37. Sinmulink代码生成基础体验教程
  38. CAN总线(J1939)速成指南【1】
  39. DBC文件助手~三月累计更新
  40. DBC文件助手-基础功能介绍2
  41. DBC文件助手-基础功能介绍1
  42. 路谱数据滤波工具
  43. Excel与DBC文件的互相转换
  44. 电机效率MAP生成工具

最后

以上就是自然水壶为你收集整理的simulink仿真及代码生成技术入门到精通_Simulink迭代器及其代码生成的全部内容,希望文章能够帮你解决simulink仿真及代码生成技术入门到精通_Simulink迭代器及其代码生成所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部