APP下载

“电气控制与PLC”课程中疑难指令的教学探讨

2012-08-23王榕生

电气电子教学学报 2012年5期
关键词:顺序控制堆栈梯形图

王榕生

(福州大学电气工程与自动化学院,福建福州 350108)

0 引言

“电气控制与PLC”课程中梯形图的编程形式具有形象直观的特点,易于被学生接受[1-5]。然而,课程通篇贯穿逻辑思维与推理,又涉及大量指令内容,而使部分学生产生畏难情绪,学习信心不足。尤其是那些PLC特有的指令及控制环节方面会存在理解上的难度,如果讲述不透,将影响学生对后续内容的学习。因此这部分内容事实上成了本门课程的教学难点。本文结合教学实践,试图解决PLC中的一些疑难指令的教学及一些容易忽视的问题。

1 暂存继电器TR释疑

TR不是编程指令,而是暂存继电器[1-2]。尽管教材给出了明确说明,但对其在程序中所起作用,缺乏必要阐释,导致概念不清。在欧姆龙CPM1A系列PLC中只提供编号TR0~TR7共8个暂存继电器,数目虽少,却构成了全部工作数据区中的一个分区,足见其地位之重要。暂存继电器TR实质是“栈”,可形象比喻为装东西的口袋,装什么东西呢?弄清这点很重要,这是打开TR这把锁的钥匙。以下通过图1所示的暂存继电器TR的实例加以说明。

1 使用暂存继电器TR实例

上图的梯形图支点意义是其左侧继电器00000参与(或控制)其后所有的逻辑运算。因此,程序从上到下先进行(00000)与(00001)之间的逻辑“与”运算,将结果输出给(01000);再进行(00000)的复位操作,使其复0;然后进行(00000)与(00002)之间的逻辑“与”运算,其结果输出给(01001)。

整个逻辑关系简单明了,但里面隐藏着一个问题,即RESET指令有可能改变(00000)的逻辑值,影响到其后的逻辑运算。如果在程序开始运行时(00000)的逻辑值为1,在RESET指令执行后,又使(00000)由1复位为0,导致参与后续逻辑“与”运算的(00000)的值不再是原值,显然违背了梯形图原有的逻辑关系。

为避免这一情况发生,其解决办法是在梯形图的支点处摆放如图1中的TR0。即如同设置一个“口袋”,将其左边(00000)的值收入囊中,起到保存“原生态”的作用。欲达此目的,相关的两个动作不可或缺,一是“装入”,即OUT TR0指令;另一则是“取出”,即 LD TR0指令,否则“口袋”形同虚设。“装入”指令OUT TR0必须紧跟在所要保存的继电器(图例为00000)的加载指令之后,“取出”指令LD TR0则应放在涉及“口袋”中的量的逻辑运算之前。有了暂存继电器TR之后,就不用担心程序中任何地方是否改变了支点左侧的继电器值了。问题的关键是能否正确使用OUT TR0与LD TR0这两个指令。

当程序运行到 RESET 00000指令时,如果(00000)为1,则对(00000)作复位操作,其值变为0。虽然改变了(00000)的原值,但其后跟随的指令LD TR0将TR0内的值即(00000)原值重新赋给了R,即所谓“取出”,使随后参与逻辑运算的(00000)仍为原值,从而确保了梯形图原有的逻辑关系。

那么是否凡遇有支点都要使用TR呢?未必尽然。如果梯形图所有逻辑运算都不改变支点左侧继电器原值,例如在图1梯形图中如果没有RESET 00000指令,可不使用TR。同理,虽然使用了TR,但逻辑运算未改变支点左侧继电器原值之前也可不使用LD TRx(x=0~7)指令。例如,上例中RESET 00000指令前的LD TR0指令可改用LD 00000,因为此时的(00000)值尚未变化。

2 关于指令的微分与非微分形式

PLC指令具有微分和非微分两种形式,凡微分型指令均在助记符前加@符予以标识。大多数应用指令兼有微分型/非微分型。两种指令形式的功能完全一样,区别在于指令的执行条件。对于非微分型指令,当执行条件为ON时,则每个扫描周期都执行该指令;对于微分型指令仅在其执行条件由OFF跳变为ON时才执行一次,如果执行条件没有OFF到ON的变化,则该指令不执行。然而教学中发现不少学生对此感到抽象。究其原因有两个方面:①如何理解执行条件由OFF到ON的变化;②将指令设计为两种形式的意义在哪里?

