您现在的位置是:首页 > 正文

MWORKS.Sysplorer前瞻版功能简介——状态机图形建模

2024-02-29 11:33:47阅读 0

1 引言

状态机是一种描述系统行为的模型,能够清晰地表示系统中的状态和状态之间的转换关系,从而使得开发者能够更加精确地描述系统行为和逻辑,对于提升系统的正确性和可靠性具有重要的作用。此外,状态机还可以用于分析系统性能、生成测试用例等,具有广泛的应用价值。

MWORKS.Sysplorer 2023a前瞻版基于多领域建模语言Modelica 3.5的状态机语义实现了状态机建模功能,同时支持使用图形界面来构建状态机。在完全兼容Modelica的前提下,MWORKS.Sysplorer 2023a前瞻版对状态机建模易用性、可读性进行了改进,提供了一系列方便快捷、易于操作的图形建模的功能。通过图形界面,用户可以使用拖拽和连接的方式轻松创建状态机的各个状态和状态之间的转换关系,降低建模难度和出错的概率。

MWORKS.Sysplorer 2023a前瞻版具有符合Modelica 3.5的状态机语义、易于使用的图形界面以及与多领域建模的结合等特点,这些特点使得MWORKS.Sysplorer可以更好地满足状态机建模的需求,基本完成了MATLAB/Simulink的Stateflow工具常用功能的替代。

2 状态机简介

首先我们一起了解一下状态机的概念。状态机全称为有限状态自动机(Finite State Machine,FSM),也被称为有限状态机(Finite Automaton,FA)或有限状态转换机(Finite State Transition Machine,FSTM),它不是一个实际的机器设备,而是一种常见的计算模型。

状态机有两大特点,一是离散的,二是有限的,描述事物的有限状态机模型的元素由以下部分组成:

  • 状态(State):表示系统可能处于的状态,可以用方块或圆形表示。

  • 事件(Event):触发状态转移的事件,可以用标签表示。

  • 动作(Action):状态转移时执行的动作,可以用标签表示。

  • 转移(Transition):表示状态之间的转换关系,可以用箭头表示。

FSM 通过定义状态、转移、事件和动作来描述系统的行为,是一种非常有效的行为建模工具。生活中有很多状态机例子,下图为交通信号灯例子,可以通行的时候为绿灯,不能通行的时候为红灯,转换条件为一种状态的持续时间结束,或者主动切换指令。对应到FSM,状态为灯的颜色,转移为通行状态的转换,事件为状态的持续时间结束或主动发送切换指令,动作为颜色的切换。

△ 交通信号灯例子

读至此处,相信大家已经掌握了一些状态机的基础知识了。那么接下来,我们就一起来了解MWORKS/Modelica中的StateMachine建模功能。

3 状态机图形建模

3.1 状态机显示与交互

A. 状态机与状态的构建

支持拖拽式建模是图形建模高易用性的体现,MWORKS.Sysplorer2023a前瞻版提供了SysplorerEmbeddedCoder.StateMachine模型库,内含状态机与状态基础模型,支持拖拽式构建状态机与状态组件。

◎ 拖拽式构建状态机

从SysplorerEmbeddedCoder.StateMachine模型库中,将Chart模型拖拽到图形视图,即可在当前模型中添加一个状态机组件。

△ 拖拽状态机

◎ 拖拽式构建状态

双击状态机组件进入状态机,然后从SysplorerEmbeddedCoder.StateMachine模型库中,将State模型拖拽到图形视图,即可在当前状态机中添加一个状态组件。

△ 拖拽状态

B. 数据管理

MWORKS.Sysplorer提供了纯界面交互的方式实现状态机变量的设置。

在状态机模型中右键点击打开上下文菜单,选择设置状态机变量,即可打开状态机变量设置面板。

△ 状态机变量设置界面图

击状态机变量面板的左上角绿色【添加变量】按钮,即可在表格中添加数据行,新添加数据行包括了范围、类型、名称、值、端口5个属性。

  • 范围:表明数据的传递属性,包括 Input(从外部输入)、Local(内部数据)、Output(向外部输出)、Parameter(参数)、Constant(常量)。

  • 类型:数据类型包括 Real、Integer、Boolean 三种类型。

  • 名称:状态机变量的名字,须为合法字符。

  • 值:变量的初始值。

  • 端口:当范围选择为 Input、Output 时,会在父层 Chart 组件上产生对应数据类型和数目的端口,此处端口号表示父层排列的顺序,通过端口 Input、Output 可以将状态机与其它组件连接起来共同构成模型来仿真。

△ 状态机端口界面图

3.2 状态显示与交互

A. 初始状态设置

