状态转移图及编程方法
- 格式:ppt
- 大小:1.44 MB
- 文档页数:2
状态机、状态模式什么是状态机?有限状态机,英⽂翻译是 Finite State Machine,缩写为 FSM,简称为状态机。
状态机有 3 个组成部分:状态(State)、事件(Event)、动作(Action)。
其中,事件也称为转移条件(Transition Condition)。
事件触发状态的转移及动作的执⾏。
不过,动作不是必须的,也可能只转移状态,不执⾏任何动作。
实现状态机的⽅法有多种,⽐较常⽤的有分⽀逻辑法、查表法、状态模式。
我们以⼀个简单的 CD 播放器为例⼦。
这个例⼦⾥⾯只有状态、事件,不包含动作简单CD播放器的按键与按键的功能按键功能[Play/Pause]播放/暂停[Stop]停⽌状态迁移图:状态机实现⽅式⼀:分⽀逻辑法它的核⼼思想是根据状态迁移图,要么先确定状态、要么先确定事件,直译代码。
⽅法分析:对于简单状态机,该法是可以接受的。
但是,对于复杂的状态机,这种实现极易漏写或错写某个状态转移;代码中充斥⼤量if-else或switch-case 分⽀判断逻辑,可读性和可维护性差。
如下就是先确定事件,然后再在事件内根据状态进⾏状态转移。
1 typedef enum {2 ST_IDLE,3 ST_PLAY,4 ST_PAUSE5 } State;67 typedef enum {8 EV_PLAY_PAUSE,9 EV_STOP10 } Event;1112 State state;1314// 初始化15void initialize() {16 state = ST_IDLE;17 }1819// play or pause20void playOrPause() {21if (state == ST_IDLE) {22 state = ST_PLAY;23 } else if (state == ST_PLAY) {24 state = ST_PAUSE;25 } else if (state == ST_PAUSE) {26 state = ST_PLAY;27 }28 }2930// stop31void stop() {32if (state == ST_PLAY || state == ST_PAUSE) {33 state = ST_IDLE;34 }35 }3637// 事件响应38void onEvent(Event ev) {39switch (ev) {40case EV_PLAY_PAUSE:41 playOrPause();42break;43case EV_STOP:44 stop();45break;46default:47break;48 }49 }状态机实现⽅法⼆:查表法状态机除了⽤状态转移图表⽰外,还可以⽤⼆维表表⽰。
单流程状态转移图的编程1、什么是流程所谓单流程,是指状态转移只可能有一种顺序。
上个模块介绍的台车自动往返的控制过程只有一种顺序:S0→S20→S21→S22→S23→S24→S0,没有其他可能,所以叫单流程。
当然,现实当中并非所有的顺序控制均为一种顺序。
含多种路径的叫分支流程。
本模块即为并联分支流程。
2、单流程状态转移图的编程方法a 状态转移图的编程方法(1)状态的三要素对状态转移图进行编程,不仅是使用STL,RET指令的问题,还要搞清楚状态的特性及要素。
状态转移图中的状态有驱动负载、指定转移目标和指定转移条件三个要素。
其中指定转移目标和指定转移条件是必不可少,而驱动负载则视具体情况,也可能不进行实际的负载驱动。
图5及图6说明了状态转移图和梯形图的对应关系。
其中Y5为其驱动的负载,S21为其转移目标,X3为其转移条件。
图5状态转移图SFC图6状态梯形图STL(2)状态转移图的编程方法步进顺控的编程原则为:先进行负载驱动处理,然后进行状态转移处理。
图5的程序如下:STL S20使用STL指令OUT Y5进行负载驱动处理LD X3转移条件SET X21进行转移处理从程序可看到,负载驱动及转移处理,首先要使用STL指令,这样保证负载驱动和状态转均是在自母线上进行。
状态的转移使用SET指令,但若为向上缓役、向相连的下游转移或向其他流程转移,称为顺序不连续转移,非连续转移不能使用SET指令,而用OUT指令。
如图7所示。
b 状态的开启与关闭及状态转移图执行的特点STL指令的含意是提供一个步进接点,其对应状态的三个要素均在步进接点之后的子母线上实现。
若对应的状态是开启的(即“激活”),则状态的负载驱动和转移才有可能。
若对应状态是关闭的,则负载驱动和状态转移就不可能发生。
因此,除初始状态外,其他所有状态只有在其前一个状态处于激活切转移条件成立时才能开启。
同时一旦下一个状态被“激活”,上一个状态会自动关闭。
从PLC程序的循环扫描执行原理出发,在状态编程程序段落中,所谓“激活”可以理解为该段程序被扫描执行。
第6章状态转移图及编程方法教学目的及要求:通过教学,使学生明确状态的功能和状态转移图所表示的顺序控制过程,熟练掌握选择性分支与汇合、并行性分支与汇合的应用,掌握顺控系统设计的方法和技能。
教学方式:理论讲解、例题讲解。
演示操作:利用FX2N-64MR PLC实现对自动送料小车的控制。
重点难点:掌握单流程状态图的编程、选择性及并行性分支与汇合的编程。
问题的提出:状态转移图是使用什么语言编程,它与梯形图语言有什么区别。
6.1 状态转移图及状态的功能6.1.1 状态转移图用梯形图或指令表方式编程固然广为电气技术人员接受,但对于一个复杂的控制系统,尤其是顺序控制系统,由于内部的联锁、互动关系极其复杂,其梯形图往往长达数百行。
另外,在梯形图上如果不加注释,这种梯形图的可读性也会大大降低。
为了解决这个问题,近年来,许多新生产的PLC在梯形图语言之外加上了符合IEC1131—3标准的SFC(Sequential Function Chart)语言,用于编制复杂的顺控程序。
IEC1131—3中定义的SFC语言是一种通用的流程图语言。
三菱的小型PLC在基本逻辑指令之外增加了两条简单的步进顺控指令(STL,意为Step Ladder;RET,意为返回),同时辅之以大量状态元件,就可以使用状态转移图方式编程。
称为“状态”的软元件是构成状态转移图的基本元素。
FX2N共有1000个状态元件,其分类、编号、数量及用途如表6-1所示。
表6-1 FX2N的状态元件a状态的编号必须在指定范围选择。
b各状态元件的触点,在PLC内部可自由使用,次数不限。
c在不用步进顺控指令时,状态元件可作为辅助继电器在程序中使用。
d通过参数设置,可改变一般状态元件和掉电保持状态元件的地址分配。
6.1.2 FX2N系列PLC的步进顺控指令FX2N系列PLC的步进指令有两条:步进接点指令STL和步进返回指令RET。
1、STL:步进接点指令(梯形图符号为)STL指令的意义为激活某个状态。