欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PLC状态机编程第四篇-历史状态处理

程序员文章站 2022-04-15 15:41:42
今天我们接着上次的控制任务,加入历史状态,这个任务会比较复杂,象这样的任务我们倾向于自动生成PLC程序,自己写容易出错。但为了演示,我们可以尝试一下。言归正传,下面是我们的控制任务。 控制任务 这次的任务是基于上次的,增加的一个急停按钮,当按下EMStop急停按钮后,设备马上停止,等排除故障后,希望 ......

今天我们接着上次的控制任务,加入历史状态,这个任务会比较复杂,象这样的任务我们倾向于自动生成PLC程序,自己写容易出错。但为了演示,我们可以尝试一下。言归正传,下面是我们的控制任务。

控制任务

这次的任务是基于上次的,增加的一个急停按钮,当按下EMStop急停按钮后,设备马上停止,等排除故障后,希望设备从故障前一刻的状态接着运行,针对这样的任务,我们需要引入历史状态。

下面是这次任务的状态机。

PLC状态机编程第四篇-历史状态处理

PLC状态机编程第四篇-历史状态处理

Logic状态机中,多了一个Action子状态,Action状态中,包含了逻辑控制。Action状态中,多了一个H字母,它表示Action状态是历史状态,状态从Action转移到Alarm后,当再次进Action状态时,就不会从OnLeftPos默认状态开始,而是从上次离开时的状态开始。下面是SCL程序。

控制程序

PLC状态机编程第四篇-历史状态处理

PLC状态机编程第四篇-历史状态处理

 

有几点要注意:

  1. Logic状态中包含了一个Action状态,包含的状态用嵌套的case表达,第29行。
  2. 转移到Alarm状态后,根据需要,有些需设置false,有些不需要设置为false,看工程的需要,69-72行。
  3. 如果这里我们不需要历史状态,那么从Action状态转移到Alarm状态后,需要把curStateLogicAction的值设置为LogicActionOnLeftPos,表示从默认状态开始, 加第68行。

 

状态机稍复杂,程序写起来比较费劲。下一次我们讨论从状态机自动生成程序。