条件控制在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模型
如图使用三种方式来实现条件判断的算法:
如上图,对于Simulink来说,if-else可以使用Signal Routing库里的Switch模块。而在Chart中,则画出对应的流程图即可,如下图:
MATLAB Function则更简单,直接写m脚本。
代码生成基本配置
求解器:定步长—离散求解器
系统目标文件:ert.tlc
3. 新建数据对象
打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入、输出信号同名的数据对象。通过数据对象来控制这些信号在将来生成C代码时的定义和声明。
4. 信号关联
在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,一条一条信号线的点击鼠标,略麻烦,所以可以使用命令的方式来实现:
此时,第一张模型截图中信号线上的蓝色小叉子就会出现,表示已经关联了。
5. 生成代码
Ctrl+B,生成代码。
如前面所设置的,三个模块都会得到同样的if-else的代码:
接下来看Switch的情况。
Switch实例
1. MATLAB Function
比较简单,跟之前一样按照m语言的语法写代码即可。
2. Stateflow Chart
而对于Stateflow Chart来说,如果不熟悉流程图的画法,可以使用向导自动生成特定的逻辑结构,作为参考:
在向导对应的框内填入内容,然后自动生成后边的流程图,可以根据自己的需要再进行调整。Stateflow里面,中括号里的是条件判断语句,大括号里的是执行语句。
其实从结构上来讲,得到的流程图和之前的if-else是类似,它其实也完全可以用 if-else if-else的C代码来表示。而实际上,它生成的代码也会是这样:
只不过呢,因为下图所示的选择项是会默认勾选上的:
所以生成的代码就会变成Switch的模式:
Signal Routing里有个Multiport Switch可以用来表达Switch的效果。另外,还有来自Port & Subsystem库里的Switch Case模块。
下图就是它们的用法。感兴趣的可以下载模型生成代码看看。
条件控制语句:
对于MATLAB Function,就是直接写对应的m脚本;
对于Stateflow,就是对应不同形式的流程图;
对于Simulink,就是使用对应的模块。
-
逻辑
+关注
关注
2文章
832浏览量
29446 -
C代码
+关注
关注
1文章
89浏览量
14287
发布评论请先 登录
相关推荐
评论