当前位置: 首页 > news >正文

【研发日记】Matlab/Simulink技能解锁(十一)——Stateflow中的en、du、ex应用对比

文章目录

前言

项目背景

en类型

du类型

ex类型

组合类型

分析和应用

总结

参考资料


前言

        见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》

        见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》

        见《【研发日记】Matlab/Simulink技能解锁(八)——分布式仿真》

        见《【研发日记】Matlab/Simulink技能解锁(九)——基于嵌入式处理器仿真》

        见《【研发日记】Matlab/Simulink技能解锁(十)——PID调参技巧》

项目背景

        近期在一个嵌入式项目中用到了Stateflow中的en、du和ex,深究时遇到了一些疑惑,查阅官方文档中的说明也没有完全理解。利用周末时间亲自摸索了一下,把它们的一些基本规律和技巧总结下来。

        官方文档中的说明如下:

en类型

        当程序跳转到某个State时,进入该State后的第一个运行周期,要执行的就是en:后面的代码。如果程序在该State中连续停留多个运行周期,那么第二个周期以及后面的周期都不会执行en:后面的代码。如果程序从该State退出后再次进来,那么跟前面第一次进来是一样的效果,只在第一个运行周期,要执行的就是en:后面的代码。示例如下:

        与en作用类似的还有一个用法,是跳转线上{}里边的执行代码。当程序经过一跟跳转线进入某个state时,也是在第一个运行周期执行该代码,示例如下:

        上述两种用法都能发挥相同的作用,但是二者也有一些区别。当一个State有多根跳转进来的转换线时,如果使用en,那么不管从哪个方向进来都会执行相同的代码,如果使用跳转线上的{},那么从不同方向进来就可以执行不同的代码

du类型

        当程序进入到某个State后,要在该State中连续停留多个运行周期时,那么从第二个周期开始,以及后面的周期,都会执行一次du:后面的代码。如果程序从该State退出后再次进来,那么跟前面第一次进来是一样的效果,除了第一个运行周期不执行du,后面都要执行du:后面的代码。示例如下:

        与du作用类似的还有一个用法,是增加一个无条件的跳转线(优先级要最低)。当程序不满足跳出当前state的条件时,就会循环重复回到当前state,那么这时候放在en后面的代码也会像du一样每个运行周期都执行一遍,直到跳出该state,示例如下:

        Tip1:这次的示例中s2向s1的跳转条件没有使用after(5,tick),是因为这个函数的计数起点为进入当前State的第一个运行周期,如果退出当前State计数就会清零,本示例是循环重复进入s2,计数一直达不到5次跳出的条件。

        Tip2:每个States的跳出转换线上的条件判断,在每个运行周期都会查询,查询的时间点是在当前State中的内容先执行完之后,类似于do while()。如果条件符合发生了跳转,是会暂时停在那个跳转线上,等着下一个周期的时间到了才执行后面的State。

        上述两种用法都能发挥相同的作用,但是二者也有一些区别,区别就在于进入State的第一个运行周期是否执行目标代码。因为在一些应用中是一样在代码的最前面执行一些初始化的准备工作的,有的应用就不需要区别对待,所以就可以根据应用的差异选择适合自己的Stateflow写法。

ex类型

        当程序要从某个State中退出时,退出后紧挨着的第一个运行周期就执行ex后面的代码,而且只执行一次,后续就跟这个State没有关系了。如果程序从该State退出后再次进来,那么退出的时候跟前面是一样的效果,在退出后紧挨着执行一次ex后面的代码。示例如下:

        与ex作用类似的还有一个用法,是跳转线上{}里边的执行代码。当程序经过一根跳转线退出当前state时,也是在退出后紧挨的第一个运行周期执行该代码,示例如下:

        上述两种用法都能发挥相同的作用,但是二者也有一些区别。当一个State有多根跳转出去的转换线时,如果使用ex,那么不管从哪个方向出去都会执行相同的代码,如果使用跳转线上的{},那么从不同方向出去就可以执行不同的代码

组合类型

        前面分别介绍了en、du和ex的单独应用,但是在一些应用中一个State需要同时使用其中的两个类型,简单的方法就是把相同的代码分别在两种类型后面都写一遍。但是还有的应用是三种类型都要用上,那么相同的代码写三遍就会显得很臃肿,这里官方就提供了一种高效的组合使用方法,示例如下:

        与上述组合用法作用类似的还有一个隐藏用法,是直接在State里边不写任何en、du和ex,这种用法就是默认的en和du组合。示例如下:

        上述两种用法都能发挥相同的作用,但是二者也有一些细微区别。当一个State中的代码前面没有任何类型限定时,虽然代码足够简洁,但是代码的可读性也大大降低了,适合于经验丰富的编程人员,对于普通的程序员不太友好。