先谈第一个问题。为厘清执行条件由OFF到ON的变化,关键要将PLC固有工作方式即所谓“循环扫描”结合起来讲。“循环扫描”即为重复地执行程序。无论程序何种结构及其大小,一旦PLC开机,都对程序重复运行,循环不已。因此,程序中每条指令也将一遍遍地执行,然而事先须考察执行条件是否满足,满足则执行,否则不执行。考察按“循环扫描”运行节拍进行。如果指令为非微分型,当每个扫描周期的执行条件都为ON时,则重复执行该指令,直到条件变为OFF时停止执行;如果指令为微分型,则要考察前后两次扫描周期执行条件的变化来决定当前是否执行指令。如果上次扫描周期的执行条件为OFF,当前扫描周期的执行条件变为ON,则PLC感知了条件的上跳变化,则执行指令,否则不执行。请看图2所示的例子。

图2 微分指令执行原理示意图

上图的梯形图示出了微分指令@INC(功能为加1运算)执行原理,该指令的执行条件是(00000)继电器。梯形图右侧箭头线代表对程序一遍遍扫描,实线表示执行@INC指令,虚线表示不执行该指令。箭头下方数字表示扫描序号,上方为每次扫描时@INC指令执行条件(00000)的状态。当第一遍扫描时,25315先对(000)通道清零,之后由于(00000)=OFF,则指令@INC不执行,于是(000)=0;第二遍扫描时,(00000)=ON,PLC感知了(00000)逻辑量的上跳变化,因此执行@INC,使(000)=1;第三遍扫描时,(00000)仍为ON,相对于上次扫描没有发生上跳变化,则不执行@INC,(000)值仍为1。后续扫描如保持(00000)ON不变,则都不执行@INC。由此看出当执行条件变为ON时,PLC对微分指令只执行一次。所以从指令执行次数方面考察,非微分型指令可简单理解为执行多次的指令,微分指令则为只执行一次的指令。

由此引出了第二个问题,即为什么PLC将指令设计为两种形式,其实际意义在哪里?前已提到PLC的固有工作方式是“循环扫描”,它是针对控制目标的实现需要PLC重复执行程序这一通常情况而设计的,但不排除实际应用中存在只执行一次指令的需要。试想如果拿掉图2中INC指令前的@使之变为非微分指令,则一旦执行条件(00000)为ON,经一段时间运行后,(000)值是多少就难以确知了,程序变得无甚意义。所以PLC的两种指令形式,是针对不同控制需要而设计的,不可混用。

3 关于顺序控制步转换条件

PLC中的控制问题只要属于顺序控制类型,无论大小,都能通过套用PLC提供的模板轻易得以解决,因此能在很大程度上减轻编程难度。顺序控制编程涉及两大步骤:画功能表图和画梯形图。功能表图应准确表达每步所做的事项及步与步之间的转换条件,画梯形图则是在此基础上套用模板而已。然而必须指出步与步之间的转换条件体现在梯形图模板时却发生了变形,即加入了上一步控制位这一条件,使步转换条件变为二者相“与”的逻辑条件。那么我们不禁要问,所加入的条件是必要的吗?教材或参考书对此缺乏必要阐释,使不少学生产生困惑。为澄清这一问题,应扣紧顺序控制的实质要求,即下一步活动必须在前一步活动结束之后才能展开,这就意味着整个控制过程不充许发生任何跳转。试想如果在梯形图的转换条件中取消上一步控制位,仅留下步转换条件,将会发生什么情况。我们现在结合图3所示的实例进行讨论。

图3 顺序控制示例

在上图所示的顺序控制梯形图中,每个梯级的步转换逻辑条件为控制位 20000、20001、20002、20003 分别与 00000、00001、00002、00003 继电器相“与”。假设将其中的控制位取消,留下 00000、00001、00002、00003位似乎也能实现步转换。如果控制位20001为ON,即当前活动步为“工进”,当该步结束时必使00001继电器为ON,进而使20002为ON,即活动步转为“快进”,并使上一步控制位20001变为OFF,似乎也符合顺序控制逻辑要求。但这样一来埋下了一个隐患,即只要发生某种干扰使转换条件00000、00001、00002、20003继电器位中的任何一个为ON都可触发相应控制位为ON,使该步变为活动步,而不管其上一步是否结束了活动状态,这就导致了事实上的程序跳转,违背了顺序控制的本意。由此可见在步转换逻辑条件中加(串)入上一步控制位是完全必要的,它对步转换起到了严格限制作用,使其仅在上一步活动结束后方可进行,以防止干扰引起程序跳转,确保顺序控制按正确逻辑步骤推进。

