关于Stateflow实现循环逻辑的相关分析和介绍

描述

循环逻辑

要得到:

y1 = 0;

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

{

y1 = u1[inx] + y1;

}

或者  

while(flag && (num_iter <= 100)

{

flag = func ();

num_iter ++;

}

怎么做:

Stateflow 有相应的流程图向导可以直接使用,自动生成对应的流程图结构。

For循环

1. 模型

在 Stateflow 里有各种控制流的构造向导,如下图。如果对 Stateflow 的流程图构建不熟悉的话,可以使用它来自动生成,再在它的基础上进行修改:

输出信号

从而得到所需要的框图:

输出信号

2. 数据

定义 Stateflow 模块的端口和本地变量,输入端口 u1,输出端口 yy1,以及本地变量 inx 如下:

输出信号

在 Base Workspace 里定义输入输出信号 u1,yy1 的 Data Object:

输出信号

3. 关联

在信号线上右键,设置信号属性,勾选 “Signal name must resolve to Simulink signal object”,将信号与 Base Workspace 的数据对象关联在一起。关联输入输出信号后,会看到如图的蓝色小叉子:

输出信号

4. 代码

Ctrl+B,它所自动生成的代码:

输出信号

While循环

1. 模型

下图就通过向导构造的,得到跟 for 循环类似的流程图:

输出信号

这里的func作为一个 事件Event ,触发外面的 function call 子系统 func 计算flag:

输出信号

2. 数据

Stateflow 内的数据定义如下图,输入端口名称 u1,输出端口名称 yy2,本地变量 num_iter。flag 由外部函数 func 来更新而作为输入。另外, func 事件触发调用外部的 func 函数。( inx 这里没有用)

输出信号

在 Base Workspace 里定义相应的数据对象。因为这个 Simulink 模型的信号线上已经命名为 u2,所以定义的数据对象名称要跟信号线的名字一致: u2,yy2,flag。

并设置 flag 的初始值为 true。将数据对象与 Simulink 信号线关联。

输出信号

3. 生成代码

Ctrl+B,生成的代码如下图所示。设置了 func()子系统的属性,把它变成一个子函数来调用。没有截图显示,但是func() 函数里修改了全局变量 flag 的值。

输出信号

代码正常生成,但此时会得到如下的警告:

输出信号

也就是说,我们之前对数据对象 flag 所设置的初始值是没用的,会被模型中 func 子系统的输出端口 Out1 的初始值所覆盖。

默认情况下 Out1 端口的初始值为 0 ,所以看下图的初始化函数里, flag 被初始化为 false,我们之前所设置的初始值 true 没有发生作用。

输出信号

主程序里的 while(flag&(inx<100)) 都不会被执行。这个问题,通过仿真也会测出来。

所以,需要双击 func 子系统的 Out1 端口,设置初始值为 true,仿真才能得到正确的结果。同时,也会最后得到下面的初始化代码。

输出信号

do while循环

使用流程图的向导,选择 do while 模式,把 Chart 里面的流程图改改就行了。另外,被调用的 func 函数,也可以写在 Chart 里面。

Stateflow 有相应的流程图向导可以直接使用,自动生成对应的流程图结构。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
h1654156022.1315 2022-08-23
0 回复 举报
http://house.china.com.cn/sousou/VIP%252C%2B%25C3%25E5%25B1%25B1%25D3%25F1%25CF%25E9%25C6%25BD%25CC%25A8B2024.cN%252C%25CB%25D5%25D6%25DD%25B7%25D6%25D5%25BE_19s.htm http://house.china.com.cn/sousou/%25D4%25DA%25CF%25DF%252C%2B%25C3%25E5%25B5%25E9%25B0%25EB%25C9%25BD%25D3%25E9%25C0%25D6%25B9%25AB%25CB%25BEB2024.cN_51s.htm http://house.china.com.cn/sousou/%25B9%25D9%25B7%25BD%252C%2B%25C3%25E5%25B5%25E9%25B2%25FD%25CA%25A2%25D3%25E9%25C0%25D6B2024.cN%252C%25B3%25AF%25D1%25F4%25C6%25F3%25D2%25B5_1s.htm http://house.china.com.cn/sousou/%25BA%25F3%25CC%25A8%252C%2B%25B5%25CF%25CD%25FE%25B9%25FA%25BC%25CA%25D5%25E6%25C8%25CB%25D3%25E9%25C0%25D6B2024.cN_1s.htm http://house.china.com.cn/sousou/%25C3%25E5%25B5%25E9%252C%2B%25C3%25E5%25B5%25E9%25BB%25B7%25C7%25F2%25B9%25FA%25BC%25CA%25BC%25AF%25CD%25C5B2024.cN%252C%25D6%25CE%25D6%25DD%25CE%25C0%25C9%25FA%25BE%25D6_1s.htm 收起回复

全部0条评论

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

×
20
完善资料,
赚取积分