一组PLC程序的逻辑错误分析
图3 程序修正尝试程序实现图
使用这一程序时,如果两个抢答者的按钮同时按下,对应的两个警报器会同时响。但是,在下一周期,两个警报器的输出又会同时恢复到0。原因是每一个抢答输入都会导致另一个抢答无效,两个抢答输入就会同时导致对方无效。
●最终程序
下面的程序克服了上述问题,并且通过了基本的测试检查(见图4)。
它同前面程序不同之处在于把q0.0等变量的管辖范围放宽了,因此一旦q0.0为1,只要主持人按钮不按下,它的值就能继续保持下去。
图4 基本测试检查结果
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所示。
图5 定时器分配程序图
图6 梯形图
4 十字路口交通灯控制程序
题目:交通灯控制程序
来源:plc应用技术开发与实践
编程平台:omron公司cqm1系列
●任务描述
工作顺序:启动按钮,南北绿灯,东西红灯,东西绿灯,南北红灯。按此顺序循环。
时序控制:(90秒周期)
●主干道
南北左转灯:绿10秒,黄2秒,红78秒;
南北直行灯:红10秒,绿30秒,绿闪3秒,黄2秒,红45秒;
东西方向左转灯和直行灯的工作方式与上相仿,但延迟45秒。人行道灯与主干道直行灯相同。
●强通控制
打开强通开关,强通方向绿灯亮,断开强通开关,绿灯闪3秒,恢复正常控制;
闪烁控制,亮0.5秒,暗0.5秒,持续3秒;
这个程序比较长,不便全部抄录在此。这里仅指出程序中的几个错误,并列出相关的程序段。
图7程序的实现
程序错误(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)
- 三菱PLC程序流程控制应用指令(12-19)
- PLC程序调试步骤(12-12)
- 基于闪烁存储器的TMS320VC5409 DSP并行引导装载方法(05-23)
- DSP外部Flash存储器在线编程的软硬件设计(07-10)
- 一种新型的多DSP红外实时图像处理系统设计(02-03)
- DSP与普通MCU的比较(02-23)