首页 理论教育 PAC编程基础教程:梯级预扫描和后扫描

PAC编程基础教程:梯级预扫描和后扫描

时间:2023-10-26 理论教育 版权反馈
【摘要】:预扫描和后扫描的动作一般不会被初学者所注意,只有当现场调试例程有了一定的经验后,才会注意到预扫描和后扫描对例程中输出指令施加的影响。预扫描复位所有的非保持指令的操作数,例如OTE指令,非保持型计时器指令TON和TOF的累加值ACC等都会被复位为0,但立刻就进入正常扫描状态。

PAC编程基础教程:梯级预扫描和后扫描

要正确地编制程序,执行代码的确能像我们预期的那样动作,产生我们所需要的控制结果,我们常常会分析梯级中指令被扫描时的动作,但是在非正常扫描时,系统将对指令参数的数据作出怎样的处理呢,我们必须了解系统预扫描和后扫描的作用。

并非只有例程在正常扫描时,输出指令执行才会有目标地址的数据结果,还有预扫描和后扫描的作用也会影响到输出指令的目标地址的数据状态。预扫描的作用通常比较短促,常常是一闪而过,复位的情形比较明显,后扫描的作用常常是持续着的,在一些暂停的场合或未激活的状态都会表现出来,甚至会对输出控制的外部设备产生影响。由于预扫描和后扫描对我们编制的执行逻辑结果有一定的影响,所以在编写输出指令的执行动作时,必须要考虑这两种情况,否则你会觉得输出指令的表现有时不可思议。

预扫描和后扫描的动作一般不会被初学者所注意,只有当现场调试例程有了一定的经验后,才会注意到预扫描和后扫描对例程中输出指令施加的影响。预扫描和后扫描正是为了对数据进行预定或善后处理,属于系统介入的一种特定操作,这个系统介入的特定操作往往是用户应用中所需要而无法通过梯级逻辑执行实现的动作,其实我们一直乐在其中而浑然不觉。一个典型的例子就是计时器,我们可以看到控制器停机时计时器的累加值ACC会停止在某个数据,一旦控制器开始运行,预扫描令所有的非保持型的数据复位,计时器的ACC复位后开始重新计时,我们习惯了这样,以为平常,殊不知这就是预扫描的作用,可帮助我们重新开始。话又说回来,如果你的计时器在控制器暂停运行后重新启动,想要保持原有的累加值继续累加,你才会注意到原来累加值在开始运行时是会被复位的,于是就要设法来避免计时器的累加值复位,比如采用保持型的计时器来计时。

指令集中每一条指令的介绍,都列表说明了预扫描和后扫描对指令的作用,这点其实至关重要,却总是被人忽视,对此较为深刻的理解恐怕要到后面的章节,即用户自定义指令的编程训练中,大家自己来编写预扫描和后扫描处理之时方能体会。

简而言之,预扫描和后扫描是有别于常规梯级扫描的特殊处理,对所有例程的所有梯级实施一遍特殊的扫描,并进行特殊的处理。

预扫描是在例程进入正式运行之前完成的一次特殊操作,预扫描要做的事情是:

●预扫描所有的主例程;

●预扫描所有的设备阶段(Phase Manager)的状态例程;

●预扫描所有的设备阶段(Phase Manager)的预状态例程;

●预扫描程序和设备阶段(Phase Manager)的所有的子例程(不会重复预扫描);

●预扫描所有的FOR指令调用的子例程;

●不依照跳转指令指向的顺序;

●按预扫描方式执行每一条指令(指令集有详细说明);

●将所有的非保持型指令复位;

●不刷新输入量;

●不送出输出量。

如下两种情况不会做预扫描:

●控制器进入运行时,程序或设备阶段(Phase Manager)为非预定性的;

●控制器运行时,程序或设备阶段(Phase Manager)从非预定型转变为预定性的。

预扫描复位所有的非保持指令的操作数,例如OTE指令,非保持型计时器指令TON和TOF的累加值ACC等都会被复位为0,但立刻就进入正常扫描状态。(www.xing528.com)

