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

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.mzph.cn/web/34966.shtml

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

相关文章

相亲交友微信小程序系统源码

开启浪漫邂逅新篇章 相亲交友——随着年龄的增长&#xff0c;越来越多的人开始关注自己的婚姻问题&#xff0c;为了提高相亲服务的质量&#xff0c;这款应用就可以拓宽在线社交网络范围。​ &#x1f491; 引言&#xff1a;邂逅爱情的新方式 在繁忙的都市生活中&#xff0c;寻…

十年,亚马逊云科技合作伙伴网络开启AI新征程

“十年之前&#xff0c;你不认识我&#xff0c;我不认识你&#xff0c;因为云计算我们携手并肩&#xff1b;十年之后&#xff0c;我们仍是伙伴&#xff0c;更是朋友&#xff0c;因为人工智能再次起程。”这就是今天的亚马逊云科技与其合作伙伴的真实写照。 2024年是亚马逊云科技…

板凳-------unix 网络编程 卷1-1简介

unix网络编程进程通信 unpipc.h https://blog.csdn.net/u010527630/article/details/33814377?spm1001.2014.3001.5502 订阅专栏 1>解压源码unpv22e.tar.gz。 $tar zxvf unpv22e.tar.gz //这样源码就被解压到当前的目录下了 2>运行configure脚本&#xff0c;以生成正确…

js+php 上传文件到服务器

https://andi.cn/page/621473.html

喂饭级AI神器!免代码一键绘制图表,文本数据秒变惊艳视觉盛宴!

由于目前的AI生成图表工具存在以下几个方面的问题&#xff1a; 大多AI图表平台是纯英文&#xff0c;对国内用户来说不够友好&#xff1b;部分平台在生成图表前仍需选择图表类型、配置项&#xff0c;操作繁琐&#xff1b;他们仍需一份规整的数据表格&#xff0c;需要人为对数据…

“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法&#xff0c;以模型构造、模型转换和精化为核心&#xff0c;提供了一套软件设计的指导规范。在模型驱动架构环境下&#xff0c;通过创建出机器可读和高度抽象的模型实现对不同问题域的描述&#xff0c;这些模型…

【Win】双系统新体验:Hyper-V上macOS安装攻略

在虚拟化的世界里&#xff0c;Hyper-V是探索不同操作系统的一扇大门。尽管macOS并不是Hyper-V官方支持的来宾操作系统&#xff0c;但这并未阻挡技术探索者的脚步。他们通过不懈努力&#xff0c;开辟出了一条条通往macOS的非官方路径。这些路径或许曲折&#xff0c;却为那些渴望…

Ubuntu挂载window的网络共享文件夹爱

1.进入win10创建一个用户smb密码也是smb 2.右键进入文件夹共享 3.进入Ubuntu安装支持cifs-utils sudo apt update sudo apt install cifs-utils 4.sudo mkdir /mnt/shared 5.挂载&#xff1a; sudo mount -t cifs -o usernamesm bpasswordsmb //172.16.11.37(windowsIP)/s…

controller不同的后端路径对应vue前端传递数据发送请求的方式

目录 案例一&#xff1a; 为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 补充&#xff1a;后端controller 参数上如果没写任何注解&#xff0c…

JVM专题十二:JVM 中的收集器二

上一篇JVM专题十一&#xff1a;JVM 中的收集器一咱们介绍了垃圾收集器的分类&#xff0c;已经主流的分代垃圾收集器重点看了CMS与三色标记算法&#xff0c;本篇咱们继续来看意G1、ZGC等。 G1收集器 G1&#xff08;Garbage-First Garbage Collector&#xff09;是一种服务器端的…

flask的基本使用1

【 一 】Flask介绍 python 界的web框架 -Django&#xff1a;大而全&#xff0c;使用率较高 &#xff1a;https://github.com/django/django -FastAPI&#xff1a;新项目选择使用它&#xff1a;https://github.com/tiangolo/fastapi -flask&#xff1a;公司一些小项目使用它&a…