分析和应用

        在使用Simulink开发软件时,如果能熟练地使用Stateflow,灵活和精准运用en、du、ex和跳转线,就能给软件的复杂度降低非常多,也能减少很多不必要的隐形Bug

总结

        以上就是本人在研发中使用Stateflow中的en、du、ex和跳转线时,一些个人理解和分析的总结,主要介绍了en、du、ex和跳转线的基本规律和技巧,展示了仿真运行的效果,并分析了它们的特点和适用场景。

        后续还会分享另外几个最近解锁的Matlab/Simulink新技能,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。

参考资料

    Mathworks Help -> Stateflow

        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!

相关文章:

【研发日记】Matlab/Simulink技能解锁(十一)——Stateflow中的en、du、ex应用对比

文章目录 前言 项目背景 en类型 du类型 ex类型 组合类型 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simul…...

《学会 SpringMVC 系列 · 剖析篇(上)》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

【Vulnhub系列】Vulnhub_SecureCode1靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub_SecureCode1靶场渗透 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、环境配置 1、从百度网盘下载对应靶机的.ova镜像 2、在VM中选择【打开】该.ova 3、选择存储路径&#xff0…...

【C语言】结构体详解 -《探索C语言的 “小宇宙” 》

目录 C语言结构体(struct)详解结构体概览表1. 结构体的基本概念1.1 结构体定义1.2 结构体变量声明 2. 结构体成员的访问2.1 使用点运算符(.)访问成员输出 2.2 使用箭头运算符(->)访问成员输出 3. 结构体…...

基于DTW距离的KNN算法实现股票高相似筛选案例

使用DTW算法简单实现曲线的相似度计算-CSDN博客 前文中股票高相关k线筛选问题的延伸。基于github上的代码迁移应用到股票高相关预测上。 这里给出一个相关完整的代码实现案例。 1、数据准备 假设你已经有了一些历史股票的k线数据。如果数据能打标哪些股票趋势是上涨的、下跌…...

GD32 - IIC程序编写

一、初始化 理论知识链接: IIC理论知识 二、代码实现 1、SDA和SCL设置成开漏输出模式 开漏输出的作用: 因为IIC总线是一种双向的通信协议,需要使用开漏输出实现共享总线。开漏输出类似于一种线与的方式,即无论总线上哪个设备…...

将项目部署到docker容器上

通过docker部署前后端项目 前置条件 需要在docker中拉去jdk镜像、nginx镜像 docker pull openjdk:17 #拉取openjdk17镜像 docker pull nginx #拉取nginx镜像部署后端 1.打包后端项目 点击maven插件下面的Lifecycle的package 对后端项目进行打包 等待打包完成即可 2.将打…...

免费【2024】springboot宠物美容机构CRM系统设计与实现

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…...

搞懂数据结构与Java实现

文章链接:搞懂数据结构与Java实现 (qq.com) 代码链接: Java实现数组模拟循环队列代码 (qq.com) Java实现数组模拟栈代码 (qq.com) Java实现链表代码 (qq.com) Java实现哈希表代码 (qq.com) Java实现二叉树代码 (qq.com) Java实现图代码 (qq.com)...

Stable Diffusion 图生图

区别于文生图,所谓的图生图,俗称的垫图,就是比文生图多了一张参考图,由参考一张图来生成图片,影响这个图片的要素不仅只靠提示词了,还有这个垫图的因素,这个区域就上上传垫图的地方,…...

语言转文字

因为工作原因需要将语音转化为文字,经常搜索终于找到一个免费的好用工具,记录下使用方法 安装Whisper 搜索Colaboratory 右上方链接服务 执行 !pip install githttps://github.com/openai/whisper.git !sudo apt update && sudo apt install f…...

ref函数

Vue2 中的ref 首先我们回顾一下 Vue2 中的 ref。 ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例&#xff1…...

7/30 bom和dom

文档对象mox 浏览器对象模型...

【Golang 面试 - 进阶题】每日 3 题(五)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...

MySQL,GROUP BY子句的作用是什么?having和where的区别在哪里说一下jdbc的流程

GROUP BY 子句的作用是什么 GROUP BY 字段名 将数据按字段值相同的划为一组,经常配合聚合函数一起使用。 having和where的区别在哪里 where是第一次检索数据时候添加过滤条件,确定结果集。而having是在分组之后添加结果集,用于分组之后的过…...

