Stateflow快速入门系列(-):构造并运行 Stateflow 图

news2024/11/25 19:52:52

Stateflow 提供了一种图形语言,包括状态转移图、流程图、状态转移表和真值表。您可以使用 Stateflow 来说明 MATLAB 算法和 Simulink 模型如何响应输入信号、事件和基于时间的条件。

Stateflow 使您能够设计和开发监控、任务调度、故障管理、通信协议、用户界面和混合系统。

使用 Stateflow,您可以对组合和时序决策逻辑进行建模,使其可作为 Simulink 模型中的模块进行仿真,或作为 MATLAB 中的对象来执行。图形动画使您能够在执行逻辑时对其进行分析和调试。编辑时和运行时检查可确保在实现前具有设计一致性和完整性。

Stateflow快速入门系列(-):构造并运行 Stateflow 

Stateflow 图是有限状态机的图形表示,由状态、转移和数据组成。您可以创建 Stateflow 图来定义 MATLAB 算法或 Simulink 模型如何响应外部输入信号、事件和基于时间的条件。

例如,下面的 Stateflow 图展示半波整流器的基础逻辑。该图包含两个标签为 On  Off 的状态。在 On 状态下,图输出信号 y 等于输入 x。在 Off 状态下,输出信号设置为零。当输入信号跨越某个阈值 t0 时,图在这些状态之间转移。各个状态下的动作在仿真的每一时间步都会更新 y 的值。

此示例说明如何创建这样的 Stateflow 图,以在 Simulink 中进行仿真和在 MATLAB 中执行。

构造 Stateflow 

打开 Stateflow 编辑器,Stateflow 编辑器是一个图形环境,用于设计状态转移图、流程图、状态转移表和真值表。在打开 Stateflow 编辑器之前,需要先确定最能满足您需求的图执行模式。

  • 要建立周期性或连续时间 Simulink 算法的条件、基于事件和基于时间的逻辑模型,请使用 sfnew 函数创建一个可在 Simulink 模型中作为模块进行仿真的 Stateflow 图。在 MATLAB 命令提示符处,输入:

sfnew rectify   

Simulink 创建一个名为 rectify 的模型,其中包含一个空的 Stateflow Chart 模块。要打开 Stateflow 编辑器,请双击图模块。

  • 要为 MATLAB 应用程序设计可重用的状态机和时序逻辑,请使用 edit 函数创建可作为 MATLAB 对象执行的独立 Stateflow 图。在 MATLAB 命令提示符处,输入:

edit rectify.sfx 

如果文件 rectify.sfx 不存在,Stateflow 编辑器将创建名为 rectify 的空图。

Stateflow 编辑器的主要组件是图画布、对象选项板和符号窗格。

  • 图画布是一个绘图区域,您可以在其中通过组合状态、转移和其他图形元素来创建图。
  • 在画布的左侧有一个对象选项板,其中显示了一组可向图中添加图形元素的工具。
  • 在画布的右侧有一个符合窗格,您可以用它向图添加新的数据、事件和消息并解析任何未定义或未使用的符号。

提示

在构造 Stateflow 图后,您可以将其内容复制到另一个具有不同执行模式的图中。例如,您可以构造在 MATLAB 中执行的图,并将其内容复制到在 Simulink 中进行仿真的图中。

添加状态和转移

(1)在对象选项板中,点击状态图标  并将指针移至图画布。将出现具有默认转移的状态。要放置该状态,请点击画布上的某个位置。在文本提示中,输入状态名称 On 和状态动作 y = x。

(2)添加另一个状态。右键点击并拖动 On 状态。蓝色图形提示可以帮助您水平或垂直对齐状态。新状态的名称变为 Off。双击该状态并将状态动作修改为 y = 0。

(3)重新对齐两个状态并在两个状态之间的空白处停留片刻。蓝色转移提示指示您可以连接状态的几种方式。要添加转移,请点击适当的提示。

或者,要绘制转移,请点击并从一个状态的边拖动到另一个状态的边。

