条件控制在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,就是使用对应的模块。
驱动之路之platform按键驱动
中兴将全球首发屏下摄像头高通骁龙888旗舰
关于芯片后缀的必备小常识
小米5C评测:颜值颇高的时尚机!史上最美小米5C精致优雅并存
2023“物联之星”智慧城市系列案例
关于利用C代码实现条件控制的分析和研究
软银再次对其机器人战略进行了调整
首尔半导体吴森如何看待自然光谱LED在健康照明和高端商照中的应用
继华为小米之后,一加手机3T升级Android7.0:新功能给力
新型土壤肥料养分速测仪真实检测土壤养分情况
选择合适的连接器不考虑触点定制的好处
海瑞思科技推出前放后取工装检测设备
雷达发射机高压稳压电源
Superdata预测未来三年AR/MR收入将超VR
研究显示新Petya病毒破坏性比之前更强 目标非赎金而是直接毁坏用户电脑
详解太阳能发电方式和的工作原理
云洲促进人工智能的深度应用 快速推动水上安防进入无人时代
研华嵌入式工控机推荐:小尺寸、丰富 I/O 接口、多样化安装!
影响连接器插拔力的因素有哪些?
旷世推出了基于AI的智能测温系统,帮助控制疫情的扩散