状态机作为对事物运行规则的一种抽象方法,在实际工作开发中应用非常广泛,它是一种用来进行对象行为建模的工具,相对于常规建模来说,状态机和流程图本身具有使用性强、可读和易理解的特点,可以将复杂的逻辑问题变得清晰与简单。

本文主要介绍Modelica标准库v3.2.1中的StateGraph库及其应用。本文所有的操作都是在MWorks.Sysplorer操作下进行,其他支持Modelica的软件也可完成本文中的操作建模部分。

状态机基础概念

在第一次听到“状态机”的时候,相信大家都是有点模糊的,因此在本文开始需要首先介绍一个知识点“什么叫状态机?”。

简单来说,状态机不是一个实际的机器设备,而是一种数学模型,它的全称为有限状态自动机(Finite State Machine,简写FSM)。

FSM是指一个对象有有限个状态,每一时刻该对象都处在其提前定义好的一种或多种状态中,同时每个状态都需要去完成某些特定的事情,在完成特定时动作后或在外界的控制下转移到另外一种对象。生活中有很多状态机例子,下图为开关门例子,门开着的时候说Welcome,关门的时候说thank you。

图1:开关门例子

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

  • 状态(State):一个状态机中至少需要包含2个状态,如上述例子包含“Opened”和 “Closed”两个状态

  • 事件(Event):事件就是执行某个动作/操作的指令或条件,上述例子中读取到“开门”和“关门”信号就是事件

  • 动作(Action):动作是事件发生后要执行的动作/指令,如事件是开门信号,则动作为开门和说welcome

  • 转移(Transition):转移为从一个状态变化为另外一个状态,如开门的过程,即从“Closed”到“Opened”过程即为一种转移

相信大家也对状态机的基础知识有了一些了解,那么接下去我们来了解下MWorks/Modelica中的StateGraph标准库。

Modelica的StateGraph

下图为Modelica中的StateGraph标准库,其模型库结构层次较为直观,从上到下依次为:

图2:StateGraph模型库结构

  • UsersGuide:包含用户指导书和版本说明

  • Examples:模型例子,建议从这一层开始学习这个模型库

  • Interfaces:包含状态接口

  • InitialStep:初始化步骤,即在仿真开始时其状态为true

  • InitialStepWithSignal:带输入信号的初始化步骤,这个模块与InitialStep的区别在于,初始化步骤仅在输入信号为true时,其模块才为true

  • Step:该模块可用于代表状态

  • StepWithSignal:该模块与Step类似,与Step的区别在于该模块带有用来描述模块的激活状态的输出

  • Transition:转移模块,该模块可根据设置的等待时间,将状态转移至下一状态,如等待时间设置为3s,则在上一个状态持续3s后,转移至下一个状态,若设置为0s,则直接转移状态

  • TransitionWithSignal:带有输入信号的转移模块,与Transition模块相比,其多了一个判断条件,当且仅当等待时间达到规定时间和输入信号为true时,状态转移至下一状态

  • Alternative:该模块表示同一时刻,相连的状态有且仅只有一个为true

  • Parallel:并行事件模块,该模块可以允许2个或者2个以上的状态同时处于激活

  • StateGraphRoot:状态终端,可记录模型每时刻的状态激活个数等

  • Temporary:包含一些例子中使用的其他组件,如函数anyTrue,allTrue以及显示数字组件

Examples

下面将结合几个StateGraph自带的例子加深模型的认识,如下为FirstExample:

图3:左图:模型示意图   右图:仿真结果

该状态机包含2个状态,1个初始化状态,1个执行状态。包含2个转移,能够让状态在initialStep和step之间转移,initialStep状态转移为step状态的条件为等待时间达到1s,从step通过transition2转移为initialStep状态的条件为等待时间达到1s。

因此该状态机周期为2s,initialStep和step各会处于激活状态1s。

► 各状态的激活情况如下图

图4:initialStep和step状态激活仿真结果

如前介绍,转移模块(transition)除了只根据状态持续时间外,也可以根据输入信号的true/false来激活状态的转移,比如将上述模型的transition2改为带有输入信号接口的transitionWithSignal:

图5:上图:仿真模型  下图:仿真结果

将输入信号改为false,也就是说当状态到step后,不会再转移为initialStep,如此设置后仿真结果为在1s后,一直处于step状态。

图6:图5模型的模型的仿真结果

同时可以在这模型基础上做一些扩展,如在step激活的情况下,x开始积分, 同时将状态转移的条件改为当x大于等于0.5时,从step转移为initialStep。

在文本区域输入以下内容,前面部分表示step激活下,x进行积分,否则不积分,同时step不激活后x重新等于。

