首页 理论教育 PAC编程基础教程:PhaseManager

PAC编程基础教程:PhaseManager

时间:2023-10-26 理论教育 版权反馈
【摘要】:PSC指令的执行不但退出当前状态例程,并令退出的状态例程静止,即复位所有的非保持型指令。图16-13 Running例程的梯形逻辑图16-14 执行启动命令的梯形逻辑编辑在预状态例程中的这个梯级,被连续扫描,一旦梯级条件成立,PCMD指令执行,Start命令发出,进入Running状态例程,可以测试一下生产过程。

PAC编程基础教程:PhaseManager

下面我们用一个惯用的简单例子来经历编程的整个过程。用4个轮流闪烁的灯来模拟某设备的4个工作过程,令每个灯闪烁20s后完成一个工作过程,转入下一个状态进程。

在Running状态例程是专门用来编写生产过程的,按照灯闪烁的模拟过程,编写如图16-13所示的梯形逻辑,用自复位计时器Timer_Phase_RUN产生20s的周期时间,计数器Counter_Phase_RUN计数且作为指针,运用先前创建的Add_On指令FLASH完成灯的闪烁动作。当计数器计数4次,完成位置位,模拟了生产过程一个周期的完成。

计数器的完成位作为梯级条件,执行PSC指令,PSC指令是专用来退出状态例程的,要求编写在每个状态例程的最后一个梯级,以保证完整地执行整个状态例程。PSC指令的执行不但退出当前状态例程,并令退出的状态例程静止,即复位所有的非保持型指令。这个例程的静止并不能将计数器指针复位,如不进行相应的处理,一旦执行Start命令进入新的工作周期,计数器的完成位会立即执行PSC指令,刚进入的Running状态例程将迅速退出。归属于下一个工作周期的启动准备工作,理应在Resetting状态例程中解决计数器复位这个问题,所以在这个例程中暂不做处理。

从状态模块可以看出,Running状态例程的启动,需要从Idle的预状态执行Start命令才能进入。在预状态例程中编写如图16-14所示的梯形逻辑。PCMD是设备阶段管理的命令指令,借助于这条指令的执行,可以发送Start、Hold、Restart、Stop、Abort和Reset等命令,这些我们在后面都会用到。

PCMD指令参数Result是一个双整字,用来记录本条指令执行的结果,其编码代号说明了某种执行状态,结果为0表示指令成功执行。如果你看到的Result数据标签中显示的不是0而是24577,代码24577表示命令执行无效,这并不表明命令没有执行成功,也许你编制的命令指令PCMD没有严格地确保只执行一次,在进入Running状态例程之后,由于梯级条件依然存在,即使是你认为的短暂的时间(如按下后释放),命令指令又被执行了多次,由于已经不在合理的状态例程进程中,命令执行自然是无效的,只有在Idle预状态时执行Start的命令才是合理的状态进程。如果你希望用这个执行代码的结果来证实命令确被执行,并用作别处的依据,请考虑以上原因,或采用ONS指令予以限制。

978-7-111-36030-8-Chapter16-13.jpg

图16-13 Running例程的梯形逻辑

978-7-111-36030-8-Chapter16-14.jpg

图16-14 执行启动命令的梯形逻辑

编辑在预状态例程中的这个梯级,被连续扫描,一旦梯级条件成立,PCMD指令执行,Start命令发出,进入Running状态例程,可以测试一下生产过程。Running状态例程中,应该编制所有的生产工艺过程的梯形逻辑,本例中是4个灯轮流闪烁一遍。当Running状态例程完成整个工艺过程,PCS指令执行,将进入预状态Complete等待下一个状态例程。从状态模块上的进程可以看出,下一个状态例程是Resetting状态例程。

至此,尚未完成整个的工作周期,在预状态例程中,还要编写一条从预状态Complete进入状态例程Resetting的命令,如图16-15所示。

978-7-111-36030-8-Chapter16-15.jpg

图16-15 执行复位命令的梯级逻辑

当梯级条件成立,命令指令执行Reset的结果,进入Resetting状态例程中,此为进入正常工作进程的必由之路。在Resetting状态例程中,主要编写生产工艺过程进入的准备工作的梯级逻辑,我们模拟一个准备工作过程,编写梯形逻辑如图16-16所示。