(4)双击每个转移并输入适当的转移条件 x<t0 或 x>=t0。条件出现在方括号内。

(5)清理图:

    • 为使图更加清晰,将每个转移标签移到其对应转移上方或下方的方便位置。
    • 要对齐图的图形元素并调整其大小,请在格式选项卡中,点击自动排列或按 Ctrl+Shift+A。
    • 要调整图的大小以适合画布,请按空格键或点击适应视图大小图标 

解析未定义的符号

在执行图之前,必须定义图中使用的每个符号并指定其作用域(例如,输入数据、输出数据或局部数据)。在符号窗格中,未定义的符号用红色错误标记  进行标记。类型列根据每个未定义符号在图中的使用情况显示其建议作用域。

(1)打开符号窗格。

    • 如果您构建的是 Simulink 模型中的图,请在建模选项卡中,在设计数据下,选择符号窗格
    • 如果您构建的是要在 MATLAB 中执行的独立图,请在状态图选项卡中选择添加数据 > 符号窗格。

(2)在符号窗格中,点击解析未定义的符号 

    • 如果构建的是在 Simulink 模型中的图,Stateflow 编辑器会将符号 x 和 t0 解析为输入数据 ,将 y 解析为输出数据 
    • 如果您构建的是要在 MATLAB 中执行的独立图,Stateflow 编辑器则将 t0、x 和 y 解析为局部数据 

(3)由于阈值 t0 在仿真过程中不会更改,因此将其作用域更改为常量数据。在类型列中,点击 t0 旁边的数据类型图标,然后选择 “常量数据”。

(4)设置阈值 t0 的值。在列中,点击 t0 旁边的空白输入框,并输入值 0。

(5)保存您的 Stateflow 图。

您的图现在即可在 Simulink 中进行仿真,或者在 MATLAB 中执行。

将图作为 Simulink 模块进行仿真

要在 Simulink 模型中对图进行仿真,请通过输入和输出端口将图模块连接到模型中的其他模块。

(1)要返回到 Simulink 编辑器,请在画布顶部的浏览器栏中点击 Simulink 模型的名称:“rectify”。如果浏览器栏不可见,请点击对象选项板顶部的隐藏/显示资源管理器栏图标 

(2)执行以下操作以将信源添加到模型中:

    • 从 Simulink Sources 库中,添加一个 Sine Wave (Simulink) 模块。
    • 双击 Sine Wave 模块并将采样时间设置为 0.2。
    • 将 Sine Wave 模块的输出连接到 Stateflow 图的输入。
    • 将信号标记为 x。

(3)向模型中添加一个信宿:

    • 从 Simulink Sinks 库中,添加一个具有两个输入端口的 Scope (Simulink) 模块。
    • 将 Sine Wave 模块的输出连接到 Scope 模块的第一个输入。
    • 将 Stateflow 图的输出连接到 Scope 模块的第二个输入。
    • 将信号标记为 y。

(4)保存 Simulink 模型。

(5)要仿真模型,请点击运行 。在仿真过程中,Stateflow 编辑器通过图动画突出显示激活状态和转移。

(6)对模型进行仿真后,双击 Scope 模块。示波器显示 Stateflow 图的输入信号和输出信号图。

仿真结果显示整流器滤除了负输入值。

将图作为 MATLAB 对象执行

要在 MATLAB 命令行窗口中执行图,请创建一个图对象,并调用其 step 函数。

(1)通过使用包含图定义作为函数的 sfx 文件的名称,创建一个图对象 r。将图数据 x 的初始值指定为名称-值对组。

r = rectify(x=0);

(2)初始化图执行的输入和输出数据。向量 X 包含来自正弦波的输入值。向量 Y 是一个空的累加器。

T = 0:0.2:10;

X = sin(T);

Y = [];

(3)通过多次调用 step 函数来执行图对象。将来自向量 X 的单个值作为图数据 x 传递。在向量 Y 中收集 y 的结果值。在执行过程中,Stateflow 编辑器通过图动画突出显示激活状态和转移。

for i = 1:51

   step(r,x=X(i));

    Y(i) = r.y;