预扫描最容易被观察到的是TON指令的累加值复位,当控制器工作状态从运行转向程序状态时,可以看到所有计时器的累加值都停留在某个值,保存的离线程序也是可以看到这样的数据状态,但是一旦开始运行,可以看到所有的非保持型的计时器的累加值全部复位为0,重新开始计时。OTE指令的状态是不明显的,尽管预扫描将指令结果已经复位,第一次正常扫描时,梯级条件立刻就决定了它的输出状态,预扫描的状态难以察觉。

控制器系统在某些例程或某段梯级逻辑从激活状态转入非激活状态时,要做的善后特殊处理被称为后扫描,如下几种情况要进行后扫描:

●MCR指令结束区域控制时;

●设备阶段(Phase Manager)的状态例程转向下一个预状态时;

●SFC步的转换条件成立离开激活步时(如果设定)。

以上三种情况都是例程或某段梯级逻辑从激活状态转为非激活状态时,离开了正常的扫描处理,后扫描所做的事情是:

●后扫描条件不成立的MCR区域;

●后扫描所有的未激活的设备阶段(Phase Manager)状态例程;

●后扫描所有的未激活的SFC的步(如果设定);

●按后扫描方式执行每一条指令(指令集有详细的说明);

●每个梯级仍然被扫描,但梯级条件永远不成立;

●所有的非保持型指令都被复位;

●刷新输入量但可能被梯级条件否认;

●送出输出量并将起作用。

后扫描将静止例程或某段梯级逻辑中的每一个梯级,令所有的梯级条件不成立,故后扫描将复位所有的非保持指令的操作数,例如OTE指令,非保持型计时器指令TON和TOF的累加值ACC等都会被复位为0,这个复位情况会一直维持着,在梯级逻辑的整个非激活状态期间。

要特别留心语句编程的赋值语句,因为它不仅仅针对布尔量,数据量也会作用,语句编程的赋值语句分为保持型和非保持型两种,非保持型赋值在后扫描时将被复位或清除。

后扫描是系统提供给我们的一种特殊的功能,非常有用,有助于例程或梯级逻辑离开了激活的状态后,对目标数据所做的善后工作,因为例程或梯级逻辑停止扫描之后,就再也没有机会去处理离开之后希望数据所保持的状态,当被控制的是输出信号时,对外部被控制设备的影响尤其大,因为后扫描要送出输出数据,决定了设备状态,通常希望是关闭设备,即输出数据复位。

例如一个电动机的运转,在控制它的梯级处在非激活状态时,我们希望它自动地停止,而不需要额外地处理。这时使用OTE指令,不管当时的梯级条件如何,只要当前的梯级逻辑处于未激活状态,这个OTE指令会因为后扫描而复位电动机的控制,并且后扫描的输出是被送出并起作用的,这就是为这个电动机的控制选择非保持型输出指令OTE的理由。另外一种相反的情形,例如一个泵在控制它的梯级处于非激活状态时,仍然要维持它的运转,这时它的输出指令要考虑使用锁存输出指令OTL,这个保持型的指令是不会因为后扫描而改变输出状态的。

尽管后扫描和预扫描一样,都会令非保持型的指令复位,但要注意后扫描与预扫描是有区别的。后扫描非激活区域的梯级静止活动是持续的,在非激活时段是一直作用着的,预扫描只有一次复位动作,之后马上被正常扫描赋予逻辑决定的状态。后扫描将送出输出量作用于输出点,而预扫描不会送出输出量,即使预扫描瞬间的复位,立刻又回到置位的状态,也不会造成外部输出点的扰动。不要轻视这个看似与编程无关的话题,在实际调试或运行中,恰恰是这些因素常常困扰我们的编程人员,在我们开始编程之前,就应该了解系统对程序介入的动作或作用,在编写逻辑的时候就考虑数据在不同情形下的状态,并决定如何处理,选择怎样的指令。

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

我要反馈