Simulink Ststeflow教程 — 2 创建和编辑状态

news2025/3/29 16:57:03

目录

2.1 创建和编辑状态

2.1.1 状态的创建

2.1.2 创建连接节点

2.1.3 转移

2.1.5 默认转移


在Stateflow模型中,将包含有状态的Stateflow框图称状态图而将不包含任何状态的Stateflow框图称为流程图。其中,状态图是Stateflow最常用的一种形式,也是本书重点介绍的内容。

2.1 创建和编辑状态

创建Stateflow框图时,首先需要向框图中插入必要的图形对象。在这部分内容里,我们会全面深入地介绍创建状态、转移、节点以及默认转移的操作方式,同时也会详细分析这些图形元素在 Stateflow 状态图里起到的作用。

2.1.1 状态的创建

状态是 Stateflow 状态图里极为重要的部分。在有限状态里,状态代表着系统所处的某种模式。举个简单例子,房间里的电灯,其工作模式只有亮(ON)和灭(OFF)这两种。要是用 Stateflow 状态图来呈现电灯的工作模式,那就必须设置两个状态。

从状态的行为特点来说,它具备布尔特性,这和高级编程语言里的布尔型变量类似。在任意时刻,状态只可能处于激活或者未激活这两种情况之一,不存在第三种状态。在 Stateflow 的框图中插入状态的方法如下:

  • 单击图形对象面板中的状态图标 ,然后在 Stateflow 编辑器的空白区域内再次单击鼠标,则可以在状态图中增加一个状态。
  • 或者,在图形对象面板的状态图标 上按下鼠标左键并保持,将状态拖放到Stateflow 编辑器的空白区域中。
  • 或者,双击图形对象面板的状态图标 ,然后在 Stateflow 编辑器的空白区域中单击鼠标,这时每次单击鼠标都会在相应的位置上创建一个状态,最后单击鼠标右键结束状态的添加。

上面的三种方法都可以完成状态的添加,读者可以根据自己的喜好使用不同的方法创建状态。如图所示,在 Stateflow 框图中添加了两个状态。

添加的状态的左上角通过“?”来表示目前状态还没有具体的定义,状态需要具体的
命名,这样才能够在执行状态机的时候具有唯一的布尔行为。单击问号,在光标处插入文本。

状态的标签一般可以由两个部分组成:状态名称和相应的状态动作,也可以使用/**/添加注释部分。完整的状态标签如图所示。

状态动作一般可以为数据对象进行赋值或者进行数据对象的运算,也可以通过状态
动作进行事件广播以触发其他系统的变化。状态动作的关键字主要有三种,分别为:

  • entry:.当状态被激活时执行相应的动作。
  • exit:当状态退出活动状态时执行相应的动作。
  • during:当状态保持其活动状态时执行相应的动作。

例如,当 on状态被激活时赋值LED为 1,则 on 状态的标签应写为如图所示的内容。注意在书写动作表达式时,结尾的分号为结束符。

创建状态之后,也可以在状态上单击鼠标右键选择 Properties 命令,通过状态的属性对话框进一步定义状态,如图所示。

2.1.2 创建连接节点

在 Simulink Stateflow 里,连接节点具有重要作用。它既能在转移通路中充当决策点,依据不同条件决定转移方向,如在温度控制风扇转速系统中,通过连接节点判断温度是否超过不同阈值,从而确定风扇高速、低速运转或停止;又能作为汇合点,当多个转移路径需合并时发挥作用,像交通信号灯控制模型中,不同方向车道车辆通行状态转移可能汇合到连接节点,再由此节点转移至下一状态。

需要强调的是,连接节点不是记忆元件,因此,在状态图中任何转移的执行都不能停留在节点上,转移必须到达某个状态时才能停止。创建连接节点的方法如下:

  • 单次创建:单击图形对象面板中的连接节点图标 ,然后在 Stateflow 编辑器的空白区域中或者 Stateflow 状态内部单击鼠标,即可添加连接节点。
  • 拖动创建:在图形对象面板的连接节点图标 上按下鼠标左键并保持,将其拖放到 Stateflow 编辑器的空白区域。
  • 连续创建:双击图形对象面板的连接节点图标 ,然后在编辑器空白区域中单击鼠标,每次单击都会在相应位置创建一个连接节点,最后单击鼠标右键结束节点添加。

2.1.3 转移

转移(Transition)定义了状态机从一个状态到另一个状态的转换规则,它可以由事件触发,并且可以附带条件和动作。一个完整的转移通常包含源状态、目标状态、触发事件、转移条件和转移动作等要素。

