stateflow入门学习&笔记

由于课题研究需要用到stateflow,所以跟着matlab自带的互动式教程stateflow onramp先把基础学习了一下并总结了下面的笔记,笔记的顺序流程大致与stateflow onramp相符合。因为自己也是初学者,如有错误请大家多多指正。

命令行开启

sf --开启stateflow以及stateflow library框
sf -lib --开启stateflow library框
sfnew -matlab --新建一个m语言的stateflow项目
sfnew -c --新建一个c语言的stateflow项目

动作状态(state)

entry:语句/函数名 --进入状态的动作,简写为en
during:表达式/函数 --处于状态中,简写为du
exit:表达式/函数 --离开状态,简写为ex
三者不一定全部定义
on eventname:状态完整的接触到广播事件一次后执行的动作
on after(n,eventname):状态完整的接触到广播事件n次后执行的动作
on before(n,eventname):状态完整的接触到广播事件n次前执行的动作
on at(n,eventname):状态完整的接触到广播事件n次时执行的动作

状态转移

从一个状态框的边缘拖动光标到另一个状态框边缘画出一条转移线,双击转移线可以添加转移条件,如下所示,当双击上方转移线并键入power==1后软件会自动帮你加上方括号。

同时方括号内的转移条件可以用&&(与)、||(或)来连接。
execution order:条件判断顺序,首先判断是否满足转移条件1,若满足则直接转移。否则,再去判断转移条件2,以此类推。

时序逻辑

Stateflow支持使用时序逻辑,常用的时序逻辑运算符是 after(N,sec) ,其中 N 是以秒为单位的等待时间。 对于 Simulink 中的图表,时间根据模型的仿真时间进行跟踪。

默认转换

如下是一个默认转换,它指定系统的初始状态。 当向空白图表添加状态时,Stateflow 会自动添加默认转换。同时,默认转换上不允许添加任何转换条件。

点击下方箭头,当光标变为空心圆后可以拖动默认转换到其他状态。

不可达状态

不可达状态的状态圈周围显示为橙色,如下右侧状态所示:

Stateflow数据

在 Stateflow 中,图表中使用的输入、输出和局部变量称为图表数据。 所有图表数据都必须具有指定的范围。 下面列出了通用数据范围:
Local Data:仅在图表中本地使用的数据。
Input:通过输入端口从 Simulink 接收信号。
Output:信号通过输出端口写入 Simulink。
Parameter:从 MATLAB 工作区或 Simulink 封装参数中读取一个常数值。
我们可以通过Symbols Pane图形界面来快速添加和删除 Stateflow 数据并分配数据范围:

如果一个数据具有input或output,软件将自动在Stateflow模块上创建端口:

如果在定义之前创建图表并添加数据,Stateflow将预测这个数据的范围,单击Resolve undefined symbols按钮可以使用软件给出的默认建议。

同时,可以通过Symbols Pane快速更改数据名称,更改之后需要使用Shift+Enter键来保存修改。还使用快捷键 Ctrl+Shift+A 自动排列模型以适合文本。

Chart 动作

chart操作可以在图表模拟期间执行代码。chart动作可分为以下两种。
· 状态动作(satate action):定义了当特定状态处于活动状态时 Stateflow 会做什么。
· 条件动作(Condition actions):定义了当转移条件为真时 Stateflow 会做什么。

状态动作

状态动作都以相同的格式指定,常用的三个的状态动作是entry、during和exit。 当它们听起来像它们会发生时:分别表示在进入状态时、保持在状态时和离开状态时所要执行的动作。

如下图中的例子,x 和 y 在进入此状态时都被设置为 1。 退出此状态时,x 被设置为 0:

条件动作

Stateflow 还可以执行与转换条件相关的操作。 当前面的转换条件为真时执行条件动作。 条件动作用大括号 ({}) 表示,这样可以将它们与方括号 ([]) 中的转移条件区分开来。
如下图所示,只要满足转移条件x == 1,y 就会被赋值为 1, 这个操作发生在 StateB 的状态进入操作之前:

如果没有设置转换条件,则转换被认为始终有效,条件动作也随转移始终执行:

流程图

Stateflow 可以构建逻辑模式的无状态模型的流程图,例如决策树和迭代循环。 流程图使用两种图形元素构建的:用箭头表示转换条件的转换路径。 连接点是将路径划分为段的节点,用圆圈表示。 他们可以沿着决策路径提供额外的分支。 例如如下的转换和连接可用于为 if-else 语句建模:

模式向导

Stateflow 提供了模式向导Pattern Wizard来简化通用流程图的创建。 这些模式包括:
决策:if、if-else 和嵌套 if 决策模式。
循环:for、while 和 do-while 循环模式。
开关:最多有四种情况的开关模式。
自定义:用户保存的自定义模式。

stateflow函数

Stateflow 支持创建可以在图中多次调用的各种类型的函数。 与文本编程一样,使用函数可以减少冗余并提高可读性。函数可以作为状态动作或条件动作。 如果一个函数返回一个布尔值,它也可以被称为转换条件。
图形函数:图形函数是包含流程图的可重复使用的图表元素。流程图可以直接插入到 Stateflow 图中。可以通过将流程图封装到图形函数中来重用此逻辑。 要添加图形功能,单击面板上fx的图标。
首次添加到模型时,图形函数框将包含一个空白函数签名、一个默认转换和一个终止节点:

