【研发日记】Matlab/Simulink技能解锁(十二)——Stateflow中的两种状态机嵌套对比

news2024/11/15 10:53:44

文章目录

前言

项目背景

两级状态机

函数状态机

分析和应用

总结

参考资料


前言

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

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

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

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

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

项目背景

        近期使用Simulink开发的嵌入式项目中,用到了Stateflow中的状态机嵌套,使用过程中发现了两种嵌套方式存在关键的差异,极易踩坑。查阅官方文档并没有找到相应的解释。利用周末时间亲自摸索了一下,把它们的一些基本规律和技巧总结下来。

两级状态机

        两级状态机是在某个State里边直接放入一个Stateflow,示例如下:

        从上图可以看出,外层s1每次进入之后,一方面正常执行自有的代码(Cnt=Cnt+1;),另一方面也有序地执行内层的Stateflow。当外层s1退出时,内层的Stateflow也全部退出。当外层s1重新进入时,内层的Stateflow不管前一次停在哪个State,这时候都要从初始State(s2)开始执行。

函数状态机

        函数状态机是在某个State里边放入一个Simulik Function,然后再在里边放入一个Stateflow,以此间接实现状态机嵌套的目的,示例如下:

        从图上可以看出,外层Stateflow进入s1之后,嵌套在s1内部的Simulik Function也被调用起来,Fcn()实际上也是一个Stateflow。跟前面的两级状态机相比,外层Stateflow基本没有区别,内层Stateflow也是完全一样,正常理解的话应该运行得到相同的结果。实际运行起来看到了很关键的差异,就是外层State每次进入后,内层Stateflow运行的起点不一样。第一次外层进入s1时,内层是从初始State(s2)开始执行的。第二次外层进入s1时,内层直接就从s3开始执行。后面外层每次进入s1,内层都从s3开始执行。

分析和应用

        1、两级状态机的外层State每次重新进入时,内层的Stateflow不管原本停在哪个State,都会回到初始State重新开始运行。这种状态机嵌套模式,内层的Stateflow是没有“记忆”的,适合应用于有初始化操作或者有复位操作的系统,比如带有累加功能或者积分功能的应用,每次重新启动都需要清零操作。

        2、函数状态机的外层State每次重新进入时,内层的Stateflow都会先找到原本停在哪个State,然后从那里开始继续运行。这种状态机嵌套模式,能保证内层的Stateflow有准确“记忆”,适合应用于需要暂存数据的系统,比如有固定执行序列的应用,当应用被打断又重新恢复时,需要从原有的位置开始运行。

总结

        以上就是本人在研发中使用Stateflow中的状态机嵌套时,一些个人理解和分析的总结,主要是对比介绍了两种状态机嵌套方式的基本规律,展示了仿真运行的效果,并分析了它们的特点和适用场景。

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

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

参考资料

    Mathworks Help -> Stateflow

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

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

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

相关文章

将 HuggingFace 模型转换为 GGUF 及使用 ollama 运行 —— 以 Qwen2-0.5B 为例

前言 最近,阿里发布了Qwen2的系列模型,包括0.5B, 1.5B, 7B, 57B-A14B 和 72B,中英文效果都很好。 因为模型太新,目前还没有 GGUF 版本可以下载,于是转下GGUF,并分享转换教程。 什么是 GGUF? …

[VS Code扩展]写一个代码片段管理插件(一):介绍与界面搭建