当在同一个状态机中创建多个状态时,根据创建的先后顺序来看:第一个被创建的State左上角是黑色实心,表示其为初始状态,即系统模型运行时第一个被激活的状态。根据设计需求,需要更改初始状态时,单击其它状态左上角的空心圆圈,被选中的状态将变为初始状态,同时原来状态左上角的实心圆圈变为空心圆圈,自动满足同一层次下仅能有一个初始状态的约束条件。

△ 初始化状态设置

B. 状态方程编辑

状态内的动作可以通过状态方程实现。双击状态组件后,会出现可用于编辑状态方程的编辑框,编写完毕单击空白处即可在状态内部显示编辑的动作语句。

△ 双击进入状态编辑框

如果状态方程不符合语法规范,在完成编辑后,状态机的边框会变成红色。

△ 红色状态与正常状态对比图

3.3 转移线显示与交互

A. 转移线的构建

如下图所示:将光标位置移至状态边缘,当光标状态变为“+”时,拖动鼠标,便会自动生成一条转移线;此时,拖动鼠标至状态边缘另一端释放,转移线即可连接到该状态组件。

△ 拖拽生成转移线

转移线可以绘制成折线或光滑的曲线。在拖拽生成转移线过程中,在空白处释放鼠标,则会在此处形成一个锚点;然后将鼠标移动到另一个位置,点击空白处,形成下一个锚点;依次类推,直到点击到目标状态边缘。使用以上方法,即可绘制出经过各个锚点的折线或曲线。

鼠标右键点击转移线,通过勾选【光滑】按钮,可以实现折线和曲线可以互相转化;通过勾选【保持横平竖直】,可以实现转移线的曼哈顿化。

△ 转移线曲线、折线、曼哈顿化

B. 转移线的属性

Modelica转移线的属性包括转移条件、转移优先级、是否即时转移、是否重置状态、是否同步转移,以上属性在转移函数中以函数参数表示。

以上属性可通过交互式属性面板进行设置。双击转移线,或右键点击转移线,选择上下文菜单【属性】,弹出转移线属性对话框。

△ 转移线属性对话框

  • 转移条件:转移条件以文本控件的样式显示在转移线中点上方。在属性对话框输入栏输入转移条件,点击确定后,刷新转移条件文本。支持直接拖拽转移条件文本以改变位置。

转移线条件

  • 转移优先级:对于从同一个状态发出的多个转移,起始端带有数字标记,表示转移线的优先级,数字越小,优先级越高。在属性对话框输入栏输入转移优先级数字,点击确定后,在转移线起始端显示优先级。

△ 转移线优先级数字

  • 即时转移:是否即时转移在转移线上以末端形状区分,即时转移为三角形,非即时转移为菱形。在属性对话框勾选即时转移复选框即可完成设置。

△ 即时转移与非即时转移

  • 是否重置:是否重置在转移线上以末端形状的填充属性区分,重置转移为实心,非重置转移为空心。在属性对话框勾选重置状态复选框即可完成设置。

△ 重置与非重置转移

  • 同步转移:是否同步转移在转移线上以起始端的形状区分,同步转移为一个长方形,非同步转移没有长方形。在属性对话框勾选同步转移复选框即可完成设置。

△ 同步与非同步转移

C. 转移线的状态切换

转移线两端的状态可以快速切换。按住转移线的一端,将其拖拽到另一个状态边缘,则转移线这一段的状态将会切换成新的状态,同时会刷新各条转移线的优先级。

△ 转移线状态切换

3.4 嵌套状态的显示与交互

A. 嵌套状态的构建

Modelica3.5支持状态的嵌套,通过在状态中声明子状态组件实现。MWORKS.Sysplorer支持纯图形化操作,实现状态嵌套。

在状态机模型中,右键点击状态,点击【进入组件】上下文菜单,然后将状态模型SysplorerEmbeddedCoder.StateMachine.State拖拽到新的图形界面,即可实现状态的嵌套。在状态内部,子状态之间的初始状态规则与父层一致,同样是只能有一个初始状态。

△ 进入状态拖拽状态

点击组件导航栏中的上一层或【实例层次结构中后退】按钮,回到上一层,可以看到子状态显示在父状态内部。

△ 嵌套状态显示界面图

B. 嵌套状态的数据管理

与状态机的操作相似,在状态模型内部右键点击打开上下文菜单,选择设置状态变量,即可打开状态变量设置面板。状态内部的变量面板对于状态本身与嵌套状态生效。由于状态没有输入输出端口,因此状态内部的变量范围相对于状态机的变量范围,没有输入和输出,只有常数、参数与内部变量。

△ 状态变量设置面板

4 总结

本文介绍了MWORKS.Sysplorer针对状态机图形化建模需求,基于Modelica语言的状态机语义,实现的一套方便快捷、易于操作的图形建模的功能,并简述了状态机建模相比于传统的使用代码实现功能的优势。