图7:左图:StateGraph模型  右图:文本区域增加部分

完成上述操作后则进行再一次仿真,仿真结果为

图8:仿真结果

图9:step激活状态和x大小

在实际应用过程中,在某一状态激活中,执行的操作非常的复杂,可以根据自己的应用场景进行试验。

Parallel和Alternative

另外再介绍组件功能Parallel和Alternative,Parallel为同时激活若干个状态,Alternative同一时刻仅激活1个状态,以StateGraph中的例子ExecutionPaths进行介绍。

该模型包含8个状态(从step0至step6),1个Parallel组件和1个Alternative组件,step3、step4和step4a通过Alternative组件连接,step1和step2-step5通过Parallel连接:

图10

图 10:仿真结果可以观测step1、step2、step3和step5

图11:step1、step2、step3和step5激活结果

在step2、step3和step5相互转移的时候,由于step1与这几个状态是并行,因此step1一直处于激活状态,并跟step5一起通过transition2转移至step6。

实例应用 

上章节通过结合Examples中的例子简单的介绍了StateGraph组件和功能,但是这些例子都是别人做的,那么接下我们自己来做一个简单的例子。

在日常生活中,其实有很多类似的逻辑应用,比如开头介绍的开关门,这里将根据生活中的十字路口红绿灯进行搭建一个简单的模型例子。

► 场景为某十字路口交通灯转移,周期为20秒

  • 南北向禁行时,红灯亮起并保持10秒,同时东西向通行,绿灯亮起,并只保持7秒,7秒后,黄灯亮起保持3秒

  • 东西向禁行时,红灯亮起并保持10秒,同时南北向通行,绿灯亮起,并只保持7秒,7秒后,黄灯亮起保持3秒

  • 车辆在看到绿灯时,以1m/s的速度行驶,在看到黄灯和红灯后立马停止(假设不考虑减速过程和反应时间)

首先确认需要确认的是需要描述两个方向上的交通灯状态,那么就需要6个状态,分别描述2个交通灯的红黄绿状态。为了描述南北方向红灯与东西方向的黄绿同时亮起以及转移为东西方向红灯与南北方向的黄绿状态,则需要2个Parallel模块和1个Alternative。一个方向的交通灯的模型如下所示(也有其他建模的方法,这里仅作为例子)。

图12:红绿灯组件结构

需要注意的是这里的yellow和green属于同一方向交通灯,red为另外方向的交通灯。为了使得跟实际的交通灯颜色一致,因此在文本区域引入3个布尔变量,其表征对应颜色的状态是否亮起,同时在文本区域最下方annotation加入颜色转移选项。

图13:引入三色的布尔变量   图14:增加组件的颜色变化部分

将上面建好的红绿灯模型以拖拽连接方式连成下图,其中NS和WE是上述建立的红绿灯模型(见图11)。

图15:交通灯模型

这里需要在文本区域对t进行设置,t为跟时间相关的变量,值域为0-20,因此需要在文本区域对t进行描述。

仿真结果如下图动画,在0-7秒时,南北通行,东西禁行,7-10秒南北的绿灯变为黄灯,车辆停止,10秒-17秒东西通行,南北禁行。

总结 

本文简单介绍了StateGraph模型库,同时以StateGraph为基础做了十字路口红绿灯交通的例子。感兴趣可以下载MWorks或者其他Modelica语言软件进行相关操作。

StateGraph模型库还有很多内容没有深入讲解,比如接口定义、组件的具体实现原理等,这些大家可以在其他时间进行研究StateGraph,也可以与我们进行沟通交流。

原文链接:Modelica技术干货 | 状态机教程状态机作为对事物运行规则的一种抽象方法,在实际工作开发中应用非常广泛。https://mp.weixin.qq.com/s/EYA7lDjFubnTx4GXo7YxFw

