关于利用C代码实现条件控制的分析和研究

描述

条件控制在C代码中常用的诸如if-else, Switch-Case来表达,那么:

在Simulink模型中是如何实现的呢?

又如何配置生成代码呢?

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

条件控制逻辑

要得到:

if (u1 > u2)

{

y1 = u1;

}

else

{

y1 = u2;

}

或者

switch (u1)

{

case 2:

y1 = u2;

break;

case 3:

u3;

break;

default:

y1 = u4;

break;

}

怎么做:

在Simulink框图模型里使用Signal Routing以及Ports&Subsystem库里对应的模块,如Switch;在Chart里则根据逻辑来构造流程图;而在MATLAB Function模块里则直接写m脚本。

if-else实例

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

如图使用三种方式来实现条件判断的算法:

C代码

如上图,对于Simulink来说,if-else可以使用Signal Routing库里的Switch模块。而在Chart中,则画出对应的流程图即可,如下图:

C代码

MATLAB Function则更简单,直接写m脚本。

C代码

代码生成基本配置

求解器:定步长—离散求解器

系统目标文件:ert.tlc

3. 新建数据对象

打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入、输出信号同名的数据对象。通过数据对象来控制这些信号在将来生成C代码时的定义和声明。

C代码

4. 信号关联

在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,一条一条信号线的点击鼠标,略麻烦,所以可以使用命令的方式来实现:

C代码

此时,第一张模型截图中信号线上的蓝色小叉子就会出现,表示已经关联了。

5. 生成代码

Ctrl+B,生成代码。

如前面所设置的,三个模块都会得到同样的if-else的代码:

C代码

接下来看Switch的情况。

Switch实例

1. MATLAB Function

比较简单,跟之前一样按照m语言的语法写代码即可。

2. Stateflow Chart

而对于Stateflow Chart来说,如果不熟悉流程图的画法,可以使用向导自动生成特定的逻辑结构,作为参考:

C代码

在向导对应的框内填入内容,然后自动生成后边的流程图,可以根据自己的需要再进行调整。Stateflow里面,中括号里的是条件判断语句,大括号里的是执行语句。

C代码

其实从结构上来讲,得到的流程图和之前的if-else是类似,它其实也完全可以用 if-else if-else的C代码来表示。而实际上,它生成的代码也会是这样:

C代码

只不过呢,因为下图所示的选择项是会默认勾选上的:

C代码

所以生成的代码就会变成Switch的模式:

C代码

Signal Routing里有个Multiport Switch可以用来表达Switch的效果。另外,还有来自Port & Subsystem库里的Switch Case模块。

下图就是它们的用法。感兴趣的可以下载模型生成代码看看。

C代码

条件控制语句:

对于MATLAB Function,就是直接写对应的m脚本;

对于Stateflow,就是对应不同形式的流程图;

对于Simulink,就是使用对应的模块。

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

全部0条评论

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

×
20
完善资料,
赚取积分