Simulink代码生成: 状态机的其他建模方法

本文研究状态机建模的一些方法和技巧。

文章目录

  • 1 引入
  • 2 状态机建模方法
    • 2.1 状态机中的计时
    • 2.2 状态机中的计数
    • 2.3 转移顺序
  • 3 总结

1 引入

博主一直很喜欢用Simulink中的状态机建模,在这里想记录一下自己平时使用Stateflow建模的心得。因为自身行业所限,不可能把状态机讲得面面俱到,但是可以保证具有一定的实用性。

2 状态机建模方法

2.1 状态机中的计时

博主在工作中常见的一种建模情景是,在某个状态中持续一段时间后跳出。例如,一个按钮按下后过3秒钟后自己弹起来。这里就可以用after(3,sec)事件来做,如下图。
在这里插入图片描述
默认进入Off状态;如果输入的Action_In为PRESS(表示按下按钮),就跳转到On状态;再通过after(3,sec)事件,表示3s后跳回到Off状态。
在这里插入图片描述
图中是输入输出结果,Action_In在2s时上升到1,同时State_Out上升到1;3s后State_Out下降回0。注意,无论Simulink的仿真周期配置成多少,在仿真结果中都是3秒钟。

2.2 状态机中的计数

1)相比于状态机计时,博主工作中更常用的是计数,即过了多少个仿真周期后跳转状态。由于控制器中按照周期调用函数,所以计数更符合控制器的逻辑。同样是按钮,这次计数20个周期跳转出来,建模如下:
在这里插入图片描述
在On状态中,从框图边缘拉出了一根线,上面执行的动作是Count这个局部变量每个周期加1;另外,从On跳转到Off的条件是Count >= uint8(20),也就是计数满20次以后跳出。

在Simulink配置中将仿真步长改成0.2s,仿真得出如下结论:
在这里插入图片描述
在这里插入图片描述
可以看出,输入依然是2s时上升到1,但是输出信号从2s到6s持续了4s,这时因为仿真周期乘以计数器(0.2*20 =4)后算出来4s。

2)在计数动作执行之前还可以加上条件,使得在某种条件下才开始计数。例如当人松开按钮的时候,才开始计数20个周期,可以建模如下:
在这里插入图片描述
这里稍微改了一下,进入On状态的时候计数器为0,并且计数器加1的条件时Action_In ~= PRESS,表示没有按下按钮的时候才计数。仿真结果如下:
在这里插入图片描述
可以看到,在Action_In输入信号下降后过了4s中,State_Out才下降。

2.3 转移顺序

如下图所示,是一个两个跳转条件都满足的情况。

在这里插入图片描述

该状态机跳转逻辑表示,车速(Vehicle_Speed)高于30kph时判定为中车速(MiddleSpeed),车速高于80kph时判定为高车速(HighSpeed)。

在这里插入图片描述
这种情况下,假如车速高于80kph,那必定也是高于30kph,那么两个跳转条件都是满足的,应该如何判断优先级呢。答案是在LowSpeed模块的两个跳转信号线上会标出优先级数字1和2。序号表明了先跳转HighSpeed再跳转MiddleSpeed。

在这里插入图片描述
如果默认的需要不正确,也可以通过右键点击序号,更改菜单中的Execution Order来切换顺序。

在这里插入图片描述
通过以上方法就可以修改状态机跳转顺序了。

3 总结

本文总结了一些状态机的其他建模技巧。

>>返回个人博客总目录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解并打败C语言难关之一————指针(3)

前言: 昨天把指针最为基础的内容讲完了,并且详细说明了传值调用和传址调用的区别(这次我也是做到了每日一更,感觉有好多想写的但是没有写完),下面不多废话,下面进入本文想要说的内容 目录&#…

【数据结构】第十七弹---C语言实现选择排序

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、选择排序 1.1、基本思想 1.2、代码实现 1.3、代码测试 1.4、时空复杂度分析 总结 1、选择排序 1.1、基本思想 选择排序是一种简单直观的比…

【测试专题】系统测试报告(原件Word)

软件测试报告在软件开发过程中起着至关重要的作用,主要有以下几个主要原因: 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

如何判断三相交流电子负载的性能

三相交流电子负载是模拟实际负载的设备,用于测试电源、变频器、逆变器等电力电子设备的性能。在购买和使用三相交流电子负载时。 三相交流电子负载能够稳定输出的最大有功功率,额定功率越高,说明负载的承载能力越强。在选择三相交流电子负载时…

计算机相关专业是否仍是“万金油”的选择?

亲爱的朋友们: 2024 年高考已然落幕,数百万高三学子站在了人生的重要十字路口,面临着选择大学专业这一关键抉择。在这个节点上,计算机相关专业是否还能被称为“万金油”的选择呢? 相信大家都知道,在最近这几…

【前端项目笔记】2 主页布局