创建转移线方法:选中源状态后,将鼠标指针移动到状态的边界上,鼠标指针会变成十字线形状。按住鼠标左键并拖动,会出现一条连线。将连线拖动到目标状态上,松开鼠标左键,这样就创建了一条从源状态到目标状态的转移线。

创建转移线后,你可以对转移的属性进行配置,这些属性包括:

  • 事件(Event:指定触发转移的事件。事件可以是外部输入的信号、内部定义的事件等。在转移线上双击,会弹出转移属性对话框,在 “Event” 字段中输入事件名称。例如,输入 “State0” 表示当名为 “State0” 的事件发生时触发该转移。
  • 条件(Condition:设置转移发生的条件。只有当条件满足时,转移才会被执行。在属性对话框的 “Condition” 字段中输入条件表达式,如 “x > 10”,表示当变量 x 的值大于 10 时,转移才会触发。
  • 动作(Action:定义转移发生时要执行的动作。动作可以是对变量的赋值、调用函数等。在 “Action” 字段中输入动作代码,例如 “y = x * 2;”,表示转移发生时将变量 x 的值乘以 2 并赋给变量 y。

2.1.5 默认转移

默认转移:是一种特殊的转移,可视为状态转移的特例。它的主要作用是确定有限状态机或父层次状态处于活动状态时,其所有子状态中首个被激活的状态。根据有限状态机的规则,当有限状态系统被激活时,必然会有一个确定的状态被激活。默认转移的意义就在于,明确规定了在状态机被激活,或者层次模型中的父层次状态被激活的情况下,具体是哪个子状态会被激活。

创建默认转移的方法如下:

  • 用鼠标单击图形对象面板中的默认转移图标 ,然后将默认的转移(注意鼠标光标
    的变化)放置在状态或者连接节点的边缘,就可以完成默认转移的创建了。
  • 如果没有把默认转移放置在状态或者连接节点的边缘,而是放置在 Stateflow 编辑器的空白处,则 Stateflow 将自动创建一个节点,作为默认转移的目标。

在默认转移的标签上添加事件和条件进行约束,或者将动作与默认转移建立关联,都是可行的操作。然而,在运用默认转移时,务必保证有限状态系统能够被正确激活,这是极为关键的一点。因为状态机的默认转移仅有一次执行的机会。

如下图示例展示了一个默认转移的示例。此例中的默认转移采用 On 事件进行控制,若系统触发的首个事件为 On 事件,系统能够正常运行。但当系统触发的首个事件并非 On 事件时,系统该如何应对呢?依据有限状态机的原理,只要有事件触发,有限状态机就会被激活。这意味着,无论首个触发的事件是否为 On 事件,系统都会尝试激活状态机。但由于该默认转移由 On 事件控制,且不存在其他默认转移,系统会报出二义性错误。这是因为没有明确的子状态可供激活。所以,在默认转移上添加标签以限制其行为时,需要格外谨慎。

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

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

相关文章

Fiddler笔记

文章目录 一、与F12对比二、核心作用三、原理四、配置1.Rules:2.配置证书抓取https包3.设置过滤器4、抓取App包 五、模拟弱网测试六、调试1.线上调试2.断点调试 七、理论1.四要素2.如何定位前后端bug 注 一、与F12对比 相同点: 都可以对http和https请求进行抓包分析…

线上就医全流程医药机构接入文档接口代码-医保就医接口php-demo版本

2025年2月18日11:28:03 国密算法开发库推荐 lpilp/guomi 我测试过php 7.2 - 8.0都可以兼容,如果有能力可以自己开发 目前已经开发了核心的接口的测试demo,并且封装了工具类直接写业务逻辑即可,并且已经有线上项目在使用,如果需要demo代码可…

智能选路+NAT实验 作业

拓扑图 配置ip 防火墙安全区域划分 用户配置 dns透明

LLM:RAG

原文链接:LLM:RAG 1、RAG 概览 RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合了信息检索(IR)和 LLM 的技术。它的核心思想是在 LLM 生成回答之前,通过检索相关文档…

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…

策略+适配器模式详解

文章目录 1.策略模式1.目录结构2.Strategy.java 策略接口3.StrategyA.java 策略A4.StrategyB.java 策略B5.StrategyC.java 策略C6.Context.java 策略上下文7.Client.java 客户端8.小结 2.适配器模式1.目录结构2.CustomPaymentProcessor.java 自己的支付接口3.PayPalPaymentServ…

未来游戏:当人工智能重构虚拟世界的底层逻辑

未来游戏:当人工智能重构虚拟世界的底层逻辑 在《赛博朋克2077》夜之城的霓虹灯下,玩家或许已经注意到酒吧里NPC开始出现微表情变化;在《艾尔登法环》的开放世界中,敌人的战术包抄逐渐显露出类人智慧。这些细节预示着游戏产业正站…

Zabbix——Rocky9安装zabbix相关步骤记录

安装Zabbix 安装MariaDB 这里用MariaDB演示 https://mariadb.org/download/?trepo-config&dRedHatEnterpriseLinux9&v10.11&r_mneusoft 通过这个网址获得连接 选择对应的repo 根据系统版本和要安装的版本选择对应的repo 安装 新建一个repo文件,例…

startai产品精修教程

1.把产品放置ps画布中 打开startai插件选择产品精修功能,选择金属材质即可哦 调节一下参数就可以啦,最终效果图 下载地址:StartAI画图软件官网_PS插件StartAI绘画软件生成器_Photoshop图像处理插件

【YOLOv8】

文章目录 1、yolov8 介绍2、创新点3、模型结构设计3.1、backbone3.2、head 4、正负样本匹配策略5、Loss6、Data Augmentation7、训练、推理8、分割 Demo附录——V1~V8附录——相关应用参考 1、yolov8 介绍 YOLOv8 是 ultralytics 公司在 2023 年 1 月 10 号开源的 YOLOv5 的下…

【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库

一、总体方案 目前在使用 DeepSeek 在线环境时,页面经常显示“服务器繁忙,请稍后再试”,以 DeepSeek R1 现在的火爆程度,这个状况可能还会持续一段时间,所以这里给大家提供了 DeepSeek R1 RAG 的本地部署方案。最后实现…

Oracle视图(基本使用)

视图 视图是通过定制的方式显示一个或者多个表的数据。 视图可以视为“虚拟表”或“存储的查询”。 视图的优点: 提供了另外一种级别的表安全性隐藏了数据的复杂性简化了用户的SQL命令隔离基表结构的改变通过重命名列,从另一个角度提供数据。 视图里…

梁文锋亲自挂名DeepSeek发布新论文

由 DeepSeek 联合创始人梁文锋亲自挂名的研究团队,在 arXiv 上发表了一篇题为“Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention”的论文,提出了一种全新的注意力机制架构 NSA(Native Sparse Attention&…

低代码(Low Code)全解析:从概念到应用,从选择到价值

​在数字化浪潮席卷全球的当下,企业对软件开发的效率与灵活性愈发重视,低代码平台应运而生并迅速掀起技术热潮。 本文基于笔者 6 年的低代码实践经验,深入剖析低代码的诸多方面,涵盖其定义、发展历程、国内平台对比、开发流程、与…

C++--STL库-List

目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库&#xff08;STL&#xff09;中的双向链表容器&#xff0c;属于<list>头文件。 它的特点是&#xff1a; 动态大小&#xff1a;可以随时插入…

尚硅谷 java 学习Day19 抽象类与抽象方法、接口、内部类

6-5 抽象类(abstract)与抽象方法&#xff08;important&#xff09; 一、什么叫抽象类&#xff1a; 有时候将一个父类设计的非常抽象&#xff0c;以至于它没有具体的实例&#xff0c;这样的类称为抽象类 abstract关键字的使用&#xff1a; ​ 1、abstract:抽象的 ​ 2、abs…

HomeAssistant 发现MQTT设备(温度,湿度,开关)

要通过 MQTT 将温度、湿度数据以及一个灯的开关状态传输到 Home Assistant 并实现设备自动发现&#xff0c;可以按照以下步骤操作&#xff1a; 1.前期准备工作 安装MQTT服务器(EMQX)配置好(可以在HA加载项中安装,也可以在NAS上Docker安装) HA的集成中安装MQTT,并且连接上(EM…

手写数字识别的神经网络 2层神经网络的类 代码详解

源代码和图解来自鱼书 目录 2层神经网络的类 源代码&#xff1a; 详解&#xff1a; 1. 类的初始化 (__init__) 2. 前向传播 (predict) 3. 损失函数 (loss) 4. 准确率计算 (accuracy) 5. 数值梯度计算 (numerical_gradient) 6. 反向传播计算梯度 (gradient) 总结&#…

【项目】基于STM32F103C8T6的四足爬行机器人设计与实现(源码工程)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【项目】基于STM32F103C8T6的四足爬行机器人设计与…

使用DeepSeek+本地知识库,尝试从0到1搭建高度定制化工作流(自动化篇)

7.5. 配图生成 目的&#xff1a;由于小红书发布文章要求图文格式&#xff0c;因此在生成文案的基础上&#xff0c;我们还需要生成图文搭配文案进行发布。 原实现思路&#xff1a; 起初我打算使用deepseek的文生图模型Janus进行本地部署生成&#xff0c;参考博客&#xff1a;De…