0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

MATLAB 来源:djl 2019-09-17 11:40 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

条件控制在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,就是使用对应的模块。

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

    关注

    2

    文章

    834

    浏览量

    30062
  • C代码
    +关注

    关注

    1

    文章

    90

    浏览量

    15108
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C/C++条件编译

    条件编译是一种在编译时根据条件选择性地包含或排除部分代码的处理方法。在 C/C++ 中,条件编译
    发表于 12-05 06:21

    基于芯源CW32 MCU的LED闪烁示例及代码分析

    准备: 芯源CW32开发板 一个LED 电阻及基础连接线 开发环境:我使用的是Keil作为开发环境,同时利用官方提供的CW32库函数,这使得代码更加简洁清晰。 代码实现:这段
    发表于 12-04 06:52

    Airship研究:无代码原生应用体验使购买频次翻倍(增长140%),为假日季盈利增长开辟新路径

    ”(Experience Impact)研究分析了超过1000个零售类应用内体验和17亿次设备会话,量化了利用代码和AI驱动工具优化端到端客户旅程(而非仅发送信息)所产生的影响——这
    的头像 发表于 11-27 16:34 913次阅读

    C语言的编程技巧

    设计,分层开发代码,便于理解和维护。 ‌8、避免使用GOTO语句‌:尽管GOTO语句在某些情况下仍然有用,但现代编程更倾向于使用函数和循环控制结构,以提高代码的可读性和维护性。 ‌9、利用
    发表于 11-27 06:46

    电压放大器驱动液滴微流控芯片关键功能实现研究

    控制条件,可以对液滴进行多样化的操控,以满足不同研究和应用场景需求。在生物医学领域,液滴具有广泛的应用价值,可以视为一个独立的微反应器,具有微纳尺度体积,容易高通量操作,非常适用于大样本下的生化检测和
    的头像 发表于 07-30 14:24 517次阅读
    电压放大器驱动液滴微流控芯片关键功能<b class='flag-5'>实现</b><b class='flag-5'>研究</b>

    无刷直流电机双闭环串级控制系统仿真研究

    以来伴随着永磁材料技术、计算机及控制技术等支撑技术的快速发展及微电机制造工艺水平的不断提高,永磁无刷直流电动机在高性能中、小伺服驱动领域获得广泛应用并日趋占据主导地位吗。一直以来,研究人员都比较关注利用
    发表于 07-07 18:36

    三相异步电机直接转矩控制的圆形磁链研究

    产生PWM波,并通过改变转速给定值,得出在不同给定条件下的仿真结果,并用滤波器对定子电流进行滤波,最后对仿真结果进行了具体分析。这对中小功率电机控制系统实际开发应用等方面有一定的实用价值。 纯分享帖,需要者
    发表于 06-16 21:50

    如何利用EPR分析USB PD?

    嗨,英飞凌社区, 我一直在研究 USB PD 3.1,根据我找到的信息,EPR 是 USB PD 3.1 规范的一部分。 我对使用CY4500 EZ-PD协议分析仪很感兴趣,但我在以下链接中发现它不
    发表于 05-21 06:40

    基于STM32C8T6控制,FSR402压力传感器+oled屏幕显示代码

    基于STM32C8T6控制,FSR402压力传感器+oled屏幕显示代码
    发表于 04-14 15:06 6次下载

    永磁同步电机矢量控制策略分析

    本文通过矢量控制策略采用 id=0 控制方案快速准确地控制转矩,实现调速系统具有较高的动态性能。并利用了 Matlab 工具对永磁同步电机矢
    发表于 03-20 12:57

    智能电动轮椅控制系统的研究与设计

    具体原理进行分析,最后在MATLAB平台上完成改进双闭环调速系统的仿真实现。文章总共分为五章内容,具体结构下载以下附件查阅~~~*附件:20250307_智能电动轮椅控制系统的研究与设
    发表于 03-07 15:17

    如何利用MES系统进行产能分析呢?

    利用MES系统进行产能分析是一个涉及数据收集、处理、分析和结果呈现的全过程。对生产过程加以监控,充分利用MES数据采集分析
    的头像 发表于 02-21 12:10 782次阅读
    如何<b class='flag-5'>利用</b>MES系统进行产能<b class='flag-5'>分析</b>呢?

    分析C语言代码结构的设计问题

    分析一个C语言代码结构的设计问题。 这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。 大家觉得,这样的
    的头像 发表于 02-11 09:31 690次阅读

    怎么提升单片机代码执行效率

    ​ 提升单片机代码执行效率需要从多个方面入手,包括代码优化、硬件资源利用、编译器设置、中断处理优化以及其他技巧等。在实际应用中,需要根据具体需求和硬件条件综合考虑这些因素,以
    的头像 发表于 01-10 11:06 953次阅读

    Flexus X 实例 C#/.Net Core 结合(git 代码管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~

    与 Docker 容器化部署,实现代码高效管理与无缝迁移。即刻行动,让您的 Web 服务更加稳定、高效,领跑数字化转型之路! ���本实验深入演示了如何在 Ubuntu 环境中,利用 Git 进行版本控制管理
    的头像 发表于 12-25 21:15 1044次阅读
    Flexus X 实例 <b class='flag-5'>C</b>#/.Net Core 结合(git <b class='flag-5'>代码</b>管理、docker 自定义镜像)快速发布部署 - 让你的项目飞起来~