主页布局 element-ui提供的组件名称就是它的类名 ☆☆ CSS选择器: (1)基本选择器 类型选择器 p/span/div…… 类选择器 (.classname) ID选择器 (#idname) 通配选择器 ( * ) (2)属性选择器 选择具有特定属性或属性值的…

k8s删除状态为 Terminating 的pod

卸载calico pod时候pod资源状态会卡在terminating,这时候需要手动进行删除 使用以下命令即可 kubectl delete pod podName -n NAMESPACE --force --grace-period0记住一定要加命名空间,不然会报错没有找到

Android可穿戴设备世界之旅

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 介绍 Android通过在电视、穿戴和汽车等各种电子模块中扩展下一代应用开发概念,扩展了其整个范围和可…

计算机网络:6应用层

概述 客户/服务器方式和对等方式 客户/服务器(Client/Server,C/S)方式 客户和服务器是指通信中所涉及的两个应用进程。 客户/服务器方式所描述的是进程之间服务和被服务的关系。 服务器总是处于运行状态,并等待客户的服务请求。 …

C# + easyui 写的一个web项目

用C# easyui 来开发,其实就是为了开发速度,用easyui可以一天写很多页面,比一些低代码平台还快。 登陆页面 主界面 记录数统计 家庭信息采集表 新建家庭 家庭成员 低保、五保人员帮扶情况登记表 低保、五保人员帮扶情况登记表的新增和编辑 治…

【星海随笔】云解决方案学习日志篇(二) kafka、Zookeeper、Fielbeat

Elastic 中国社区官方博客 https://blog.csdn.net/ubuntutouch/category_9209092.html Kafka kafka的源代码是基于Scala语言编写的,运行在Java虚拟机(即:JVM)上。因此,在安装kafka之前需要先安装JDK Kafka 为什么依赖 Zookeepe…

数据库、中台、报表平台之间的关系

我最近在接触报表平台和中台,发现他们跟我平常用的数据库不是一个东西。然后,我开始了摸索他们的过程,终于,我在理清他们的关系以后,简单写一个入门级的区分。 数据库: 定义: 数据库是被长期存…

HarmonyOS开发日记 :自定义节点,实现 UI 组件 动态创建、更新

引言 UI动态操作包含组件的动态创建、卸载、更新等相关操作。 通过组件预创建,可以满足开发者在非build生命周期中进行组件创建,创建后的组件可以进行属性设置、布局计算等操作。之后在页面加载时进行使用,可以极大提升页面响应速度。 UI …

S32K3通过S32DS实现:S32K3如何将FLASH驱动放到RAM里面、RAM如何实现软件复位数据不丢失操作。

目录 1、概述 2、默认flash存放位置展示 3、通过默认的链接文件将flash放置到RAM 4、通过修改启动与链接文件将flash放在RAM 5、RAM热复位数据不丢失 1、概述 在通过RTD的SDK也好MCAL也好,始终存在一个问题,生成的代码除了看门狗模块,默认都是放在flash里面,按照正常逻…

【数据结构与算法】运算受限的线性表(栈,队列)重要知识点详解

栈和队列是什么样的线性表? 栈(Stack)和队列(Queue)都是运算受限的线性表。 栈:栈是一种特殊的线性表,只允许在一端(通常称为“顶端”)进行插入和删除操作。栈遵循后进先出&#x…

AI播客下载:The TWIML AI Podcast (机器学习与人工智能周刊)

机器学习和人工智能正极大地改变着企业的运营方式和人们的生活方式。TWIML AI 播客将机器学习和人工智能领域的顶尖思想和理念带给了一个广泛的、有影响力的社区,这个社区包括机器学习/人工智能研究人员、数据科学家、工程师以及技术娴熟的商业和 IT 领导者。主持人…

EasyRecovery下载_EasyRecovery官方下载_2024最新版软件安装包附加详细安装步骤

EasyRecovery中文版是一款操作安全、恢复性比较高的数据恢复工具,小伙伴们可以使用EasyRecovery恢复各种各样被删除的文件、视频、图片等。EasyRecovery还可以支持恢复从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或丢失的文件,只是使用Eas…

【验证码识别】Yolov8实战某验3空间推理点选验证码,目标检测,语义分割,颜色分类。

【验证码识别】Yolov8实战某验3空间推理点选验证码,目标检测,语义分割,颜色分类。 文章目录 【验证码识别】Yolov8实战某验3空间推理点选验证码,目标检测,语义分割,颜色分类。声明1.空间推理验证码&#xf…

HTML的常用标签

HTML(补) CSS选择器 元素选择器:指定一个标签给这个标签设置一个默认的样式。设置的样式对所有相同的标签都有用。 id选择器:我们可以给标签指定一个唯一的id,然后根据id可以在style标签中设置对应标签的样式元素。设…

CentOS 7 安装MySQL以及常见问题解决

访问网站:http://repo.mysql.com 找到适配CentOS 7版本的MySQL 的YUM仓库包rpm文件,如下图 下载后,找到安装包的位置 空白处右键,选择在终端打开 查看当前目录下文件 # 安装MySQL 5.7的YUM仓库包rpm -ivh mysql57-community-rele…