978-7-111-36030-8-Chapter16-16.jpg

图16-16 准备工作的梯形逻辑

首先,给作为生产工艺进程指针的计数器Counter_Phase_RUN复位,以便进入运行例程后将从头开始工作。然后用一个延时10s的计时器模拟准备工作所需要花费的时间,生产过程的准备不仅仅是电器设备状态的清除或预设,有的机械设备也可能需要回位,所以一般都需要一些延时时间。等延时10s到,计时器Reset_Delay完成位提供的梯级条件引起PSC指令的执行,退出当前状态例程,并令所有梯级静止,即所有非保持型指令复位,这会将计时器复位,不必担心下次进入Resetting状态例程时计时器是否能重新开始计时。

现在我们注意到了,从Running状态例程退出和Resetting状态例程退出可知,分别对计时器指令和计数器指令的作用是不相同的。这里再次强调,PSC指令的作用有两个,一是退出当前状态例程,二是令状态例程静止,即复位所有的非保持型指令。在各个状态例程中编写执行代码时,一定要考虑PSC指令执行对状态例程中某些数据的影响。这跟我们之前一直强调预扫描和后扫描对例程数据的影响道理是一样的,但是因为状态例程是一个重复进行的过程,数据是否被复位就显得尤为重要。

此外,还要提请注意的是,PSC指令一定要编写在状态例程的最后一个梯级,以避免不完整的例程扫描,因为一旦PSC指令执行,即离开例程,不再继续扫描。

现在,我们可以让整个生产工艺周期完整地运行起来了,这个进程在状态模块中观察是最方便和直观的。

为什么启动运行从Start命令开始呢?从状态模块中我们可以看到,系统进入运行的初始状态是停留在Idle的预状态位置,这是常用的模式,也是默认的组态,如图16-17所示。可以看到,根据不同的需求,也可以设置成另外的预状态。有关其他组态的定义,这里不作深入讨论,请参考《ControlLogix系统实用手册》一书。

978-7-111-36030-8-Chapter16-17.jpg

图16-17 默认的预状态组态

刚才我们讨论的是控制系统正常运行循环的程序编写,异常情况的处理有专门的状态例程来处理,这恰恰是标准化编程的特点,正因为如此,才体现出标准化编程给后期的系统维护带来的方便和功能优势。

当设备临时性地暂停生产过程,进行某些处理之后,重新回到刚才中断的进程继续工作,我们需要在预状态例程中编写一条命令指令,用来脱离当前的Running状态例程,进入暂停状态例程Holding,如图16-18所示。

978-7-111-36030-8-Chapter16-18.jpg

图16-18 执行暂停命令的梯级逻辑

进入暂停状态例程,相关的处理完毕之后,要回到中断的工作点。从状态模块上我们看到,要通过暂停结束预状态例程Held和重启状态例程Restarting才能回到Running状态例程。

在暂停状态例程Holding中,编写梯形逻辑如图16-19所示。无条件梯级点亮一个Hold-ing状态的灯,显示目前的暂停状态,当状态例程离开时,由于PSC指令的静止作用,也即状态例程的后扫描,非保持型的输出将复位为0,状态灯Holding_Light自然熄灭。给出退出Holding的条件Go_Held后,Holding状态例程退出,并进入预状态Held。

978-7-111-36030-8-Chapter16-19.jpg

图16-19 处在暂停状态的梯形逻辑(www.xing528.com)

从状态模块中看到,只有命令Restart的执行才能进入回归的必由之路重启状态例程Re-starting。同样地,在预状态例程中编写命令指令,如图16-20所示。

978-7-111-36030-8-Chapter16-20.jpg

图16-20 执行重启命令的梯级逻辑

Restart命令的执行,可以看到状态模块中的Restarting的状态例程处在了激活状态,显然必须在这个状态例程中编写退出本身状态例程的PSC指令,直接回到Running状态例程中。在Restarting状态例程中编写梯级逻辑,如图16-21所示。

无条件梯级控制的重启状态显示灯Restart_Light在离开重启状态例程Restarting时,由于例程静止作用会自然熄灭。在状态模块中可以看到还有回到暂停状态例程Holding的机会,如果还需要进行其他处理的话,可以在这个例程中执行PCMD指令来发送Hold命令,重新回到状态例程Holding,看来PCMD指令并不是只能在预状态例程中才能编写。用Go_Running梯级条件离开重启状态例程Restarting,并回到Running状态例程。

