PLC状态机编程第四篇-历史状态处理
程序员文章站
2022-07-09 21:02:21
今天我们接着上次的控制任务,加入历史状态,这个任务会比较复杂,象这样的任务我们倾向于自动生成PLC程序,自己写容易出错。但为了演示,我们可以尝试一下。言归正传,下面是我们的控制任务。 控制任务 这次的任务是基于上次的,增加的一个急停按钮,当按下EMStop急停按钮后,设备马上停止,等排除故障后,希望 ......
今天我们接着上次的控制任务,加入历史状态,这个任务会比较复杂,象这样的任务我们倾向于自动生成PLC程序,自己写容易出错。但为了演示,我们可以尝试一下。言归正传,下面是我们的控制任务。
控制任务
这次的任务是基于上次的,增加的一个急停按钮,当按下EMStop急停按钮后,设备马上停止,等排除故障后,希望设备从故障前一刻的状态接着运行,针对这样的任务,我们需要引入历史状态。
下面是这次任务的状态机。
Logic状态机中,多了一个Action子状态,Action状态中,包含了逻辑控制。Action状态中,多了一个H字母,它表示Action状态是历史状态,状态从Action转移到Alarm后,当再次进Action状态时,就不会从OnLeftPos默认状态开始,而是从上次离开时的状态开始。下面是SCL程序。
控制程序
有几点要注意:
- Logic状态中包含了一个Action状态,包含的状态用嵌套的case表达,第29行。
- 转移到Alarm状态后,根据需要,有些需设置false,有些不需要设置为false,看工程的需要,69-72行。
- 如果这里我们不需要历史状态,那么从Action状态转移到Alarm状态后,需要把curStateLogicAction的值设置为LogicActionOnLeftPos,表示从默认状态开始, 加第68行。
状态机稍复杂,程序写起来比较费劲。下一次我们讨论从状态机自动生成程序。