西门子博图编程:PLC状态机(一)状态机介绍

搞PLC编程多年,一直不知道状态机,学习matlab后,发现状态机编程异常方便,过去很多编程时的疑惑豁然开朗起来。
下面是用状态机描述的控制任务。
在这里插入图片描述
这个状态机较简单,那如何在STL中把它描述出来呢? 这里我们选择用JL指令…,我就直接上代码了,一看便知。但JL程序只能用来表示单步状态,遇到并行状态就处理不了了…,后面用ST语言来描述更复杂的状态机。

       L     #state     //  把#state的值载入累加器
       JL    rng1       // 如果累加器的值,大于4,也就是说,跳转分支不包含下面的分支,
                           就跳转到rng1,说明出错。其实这条语句相当于 else 语句
       JU    st0    // 当累加器的值为0时, 走这个分支
       JU    st1    // 当累加器的值为1时, 走这个分支
       JU    st2    // 当累加器的值为2时, 走这个分支
       JU    st3    // 当累加器的值为3时, 走这个分支
       JU    st4    // 当累加器的值为4时, 走这个分支
rng1: SET
      S     #error
      BEU
st0:  L     1                      // 这个 1 就是下个状态。
      A     #transition01         // 这个转移条件满足,状态将由state0,转移到 state1,
                                     下面的流程类似。。。
      JC    next
      JU    ovr
st1:  L     2
      A     #transition12
      JC    next
      L     3
      A     #transition13
      JC    next
      JU    ovr
st2:  L     4
      A     #transition24
      JC    next
      JU    over
st3:  L     1
      A     #transition31
      JC    next
      JU    ovr
st4:  L     3
      A     #transition43
      JC    next
      JU    ovr
next: T     #state
over: NOP 0

状态机的一般概念
过去我在学习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是沿触发。。
状态机的概念介绍完了,对于复杂的状态机,手写起来感觉很啰嗦,所以呢,后面通过matlab自动把状态机转译成SCL代码,怎么样?听起来很强大吧。

西门子(S7-200)PLC种常用于工业自动化控制系统的可编程逻辑控制器。它以其稳定性、可靠性以及广泛应用于电力、能源、交通、化工等领域而闻名。下面是西门子PLC指令的些常见类型与应用: 1. 位与字指令:用于读取和操作位和字数据,包括输入输出模块、中继模块、计数器和定时器等设备的输入输出信号的读取。 2. 运算指令:包括加减乘除、与或非运算等,用于处理数字数据的简单逻辑运算。 3. 移位指令:用于对位或字数据进行位移操作,如左移、右移等,常应用于数据处理和位操作。 4. 比较指令:用于比较两个数据的大小关系,判断是否相等、大于或小于,常用于判断逻辑条件以及流程控制。 5. 计数和定时指令:包括累计计数、累计定时、单位累计计数、单位累计定时等功能,常用于对事件进行计数和时间间隔的控制。 6. 跳转指令:用于控制程序的跳转和循环执行,包括条件跳转、循环跳转、子程序跳转等。 7. 数据传输指令:用于将数据从个存储区域传输到另个存储区域,常用于不同设备之间的数据传输与共享。 总结来说,西门子PLC指令大全涵盖了位与字指令、运算指令、移位指令、比较指令、计数和定时指令、跳转指令以及数据传输指令等多种类型,可以方便地对不同设备和信号进行读取、操作、判断和控制。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值