end

(4)从 MATLAB 工作区中删除图对象 r。

delete(r)

(5)检查图执行的结果。例如,您可以调用 stairs 函数来创建一个阶梯图,用于比较 X 和 Y 的值。

ax1 = subplot(2,1,1);

stairs(ax1,T,X,color="#0072BD")

title(ax1,"x")

ax2 = subplot(2,1,2);

stairs(ax2,T,Y,color="#D95319")

title(ax2,"y")

执行结果显示整流器滤除了负输入值。

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

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

相关文章

昇思MindSpore学习笔记7--函数式自动微分

摘要&#xff1a; 介绍了昇思MindSpore神经网络训练反向传播算法中函数式自动微分的使用方法和步骤。包括构造计算函数和神经网络、grad获得微分函数&#xff0c;以及如何处理停止渐变、获取辅助数据等内容。 一、概念要点 神经网络训练主要使用反向传播算法&#xff1a; 准备…

学习平台推荐_菜鸟教程官网

网址&#xff1a; 菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01;菜鸟教程(www.runoob.com)提供了编程的基础技术教程, 介绍了HTML、CSS、Javascript、Python&#xff0c;Java&#xff0c;Ruby&#xff0c;C&#xff0c;PHP , MySQL等各种编程语言的基础知识。 同…

[数据集][目标检测]猪只状态吃喝睡站检测数据集VOC+YOLO格式530张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;530 标注数量(xml文件个数)&#xff1a;530 标注数量(txt文件个数)&#xff1a;530 标注类别…

【操作系统期末速成】EP06 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️2.1 考点十四&#xff1a;同步互斥的基本概念2.2 考点十五&#xff1a;实现临界区互斥的基本方法2.3 考点十六&#xff1a;信号量的含义及常用信号量 一、前言&#x1f680;&#x1…

土体中应力的计算

土中的应力的计算 非水面以下土体中应力的计算&#xff1a;水面以下的土中的应力计算 参考视频&#xff1a; https://www.bilibili.com/video/BV1Rh411J72h/?spm_id_from333.788&vd_source02b2bad477a153eaeb9c48cbbedaf8df 非水面以下土体中应力的计算&#xff1a; 按成…

深入理解 Spring MVC:原理与架构解析

文章目录 前言一、MVC二、Spring MVC三、Spring MVC 工作流程四、小结推荐阅读 前言 Spring MVC 是一种基于 Java 的 Web 应用开发框架&#xff0c;它通过模型-视图-控制器&#xff08;Model-View-Controller, MVC&#xff09;的设计模式来组织和管理 Web 应用程序。本文将深入…

【Uniapp微信小程序】图片左右分割/分割线切割图片/图片批量分割线切割

特别说明&#xff1a;本文章因业务组件功能&#xff0c;不完全开放/暂vip可见&#xff0c;有需要者留言找博主&#xff01; ps&#xff1a;注意&#xff01;&#xff01;本效果为图片分割切割&#xff01;&#xff01;不是文档切割&#xff01;&#xff01;图片仅供参考&#x…

【机器学习】Python中sklearn中数据基础处理与分析过程

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 1. 简介 ​编辑 1.1 什么是Scikit-learn 介绍Scikit-learn 应用领域 1.2 安装Scikit-learn 安装步骤 必要的依赖 2. 数据处理 2.1 创建示例数据 2.2 数据预处理 处理缺失值 特征编码 特征缩放 3. 数据…

kali/ubuntu安装vulhub

无须更换源&#xff0c;安装docker-compose apt install docker.io docker -vdocker-compose #提示没有&#xff0c;输入y安装mkdir -p /etc/docker vi /etc/docker/daemon.json #更换dockerhub国内源┌──(root㉿kali)-[/home/kali/vulhub-master/tomcat/CVE-2017-12615] …

Java对象创建过程

在日常开发中&#xff0c;我们常常需要创建对象&#xff0c;那么通过new关键字创建对象的执行中涉及到哪些流程呢&#xff1f;本文主要围绕这个问题来展开。 类的加载 创建对象时我们常常使用new关键字。如下 ObjectA o new ObjectA();对虚拟机来讲首先需要判断ObjectA类的…

