>与故障诊断有关的中断组织块 7.1.1与硬件故障有关的中断组织块 CPU 在识别到故障或编程错误时,将会调用对应的中断组织块(OB),可以在这些OB中编写程序对故障进行处理。下面介绍与硬件故障有关的几个主要的中断组织块。 1.诊断中新组织块OB82 具有诊断中断功能并启用了诊断中断的模块检测出其诊断状态发生变化时,将向CPU发送一个诊断中断请求。模块通过产生诊断中断来报告事件,例如发生了电源或备用电池错误、操作系统检测到存储器错误、信号模块导线断开、I/O通道短路或过载、模拟量模块的电源故障等。 PROFINET模块有一种处于“完好”和“故障”之间的临界状态,称为“维护”,利用该状态用户可以发现故障的苗头,及时维护现场设备。出现需要维护的事件时,CPU将需要维护的事件写入CPU的诊断缓冲区。 出现故障或有组件要求维护(事件进入状态),故障消失或没有组件需要维护(事件退出状态),操作系统将会分别调用一次OB82。 下面介绍 OB82的局部变量。S7-1500的1O_state的第0~7位为1状态分别表示IO状态为良好、禁用、需要维护、要求维护、错误、不可用、受限和不可用。在STEP7中,良好、需要维护、要求维护和错误分别用绿色对勾、绿色扳手、黄色扳手和红色扳手的图标来表示。 局部变量LADDR为触发诊断中断的硬件对象的硬件标识符,Channel为通道编号。如果有多个错误,Bool变量MultiErtor为1状态。 2.机架故障组织块OB86 如果检测到DP主站系统或PROFINET 10系统发生故障、DP从站或IO设备发生故障,故障出现和故障消失时,操作系统将会分别调用一次OB86。PROFINET 智能IO设备的某些子模块发生故障时,操作系统也要调用OB86。 局部变量LADDR是有故障的硬件对象的硬件标识符。事件种类Event_Class为16#32/33分别表示DP从站或IO设备被激活或禁用,16#38/39分别表示离去的事件(故障消失)和到达的事件(故障出现)。错误代码FaultID的意义见OB86的在线帮助。 3.拔出/插入中断组织块OB83 如果拔出或插入了已组态且未禁用的分布式I/O模块或子模块,操作系统将调用拔出/插入中断组织块OB83。拔出或插入中央模块将导致CPU 进入STOP模式(CPU 1510SP-1PN和1512SP-1PN除外)。 局部变量LADDR是受影响的模块或子模块的硬件标示符。事件种类Event_Class 为16#38/39分别表示插入模块、拔出模块或未响应。错误代码Fault_ID(故障标示符)的意义见OB83的在线帮助。 4.故障处理中断组织块的应用 S7-300/400如果发生了启动OB82(诊断中断)、OB83(移除/插入模块)、OB86(机架故障)和0B122(IO访问错误)的事件,但是没有为上述事件生成和下载对应的组织块,CPU 将会自动切换到STOP模式,以保证设备和生产过程的安全。对于默认的设置,如果S7-400没有生成和下载优先级错误组织块OB85,出现优先级错误事件时,CPU也会切换到STOP模式。 在设备运行过程中,由于通信网络的接插件接触不好,或者因为外部强干扰源的干扰,可能会出现通信短暂的中断,但是很快又会自动恢复正常,这种故障俗称为“闪断”。为了在出现闪断时CPU和分布式I/O系统不停机,可以生成和下载上述组织块。如果系统出现了不能自动恢复的故障,用上述方法使系统仍然继续运行,可能导致系统处于某种危险的状态,造成现场人员的伤害或者设备的损坏。 S7-1500如果发生了启动OB82、OB83、OB86和OB122的事件,但是没有为上述事件分配OB,默认的系统响应为“忽略”。因此即使没有生成和下载上述组织块,出现对应的事件时CPU也不会自动切换到STOP模式。如果希望在出现某类故障时切换到STOP模式,以保证设各和生产过程的安全,可以生成和下载对应的组织块,在该组织块中用“退出程序”指令STP使PLC进入STOP模式。 S7-1500没有OB85。出现全局错误处理的编程错误时,如果没有生成和下载编程错误组织块OB121,CPU将会切换到STOP模式。 7.1.2时间错误中断组织块 1,时间错误中断组织块 循环时间是CPU的操作系统执行循环程序以及中断此循环的所有程序段所需的时间。可以用CPU的巡视窗口设置循环周期监视时间(见图1-27)。 时间错误中断组织块OB80的启动信息中的局部变量FaultID是错误的标识符,可能的错误包括超出最大循环时间、仍在处理请求的OB、由于时间跳变而导致时间中断超时、从HOLD 模式重新进入RUN模式时超时的时间中断、队列溢出、因中断负载过大而导致中断丢失。 此外S7-1500还会因为等时同步模式中断的时间错误和工艺同步中断的时间错误调用OB80. 可以在优先级为1的程序循环OB和它调用的块中,用指令RE_TRIGR(重新启动周期监视时间,见3.5节)来重新启动监控定时器。 检测到时间错误时,CPU将调用时间错误中断组织块OB80。如果循环时间超过最大循环时间,并且下载了OB80,CPU将调用OB80。如果没有下载OB80,将忽略第一次超过循环时问的事件。 如果循环时间超过最大循环时间的两倍,并且没有执行RE_TRIGR指令,不管是否有OB80,CPU将立即进入STOP模式。 2、用跳转指令产生时间错误的实验 打开STEP7的项目视图,生成一个名为“时间错误中断例程”的新项目(见随书光盘中的同名例程)。双击项目树中的“添加新设备”,添加的CPU 的型号为CPU 1214C。 双击指令树的“PLC1”文件夹中的“设备组态”,打开设备视图,选中其中的CPU,设置默认的MB1作系统存储器字节(见图1-28)。 图 7-1是OB1中用来演示CPU对时间错误反应的程序。 3.循环时间超时的实验 将程序和组态信息下载到CPU后,切换到 RUN 模式。接通I1.0外接的小开关后马上断开它,脉冲定时器TP输出一个宽度为200ms 的脉冲,定时器输出位“T1”.Q的常开触点闭合。在此期间,反复执行JMP 指令,跳转到标签M1234处。上述跳转过程是在一个扫描循环周期内完成的,因此扫描循环时间大于定时器的设定值200ms,超过了CPU默认的循环周期监视时间(150ms),出现时间错误事件。CPU的红色ERRORLED闪动几次后熄灭,仍然处于RUN模式。 双击指令树的“程序块”文件夹中的“添加新块”,单击出现的对话框中的“组织块”按钮(见图4-35),选中“Time error interrupt”,单击“确定”按钮,生成时间错误中断组织块OB80。在OB80中,用系统存储器字节的M1.2一直闭合的常开触点将Q0.7 置位为1。可以用I0.4将Q0.7复位(见图7-1)。 将OB80下载到CPU后,切换到RUN 模式。接通I1.0外接的小开关后马上断开它,出现时间错误事件,CPU调用OB80,Q0.7对应的LED亮。CPU的红色ERROR LED闪动几次后熄灭。 将图 7-1中定时器的时间预置值PT修改为400ms。OB1下载到CPU后,切换到RUN模式。接通I1.0外接的小开关后马上断开它,出现时间错误事件,ERRORLED闪动几次后熄灭。因为循环时间超过循环周期监视时间150ms的两倍,CPU切换到STOP模式。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |