时间:2012年6月17日 来源:网络 关键词:PLC 逻辑错误 工业自动控制

  ●最终程序  下面的程序克服了上述问题,并且通过了基本的测试检查(见图4)。  它同前面程序不同之处在于把q0.0等变量的管辖范围放宽了,因此一旦q0.0为1,只要主持人按钮不按下,它的值就能继续保持下去。  

  3 喷泉程序  题目:plc在喷泉中的应用  来源:plc应用技术开发与实践  编程平台:三菱公司fx2n系列  问题描述  (1)喷泉有a,b,c 3组喷头;  (2)按动开始按钮后,a组先喷,10秒后停,然后b组和c组同时喷;  (3)b和c喷10秒后b停,再10秒后c停;  (4)a,b又喷,5秒后,c也喷,持续10秒后全部停;  (5)再5秒后重返上述(2)到(4)步;  (6)按动停止按钮后,a,b,c 3组喷头全部停。  输入输出变量分配:  x0001:开始按钮  x0002:结束按钮  y0001:a组喷头  y0002:b组喷头  y0003:c组喷头  内部继电器:m0—m5  定时器分配(见图5):  t0:a组喷10秒; 0—10  t1:b,c组喷10秒; 10—20  t2:c组喷10秒; 20—30  t3:a,b组喷5秒;30—35  t4:a,b,c组喷10秒; 35—45  t5:a,b,c组停喷5秒; 45—50  同前一程序相比,这一程序中增加了t0,t1等定时器。定时器用t标识,它的上方是定时器变量名,下方是预定的定时延迟。本例使用的是ton类型定时器,这种定时器只要输入端由0转1计时就开始,在计时过程中,输入端必须始终保持为1,一旦定时器到时,它所对应的变量就立即由0转1。在计时过程中,如果输入端转0,则计时停止,定时器到时之后,只要输入端继续为1,那么计时器变量也继续保持为1,一旦输入变0,计时变量也转为0。本例中的定时器按十分之一秒为单位计时。  这个程序含有三个错误,它的某些喷头在预定停止的时刻没有停止,在预定开始的时刻没有开始。  程序错误(1):按照要求程序开始后20秒,c组喷发应该停止,但该程序却没有停止c的喷发。  原因分析  c的喷发受到m1,m2和m3的控制,它们分别控制c组的第一,第二和第三次喷发。在第二次喷发结束之后,m2为0,喷发本应停止,但调试中发现c的输出(y0002)继续为1,单步调试发现, 此时m1为1,由此造成c组输出继续。分析发现,产生m1的梯形图有错。应该使用m1来产生反馈,但程序中用了b组的输出变量y0001。 该变量恰好在c组第二次喷发之后重新置1,因此造成了c组继续喷发。将此处改成m1之后这一错误即可消除。  程序错误(2):程序开始后50秒,a组喷发应该重新开始,但实际运行中并未开始。  原因分析:  这是一个定时时间写错的简单错误。定时器t4设定的时间应为5秒(50),但梯形图中错写成100(该书指令表程序中也是写50,梯形图中是一个失误)。  程序错误(3):在纠正了上面两个错误之后,程序依然无法通过测试。50秒之后,c组不应该开始喷发,但实际运行中喷发。  原因分析:  50秒之后,程序进入下一周期。此时程序该如何运行在原书中没有清楚描述,这属于描述不全。根据程序的具体实现,可以看出作者的意图是在50秒之后把整个喷发过程重演一遍。基于这样的理解,程序应该在50秒之后开始a组喷发,但程序运行结果是,不但a组喷发,而且c组也喷发,后一行为不符合规定。  出现这一现象的原因在于,m0的梯形图中使用了y000来实现反馈。这一错误同第一个错误类似,只是这一方式在一个周期的运行中没有问题,在第二周期中就会出现问题。在该图中用m0取代y000就能消除这一错误。  在消除了以上问题之后得到梯形图如图6所示。  

  4 十字路口交通灯控制程序  题目:交通灯控制程序  来源:plc应用技术开发与实践  编程平台:omron公司cqm1系列  ●任务描述  工作顺序:启动按钮,南北绿灯,东西红灯,东西绿灯,南北红灯。按此顺序循环。  时序控制:(90秒周期)  ●主干道  南北左转灯:绿10秒,黄2秒,红78秒;  南北直行灯:红10秒,绿30秒,绿闪3秒,黄2秒,红45秒;  东西方向左转灯和直行灯的工作方式与上相仿,但延迟45秒。人行道灯与主干道直行灯相同。  ●强通控制  打开强通开关,强通方向绿灯亮,断开强通开关,绿灯闪3秒,恢复正常控制;  闪烁控制,亮0.5秒,暗0.5秒,持续3秒;  这个程序比较长,不便全部抄录在此。这里仅指出程序中的几个错误,并列出相关的程序段。  程序错误(1):闪烁控制错误。闪烁过程通过一个专门的程序段控制,按要求该程序应该每隔0.5秒输出1,然后0.5秒输出0,不断循环。图7是书中该程序的实现:  其中只用到tim050一个定时器,计时单位为十分之一秒。omron的tim型定时器的工作方式同西门子ton型定时器相仿,当输入为1时启动计时,一旦输入转0,立即停止计时,定时器变量输出复位为0。  起始状态tim050的值为0,取反后送入定时器1,启动计时,5个单位之后到时定时器产生信号1。该信号经反馈之后,把0送入定时器,这一输入值立即把定时器输出重新变为0。因此,该段程序只能产生非常短暂的1,而不是持续0.5秒的1。当该信号用于驱动绿灯时,无法产生正常的均匀闪烁效果。  程序修正(见图8)  

  这里用了两个定时器,当第一个定时器tim050到时之后,它的输出信号1送到第二个定时器tim051启动后者计时。但tim051需要5个单位之后才能到时,在这段时间内,tim050依然的输入依然是1,因此它能够把1继续保持0.5秒,由此产生一个均匀的每隔0.5秒变化的脉冲。  程序错误(2):在系统初始启动阶段,南北方向绿灯亮,但东西方向的左转红灯和直行红灯没有同时点亮  原因分析:由于相关程序比较长,不便在这里展示,这里我们仅分析一下出错的原因及解决的办法。原程序中采用顺序启动各个颜色灯的方法。即左转绿灯10秒后启动直行绿灯,30秒后绿闪,2秒后黄灯,然后55秒红灯。然而,按这一顺序运行时,一开始南北直行红灯的10秒缺掉了,东西左转红灯45秒漏了,最后东西直行红灯55秒也漏了。要改变这一情况,需要改变后一程序,同时再引入两个定时器,把红灯控制切分成两段完成。  可能人们认为上一个问题不算严重,因为原来程序在启动一分钟之后就能达到正常。但下面的强通控制的错误确是比较严重的。所谓强通是指紧急车辆到达路口时,人工控制按下相应方向的强通开关,使得这一方向的绿灯亮,另一方向亮红灯。紧急车辆过去之后,强通开关方块,强通方向绿灯闪动三下之后,恢复原来的系统运行。  程序错误(3):强通按钮放开之后,按规定强通方向绿灯应该闪烁三下,然后熄灭,但实际情况是绿灯没有按照规定闪烁和停止,而是持续发亮。  原因分析:  我们以东西向直行绿灯控制程序段为例分析这一问题。  该程序中100.12为控制东西向绿灯的输出变量。该方向的强通通过hr0.00控制,强通按钮按下之后,该变量为1,从而引起100.12输出为1,绿灯亮。强通按钮放开之后,这条通路切断,hr0.01变为0之后,hr0.03会变为1,过程在这里略去。hr0.03所在的通路将产生一个3秒钟的闪烁脉冲。编程者的意图是通过它在结束强通之后制造一个绿灯闪烁过程。然而,由于变量100.12的反馈存在,一旦该变量为1,它将自动地继续保持为1。只有两种方式可以使它恢复为0,一种是30秒定时器到时(tim010),另一个是另一方向的强通信号hr0.01。在同方向强通信号结束之后,一般情况下,上述两个信号均不会转为1,因此绿灯无法马上停止。系统并不产生规定的效果。  这是一个比较严重的错误,因为此处本应经过绿灯闪烁转为红灯,但系统却始终保持绿灯。这样的系统是无法接受的。  这一问题的解决比较复杂一点。由于我们的主要任务是发现错误,此地我们不再讨论如何修正这一错误的问题。  

  5 第二个十字路口交通灯控制程序  本节讨论另一本书上的交通灯控制程序中的错误。这一程序没有处理强通控制这样的复杂问题,但是人行道控制同主干道控制分开处理,结果在人行道控制上出现了错误。  题目:交通灯控制程序  来源:plc应用开发实用子程序  编程平台:西门子s7-200  时序控制:(90秒周期)  南北主干道 左转绿10秒,绿30秒,绿闪3秒,黄2秒,红45秒;  东西人行道:红13秒,绿27秒,绿闪3秒,红47秒;  东西主干道: 红45秒,左转绿10秒,绿30秒,绿闪3秒,黄2秒;  南北人行道:红58秒,绿27秒,绿闪3秒,红2秒。  注:  (1)绿闪包括转向绿灯和转向绿灯;  (2)东西人行道指东西两端的人行道。  测试显示该程序时序上运行正确,但是在关机时出了问题。  程序错误:按下系统停止开关,大部分灯都熄灭,但两个方向的人行道上亮起红灯。  程序分析:  我们以控制东西方向人行道红灯的变量q1.3的计算为例进行分析。下面把相关程序段专门抽出来进行分析(见图10)。  

  图中可见,当m0.4为0 时q1.3将输出1。当t7,t8为0时m0.4必定为0。系统停止开关是i0.2,它按下之后会使m0.1变为0,该变量是控制系统活动的主要变量,它变为0将使一系列变量变为0,也包括t7和t8。然而这样做却没有关掉东西两端人行道的红灯。南北两端人行道红灯采用的是类似程序,因此也没有关掉。  程序修正:  只需把m0.1直接加入到人行道红灯的控制中即可。  6 结束语  本文分析了来自两本plc教材的4个程序例子,从中找出大大小小8个错误,并对这些错误的原因进行了分析。我们希望这个分析能够帮助程序员减少编程错误。  本文目的是为了揭示plc程序错误的普遍性。这些错误不能简单归咎于作者的失误,主 要原因是编程模式的复杂性以及测试手段的缺乏。  失误是人类的普遍行为。对于计算机程序这样复杂的对象,出错经常出现。程序编制过程本身就是一个不断尝试不断纠正错误的过程。然而,在plc领域,离线的调试工具比较薄弱,迄今为止最好的调试方式依然是现场调试,但是这一方式过于耗费时间,而且一般教师和学生都没有这样的条件。这是程序错误率高的根本原因。
共两页 第1页   第2页