测评推荐:企业管理u盘的软件有哪些?

U盘作为一种便携的存储设备&#xff0c;方便易用&#xff0c;被广泛应用于企业办公、个人学习及日常工作中。然而&#xff0c;U盘的使用也带来了数据泄露、病毒传播等安全隐患。为了解决这些问题&#xff0c;企业管理U盘的软件应运而生。 本文将对市面上流行的几款U盘管理软件…

大模型RAG问答中的文档分段

昨天&#xff0c;我们谈了句子分段&#xff0c;我们再来回顾一下段落的分段方法&#xff0c;目前已经有其他方案&#xff0c;图来自于&#xff1a;https://www.rungalileo.io/blog/mastering-rag-advanced-chunking-techniques-for-llm-applications&#xff0c;可以看到其中的…

Java17-时间类、包装类

目录 Date类 概述 常用方法 SimpleDateFormat类 概述 构造方法 格式规则 常用方法 Calendar类 概述 常用方法 get方法示例 set方法示例 add方法示例 JDK8时间相关类 ZoneId 时区 Instant 时间戳 ZoneDateTime 带时区的时间 DateTimeFormatter 用于时间的格式…

【Lua】第一篇:在Linux系统中安装搭建lua5.4.1环境

文章目录 一. 远程下载安装包二. 解压安装包三. 编译安装Lua环境 一. 远程下载安装包 输入以下命令即可在当前目录下&#xff0c;远程下载安装包lua-5.4.1.tar.gz&#xff1a; wget http://www.lua.org/ftp/lua-5.4.1.tar.gzPS&#xff1a;其他版本的安装包如下&#xff0c;可…

Django 模版继承

1&#xff0c;设计母版页 Test/templates/6/base.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><!-- 修正了模板标签的全角字符问题 -->{% block title %}<title>这个是母版页</title>{…

教师资格证(教资)笔试如何备考?含备考资料

教师资格证&#xff08;教资&#xff09;笔试如何备考&#xff1f;含备考资料 前言 教师&#xff0c;一直以来的热门职业&#xff0c;而要成为一名教师&#xff0c;考取教师资格证则是基本条件&#xff0c;那么教资笔试如何备考呢&#xff1f;&#xff0c;这里准备笔试备考攻…

南方空调企业疑似暗讽对手用铝代铜,偷工减料,空调不耐用

空调行业卷到何种程度了&#xff1f;已经开始偷工减料了&#xff0c;日前南方一家空调企业的老板就公开指出一些企业用铝管替代铜管&#xff0c;如此做后果将是导致空调的耐久性和稳定性不足&#xff0c;其实还有散热效果不好&#xff0c;导致耗电量、制冷效果下降。 今年空调的…

Spring-循环依赖是如何解决的

1、bean被创建保存到spring容器的过程 1、实例化 -> 获取对象&#xff1b; 2、填充属性&#xff1b;这里可能需要依赖其它的bean。 3、AOP代理对象替换&#xff1b; 4、加入单例池&#xff1b; 问题&#xff1a; 循环依赖怎么处理 ServiceA 中有属性ServiceB b&#…

记一次小程序渗透

这次的小程序渗透刚好每一个漏洞都相当经典所以记录一下。 目录 前言 漏洞详情 未授权访问漏洞/ 敏感信息泄露&#xff08;高危&#xff09; 水平越权&#xff08;高危&#xff09; 会话重用&#xff08;高危&#xff09; 硬编码加密密钥泄露&#xff08;中危&#xff0…

FFmpeg 命令行 音视频格式转换

&#x1f4da;&#xff1a;FFmpeg 提供了丰富的命令行选项和功能&#xff0c;可以用来处理音视频文件、流媒体等&#xff0c;掌握命令行的使用&#xff0c;可以有效提高工作效率。 目录 一、视频转换和格式转换 &#x1f535; 将视频文件转换为另一种格式 &#x1f535; 指定…