关于实现逻辑循环的方法分析和介绍

描述

C代码中常用的循环控制语句有诸如for 、while以及do while。那么,这种循环逻辑在Simulink模型中是如何实现的呢?

Simulink里有三种建模手段:

Simulink 框图

Stateflow Chart

MATLAB Function

先来看看如何使用Simulink 框图来表达这种循环逻辑。

点击末尾的 “阅读原文” 下载本文的案例模型

循环逻辑

要得到:

y1 = 0;

for(inx = 0; inx <10; inx++)

{

y1 = u1[inx] + y1;

}

或者  

while(flag && (num_iter <= 100)

{

flag = func ();

num_iter ++;

}

怎么做:

在 Simulink的Port & Subsystem库里,有IF-ELSE以及While模块。

For循环实例

1. 新建一个简单的Simulink模型

首先来看For循环,这是从Port & Subsystem库里拖出来的For Iterator模块:

C代码

双击它,搭建内部如下图:

C代码

代码生成之前所需要的配置、数据对象的构造以及信号关联等等,这些任务与之前所述一样,此处就不再重复说了。

5. 生成代码

Ctrl+B,生成代码。

如前面所设置的,可以看到下图所生成的For循环的C代码:

C代码

While循环实例

在Port & Subsystem库里的While Iterator模块,实现while循环的功能。从这个模型的端口来看,在这个循环里根据输入u2来计算输出y2的值,如下图。

C代码

在这个While Iterator子系统内部,则是具体的while循环的内容,如下图。

While Iterator模块,是这个循环的条件模块,可以设置最大的循环次数,同时cond为while的循环条件。而在上部的累加计算框图,则是 while 循环的内容。

C代码

生成代码,如下图。图中的func函数就是框图func子系统所生成的函数。内部做了一些更新flag的计算。另外可以看到累加框图生成的代码:y2 += u2。

C代码

do while循环实例

这个就简单了,直接把上图中的 while Iterator 模块双击设置为 do while 的模式就行了。

其他

生成代码结束之后,如果继续编译链接生成 exe 文件时,会有一个有意思的错误如下。有兴趣的可以去查看 math.h 的函数定义。

C代码

在Simulink的Port & Subsystem库里,有IF-ELSE以及While相应的子系统模块实现循环算法。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分