状态机的一般概念

过去我在学习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代码,怎么样?听起来很强大吧。

转载于:https://www.cnblogs.com/TomDing/p/7041134.html

PLC状态机编程第一篇-状态机介绍相关推荐

  1. Base64系列第一篇 Base64介绍

    本文地址:http://blog.csdn.net/morewindows/article/details/11871429转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/Mo ...

  2. Windows界面编程第一篇 位图背景与位图画刷

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列主要讲解Wi ...

  3. Redis入门第一篇【介绍、安装】

    tags: Redis title: Redis入门第一篇[介绍.安装] 为什么要用Redis 我对Redis的简单理解:Redis相信学JavaEE的同学都听过这个名词,它是一个缓存数据库. Red ...

  4. GraphQL实战-第一篇-GraphQL介绍

    GraphQL实战-第一篇-GraphQL介绍 GraphQL的前世今生 Facebook的业务线有移动端,PC端和其它端,不同的场景下对一个资源所需要的信息是不同的.如移动端需要User的a.b.c ...

  5. Go实现Raft第一篇:介绍

    女主宣言 今天小编为大家分享一篇关于Golang实现Raft的文章,本篇文章为系列中的第一篇,对Raft进行一个全面的介绍,为后面进行Raft的实现打基础.希望能对大家有所帮助. PS:丰富的一线技术 ...

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

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

  7. jquery easyUI第一篇【介绍、入门、使用常用的组件】

    tags: web前端库 什么是easyUI 我们可以看官方对easyUI的介绍: easyUI就是一个在Jquery的基础上封装了一些组件....我们在编写页面的时候,就可以直接使用这些组件...非 ...

  8. FL studio 20简易入门教程 -- 第一篇 -- 软件介绍与初始化

    软件介绍与初始化 文章目录 软件介绍与初始化 前言 一.素材的加载与导入 1. 初始化声卡 2. 导入软音源 3. 加载音效素材 二.基本使用操作 1.midi键盘连接 2.导入及导出 (1)导入素材 ...

  9. Lucene第一篇【介绍Lucene、快速入门】

    tags: Lucene 什么是Lucene?? Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包,由资深全文检索专家Doug Cutting所撰写,它是一个全文检索引擎的 ...

  10. springCloud 学习第一篇(介绍以及Rest 学习:服务者 与消费者 环境搭建)

    什么是SpringCloud? springCloud ,基于springBoot 提供了一套微服务解决方案,包括服务注册与发现,配置中心全链路监控,服务网关,负载均衡,熔断器等组件,除了基于netF ...

最新文章

  1. 生产环境WEB服务管理脚本之日志检测脚本
  2. Python中使用librosa包进行mfcc特征参数提取
  3. javacript实现不被浏览器拦截打开新窗口
  4. docker网络之macvlan
  5. 5. Binary Tree Postorder Traversal
  6. PythonOpenCV--Rtrees随机森林
  7. 【POJ - 2236】Wireless Network (并查集)
  8. ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)解决办法
  9. 网络技术独立的×××-SDN和三个问题
  10. 7种超粗体字体(带有示例)
  11. Java当中native方法的详解
  12. 股票:巧用均线多头排列选股
  13. win10误删的注册表能还原吗_win10怎么还原注册表_win10注册表恢复初始的图文教程...
  14. 会玩计算机游戏英语,英语口语表达:他整天就只会玩计算机游戏
  15. java获取微信token_Java微信公众平台开发(六)--微信开发中的token获取
  16. 教室网站php代码下载,资源教室_资源教室系统
  17. 【C++基础知识】常成员函数,常引用
  18. android中的长度单位介绍(dp,sp,px,in,pt,mm)
  19. 申宝策略-船舶军工表现靓丽
  20. Snipaste截图界大咖

热门文章

  1. Problem C: 车牌限行
  2. 解决小程序图片上传问题
  3. 使用PCtoLCD2002字模提取软件
  4. 玉溪第一座智能变电站,造国际一流智能配电网,机器人来运维
  5. debian 文件夹中文件大小_linux 查看文件和文件夹大小
  6. python 安装 pyHook
  7. jsmind 线条_使用jsMind显示思维导图
  8. 如何彻底卸载3dmax2020_3DMax如何才能彻底卸载干净啊?
  9. 全志A40I tina系统蓝牙wifi调试方法
  10. Keil5各个版本的下载地址