如何提高软件APP质量的测试类型

如今&#xff0c;由于市场竞争非常激烈&#xff0c;移动应用质量至关重要。我们需要关注用户体验以及应用的性能。如果应用包含错误&#xff0c;应用评级就会下降&#xff0c;应用下载量也会下降。如果我们能使我们的应用没有错误&#xff0c;那么应用获得人气的机会就会增加。…

通过颜色传感器控制机械臂抓物体

目录 1 绪论 2整体设计方案 2.1 系统的介绍 2.2 抓取模块 2.2.1 机械臂的定义 2.2.2 机械臂的分类 2.2.3 机械臂的选用 2.3 颜色识别模块 2.3.1 颜色传感器识别原理 2.3.2 TCS3200简介 2.4 整体控制方案 3 颜色识别抓取系统的硬件设计 3.1 单片机选型及参数 3.2 系…

win11系统重装?正版系统Windows11安装重启!保姆级重装系统攻略!

随着科技的不断发展&#xff0c;Windows 11系统已经逐渐成为了众多电脑用户的新选择。然而&#xff0c;当当电脑出现严重故障、受到病毒攻击、软件冲突、系统升级失败、硬件更换或升级、系统性能下降或个性化需求等情况时&#xff0c;重装系统可能是一个有效的解决方案。本文将…

构建网络图 (JavaScript)

前序&#xff1a;在工作中难免有一些千奇百怪的需求&#xff0c;如果你遇到构建网络图&#xff0c;或者学习应对未来&#xff0c;请看这边文章&#xff0c;本文以代码为主。 网络图是数据可视化中实用而有效的工具&#xff0c;特别适用于说明复杂系统内的关系和连接。这些图表…

【十六】【QT开发应用】Menu菜单,contextMenuEvent,setContextMenuPolicy,addAction

在 Qt 框架中&#xff0c;QMenu 类用于创建和管理菜单。菜单是用户界面的一部分&#xff0c;可以包含多个选项或动作&#xff0c;用户可以选择这些选项来执行特定的功能。菜单通常显示在菜单栏、上下文菜单&#xff08;右键菜单&#xff09;或工具栏中。 基本用法 创建菜单对象…

深入解读一下 `com.google.android.material.appbar.CollapsingToolbarLayout`

简介 在现代 Android 应用中&#xff0c;提供流畅且美观的用户体验是非常重要的。CollapsingToolbarLayout 是 AndroidX库中 Material Components 的一部分&#xff0c;它提供了一种易于实现的可折叠工具栏效果&#xff0c;常用于提供视觉吸引力的标题栏和动画效果。 本文将详…

项目1111

中文显示姓名列和手机号 SELECT contact_name AS 姓名, contact_phone AS 手机号 FROM 2_公司id; 使用explain测试给出的查询语句&#xff0c;显示走了索引查询 EXPLAIN SELECT * FROM 7_订单数量 WHERE countid LIKE e%; 统计用户订单信息&#xff0c;查询所有用户的下单数量…

Prometheus中添加基本身份验证功能

在Prometheus中添加基本身份验证功能&#xff0c;可以按照以下步骤进行&#xff1a; 一、生成哈希密码 首先&#xff0c;需要安装bcrypt工具&#xff0c;用于生成哈希密码。这可以通过Python的bcrypt库来完成。如果未安装&#xff0c;可以使用pip进行安装。 创建一个Python脚…

Android性能优化——卡顿优化

文章目录 一、从XML到屏幕上的展示造成跳帧的因素有那些发现问题定位问题定位代码 一、从XML到屏幕上的展示 数据加载阶段 数据控制阶段 数据展示阶段 xml —> view onCreat —> 解析layout.xml resume —> view —> wms ViewRootImpl UI 绘制流程 &#xff1a;测…