【问题描述】
在现场设备程序中,你是否遇到以下类似的情况,比如图a,1个Y点输出条件导通了,Y点却没有输出;比如下图b,对应Y点的触发条件没有触发,而Y点的线圈却导通了;比如图c、图d,给一个寄存器赋值,寄存器保存的数据却不是我们给的那个值,还有其他各种奇奇怪怪的现象,其实这些大部分都是由程序扫描周期引起的。
【PLC扫描工作过程】
我们需要先掌握plc的工作过程以及plc的程序执行扫描原理,才能去分析这些问题。PLC的工作过程主要分成内部处理、通信服务、输入处理、程序处理、输出处理5个部分,如下图,PLC会不断重复这5个流程。
内部处理:系统初始化、软元件复位、进行自诊断以及内部工作任务,检查有没有错误以确保系统可靠运行;
通信服务:和外部通信联系,比如电脑软件监控更新显示内容,又如PLC和触摸屏通信,触摸屏上刷新显示;
输入处理:读入所有输入点的状态和数据,并将它们存入I/O映象区的映像寄存器内。这里的意思是,读取PLC外部按钮开关的状态,保持到PLC内部对应的存储芯片内部;
程序处理:PLC扫描程序的顺序是从上到下,从左到右的。三菱FX3UPLC的一个扫描周期一般不会超过10ms(程序越大,扫描时间越长),不同品牌型号的PLC扫描周期不一样。扫描完一次称为一个扫描周期。(这一块也是我们本章的重点内容)
输出处理:按照程序处理的结果,把映象区对应的状态集中刷新所有的输出锁存电路,再传送到各相应的输出端子,再经过电路驱动相应的实际负载;
其中,程序处理这一步,是从左往右,从上往下的扫描一般整个程序扫描到END指令,程序扫描就结束,之后再控制输出,本个周期就结束了。然后又开始新一个周期的动作,以三菱FX3U为例子,一个扫描周期的时间大概10ms内。
【问题解析】
1.问题a:
此问题的程序可能如下图,程序执行时,扫描第一行X2(导通了),再扫描Y0线圈(有输出),再扫描第2行Y0常开触点(以为上一行线圈导通了,所以常开触点会闭合),再扫描Y2线圈(有输出),再扫描X3常开触点(断开),再扫描Y0第二个线圈(无输出),再扫描Y0第二个常开触点(由于Y0的上一个线圈无输出,所以此差点断开),再扫描Y3线圈(无输出)
线圈的状态是以最后一个为准的,所有Y0显示是断开的,由于在执行过程中Y0控制Y2的线圈输出了,所以Y2看着是导通的。
实际工程中可能第二个Y0线圈和第一个离的太远我们没办法发现,或者不一定用Y0线圈,用RST Y0也能产生同样的现象。
2.问题b:
此问题的程序可能如下图,程序执行时,扫描第一行X2(断开),再扫描Y0线圈(不导通,此时看起来导通是因为程序后面触发了Y0第二个线圈,程序显示以最后一个线圈为准),再扫描Y0常开触点(不导通,此时看起来导通是因为程序后面触发了Y0第二个线圈,程序显示以最后一个线圈为准),再扫描Y2线圈(无输出),再扫描X3常开触点(导通),再扫描Y0第二个线圈(有输出),再扫描Y0第二个常开触点(导通),再扫描Y3线圈(有输出)
3.问题c:
此问题的程序可能如下图,有时候我们只看到了第一行的程序,可能下一行程序在一个很隐蔽的地方,导致你看不到,就会觉得D0的值的显示不合理;程序执行时,先扫描第一行,把K10的数据传送给D0;程序再扫描第二行,把D20传送给D0;最终输出时,显示的是最后的结果。
4.问题d:
此问题的程序可能如下图,程序执行时,程序先扫描第一行,MOV把K10传送给D0;再执行第二行,MOV指令把D0储存的值(K10)传送给D2;程序执行第3行,MOV指令把K20传送给D0,程序输出以最后一个为准,所以D0显示的值是20,D2显示的值是10。