1._专题1_双指针_C++

双指针 常见的双指针有两种形式,一种是对撞指针,一种是左右指针。对撞指针:一般用于顺序结构中,也称左右指针。 对撞指针从两端向中间移动。一个指针从最左端开始,另一个从最右端开始,然后逐渐往中间逼近…...

Spring集成ES

RestAPI ES官方提供的java语言客户端用以组装DSL语句,再通过http请求发送给ES RestClient初始化 引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </d…...

力扣高频SQL 50题(基础版)第二十六题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十六题1667.修复表中的名字题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十六题 1667.修复表中的名字 题目说明 表&#xff1a; Users ----------------…...

WIFI 接收机和发射机同步问题+CFO/SFO频率偏移问题

Synchronization Between Sender and Receiver & CFO Correction 解决同步问题和频率偏移问题是下面论文的关键&#xff0c;接下来结合论文进行详细解读 解读论文&#xff1a;Verification and Redesign of OFDM Backscatter 论文pdf&#xff1a;https://www.usenix.org/s…...

ubuntu安装并配置flameshot截图软件

参考&#xff1a;flameshot key-bindins 安装 sudo apt install flameshot自定义快捷键 Settings->Keyboard->View and Customize Shortcuts->Custom Shortcuts&#xff0c;输入该快捷键名称&#xff08;自定义&#xff09;&#xff0c;然后输入command&#xff08;…...

League Akari:英雄联盟玩家的终极智能工具箱 - 3大核心功能深度解析

League Akari&#xff1a;英雄联盟玩家的终极智能工具箱 - 3大核心功能深度解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为英雄联盟…...

FastAPI + SQLite:从基础CRUD到安全并发的实战指南

核心摘要本文将带你超越FastAPI SQLite的基础CRUD搭建&#xff0c;聚焦于安全防护&#xff08;认证、授权、输入验证&#xff09;与并发处理&#xff08;数据库连接池、异步优化&#xff09;两大实战痛点。你会获得一套可直接复用的项目骨架&#xff0c;并理解其背后的设计逻辑…...

GitHub功能多元拓展,korb工具革新REWE购物流程

【导语&#xff1a;GitHub提供了涵盖AI代码创作、开发者工作流、应用程序安全等多方面的丰富功能&#xff0c;同时推出不同规模和用例的解决方案。而korb命令行工具则为REWE超市购物带来新体验&#xff0c;可实现自动化购物流程。】GitHub&#xff1a;功能全面的开发者平台GitH…...

3分钟让Windows 11脱胎换骨:Win11Debloat全面系统优化指南

3分钟让Windows 11脱胎换骨&#xff1a;Win11Debloat全面系统优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

League Akari:英雄联盟玩家的终极自动化工具包

League Akari&#xff1a;英雄联盟玩家的终极自动化工具包 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League Akari 是一款基于官方 LCU A…...

告别重复造轮子:用快马AI一键生成可配置的魔鬼面具UI组件库

作为一个经常需要处理各种UI组件的前端开发者&#xff0c;最近在做一个万圣节主题项目时&#xff0c;遇到了一个有趣的挑战&#xff1a;需要快速开发一套可配置的魔鬼面具组件库。传统手动编码方式不仅耗时&#xff0c;而且难以应对多风格需求。幸运的是&#xff0c;我发现了In…...

终极窗口置顶指南:如何让重要窗口永远不被遮挡

终极窗口置顶指南&#xff1a;如何让重要窗口永远不被遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop AlwaysOnTop 是一个轻量级的 Windows 应用程序&#xff0c;它能够将任…...

开源 ESP32 网络收音机:OLED 界面与编码器交互全解析

1. ESP32网络收音机项目概述 第一次接触ESP32网络收音机项目时&#xff0c;我被这个小小的开发板展现出的强大功能震撼到了。想象一下&#xff0c;一个火柴盒大小的设备&#xff0c;不仅能连接WiFi播放全球各地的网络电台&#xff0c;还能通过OLED屏幕和编码器实现媲美商业产品…...

视频PPT提取终极指南:3步从视频中智能提取演示文稿

视频PPT提取终极指南&#xff1a;3步从视频中智能提取演示文稿 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经需要从视频中提取PPT内容&#xff0c;却苦于手动截图效率低…...

为什么90%的词库转换都会失败?输入法词库迁移的终极解决方案:全方位指南

为什么90%的词库转换都会失败&#xff1f;输入法词库迁移的终极解决方案&#xff1a;全方位指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代&#x…...