文章目录 VS Code扩展机制项目搭建创建UI元素活动栏按钮主边栏视图主边栏工具栏按钮侧边栏右键菜单编辑器右键菜单 项目地址 [VS Code扩展]写一个代码片段管理插件(一):介绍与界面搭建[VS Code扩展]写一个代码片段管理插件(二&…

Io.net系统概述-核心功能;Io,net自动匹配资源与任务;两种令牌:IO和IOSD;

目录 Io.net 一、系统概述 二、核心功能 三、经济系统 四、产品与服务 五、团队与融资 六、市场前景与竞争优势 Io,net自动匹配资源与任务 一、动态资源分配机制 二、高级算法自动匹配资源与任务 三、用户界面与反馈机制 两种令牌:IO和IOSD。简单举例说明 $IO令牌…

2024四大硬盘数据恢复工具推荐!

不知道你有没有遇到过这种情况,电脑里的重要文件突然就不见了,可能是不小心删了,或者是硬盘出了点小问题。这时候,下面这几个好用的硬盘数据恢复工具就能帮你解决问题! 一、福昕数据恢复 链接:www.pdf365…

【从英文中重建数字】python刷题记录

R2-字符串 目录 解简单方程法 线性代数法 ps: 就是从里面找出one,two,zero,---nine 想到哈希表,key代表单词,value代表0---9 用t表示单词,那不就是t在s中的查找问题了吗 但这样显然有些麻烦,在于t是不确定的,t需要遍历一遍keys()&…

万物分割(Segment Anything Model)C++模型推理部署

概述 SAM 是一种先进的人工智能模型,已经证明了在分割复杂和多样化图像方面具有优异的表现。该模型是计算机视觉和图像分割领域的一个重大突破。 SAM 的架构旨在处理各种图像分割任务,包括对象检测、实例分割和全景分割。这意味着该模型可以应用于各种用…

2024年Google Play上架指南:开发者账号与上包环境防关联

移动应用市场瞬息万变,成功上架Google Play商店无疑是每一位开发者的重要目标。然而,要确保应用程序顺利通过审核并获得持久的上架资格,开发者需要格外重视账号注册和上包环境管理这两个关键环节。 近年来,Google不断加强对开发者…

vtk2three之用three绘制vtk的Calculator公式

Calculator公式 vtk里面可以用这个过滤器filter,来绘制一个公式的点阵,想着其实可以把这个作为第一个切入点来把vtk里面的数据源引入到threejs里面,把threejs当作一个render,dataSource就是来自于这个vtk,下面先上一个…

字符串的模拟算法(思路+例题)

👏大家好!我是和风coding,希望我的文章能给你带来帮助! 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝点击 我的主页 还可以看到和风的其他内容噢&#x…

华为的流程体系

缘由 2010年,华为销售额为1850亿元,其中国际市场占65%,净利润238亿元。当时,公司员工达11万人,公司处理合同达5万多个,290万个订单,大量的工作是手工处理,没有统一的流程支持&#…

《技术人求职之道》之面试准备篇:不打无准备之仗,优秀技术人的面试前准备

摘要 本文为求职者提供面试前的全面准备策略,旨在提升面试成功几率并减轻面试前的焦虑和不自信。文章首先强调准备求职资料的重要性,包括简历、寸照、学历证明等,并建议提前准备以避免入职时的尴尬。接着,讨论对应聘公司进行调研的必要性,包括了解公司业务和技术需求,以…

MySQL基础练习题19-查找拥有有效邮箱的用户

题目:查找具有有效电子邮件的用户 准备数据 分析数据 总结 题目:查找具有有效电子邮件的用户 一个有效的电子邮件具有前缀名称和域,其中: 前缀 名称是一个字符串,可以包含字母(大写或小写)&…

修改mac的音量能像windows系统那样给出音量反馈吗?

一、背景 windows有一些非常好的设计,比如拖动音量条的时候会有对应的音量大小的反馈。有时还能用来确定是视频没声音还是电脑坏了 在mac里怎么设置? 二、方法 首先点击菜单栏音量按钮->声音偏好设置…->勾选 “当更改音量时播放反馈”。 mac…

论文阅读:Mammoth: Building math generalist models through hybrid instruction tuning

Mammoth: Building math generalist models through hybrid instruction tuning https://arxiv.org/pdf/2309.05653 MAmmoTH:通过混合指令调优构建数学通才模型 摘要 我们介绍了MAmmoTH,一系列特别为通用数学问题解决而设计的开源大型语言模型&#…

书生大模型训练营 - 练习一

最近想了解一下大模型,查看了《2024大模型典型示范应用》文档,发现有公司使用的是书生大模型,正好发现他们有训练营,此文章记录的大模型作业。 一、各种链接 书生大模型官网:https://internlm.intern-ai.org.cn/ 进训…

Netty 必知必会(五)—— 核心组件

简单说下 Netty 中的重要组件?NIO中Channel的作用? 一、NIO 中三大核心组件 Buffer(缓冲区)。在NIO厍中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的; 在写入数据时,写入到缓冲区中。任何时候访…

AC+AP组网

配置DHCP Switch1 <Huawei>sys [Huawei]undo in en [Huawei]vlan batch 10 20 30 40[Huawei]int vlan 10 [Huawei-Vlanif10]ip add 192.168.10.1 24 [Huawei-Vlanif10]quit[Huawei]int vlan 20 [Huawei-Vlanif20]ip add 192.168.20.1 24 [Huawei-Vlanif20]quit[Huawei]…

【JavaScript】函数的动态传参

Javacript&#xff08;简称“JS”&#xff09;是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名&#xff0c;但是它也被用到了很多非浏览器环境中&#xff0c;JavaScript基于原型编程、多范式的动态脚本语言&…

运放学习提纲

目的&#xff1a;给初入硬件的朋友一个系统性学习运放的参考方向&#xff0c;避免像无头苍蝇那般 一&#xff1a;偏置电流 1.1. 为什么是输入偏置电流&#xff1f; 1.2. 什么是输入偏置电流&#xff1f; 1.3. 怎么搜索资料&#xff1f;怎么把 ADI 模型导 入Multisim &#…

C++自定义接口类设计器之可对称赋值三

关键代码 QStringList newLines;for (const auto& line : lines) {auto equalIndex line.indexOf("");if(-1 ! equalIndex) {// a b; 赋值auto var line.mid(0, equalIndex).trimmed();auto value line.mid(equalIndex 1).trimmed();if(value.endsWith(&quo…