0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

MATLAB 来源:djl 2019-09-18 17:37 次阅读

Stateflow 是一个基于状态机和流程图来构建组合和时序逻辑决策模型并进行仿真的环境。Stateflow 可以将图形表示和表格表示(包括状态转换图、流程图、状态转换表和真值表)结合在一起,针对系统对事件、基于时间的条件以及外部输入信号的反应方式进行建模。

Stateflow 可用于设计有关监控、任务调度以及故障管理应用程序的逻辑。Stateflow 包括状态图动画及静态和运行时检查,可以在实施前测试设计的一致性和完整性。

主要功能

构建环境、图形组件和仿真引擎模型,实现复杂逻辑的建模和仿真;

具有层次结构、并行系统、时间算子和事件的确定性执行语义;

通过状态图、状态转移表和状态转移矩阵表达有限状态机;

通过流程图、MATLAB 函数和真值表来表达算法

通过状态图动画、状态活动记录、数据记录和集成调试,分析设计和检测运行时错误;

对于周期问题的静态和运行时检查,状态不一致、数据范围冲突及溢出情况等;

Mealy 和 Moore 有限状态机。

逻辑设计

Stateflow提供图形和表格接口,以使用状态机来进行系统逻辑建模。在状态机中,可以将系统运作模式构建为状态模型,通过转移和结点来表达模式间的切换逻辑。系统中的不同组件可以构建为状态模型,能够单独执行或并行执行。Stateflow 通过分层组织状态图对象、函数和组件来管理设计的复杂程度。

在 Stateflow 中,既可以使用流程图以图形方式,也可以使用真值表以表格格式,表达组合逻辑。

逻辑设计包括定义待检查的条件以及所要执行的后续操作。Stateflow 可以使用 C 或 MATLAB 定义条件和操作。您可以通过 Simulink 模型浏览器来管理条件和操作中所用的数据。您可以在执行设计前借助 Stateflow 得知可能存在的状态不一致现象、未使用的数据和事件以及无效的转移。

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

这是一个定义锅炉温度控制系统逻辑的 Stateflow 图。该图使用图形函数(右侧)实现加热器系统(左侧)所调用的公用程序算法。

以图形方式设计逻辑

Stateflow提供一个编辑器和一些用于绘制状态机和流程图的图形对象。通过从图形调色板中选择状态、转移和结点,然后将其拖入Stateflow编辑器,即可构建状态机。您也可以使用流程图批注、Simulink 子系统、MATLAB 和真值表创建函数。Stateflow图可以指定为具有扩展功能的 Mealy 和 Moore 混合状态机、Mealy 状态机或 Moore 状态机。

通过绘制由结点连接的转移,可以创建流程图,并根据条件逻辑予以执行。使用“Pattern模式向导”,可以创建常用的逻辑流模式。流程图可以放在图形函数中,既能用在该状态图的许多位置上,也可以用于同一模型的其他状态图中。使用流程图可以设计逻辑,由此在各状态间进行转移。

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

Stateflow 图(左)使用通过“模式向导”(中)生成的图形函数(右)。

Stateflow编辑器可提供编辑时检查,以识别对象的非法位置以及无效转移。

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

Stateflow 编辑器正在处理一个冷却系统的模型。边界发生交叠的状态以红色突出显示。

以图形方式设计逻辑

Stateflow中的状态转移表为状态机建模提供了一个结构化环境。通过添加状态行和状态间转移列,可以构建状态机。状态转移表通过提供状态名称下拉菜单、自动完成有限状态机语法和其他编辑时检查,可以帮助您创建状态机。您可以在执行模型前运行静态诊断测试,以检测语法错误、未完成的转移和无法达到的状态。

从状态转移表生成的状态转移矩阵视图有助于快速识别来自特定状态的条件和可能的目标状态。

Stateflow 中的真值表可用于对不需要通过连续运行来维护状态的逻辑建模。输入要检查的条件,然后合并这些条件产生的结果,即可构建真值表。之后,可输入关于对不同的结果组合的操作。构建真值表后,可以运行静态诊断检查,以识别过度指定的条件和指定不足的条件。

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

左:用于实施在故障检测算法中选择有效传感器读数的逻辑的真值表。

右:自动生成的真值表图形表示形式。

组件集成与算法调度