MWORKS.Sysplorer不仅在控制器建模与代码生成领域新增了状态机建模功能,还实现了框图建模、C Caller模块、子系统设计、控制器仿真等许多服务于控制系统建模的常用功能。诸多新功能将于2023年3月随MWORKS.Sysplorer2023a前瞻版正式上线,小伙伴们敬请期待~

网站文章

  • gauge自动化框架踩坑(三):上下文

    gauge自动化框架踩坑(三):上下文

    一. 模板项目姑且将模板中的项目成为为模板项目。上篇文章说过,这是一个关于英语中元音的项目,统计单词中包含几个元音二. Contexts注意到,example.spec文件中有下面几行,第11行的step表示上下文step上下文,官网给出的解释是,一个或多个Context step位于一个spec文件中所有场景的前面。它是执行场景所必须的一个环节,上下文可...

    2024-02-29 11:33:40
  • 【随笔三】一篇文章理清 节流、防抖以及应用场景

    【随笔三】一篇文章理清 节流、防抖以及应用场景

    防抖 和 节流 很多人特别容易把概念混倄,今天,一篇文章教你彻底理清其中的概念及应用场景。 先说共同点 防抖 和 节流 函数都是为了 限制函数的执行频次,从而优化函数触发频率过高导致的响应速度跟不上触...

    2024-02-29 11:33:32
  • UML类图关系与符号简介

    UML类图关系与符号简介

    UML-Unified Model Language 统一建模语言,是在开发阶段,说明、可视化、构建和书写一个面向对象软件的开放方法。统一建模语言(UML)是一种模型化语言。模型大多以图表的方式表现出...

    2024-02-29 11:33:26
  • windows无法格式化u盘_u盘无法格式化怎么办 DOS下u盘格式化方法【详解】

    windows无法格式化u盘_u盘无法格式化怎么办 DOS下u盘格式化方法【详解】

      大家都知道,现在很多人都会使用U盘,但是不知道是因为不当的操作还是其他的原因,导致U盘就无法格式化。,如果在图形化界面格式化不了的,可以在DOS下进行格式化,DOS下一般情况都可以被格式化掉,下面...

    2024-02-29 11:32:57
  • Go 交叉编译

    Go交叉编译Go在1.5版本中改进了对交叉编译的支持,包括统一了编译器、链接器等。使得跨平台交叉编译相当简单,一条命令即能轻松搞定。

    2024-02-29 11:32:51
  • 大数据开发:Hadoop入门学习路线

    大数据开发:Hadoop入门学习路线

    学习大数据,核心重点就是对于专业技术的掌握,我们判断一个机构的课程是否具备足够的专业度,也往往是从这些核心技术体系的课程规划来看的。以Hadoop来说,这是大数据学习当中必不可少的部分。今天大数据学习...

    2024-02-29 11:32:46
  • 力扣707设计链表

    力扣707设计链表

    你可以选择使用单链表或者双链表,设计并实现自己的链表。val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果是双向链表,则还需要属性prev以指示链表中的上一个节点。假设链...

    2024-02-29 11:32:17
  • Java 实现“数据结构”中的字符串模式匹配BF算法、循环队列、链队列、顺序栈、共享栈、链栈

    Java 实现“数据结构”中的字符串模式匹配BF算法、循环队列、链队列、顺序栈、共享栈、链栈

    概念: 数据结构:所谓数据结构就是存在一定关系的数据元素的集合。data-struct=(D,R),D表示数据元素,例如(a1,a2,a3,…),R表示关系,关系可以为一对一,一对多,多对多,以及相互没映射关系(也可以看做是一种关系)。所以数据结构有按照逻辑关系来则有“集合(没映射关系)”、“线性表(一对一)”、“树(一对多)”、“图(多对多)”。 程序:所谓程...

    2024-02-29 11:32:10
  • 基于Jackson实现API接口数据脱敏

    基于Jackson实现API接口数据脱敏

    Jackson是SpringBoot默认的Json序列化和反序列化库,本文通过使用Jackson的@JsonSerialize注解实现序列化时脱敏操作,通过使用Jackson的@JsonDeserialize注解实现反序列化时脱敏数据检测并丢弃操作。API接口出参(Rsp),敏感数据序列化时脱敏API接口入参(Req),过滤已脱敏的数据,直接丢弃。

    2024-02-29 11:32:05
  • 计算机毕设ssmAndroid的在线投票系统85mgq(开题+源码)

    计算机毕设ssmAndroid的在线投票系统85mgq(开题+源码)

    研究目的: 本研究旨在设计和开发一种高效、安全、易用的Android在线投票系统,解决现有系统存在的问题,并提供一种可行的解决方案。通过该系统,用户可以方便地进行投票操作,管理员可以实时监控投票情况,...

    2024-02-29 11:31:36