PLC维修知识集锦1
各种品牌PLC都具有自诊断功能,PLC维修的技巧在于,当PLC异常时应该充分利用其自诊断功能以分析故障原因。比如PLC发生异常时,首先检查电源电压、PLC及I/O端子的螺丝和接插件是否松动,以及有无其他故障存在。然后再根据PLC基本单元上设置的各种LED的指示灯状况,以检查PLC自身和外部有无异常。
PLC实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。
步骤/方法
1
PLC维修的技巧-电源指示([POWER]LED指示)当向PLC基本单元供电时,基本单元表面上设置的[POWER]LED指示灯会亮。如果电源合上但[POWER]LED指示灯不亮,请确认电源接线。另外,若同一电源有驱动传感器等时,请确认有无负载短路或过电流。若不是上述原因,则可能是PLC内混入导电性异物或其它异常情况,使基本单元内的保险丝熔断,此时可通过更换保险丝来解决。
2
PLC维修的技巧-出错指示([EPROR]LED闪烁)当程序语法错误,如忘记设置定时器或计数器的常数等,或有异常噪音、导电性异物混入等原因而引起程序内存的内容变化时,[EPROR]LED会闪烁,PLC处于STOP状态,同时输出全部变为OFF。在这种情况下,应检查程序是否有错,查看有无导电性异物混入和高强度噪音源。
3
PLC维修的技巧-出错指示([EPROR]LED灯亮)检查过程如果出现[EPROR]LED灯亮→闪烁的变化,请进行程序检查。如果[EPROR]LED依然一直保持灯亮状态时,请确认一下程序运算周期是否过长,监视D8012可知最大扫描时间。
4
PLC维修的技巧-输入指示不管输入单元的LED灯亮还是灭,请检查输入信号开关是否确实在ON或OFF状态。当输入开关与LED灯亮用电阻并联时,即使输入开关OFF但并联电路仍导通,仍可对PLC进行输入。如果使用光传感器等输入设备,由于发光/受光部位粘有污垢等,引起灵敏度变化,有可能不能完全进入“ON”状态。在比PLC运算周期短的时间内,不能接收到ON和OFF的输入。当在输入端子上外加不同的电压时,会损坏输入回路。
5
PLC维修的技巧-输出指示输出单元的LED灯无论亮还是灭,如果负载不能进行ON或OFF时,主要是由于过载、负载短路或容量性负载的冲击电流等,引起继电器输出接点粘合,或接点接触面不好导致接触不良。
注意事项
PLC维修过程中如发现电源烧坏,整流桥后滤波电解电容已炸开,保险丝烧得发黑,需用万用表检查,查看炸开的滤波电容是否已短路另外逐个查其它元件有没烧坏。如果没有,可以更换保险丝和滤波电解电容后通电,检测各组电源都正常后,再安装好整台机,继而进行通电使用。
楼主最近还看过
OB83_EV_CLASS BYTE 事件级别和标识:B#16#32,模块参数赋值结束;B#16#33,模块参数赋值启动;B#16#38,模块插入;B#16#39,模块拔出或无反应,或参数赋值结束
OB83_FLT_ID BYTE 故障代码
OB83_PRIORITY BYTE 优先级,可通过STEP 7选择(硬件组态)
OB83_OB_NUMBR BYTE OB号
OB83_RESERVED_1 BYTE 块模块或接口模块标识
OB83_MDL_ID BYTE 范围:B#16#54,外设输入(PI);B#16#55,外设输出(PQ)
OB83_MDL_ADDR WORD 有关模块的逻辑起始地址
OB83_RACK_NUM WORD B#16#A0,接口模块号;B#16#C4,机架号或DP站号(低字节)或DP主站系统ID(高字节)
OB83_MDL_TYPE WORD 有关模块的模块类型
OB83_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
当CPU检测到MPI网络的接口故障、通信总线的接口故障或分布式I/O网卡的接口故障时,操作系统调用OB84。故障消除时也会调用该OB块,即事件到来和离去时都调用该OB。表7-10描述了CPU硬件故障OB84的临时变量。
OB84_EV_CLASS BYTE 事件级别和标识:B#16#38,离去事件;B#16#39,到来事件
OB84_FLT_ID BYTE 故障代码
OB84_PRIORITY BYTE 优先级,可通过STEP 7选择(硬件组态)
OB84_OB_NUMBR BYTE OB号
OB84_RESERVED_1 BYTE 备用
OB84_RESERVED_2 BYTE 备用
OB84_RESERVED_3 WORD 备用
OB84_RESERVED_4 DWORD 备用
OB84_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
在以下情况下将会触发优先级错误中断:
产生了一个中断事件,但是对应的OB块没有下载到CPU;
访问一个系统功能块的背景数据块时出错;
刷新过程映像表时I/O访问出错,模块不存在或有故障。
在编写OB85的程序时,应根据OB85的起动信息,判定是哪个模块损坏或没有插入。可以使用SFC39至42封锁或延时并使能优先级故障OB,表7-11描述了优先级故障OB85的临时变量。
OB85_EV_CLASS BYTE 事件级别和标识
OB85_FLT_ID BYTE 故障代码
OB85_PRIORITY BYTE 优先级,可通过STEP 7选择(硬件组态)
OB85_OB_NUMBR BYTE OB号
OB85_RESERVED_1 BYTE 备用
OB85_RESERVED_2 BYTE 备用
OB85_RESERVED_3 INT 备用
OB85_ERR_EV_CLASS BYTE 引起故障的事件级别
OB85_ERR_EV_NUM BYTE 引起故障的事件号码
OB85_OB_PRIOR BYTE 当故障发生时被激活OB的优先级
OB85_OB_NUM BYTE 当故障发生时被激活OB的号码
OB85_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
出现下列故障或故障消失时,都会触发机架故障中断,操作系统将调用OB86:扩展机架故障(不包括CPU 318),DP主站系统故障或分布式I/O故障。故障产生和故障消失时都会产生中断。
在编写OB86的程序时,应根据OB86的起动信息,判断是哪个机架损坏或找不到。可以使用SFC39至42封锁或延时并使能OB86,表7-12描述了机架故障OB86的临时变量。
OB86_EV_CLASS BYTE 事件级别和标识:B#16#38,离去事件;B#16#39,到来事件
OB86_FLT_ID BYTE 故障代码
OB86_PRIORITY BYTE 优先级,可通过STEP 7选择(硬件组态)
OB86_OB_NUMBR BYTE OB号
OB86_RESERVED_1 BYTE 备用
OB86_RESERVED_2 BYTE 备用
OB86_MDL_ADDR WORD 根据故障代码
OB86_RACKS_FLTD ARRAY[0..31] 根据故障代码
OB86_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
这里也通过一个例子来说明OB86的使用。新建一个项目,插入一个300站,进行硬件组态。在机架中插入CPU 315-2DP,选择DP作为主站,在DP主站下添加一个ET200M从站,并在从站中插入一个模拟量输入模块SM331,如图7-20所示。
这里也通过一个例子来说明OB86的使用。新建一个项目,插入一个300站,进行硬件组态。在机架中插入CPU 315-2DP,选择DP作为主站,在DP主站下添加一个ET200M从站,并在从站中插入一个模拟量输入模块SM331,如图7-20所示。
然后双击CPU,选择“Interrupts”选项,可以看到CPU支持OB86,见图7-21所示。硬件组态完成后,保存编译,下载到CPU中。
OB86程序当在通讯发生问题后或者访问不到配置的机架或站时执行,此时程序可能还可能需要调用OB82和OB122等组织块,当OB86执行时可以通过它的临时变量读出产生的故障代码和事件类型,通过它们的组合可以得到具体错误信息,同时也可以读出产生错误的模块地址和机架信息。STEP 7不能时时监控程序的运行,可以用“Variable Table”监控实时数据的变化。
打开组织块OB86编写程序,程序如图7-22所示
该程序也可以转化成梯形图,但程序中要将OB86的临时变量OB86_RACKS_FLTD ARRAY[0..31]改成OB86_z23 DWORD。
把程序下载到CPU后,在“Blocks”插入“Variable Table”,如图7-23所示。然后打开,填入MB0、MB1、MW2、MD4并点击 键就可以得到相关信息了。
在使用通信功能块或全局数据(GD)通信进行数据交换时,如果出现下列通信错误,操作系统将调用OB87:
接受全局数据时,检测到不正确的帧标识符(ID);
全局数据通信的状态信息数据块不存在或太短;
接受到非法的全局数据包编号。
如果用于全局数据通信状态信息的数据块丢失,需要用OB87生成该数据块将它下载到CPU。可以使用SFC39至42封锁或延时并使能通信错误OB,表7-13描述了通信错误OB86的临时变量。
OB87_EV_CLASS BYTE 事件级别和标识
OB87_FLT_ID BYTE 故障代码
OB87_PRIORITY BYTE 优先级,可通过SETP 7选择(硬件组态)
OB87_OB_NUMBR BYTE OB号
OB87_RESERVED_1 BYTE 备用
OB87_RESERVED_2 BYTE 备用
OB87_RESERVED_3 WORD 根据故障代码
OB87_RESERVED_4 DWORD 根据故障代码
OB87_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
同步错误是与执行用户程序有关的错误,程序中如果有不正确的地址区、错误的编号和错误的地址,都会出现同步错误,操作系统将调用同步错误OB。
同步错误组织块包括OB121用于对程序错误的处理和OB122用于处理模块访问错误。同步错误OB的优先级与检测到出错的块的优先级一致。因此OB121和OB122可以访问中断发生时累加器和其他寄存器中的内容,用户程序可以用它们来处理错误。
同步错误可以用SFC36“MASK_FLT”来屏蔽,使某些同步错误不触发同步错误OB的调用,但是CPU在错误寄存器中记录发生的被屏蔽的错误。用错误过滤器中的一位来表示某种同步错误是否被屏蔽。错误过滤器分为程序错误过滤器和访问错误过滤器,分别占一个双字。
调用SFC37“DMSK_FLT”并且在当前优先级被执行完后,将解除被屏蔽的错误,并且清楚当前优先级的事件状态寄存器中相应的位。
可以用SFC38“READ_ERR”读出已经发生的被屏蔽的错误。
对于S7-300(CPU318除外),不管错误是否被屏蔽,错误都会被送入诊断缓冲区,并且CPU的“组错误”LED会被点亮。
可以在不同的优先级屏蔽某些同步错误。在这种情况下,在特定的优先级中发生这类错误时不会停机,CPU把该错误存放到错误寄存器中。但是无法知道是什么时候发生的错误,也无法知道错误发生的频率。
有关程序处理的故障事件发生时CPU操作系统调用OB121,OB121与被中断的块在同一优先级中执行,表7-14描述了编程错误OB121的临时变量。
OB121_EV_CLASS BYTE 事件级别和标识
OB121_SW_FLT BYTE 故障代码
OB121_PRIORITY BYTE 优先级=出现故障的OB优先级
OB121_OB_NUMBR BYTE OB号
OB121_BLK_TYPE BYTE 出现故障块的类型(在S7-300时无有效值在这里记录)
OB121_RESERVED_1 BYTE 备用
OB121_FLT_REG WORD 故障源(根据代码)。如:转换故障发生的寄存器;不正确的地址(读/写故障);不正确的定时器/计数器/块号码;不正确的存储器区
OB121_BLK_NUM WORD 引起故障的MC7命令的块号码(S7-300无效)
OB121_PRG_ADDR WORD 引起故障的MC7命令的块号码(S7-300无效)
OB121_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
OB121程序在CPU执行错误时执行,此错误不包括用户程序的逻辑错误和功能错误等,例如当CPU调用一个未下载到CPU中的程序块,CPU会调用OB121,通过临时变量“OB121_BLK_TYPE”可以得出出现的错误的程序块。使用STEP 7不能时时监控程序的运行,可以用“Variable Table”监控实时数据的变化。
打开事先已经插入的OB121编写程序,如图7-24所示。
接着在项目“Blocks”下插入FC1,打开FC1编写程序,如图7-25所示。
然后打开OB1编写程序,如图7-26所示。
先将硬件和OB1下载到CPU中,此时CPU能正常运行。在“Blocks”下插入“Variable Table”,然后打开,填入MW0和M10.0,并点击键,程序运行正常。将M10.0置为“true”后,CPU就报错停机,查看CPU的诊断缓冲区信息,发现为编程错误,这是将OB121也下载到CPU中,再将M10.0置为“true”,CPU会报错但不停机,MW0立刻为“W#16#88”,“W#16#88”表示为OB程序错误,检查发现FC1未下载。下载FC1后,在将M10.0置为“true”,这是CPU不会再报错,程序也不会在调用OB121。
当对于模块的数据访问出现故障时CPU的操作系统调用OB122,OB122与被中断的块的同一优先级中执行,表7-15描述了I/O访问错误OB121的临时变量。
OB122_EV_CLASS BYTE 事件级别和标识
OB122_SW_FLT BYTE 故障代码
OB122_PRIORITY BYTE 优先级=出现故障的OB的优先级
OB122_OB_NUMBR BYTE OB号
OB122_BLK_TYPE BYTE 出现故障块的类型(在S7-300时无有效值在这里记录)
OB122_MEM_AREA BYTE 存储器区和访问类型:位7至4,访问类型-0、位访问-1、字节访问-2、字访问-3;位3至0,存储器区-0、I/O区-1、过程映像输入或输出-2
OB122_MEM_ADDR WORD 出现故障的存储器地址
OB122_BLK_NUM WORD 引起故障的MC7命令的块号码(S7-300无效)
OB122_PRG_ADDR WORD 引起故障的MC7命令的块号码(S7-300无效)
OB122_DATE_TIME DATE_AND_TIME OB被调用时的日期和时间
同样,在这里运用一个例子来说明OB122的用法。首先,新建一个项目,插入一个300的站,进行硬件组态。插入一个CPU 315-2DP和一个模拟量输入模块SM331。同时配置SMM331的“Inputs”选项,把所有通道设置为电压类型,注意模块的量程卡要与设置的相同,并把模块的逻辑输入地址设置为256…257,如图7-27所示。
组态完成后,编译保存并下载到CPU中。
OB122程序在出现I/O访问错误是被调用,通过临时变量“OB122_SW_FLT”可以读出错去代码,通过“OB122_BLK_TYPE”得出出错的程序块,通过“OB122_MEM_ADDR”可以读出发生错误的存储器地址使用STEP 7不能时时监控程序的运行,可以用“Variable Table”监控实时数据的变化。
打开在“Blocks”下插入的OB122编写程序,如图7-28所示。
该程序也可以转换为梯形图。
接着打开OB1编写程序,如图7-29所示。
先将硬件组态和OB1下载到CPU中,这是CPU运行正常。在“Blocks”下插入“Variable Table”,然后打开,填入MW0、MW2、MW4、MW6和M10.0,点击键,程序运行正常。将M10.0置为“true”,CPU会报错并停机,查看CPU的诊断缓冲区信息,发现为I/O访问错误。将OB122下载到CPU中,再将M10.0置为“true”,CPU会报错但不停机,检查并修改OB1程序,如图7-30所示。
重新下载OB1,CPU不再报错,程序运行正常。
对于某些同步错误,可以调用系统功能SFC44,为输入模块提供一个替代错误值,以便使程序能继续执行。如果错误发生在输入模块,可以在用户程序中直接替代。如果是输出模块错误,输出模块将自动地用组态时定义的值替代。替代值虽然不一定能反映真实的过程信号,但是可以避免终止用户程序和进入STOP模式。