4 常用指令容易忽略的问题

PLC常用指令是关于“位”的逻辑运算指令,其中的加载指令LD N应予以特别重视,因为它包含两种不同操作。然而教学中发现学生对该指令的认知只停留在助记符所表达的操作功能层面上,却忽视了隐藏在助记符后面的另一操作功能。恰恰这一忽视对后续“块”逻辑运算指令的教学影响很大,因此有必要对加载指令LD N功能作深入解读。

图4 块逻辑运算示例

LD N指令包含的两种操作功能分别是,①将N继电器状态送入结果寄存器R;②结果寄存器R的原内容存入堆栈。对这两种操作应理解为有先有后,第2种操作在先,第1种操作在后,否则R的原内容将丢失(被覆盖)。于是指令执行时,先将R的内容保存进堆栈中,然后再接收N继电器状态。该指令对R内容的保存功能对“块”逻辑运算指令功能的发挥至关重要,同时也是正确理解与运用“块”逻辑运算指令的关键所在。现在可通过图4所示的实例进行剖析。算,即(00000)·(00001)+(00002),结果存入 R中。接下来进行第二“块”逻辑运算时务必先应用指令LD 00003将R内容即第一“块”的逻辑运算结果转存堆栈S中。再加载(00003)至R,连同其后的AND NOT 00004和OR NOT 00005指令完成第二“块”的逻辑运算。至此,前两“块”逻辑运算都告完成,结果分别存放在堆栈S与R中。接下来应用AND LD指令进行堆栈S与R内容相“与”,即前两

上图中“块”逻辑运算梯形图示例中共有3个逻辑块。梯形图先对上方2个逻辑块进行“与”运算,然后再对下方的块进行“或”的运算,所得结果传送给01000,其逻辑关系直观明了。但如何正确地应用指令语句加以实现,主要取决于对LD N指令的透彻理解与正确运用。

在图4梯形图中,先对第一“块”进行逻辑运“块”逻辑值相“与”运算,结果存放R中。其后进行第三“块”的逻辑运算时,同样先应用LD NOT 00006指令将R内容转移到堆栈S中,再加载(00006),连同其后的AND 00007指令完成第三“块”逻辑运算,其值仍在R中,再应用OR LD指令完成堆栈S与R内容相“或”,也就是前两“块”相“与”的结果再与第三“块”逻辑值相“或”的运算,最后通过 OUT 01000指令输出结果。

由以上分析可以看出,在对含有“块”逻辑运算的梯形图写语句表时,应先弄清各“块”之间的逻辑关系,明确各“块”逻辑运算顺序,在此基础上正确运用LD N指令及“块”逻辑指令(AND LD与OR LD)加以实现。LD N指令将前一“块”逻辑值转存堆栈S中,并开启下一“块”的逻辑运算,而“块”逻辑指令则对之前存放于堆栈中的“块”逻辑值再取出进而完成规定的“块”间逻辑运算,其执行总是在相关的二“块”逻辑值算完之后,与LD N指令形成交替叠进关系。

[1] 刘涳,常用低压电器与可编程序控制器[M],西安:西安电子科技大学出版社,2005

[2] 郑宝林,图解欧姆龙PLC入门[M],北京:机械工业出版社,2008

[3] 孙振强,可编程序控制器原理及应用教程[M],北京:清华大学出版社,2005

[4] 俞国亮,PLC原理与应用[M],北京,清华大学出版社,2005

[5] 何衍庆等,可编程序控制器原理及应用技巧[M],北京:化学工业出版社,2006

猜你喜欢

顺序控制堆栈梯形图
基于行为监测的嵌入式操作系统堆栈溢出测试*
顺序控制在智能变电站中的应用
PLC顺序控制设计方法的深入探析
智能变电站中顺序控制的功能分析与实现
基于堆栈自编码降维的武器装备体系效能预测
基于VC的梯形图编程软件开发技术
继电器电路转为梯形图教学经验浅谈
浅谈智能变电站的顺序控制功能及应用
一种可编程逻辑控制程序的竞态检测方法
PLC梯形图程序设计技巧及应用