图形函数的函数签名与文本 MATLAB 函数签名相同。 定义函数后,添加定义函数行为的图形元素:

通过状态或条件动作调用函数:

MATLAB 函数

可以将已有的MATLAB 函数合并到 Stateflow 图中,从对象选项板上的图标中单击并拖动MATLAB图标。
首次添加到模型时,MATLAB 函数框将包含一个空白函数签名和一个空函数:

定义 MATLAB 函数时,不需要关键字 function:

双击 Stateflow 中的函数以打开 MATLAB 编辑器键入函数具体内容:

MATLAB函数调用方式与图形函数调用方式相同。

图表层次结构

使用层次结构允许对具有共同属性或功能的状态进行分组,从而避免 Stateflow 图中的冗余。 要创建层次结构,新建一个状态,此状态必须完全包含一个或多个其他状态(可以用左键单击并拖动状态边界以调整其大小)。

stateflow入门学习笔记相关推荐

  1. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  2. Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

    Crypto++入门学习笔记(DES.AES.RSA.SHA-256) 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypt ...

  3. 机器学习入门学习笔记:(4.2)SVM的核函数和软间隔

    前言 之前讲了有关基本的SVM的数学模型(机器学习入门学习笔记:(4.1)SVM算法).这次主要介绍介绍svm的核函数.软间隔等概念,并进行详细的数学推导.这里仅将自己的笔记记录下来,以便以后复习查看 ...

  4. 机器学习入门学习笔记:(3.2)ID3决策树程序实现

    前言 之前的博客中介绍了决策树算法的原理并进行了数学推导(机器学习入门学习笔记:(3.1)决策树算法).决策树的原理相对简单,决策树算法有:ID3,C4.5,CART等算法.接下来将对ID3决策树算法 ...

  5. 机器学习入门学习笔记:(2.3)对数几率回归推导

    理论推导   在以前的博客(机器学习入门学习笔记:(2.1)线性回归理论推导 )中推导了单元线性回归和多元线性回归的模型.   将线性回归模型简写为:y=ωTx+by = \omega^Tx+b:   ...

  6. 机器学习入门学习笔记:(2.2)线性回归python程序实现

      上一篇博客中,推导了线性回归的公式,这次试着编程来实现它.(机器学习入门学习笔记:(2.1)线性回归理论推导 )   我们求解线性回归的思路有两个:一个是直接套用上一篇博客最后推导出来的公式:另一 ...

  7. 汇编入门学习笔记 (十二)—— int指令、port

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.port 參考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引 ...

  8. node入门-学习笔记

    文章目录 node入门-学习笔记 node 启动node服务 重构express-run node入门-学习笔记 node 为什么后端要用node, 因为它是js js运行时环境 主要使用expres ...

  9. 计算机指令int,汇编入门学习笔记 (十二)—— int指令、端口

    疯狂的暑假学习之  汇编入门学习笔记 (十二)--  int指令.端口 参考: <汇编语言> 王爽 第13.14章 一.int指令 1. int指令引发的中断 int n指令,相当于引发一 ...

最新文章

  1. linux中的tasklet机制【转】
  2. 当前流行的J2EE WEB应用架构分析
  3. android studio 各种问题
  4. pythonfile操作教程_Python基础教程之文件操作
  5. POJ 3687 Labeling Balls(拓扑序列)
  6. php怎么创建事务,php事务的实现方法介绍(代码示例)
  7. Visual Studio LightSwitch初体验和定位看法
  8. 媒体服务器协议,媒体服务器介绍(mediactrl架构)
  9. 【飞鸽传书3.0】飞鸽传书3.0关键字布局
  10. docker xware下载慢_win7环境下Docker快速构建及阿里云容器加速配置
  11. Shopee2022届校园招聘提前批笔试
  12. 剪辑神器,分享一个可以批量修改大量视频MD5值的工具
  13. xp计算机找不到音量调节,电脑音量图标消失无法调整声音大小的解决方案
  14. java操控手机刷锦鲤看看(一个类似头条的赚钱app)
  15. 2021-2027全球及中国远红外桑拿行业研究及十四五规划分析报告
  16. Sox切割脚本简单思路
  17. NER任务的精确评估指标P、R、F1
  18. Deep Learning for Massive MIMO CSI Feedback-学习笔记
  19. Latex学习笔记(七)参考文献模板
  20. 所有帖子的 分类 总结

热门文章

  1. 后台返回的日期格式的处理
  2. Unity5的关卡切换
  3. [动态规划]Tak and Cards
  4. python爬虫脚本入门-通过电影脚本讲些爬虫知识
  5. 问题上报随手拍微信小程序开发制作功能
  6. FICO总账会计操作学习记录
  7. python操作excel(openpyxl,xlrdxlwt)
  8. mysql创建函数失败_MYSQL创建函数出错如何解决
  9. javascript取随机数_js随机数生成方法和实例,生成[n,m]的随机整数,获取1-10之间的随机数...
  10. openstack nova 基础知识——Quota(配额管理)