您可以将在 Stateflow 中创建组件的与其他组件相集成,从而构建状态机算法。Stateflow 组件可以包含 MATLAB 和 Simulink 函数、自定义 C 代码、图形函数和真值表。在所构建的算法中,可以使用基于时间和基于条件的逻辑来调度组件和函数的执行。

每个 Stateflow 组件都可以独立开发、执行和验证,从而使多个用户能够同时处理算法的不同部分。

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

Simulink 模型(左)合并了一个 Stateflow 图(右)。Stateflow 图对升降舵所用的逻辑进行建模,其中包括图形函数、MATLAB 函数和真值表。

将组件集成到设计中

右键单击组件,将其转换为原子子图,并放入库中,即可跨图、跨模型重复使用该组件。要使用该组件,可以将其从库中拖出,然后放入状态图或模型中。当更新库中的某个组件时,该组件的所有实例将自动更新。您可以分层组织组件和函数,以便简明而准确地表达您的系统。

调度算法

在 Stateflow 中,可对条件逻辑和基于时间的逻辑建模,以调用 Simulink 函数和 MATLAB 函数。在 Stateflow 中,根据逻辑建模的事件可以输出到 Simulink,以激活对函数调用或控制信号变化做出反应的子系统。

Stateflow 提供基于事件和基于时间的算子(before、after、at 和 every),以便于您根据事件计数和经过的时间来指定状态转移逻辑,而无需使用计时器和计数器。

模型仿真与结果分析

通过模型仿真,可以分析系统的行为。通过从任何保存的状态重新开始仿真,并分析其对不同设置和配置的反应,可以运行条件假设场景。

模型仿真

在 Stateflow 中,通过使用状态图动画突出显示模型中的活动状态和转移,可以实现系统仿真行为可视化。

Stateflow 的调试能力使您得以详细地对仿真进行逐步调试。您可以设置断点,监视数据值,并逐步调试状态图中的不同函数。您可以通过 Stateflow 调试器窗口来控制仿真的执行情况,显示状态图的调用堆栈以及执行状态。

Stateflow 调试器可检测运行时错误,其中包括状态不一致、数据范围冲突以及可能的无限循环。

分析结果

在仿真过程中,可通过以下方式实现仿真结果可视化:

使用 Simulink 显示器和示波器查看状态和数据

在 Simulation Data Inspector (仿真数据检查器)中查看记录的数据

使用 MATLAB 构建自定义显示器

再者,您可以记录状态图和状态活动数据,以便在 MATLAB 中进行后处理。

关于使用状态机与流程图进行建模和仿真决策逻辑的分析和研究

Stateflow 中的仿真数据可视化选项。

左上:Simulink Data Inspector(Simulink 数据检查器)用于比较特定信号;

左下:自定义 MATLAB 界面用于分析数据;

右:Simulink Signal Selector(Simulink 信号选择器)用于比较状态。

设计验证与代码生成

通过将 Stateflow 与其他 Simulink 产品配合使用,可以根据需求验证您的设计,并生成代码以便在嵌入式系统中予以实现。

使用 Simulink Verification and Validation(Simulink 检验和验证),可以将需求直接映射到 Stateflow 对象,检查是否符合标准,并收集模型覆盖度量信息

使用 Simulink Design Verifier(Simulink 设计检验器),可以检测设计错误,针对采用常规方法难以发现的错误生成测试向量。

使用附加代码生成产品,可以直接从状态图生成C和C++、HDL或PLC代码。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 显示器
    +关注

    关注

    21

    文章

    4737

    浏览量

    137854
  • 可视化
    +关注

    关注

    1

    文章

    1020

    浏览量

    20554
  • 结构化
    +关注

    关注

    0

    文章

    26

    浏览量

    10264
