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")

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

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

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

相关文章

Windows USB设备驱动开发 - 常见概念的解释

我们听到许多 USB 术语几乎交替抛出。 它们都是什么意思&#xff1f;假设我们看到类似 “多亏了 USB 3.0&#xff0c;我可以将 SuperSpeed U 盘连接到电脑的 xHCI 主机控制器&#xff0c;并更快地复制文件。” 让我们了解该句子中的 USB 术语。 USB 3.0、USB 2.0 和 USB 1.0 请…

大模型笔记1: Longformer环境配置

论文: https://arxiv.org/abs/2004.05150 首先保证电脑上配置了git. git环境配置: https://blog.csdn.net/Andone_hsx/article/details/87937329 3.1、找到git安装路径中bin的位置&#xff0c;如&#xff1a;D:\Program Files\Git\bin 找到git安装路径中git-core的…

C++ Primer 中文版 第5版 读书笔记

读书过程中发现&#xff0c;读得越多&#xff0c;忘得越多。因此记录读书笔记 1.2 初始输入输出 向流写入数据 <<运算符&#xff08;输出运算符&#xff09;接受两个运算对象&#xff1a;左侧的运算对象必须是一个ostream对象&#xff0c;右侧的运算对象是要打印的值。…

限域传质分离膜兼具高渗透性、高选择性特点 未来应用前景广阔

限域传质分离膜兼具高渗透性、高选择性特点 未来应用前景广阔 分离膜是一种具有选择性透过功能的薄层材料。限域传质分离膜是基于限域传质机制的分离膜&#xff0c;兼具高渗透性、高选择性的特点。限域传质是流体分子通过与其运动自由程相当传质空间的过程&#xff0c;流体分子…

TiDB-从0到1-数据导出导入

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、数据导出 TiDB中通过Dumpling来实现数据导出&#xff0c;与MySQL中的mysqldump类似&#xff0c;其属于…

SQL Server 2016安装【windows 11】

获取安装包 链接: https://pan.baidu.com/s/1OM9JCNah0-zrOQ0vNBkh6g 提取码: 1245 安装程序 双击点击setup.exe 弹出SQL Server安装中学界面&#xff0c;点击【安装】—点击【全新SQL Server…添加功能】 不出意外的话啊会跳到 SQL Server 2016 安装程序界面&#xff0c;直…

idea使用maven打包报错GBK不可映射字符

方法一&#xff1a;设置环境变量 打开“控制面板” > “系统和安全” > “系统”。点击“高级系统设置”。在“系统属性”窗口中&#xff0c;点击“环境变量”。在“系统变量”部分&#xff0c;点击“新建”&#xff0c;创建一个新的变量&#xff1a; 变量名&#xff1a;…

数学建模 —— 矩阵的运算(上)

目录 调用函数运算 sum : 求和函数 prod : 求乘积函数(product) cumsum : 计算累积和(cumulative sum) diff : 计算差分(difference) mean : 计算平均值 (average) median : 计算中位数 mode : 计算众数 var : 计算方差 (variance) std : 计 算 标 准 差 (standard d…

Taro +vue3 中的微信小程序中的分享

微信小程序 右上角分享 的触发 以及配 useShareAppMessage(() > {return {title: "电影属全国通兑券",page: /pages/home/index,imageUrl: "http:///chuanshuo.jpg",};}); 置 就是Taro框架中提供的一个分享Api 封装好的

计算机网络:408考研|湖科大教书匠|原理参考模型II|学习笔记

系列目录 计算机网络总纲领 计算机网络特殊考点 计算机网络原理参考模型I 计算机网络原理参考模型II 目录 系列目录更新日志前言应用层(Application Layer)一、应用层概述二、客户/服务器方式和对等方式三、动态主机配置协议(DHCP, Dynamic Host Configuration Protocol)四、域…

LabVIEW技术交流-布尔灯仿真数码管

问题来源 闲来无事&#xff0c;逛论坛问答&#xff0c;看到这样一个问题&#xff0c;觉得有意思&#xff0c;就自己尝试下。 这个功能其实是不难的&#xff0c;就是显示不同的数值时&#xff0c;对相应的布尔灯进行真假值操作就行了。但是我又想到了更有趣的玩法&#xff0c;能…

Github 2024-06-27 Go开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

零点到两点,我部署了一个es

一开始的准备 实在是水平有限&#xff0c;Clash虚拟机网出不去&#xff0c;研究了LAN方案&#xff0c;还在咸鱼买了一单&#xff0c;搞不定&#xff0c;没辙&#xff0c;那我老老实实下载tar包得了&#xff0c;就不docker了 下载安装 直接官网给它安个es https://www.elasti…

如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度

关于系统的理解 1.1 系统的概述 随着人类社会的发展&#xff0c;人们面对越来越多的规模巨大、关系复杂、参数众多地复杂问题&#xff0c;这些问题的复杂度已经远远超出人类的理解能力&#xff0c;系统论就是为了分析和解决这些问题而生。我们平时接触的计算机系统包括软件系统…

3.PyQt6常用基本控件

目录 常用控件 1.文本类控件 1.QLable标签控件 1.设置标签文本 2.设置标签文本和对齐方式 3.换行显示 4.添加超链接 5.为标签设置图片 6.获取标签文本 2.QLineEdit单行文本控件 3.QTextEdit多行富文本控件 4.QPlainTextEdit纯文本控件 5.QSpinBox整数数字选择控件 …

【深度学习】tensorboard的使用

目前正在写一个训练框架&#xff0c;需要有以下几个功能&#xff1a; 1.保存模型 2.断点继续训练 3.加载模型 4.tensorboard 查询训练记录的功能 命令&#xff1a; tensorboard --logdirruns --host192.168.112.5 效果&#xff1a; import torch import torch.nn as nn impor…

linux下OpenSSL升级到1.1以上版本

要将CentOS 7上的OpenSSL升级到1.1以上版本&#xff0c;您需要遵循以下步骤。请注意&#xff0c;这些步骤可能需要一些系统管理经验&#xff0c;因为您将从源代码编译和安装OpenSSL。 1. 更新系统软件包 首先&#xff0c;确保您的系统软件包是最新的。使用以下命令更新所有软…

开发RpcProvider的发布服务(NotifyService)

1.发布服务过程 目前完成了mprpc框架项目中的以上的功能。 作为rpcprovider的使用者&#xff0c;也就是rpc方法的发布方 main函数如下&#xff1a; 首先我们init调用框架的init&#xff0c;然后启动一个provider&#xff0c;然后向provider上注册服务对象方法&#xff0c;即us…

企业内部运营常用的API服务有哪些?

企业内部运营常用的API服务是现代企业管理和协作的关键工具之一。这些API服务提供了丰富的功能和工具&#xff0c;帮助企业提高内部运营效率、优化业务流程和加强团队协作。首先&#xff0c;企业内部通信和协作API服务是不可或缺的。通过这些API服务&#xff0c;企业可以建立内…

maven的安装以及配置

前言&#xff1a; Maven是一个强大的构建自动化工具&#xff0c;主要用于Java项目。它解决了软件开发中的两个方面&#xff1a; 构建和依赖管理&#xff1a;Maven通过在项目对象模型&#xff08;POM&#xff09;文件中指定依赖关系&#xff0c;简化了项目构建和依赖管理的过程…