状态机的一般概念

过去我在学习PLC编程时,看的大部分书仅仅停留在软件的操作上,没有真正讲述如何组织程序,这里我们讲一个通用的描述控制算法的方法,就是状态机,和SFC很类似,其实SFC也是源于状态机啦。状态机是UML中的概念,在嵌入式开发中应用很广,但在PLC编程中基本没有流行。下面是一张用matlab画的状态机,包含了大部分基本元素。它描述的就是启保停电路,经典的控制。。。我们会在这个电路的基础上慢慢扩展。

这个状态机中包含两个状态,分别是Off和On,这两个状态只能有一个是激活的,这和SFC一样。Off状态上带个小箭头的,表示这个系统激活,Off状态就激活,也就是SFC中的初始步。Off状态到On状态中间有两根带方向的转移线,转移线上分别有两个条件。当按下start按钮后,〔start〕条件激活,状态转移至On状态(注意,转移方向是单向的),再按下stop按钮后,〔stop〕条件激活,状态由Off转移到On,从而完成电机的启保停电路,很方便吧。那这样的状态机我们分别用梯形图和ST语言来表示。

很简单吧,用状态机来表示启保停电路,乍一看这么这么复杂啊,传统的很简单。。如果控制任务复杂,那么它的优势就来了,不容易出错,程序容易理解。这里有几点要注意:

  1. 需要给它一个初始步,这里初始步是Off,startupSet是在OB100中的,PLC启动是置“1",保证Off步能激活。
  2. 每个步的复位条件必需用上升沿,否则就不行了,原理自己想想。。

下面我们再这个状态机上扩展一键启停电路,传统的程序基本是经验法,我到现在都记不住,状态机吗,就很方便了。

我们对这个状态机作简要说明,我们前面的状态机只能有一个激活步,这里的两个带虚线框的步可以同时处于激活状态,这是并行结构,为啥要用并行呢,因为一键启停要用到沿触发,左边的的那个步主要是用来处理next信号生成pNext上升沿的,右边的转移条件全换成pNext。下图是梯形图中的表示方法。

颜色有误差,不过也能分辨出来。这段程序写在了FB块中,pNext是个块外传进来的沿触发信号。

下图是用西门子SCL写的。

在图右边的scl写的状态机,左边调用了它。

这个状态机用一个case语句表示,共两个分支,分别是#offState、#onState,每个分支里有一个if语句,用来切换状态的,#nextTrig是沿触发。。

https://github.com/drongh/siemensPlcCodes,最后一例的代码,我放github上了,需要TIA博途V14SP1打开。

状态机的概念基本写完了,对于复杂的状态机,手写起来感觉很啰嗦,所以呢,我们下次通过matlab自动把状态机转译成SCL代码,怎么样?听起来很强大吧。

PLC状态机编程第一篇-状态机介绍的更多相关文章

  1. PLC状态机编程第二篇-负载均衡

    控制任务 大家好,今天我们用状态机描述稍复杂的实例,同时用LAD和ST语言写状态机.我们的控制任务如下: 真空泵A和真空泵B, 按下启动按钮后, 泵A启动, 3秒后泵B也启动, 此时泵A仍运行, 当容 ...

  2. python第一篇-------python介绍

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...

  3. webservice第一篇【介绍、Scoket、http调用、wsimport调用】

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...

  4. Spring第一篇【介绍Spring、引入Spring、Spring六大模块】

    前言 前面已经学习了Struts2和Hibernate框架了.接下来学习的是Spring框架-本博文主要是引入Spring框架- Spring介绍 Spring诞生: 创建Spring的目的就是用来替 ...

  5. OpenStack学习系列-----第一篇 OpenStack介绍

    刚开始接触OpenStack,被它所承诺的前景,以及现在业界对它的期望吸引(OpenStack被誉为21世纪的Linux开源社区,可以预见其的发展前景是何其广阔.).怎么说呢,我现在也暂时相信,Ope ...

  6. FFMPEG高级编程第一篇:环境搭建及编译

    前段时间在翻看电脑里面资料时,发现了以前做的在嵌入式硬件上面运行以ffmepg为基础,以嵌入式硬件解码的多媒体播放工作,发现都快忘记完了.今日得闲整理温习了一下ffmpeg在嵌入式上的运用,这里给大家 ...

  7. AWK第一篇------全面介绍

    AWK-文本流编辑器 目录 [隐藏] 1 命令行语法 2 用shell实现调用awk 3 awk语言概要 3.1 记录和字段 3.2 脚本的格式 3.3 行为终止 3.4 注释 3.5 模式 3.6  ...

  8. Activiti第一篇【介绍、配置开发环境、快速入门】

    Activiti介绍 什么是Activiti? Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开 ...

  9. Linux第一篇【介绍、安装Ubuntu、基本目录结构】

    Linux介绍 Linux:不管是不是我们这些学编程的都肯定会听说过这么一个系统,一般地,我们在PC端都是用Windows操作系统,那我们学习Linux操作系统有什么用呢??? 由于我们的JAVAEE ...

随机推荐

  1. C# Label背景透明

    Label背景透明是相对于Label的Parent而言的,如果Label的Parent是一个winform,而这个winform又有一个PictureBox,现在Label放在PictureBox上, ...

  2. mysql关键字执行顺序

    from on join where group by having select distinct union order by 昨天去58面试,之前的java基础和数据结构算法之类的都还可以,最后 ...

  3. JAVA ------ 大牛

    李学凯 :http://blog.csdn.net/qq_27093465/article/details/51750535 码农场:http://www.hankcs.com/program/ 徐刘 ...

  4. css取消a标签在移动端点击时的背景颜色

    一.取消a标签在移动端点击时的蓝色 -webkit-tap-highlight-color: rgba(255, 255, 255, 0);-webkit-user-select: none;-moz ...

  5. 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题

    转自博客http://blog.csdn.net/xd195666916/article/details/5419316,同时感谢博主 今天做了个用hibernate直接执行原生sql的查询,报错No ...

  6. .NET 自动内存管理(垃圾收集GC)

    自动内存管理(垃圾收集GC) 在面向对象的环境里, 要使用资源,必须为响应 的类型分配一定 的内存空间.下面是访问一个资源所需要的几个步骤: 1. 调用中间语言(IL)的newobj 指令.当我们用N ...

  7. ArcGIS for Service中JavaScript预览在内网环境无法使用

    1.问题说明 在使用ArcGIS for Service时经常会遇到一个问题,那就是我们需要对已经发布的服务进行预览,预览时点击对应服务,选择View in中的ArcGIS JavaScript就可在 ...

  8. windows10家庭中文版升级专业版或企业版简单方便的操作方法

    以管理员的身份运行cmd 1 ,升级到专业版输入:slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 输入slmgr.vbs -skms zh.us.to 激活 2, 升 ...

  9. Python基础学习之集合

    集合是一个无序.不重复的数据集合,它的主要作用如下: 去重:把一个列表变成集合,就可以去除重复的内容 关系测试:测试两组数据之间的交集.并集.差集等关系 集合常用的操作: #创建一个数值集合 s=se ...

  10. MyEclipse 相关配置操作、问题处理及快捷键说明

    MyEclipse傻瓜式安装不做介绍,试用期结束后破解操作见博客:MyEclipse 2014 破解补丁及激活步骤 以下为安装完MyEclipse后一般需要进行的一些配置,写来自己参考用.比较简陋,望 ...