收藏 人收藏

    评论

    相关推荐

    什么是有限状态机?如何解决传统有限状态机状态爆炸」问题?

    有限状态机(Finite State Machine,简称FSM)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列以及如何响应来自外界的各种事件。
    的头像 发表于 02-17 16:09 1866次阅读
    什么是有限<b class='flag-5'>状态机</b>?如何解决传统有限<b class='flag-5'>状态机</b>「<b class='flag-5'>状态</b>爆炸」问题?

    Verilog状态机+设计实例

    在verilog中状态机的一种很常用的逻辑结构,学习和理解状态机的运行规律能够帮助我们更好地书写代码,同时作为一种思想方法,在别的代码设计中也会有所帮助。 一、简介 在使用过程中我们常说
    的头像 发表于 02-12 19:07 1995次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    SaberRD状态机建模工具介绍(二)状态机建模工具使用示例

    假设电阻阻值为r_normal,首先打开状态机建模工具,添加电阻端口,电阻端口包含贯通变量电流和跨接变量电压,使用分支型端口。
    的头像 发表于 12-05 09:53 406次阅读
    SaberRD<b class='flag-5'>状态机</b><b class='flag-5'>建模</b>工具介绍(二)<b class='flag-5'>状态机</b><b class='flag-5'>建模</b>工具使用示例

    SaberRD状态机建模工具介绍(一)什么是状态机建模

    状态机建模是使用状态图和方程式的手段,创建基于混合信号的有限状态机模型的一种建模工具。
    的头像 发表于 12-05 09:51 525次阅读
    SaberRD<b class='flag-5'>状态机</b><b class='flag-5'>建模</b>工具介绍(一)什么是<b class='flag-5'>状态机</b><b class='flag-5'>建模</b>

    状态机怎么上来就错了?怎么解决?

    状态机本身很简单,default也写了,然后进行仿真时看到了这样的波形:
    的头像 发表于 12-04 10:43 191次阅读
    <b class='flag-5'>状态机</b>怎么上来就错了?怎么解决?

    嵌入式软件设计之状态机编程开发方案

    那么状态机的引入解决了哪些问题呢? 当程序有多个状态时,规范了程序的状态转换,避免了一些引入一些复杂的判断逻辑。 规范了程序在不同状态
    发表于 10-27 12:33 283次阅读
    嵌入式软件设计之<b class='flag-5'>状态机</b>编程开发方案

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,
    的头像 发表于 10-19 10:27 4984次阅读

    有限状态机分割设计

    有限状态机分割设计,其实质就是一个状态机分割成多个状态机
    的头像 发表于 10-09 10:47 352次阅读

    如何使用FSME来定制状态机

    定制状态机 目前得到的状态机已经能够响应来自外部的各种事件,并适当地调整自己当前所处的状态,也就是说已经实现了状态机引擎的功能,接下来要做的就是根据应用的具体需求来
    的头像 发表于 09-13 16:57 877次阅读
    如何使用FSME来定制<b class='flag-5'>状态机</b>

    如何生成状态机框架

    生成状态机框架 使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架
    的头像 发表于 09-13 16:54 650次阅读
    如何生成<b class='flag-5'>状态机</b>框架

    自动生成程序状态机代码状态机建模方法

    首先运行fsme命令来启动状态机编辑器,然后单击工具栏上的“New”按钮来创建一个新的状态机。FSME中用于构建状态机的基本元素一共有五种:事件(Event)、输入(Input)、输出(Output
    的头像 发表于 09-13 16:50 730次阅读
    自动生成程序<b class='flag-5'>状态机</b>代码<b class='flag-5'>状态机</b><b class='flag-5'>建模</b>方法

    基于C语言的状态机实现方案

    关于状态机,基础的知识点可以自行理解。本文主要讲解的是一个有限状态机FSM通用的写法,目的在于更好理解,移植,节省代码阅读与调试时间,体现出编程之美。
    发表于 09-13 09:28 300次阅读
    基于C语言的<b class='flag-5'>状态机</b>实现方案

    基于FPGA的状态机设计

    状态机的基础知识依然强烈推荐mooc上华科的数字电路与逻辑设计,yyds!但是数电基础一定要和实际应用结合起来,理论才能发挥真正的价值。我们知道FPGA是并行执行的,如果我们想要处理具有前后顺序的事件就需要引入状态机
    的头像 发表于 07-28 10:02 497次阅读
    基于FPGA的<b class='flag-5'>状态机</b>设计

    如何在FPGA中实现状态机

    和序列要求的最佳方法则是使用状态机状态机是在数量有限的状态之间进行转换的逻辑结构。一个状态机
    的头像 发表于 07-18 16:05 590次阅读
    如何在FPGA中实现<b class='flag-5'>状态机</b>

    状态机要实现哪些内容

    。 近日在看到了一个状态机的实现,也学着写了一个,与大家分享。 首先,分析一下一个普通的状态机究竟要实现哪些内容。 状态机存储从开始时刻到现在的变化,并根据当前输入,决定下一个
    的头像 发表于 06-22 14:26 448次阅读
    <b class='flag-5'>状态机</b>要实现哪些内容