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模块:
双击它,搭建内部如下图:
代码生成之前所需要的配置、数据对象的构造以及信号关联等等,这些任务与之前所述一样,此处就不再重复说了。
5. 生成代码
ctrl+b,生成代码。
如前面所设置的,可以看到下图所生成的for循环的c代码:
while循环实例
在port & subsystem库里的while iterator模块,实现while循环的功能。从这个模型的端口来看,在这个循环里根据输入u2来计算输出y2的值,如下图。
在这个while iterator子系统内部,则是具体的while循环的内容,如下图。
while iterator模块,是这个循环的条件模块,可以设置最大的循环次数,同时cond为while的循环条件。而在上部的累加计算框图,则是 while 循环的内容。
生成代码,如下图。图中的func函数就是框图func子系统所生成的函数。内部做了一些更新flag的计算。另外可以看到累加框图生成的代码:y2 += u2。
do while循环实例
这个就简单了,直接把上图中的 while iterator 模块双击设置为 do while 的模式就行了。
其他
生成代码结束之后,如果继续编译链接生成 exe 文件时,会有一个有意思的错误如下。有兴趣的可以去查看 math.h 的函数定义。
在simulink的port & subsystem库里,有if-else以及while相应的子系统模块实现循环算法。
罗永浩:下个创业项目是元宇宙
ChatGPT已经有9岁小孩的心智了
一文了解ELD透明屏的应用领域和优点
美信推出MAXREFDES67通用输入微型PLC参考设计
人员定位系统医养结合式养老,实现高精准人员定位
关于实现逻辑循环的方法分析和介绍
销售破百万!一加手机开售22天,海外市场助推
锡膏产家教你如何选择无铅锡膏生产厂家?
48转12伏转换器电路图大全
一文详解自动驾驶车辆的系统架构:感知系统和决策系统
数智引领,能力赋能 | 中软国际软件工厂6大专业服务能力,助力汽车智能化创新发展
网友抢疯了?二手小米MIX在日本的价格超过了iPhone 7
二进制计数电位器1
中国移动正式招标地空通信系统核心网
贴片机:国产贴片机or二手贴片机
殷华湘团队研发出3纳米晶体管 相当于一条人类DNA链的宽度
迈威LoRa-Gate600实现端到云无线数据快速传输
苹果发布红色特别版iPhone7后,网友吐槽上线了
浴室中的智能镜子,为我们打造智能浴室的新走向
通信设备及智慧医疗产品研发制造企业共进股份发布2022第一季度报告