Modelica技术教程 | 状态机教程相关推荐

  1. 计算机办公实用技能项目实践教程,计算机常用办公软件应用/21世纪计算机科学与技术实践型教程...

    本教材根据多年的教学经验和学生的特点,循序渐进地介绍办公软件Office2007的操作与使用方法,内容全面,文字阐述清楚,注重理论与实践操作的紧密结合. 全书分为4章,第1章介绍Word2007字处理 ...

  2. 大学计算机应用技术基础,大学计算机应用技术基础实践教程(Windows7+Office2010/21世纪高等学校计算机规划教材...

    <大学计算机应用技术基础实践教程(Windows7+Office2010/21世纪高等学校计算机规划教材>是<大学计算机应用技术基础教程>的配套实验教材,是对教学内容的必要补充 ...

  3. 计算机硬件实验教程pdf,计算机硬件技术基础实验教程答案(重庆大学)

    计算机硬件技术基础实验教程答案(重庆大学) 计算机硬件技术基础实验教程答案 实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 ...

  4. java实验指导答案华软_Java核心编程技术实验指导教程

    软件工程类 Java核心编程技术实验指导教程 作者:张屹, 蔡木生 所属类别:新世纪应用型高等教育软件专业系列规划教材 出版时间:2010年10月 ISBN:978-7-5611-5839-5前言 本 ...

  5. 对计算机网络教程的计划,计算机网络技术与应教程教学计划14.doc

    计算机网络技术与应教程教学计划14 百色市财经职业技术学校 百色市民族旅游学校 授课计划表 授课专业: 计算机 授课名称:计算机网络技术与应用教程 授课教师: 卢佳锐 教务负责人: 何堂飞 学校负责人 ...

  6. java ee框架技术进阶式教程_《JavaEE框架技术进阶式教程》新版任务式教案

    <JavaEE框架技术进阶式教程>新版任务式教案 第一阶段 教学单元名称授课教师赵彦授课班级 入门阶段 JavaEE概述 学时教学地点 2 207多媒体 第 1单元 软件日语 091 授课 ...

  7. 全国泰州市专业技术人员计算机考试,泰州市专业技术人员实用教程试题及答案(92分)...

    <泰州市专业技术人员实用教程试题及答案(92分)>由会员分享,可在线阅读,更多相关<泰州市专业技术人员实用教程试题及答案(92分)(8页珍藏版)>请在人人文库网上搜索. 1.泰 ...

  8. matlab仿真技术与应用 pdf,《MATLAB仿真技术与应用教程》.pdf

    MATLAB仿真技术与 应用教程 钟麟 王峰 主编 内容简介 本书基于当前最流行的 MATLAB6.5 版本进行编写,通过大量的实例对 MATLAB 在电子通信方面的知识进行了全面的论述.全书遵照由浅 ...

  9. Python 并行编程教程 | Lynda教程 中文字幕

    Python 并行编程教程 | Lynda教程 中文字幕 Python Parallel Programming Solutions 课程ID: 604237 时长: 4.0小时 所属类别:Pytho ...

  10. Vue.js 教程---菜鸟教程

    文章目录 教程 安装 起步 模板语法 插值 指令 用户输入 过滤器 缩写 条件语句 循环语句 计算属性 监听属性 样式绑定 事件处理器 表单 组件 组件 - 自定义事件 自定义指令 钩子 路由( vu ...

最新文章

  1. iOS 开发 高级:使用 宏定义macros (#,##,...,__VA_ARGS_)
  2. BZOJ-1013-球形空间产生器sphere
  3. java的Comparator和Comparable
  4. python观察日志(part16)--收集关键词参数
  5. TCP/IP编程之SO_REUSEADDR和SO_REUSEPORT套接字选项
  6. Markdown编辑器基本语法
  7. mysql id div 1000000_Mysql数据自动ID编号,如何解决?
  8. C语言中188 10取模等于多少,C语言编程:任取x为十进制整数,编程将x转换成对应的八进制数后输出。...
  9. 蓝桥杯ALGO-125算法训练 王、后传说(回溯、递归)
  10. 黑马python在线培训
  11. ftp常用命令使用方法
  12. 2018服务商口碑榜Top50(3月)重磅出炉
  13. JAMF的NetBoot/SUS Appliance
  14. [分享] 《步步为营封 Win7》--skyfree
  15. 今天,我和C开始交往了
  16. 用什么办法可以解决失眠?
  17. Mysql关于主键自增后的插入语句编写
  18. 广告监测系统如何进行广告舆情监测?
  19. read 系统调用剖析
  20. STM8L051 同时使用RTC和USART通信

热门文章

  1. 最新服务器处理器天梯,服务器CPU性能排行榜天梯图(双路/三路/四路)
  2. win10系统ltsc和服务器版哪个好,win10哪个版本最稳定流畅
  3. sht20中写用户寄存器_谁用过sht20这块温湿度传感器,有调通的程序分享下吧
  4. 吉林大学邮箱smtp服务器,吉林大学邮件系统成功案例-彩讯Richmail邮件系统,致力于互联网行业软件的开发和应用12年....
  5. LS1028使用原生RGMII软件修改方案
  6. 国际象棋渲染测试软件,C4D结合Octane Render渲染器制作三维国际象棋建模渲染教程 含中英文字幕...
  7. yshon对讲机如何调频率_对讲机频率怎么调?四步教你给对讲机调频
  8. objectc foundation class hierachy
  9. 【机器学习】21个机器学习面试问答
  10. 给宝宝做一个cocos免费游戏-故事和开始界面