【研发日记】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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3279704.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

机械拆装-基于Unity-本地数据持久化

目录 1. 数据结构简介:数据的集合 1.1 线性数据结构 1.2 非线性数据结构 2. 对数据集合的操作: 3. 数据持久化 3.1 数据的序列化存储 3.2 JSON文件硬盘存储 3.2.1 Json文件允许存储的数据类型 3.2.2 Json文件的语法格式 3.2.3 Json文件的读取 3.2.4 …

【C#】ThreadPool的使用

1.Thread的使用 Thread的使用参考:【C#】Thread的使用 2.ThreadPool的使用 .NET Framework 和 .NET Core 提供了 System.Threading.ThreadPool 类来帮助开发者以一种高效的方式管理线程。ThreadPool 是一个线程池,它能够根据需要动态地分配和回收线程…

yolov8pose 部署rknn(rk3588)、部署地平线Horizon、部署TensorRT,部署工程难度小、模型推理速度快,DFL放后处理中

特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。 模型和完整仿真测试代码,放在github上参考链接 模型和代码。 之前写了yolov8、yolov8seg、yolov8obb 的 DFL 放在模型中和放在后处理…

XXE-lab-master靶场:PHP_xxe

目录 有回显 测试回显位置 构建payload 无回显数据外带 构建payload 漏洞修复 XXE-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞靶场。 下载地址:https://github.com/c0ny1/xxe-lab 将PHPStudy的中间件与版本信息调制为 php-5.4.29Apache 以…

UCC5320SCDWVR驱动SIC的功耗计算

驱动功耗可以通过分析器件的电气特性和推荐的电源电压来估算。以下是一些关键信息,用于估算功耗: 电源电流: 输入电源静态电流(IVCC1​):最小值为1.67 mA,典型值为2.4 mA。输出电源静态电流&am…

计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

刷题了:226.翻转二叉树 | 101. 对称二叉树

226.翻转二叉树 文章讲解:https://programmercarl.com/0226.%E7%BF%BB%E8%BD%AC%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解:https://www.bilibili.com/video/BV1sP4y1f7q7/?spm_id_from333.788&vd_sourcee70917aa6392827d1ccc8d85e19e8375 题目链接:https://leetcode.cn…

从PyTorch官方的一篇教程说开去(5 - 神经网络 torch.nn)

神经网络长啥样?有没有四只眼睛八条腿? 借图镇楼 - 真的是非常经典,可以给下面的解释省掉很多力气。 分3个维度阐述 - 1)输入数据集。假如你自己去微调一下大模型就知道,最开始的一步就是要准备(足够大…

视频生成AI工具——PixVerse V2 登场:支持一键生成5段、最长 40S 连续视频!

就在昨天,光源伙伴 「 爱诗科技 」正式发布其视频生成产品 PixVerse V2 , 并全球同步开放,更低门槛,更高质量,更有逻辑,更长时长,这几个“更”,让这款产品受到了超高关注,今天带大家…

GD32手把手教你移植FlashDB(片外Flash) -- 3.FlashDB使用

GD32手把手教你移植FlashDB(片外Flash) – 1.FlashDB-sfud移植 GD32手把手教你移植FlashDB(片外Flash) – 2.FlashDB移植 GD32手把手教你移植FlashDB(片外Flash) – 3.FlashDB使用 示例代码: https://gitee.com/ljmRD/GD32F427_FlashDB 3.FlashDB使用 main() /*************…

华为云上如何创建桶

目录 一、进入对象存储服务(OBS)页面,点击【创建桶】二、输入桶的相关信息三、获取 projectId四、获取 OBS Endpoint五、获取 AK/SK一、进入对象存储服务(OBS)页面,点击【创建桶】 二、输入桶的相关信息 可以勾选购买套餐: 点【立即创建】按钮完成桶的创建。 三、获取…

Vue3开源Tree组件研发:节点勾选支持v-model

自研Tree组件有两个原因:1. 目前开源UI对Tree组件的用户API不太友好,2. 提升Vue3组件自研能力。 目前已实现的功能见上面思维导图。想象Tree组件的一个使用场景:后台管理员通过Tree组件来完成用户角色授权,同时支持对权限进行新增…

【和相同的二元子数组】python刷题记录

R2-前缀和专题 目录 前缀和哈希表 双指针 ps: 第一眼过去,这题应该能用双指针解出来,应该也能用前缀和解题。 前缀和哈希表 适用于 nums[i] 值不固定为 0 和 1 的其他情况 class Solution:def numSubarraysWithSum(self, nums: List[int], goal: i…

揭秘高效语音转文字工具:让沟通更便捷

嘿,各位办公室的小伙伴们,今儿咱们来聊聊那些能让咱们文员生活大变样的神器——特别是那些能把咱们嘴里嘟囔的话儿,瞬间变成电脑里整整齐齐文字的语音转文字工具。说起来,自从有了这些宝贝,我感觉自己都快能飞起来了&a…

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址,这样在需要迁移应用的时候就造成了巨大的麻烦,所以我决定用nginx做反向代理,这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…

ETH现货ETF流入量估算:会重演BTC现货ETF走势吗?

以太坊现货ETF将于7月23日上线,成为市场关注的焦点。ETH ETF的推出带来了很多与BTC ETF不同的特性,这些特性容易被市场忽视。本文将探讨ETH现货ETF的流入量估算,并分析其是否会重演BTC现货ETF的走势。 ETHE流出量预测 ETH ETF的收费结构与BT…

生活方式酒店升势迅起,喆啡酒店缘何成为投资热点?

伴随国内消费结构转型升级,旅游需求持续增加。文旅部发布的《国内旅游提升计划(2023—2025年)》提出,需丰富优质旅游供给,并进一步提高消费者体验及满意度,这将为酒店行业带来更广阔的客源和更高的质量要求…

云借阅图书管理系统——系统概述

一、云借阅系统功能模块介绍 云借阅图书管理系统主要实现了两大功能模块:用户登录模块和图书管理模块,用户登录模块主要用于实现用户的登录与注销;图书管理模块主要用于管理图书,如新书推荐、图书借阅等。 二、云借阅系统功能结…

怎么隐藏搜狗输入法

点击输入法,右键选择更多 点击选项,点击全屏隐藏

Mojo函数

正如在语言基础中提到的,Mojo支持两种类型的函数:def和fn函数。您可以在任何函数中使用这两种声明方式,包括main()函数,但它们具有不同的默认行为,如本页面所述。 我们认为def和fn都有很好的用例,并且不认…