刚才,我们又完成了一个暂停循环的编写。

将刚才编写好的程序运行起来测试一下,建议在我们模拟的4个灯闪烁进程的中途,例如第二个进程的灯在闪烁时进入暂停的过程,经过Restarting重新回到Running状态例程,你会发现又回到刚才中断的地方继续运行,这种暂时的离开没有后扫描的作用,也不会复位非保持型的指令。

978-7-111-36030-8-Chapter16-21.jpg

图16-21 重启的梯级逻辑

暂停的状态是一个不会破坏生产工艺处理过程的行为。

现在,让我们重新审视状态模块,如图16-22所示,可以发现,刚才我们编写的正常工作的循环和暂停的循环,基本落在白色的框中,这是不遭受破坏性停机的过程。

978-7-111-36030-8-Chapter16-22.jpg

图16-22 状态模块

注意到白色的框外接的两条命令,Stop和Abort,这是不受进程的限制,在任何一个状态例程或预状态都可以干预的命令。这两条命令的执行,生产工艺工程将脱离正常的进程而进入Stopping状态例程或Aborting状态例程。显然,这样的处理是较为严重的,且不能重新回到Running状态例程,接续曾经的中断。

在预状态或任何状态例程都可以编写这两条命令,如图16-23所示,这两条命令的执行将分别进入停止状态例程Stopping或放弃状态例程Aborting。

978-7-111-36030-8-Chapter16-23.jpg

图16-23 可以在预状态或任何状态例程编写这两条命令

停止状态例程Stopping处理的是正常关机、上电时的故障或者控制系统关机,通过这个状态例程来实现。从状态模块上我们可以看到,除了直接进入关机完毕的预状态Stopped,还可以通过命令执行进入放弃状态例程Aborting,在停止状态例程Stopping中可编写的梯级逻辑如图16-24所示。

978-7-111-36030-8-Chapter16-24.jpg

图16-24 在例程Stopping中执行放弃命令的梯级逻辑

Go_Stopped的梯级条件执行PSC指令,离开停止状态例程Stopping,进入预状态Stopped。无条件梯级控制的停止状态显示灯Stop_Light在离开停止状态例程Stoppting时,由于例程静止作用会自然熄灭。Stop_Phase梯级条件执行的Abort命令将进入放弃状态例程Aborting进行处理。

放弃状态例程Aborting是非正常关机,通常是不得已的关停,这时要处理的事务比正常停机要复杂,重要的是要进行安全停车的处理。在放弃状态例程Aborting可编写的梯级逻辑如图16-25所示。

Go_Aborted的梯级条件执行PSC指令,离开放弃状态例程Aborting,进入预状态Abor-ted。无条件梯级控制的放弃状态显示灯Abort_Light,在离开停止状态例程Aborting时,由于例程静止作用会自然熄灭。

当一切处理完毕,要回到正常工作状态时,跟Complete预状态一样,Stopped和Aborted的预状态也是通过Reset的命令执行,进入准备状态例程Resetting,从而进入正常工作进程循环。

978-7-111-36030-8-Chapter16-25.jpg

图16-25 在例程Aborting中编写的梯级逻辑

虽然我们是按照学习的过程逐步增加命令指令的,但是最后发现大多命令指令都集中编写在预状态例程中,如图16-26所示。预状态例程是一个非常特殊的例程,类似于程序中的主控例程,总是处在被扫描状态,编写在例程中的命令指令一定会得到及时的执行,其执行动作覆盖了整个Phase Manager。

978-7-111-36030-8-Chapter16-26.jpg

图16-26 大多命令指令都集中编写在预状态例程中

以上,我们完成了正常生产工艺过程周期的循环、暂停的循环以及正常停机和非正常停机的循环。除了生产工艺处理过程的逻辑我们用闪烁的灯替代,基本的编程过程都经历了。你会发现,这里没有太多编程技巧可言,你惟一可做的是遵循状态模块的进程,按照规定的指令编写。如此标准的模式,即使是让一个新手来编程,也不容易出错,并能在较短的时间内完成。作为维护人员,读程序也有固定的思路和方式,而无须揣摩编程特点和熟悉程序结构,很快就能上手。这就是标准化带来的好处。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