PLC状态机编程第三篇-RS信号处理
我们今天简要介绍RS指令在状态机中怎么处理的。有些设备按下停止按钮后,没有马上停止,而是到原点后才停止,那么这种情况在状态机中如何表示呢?我们以案例说明之,下面是我们的控制描述。
控制描述
小车从左位开始,从左向右行使,到达右位后停5秒,然后从右向左运行,到达左位后停3s,继续向右运行。当按下停止按钮后,小车不是马上停止,而是到达左位后才停止。我们假设左边的到位信号位isOnLeftPos,右边的到位信号为isOnRightPos,向左的运行动作为GoLeftPos,向右的运行动作为GoRightPos,启动停止按钮分别为start和stop。
对于这样的控制任务,我们该怎么作呢?难点在于处理stop按钮信号,小车运行中,按下stop按钮,不是马上停止,而是要到达左位后才停止。这里我们用了状态机的并行结构。Signals状态处理stop信号,Logic状态处理逻辑动作。

这一张图是程序的总体,图右侧的OnRightPos和OnLeftPos是方便我们观察左右位的状态,实际使用中可以不用输出。

这张图是实际的控制。左边处理stop信号,右边处理小车控制逻辑。另外这里我们要说明一下命名规则:大写开头的是指各状态,比如OnLeftPos,Signals等等,小写开头的是条件,比如isOnRightPos, stop. 假设小车的当前状态处于GoRightPos,按下stop按钮,Stop的子状态Set就激活,那么〔in(Signals.Stop.Set)]条件满足,但当前状态不在OnLeftPos,没有发生转移,此时小车继续运行,等小车到达OnLeftPos状态时,OnLeftPos状态才开始转移到Idle状态,此时〔in(Logic.Idle)]条件满足,Stop的子状态从Set转移到Reset。
控制程序
这次的控制程序和以前稍有不同,用个并行状态处理stop信号,在第一篇博客中,我们也用一个并行状态处理上升沿问题。整个程序多了一段case,一段描述Signals,一段描述Logic,方法和以前一样,也是比较简单的,等下次我们在此状态机的基础上,介绍完历史状态后,一并写出程序。另外,为了方便,我们以后就用ST语言写了。
PLC状态机编程第三篇-RS信号处理的更多相关文章
- PLC状态机编程第六篇-优化PLC程序生成
还记得第一篇博客中,我们在状态机中手写上升沿来处理有别于传统的一键启停程序,那个手写的上升沿就是优化手段.stateflow状态机是带事件的,事件本身支持上升沿和下降沿等事件,在这里,如果我们选择用事 ...
- PLC状态机编程第五篇-状态机自动生成PLC程序
这篇比较简单了,我就直接上图了,不多废话. 一.选择求解器,一定要选择定步长的. 二.右击Chart状态机,出现图上菜单 三.左边红色的勾选择,选择右侧的菜单,然后点击Generate Code按钮, ...
- PLC状态机编程第四篇-历史状态处理
今天我们接着上次的控制任务,加入历史状态,这个任务会比较复杂,象这样的任务我们倾向于自动生成PLC程序,自己写容易出错.但为了演示,我们可以尝试一下.言归正传,下面是我们的控制任务. 控制任务 这次的 ...
- PLC状态机编程-如何在STL中使用状态机
搞PLC编程多年,一直不知道状态机,学习matlab后,发现状态机编程异常方便,过去很多编程时的疑惑豁然开朗起来.今天跟大家分享一下如何在STL中使用状态机. 下面是用状态机描述的控制任务. 这个状态 ...
- PLC状态机编程第一篇-状态机介绍
状态机的一般概念 过去我在学习PLC编程时,看的大部分书仅仅停留在软件的操作上,没有真正讲述如何组织程序,这里我们讲一个通用的描述控制算法的方法,就是状态机,和SFC很类似,其实SFC也是源于状态机啦 ...
- PLC状态机编程第二篇-负载均衡
控制任务 大家好,今天我们用状态机描述稍复杂的实例,同时用LAD和ST语言写状态机.我们的控制任务如下: 真空泵A和真空泵B, 按下启动按钮后, 泵A启动, 3秒后泵B也启动, 此时泵A仍运行, 当容 ...
- Java Stream函数式编程第三篇:管道流结果处理
一.Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API.在使用的过程中分为三个阶段.在开始本文之前 ...
- 网络编程[第三篇]基于tcp协议实现远程连接
需要用到subprogress模块来远程控制cmd控制台程序来得到控制台的输出信息 一.服务端 —— 控制输出信息 import socket import subprocess #socket实例化 ...
- Windows界面编程第五篇 静态控件背景透明化(13篇)
上一篇<Windows界面编程第三篇 异形窗体 普通版>和<Windows界面编程第四篇异形窗体 高富帅版>介绍了异形窗口(异形窗体)的创建,并总结出了异形窗口的“三要素”: ...
随机推荐
- OC与JS交互之UIWebView
随着H5的强大,hybrid app已经成为当前互联网的大方向,单纯的native app和web app在某些方面显得就很劣势.关于H5的发展史,这里有一篇文章推荐给大家,今天我们来学习最基础的基于 ...
- 深入理解java虚拟机阅读笔记(1)运行时数据区域
java虚拟机所管理的内存区域主要分为方法区.堆:虚拟机栈.本地方法栈.程序计数器,如图: 1.程序计数器是当前线程所执行的字节码行号指示器,用以记录当前指令执行的位置.程序计数器是线程私有的,每个线 ...
- BZOJ1563: [NOI2009]诗人小G(决策单调性 前缀和 dp)
题意 题目链接 Sol 很显然的一个dp方程 \(f_i = min(f_j + (sum_i - sum_j - 1 - L)^P)\) 其中\(sum_i = \sum_{j = 1}^i len ...
- AngularJS 指令解析(二)
AngularJS 指令解析(二) 第一篇我们讲过了作用域(scope)这块内容,现在我们进入正题,讲AngularJS的指令. 什么是指令? 这里我们引用官方的一句话: Custom directi ...
- es6-正则
RegExp构造函数 在ES5中,RegExp构造函数的参数有两种情况. 第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag). var regex = new RegExp( ...
- jquery-ui sortable 排序
https://blog.csdn.net/u013066244/article/details/51954198 <link ref="stylesheet" href ...
- Android - 页面返回上一页面的三种方式
今年刚刚跳槽到了新公司,也开始转型做Android,由此开始Android的学习历程. 最近在解很多UI的bug,在解bug过程中,总结了在UI的实现过程中,页面返回上一页面的几种实现方式. 一. 自 ...
- Struts2_HelloWorld_3
struts.xml的配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- http相关文章目录
四种常见的 POST 提交数据方式 https://imququ.com/post/four-ways-to-post-data-in-http.html
- Redis 基础概念和命令
Redis 是什么 Redis是一种基于键值对(key-value)的NoSQL数据库. 为什么使用Redis 速度快 Redis的时间颗粒度一般是微秒,慢查询的默认值是10 000微秒,即10毫秒. ...