北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章545 浏览8635274

如何使用中断组织块OB82对系统进行故障诊断?

设备在运行过程中不可避免的会发生一些故障(比如外围传感器的断线或者短路),设备维护人员希望在故障发生后,能快速的找到故障的原因,以便最快的采取措施进行处理。西门子S7-300/400系列PLC的CPU内部有诊断缓冲区,通过在线读取缓冲区的数据可以获取故障信息,但是这种方法需要维修人员拿着笔记本电脑到现场(也可以远程)连接到CPU中进行在线读取,对故障的反应速度比较慢,也不直观。有没有一种方法能在故障发生后把故障源直接显示在现场的屏幕上,从而免去了再次连线的繁琐?今天这篇文章,我们以西门子ET200S的模拟量模块的传感器断线故障为例,介绍如何通过S7的诊断中断组织OB82来快速获得诊断信息。

cover.png要使用诊断功能,首先模块本身要支持诊断功能,其次需要在硬件组态上把诊断功能开启。比如使用ET200S的2AI 2/4WIRE HF模拟量模块,该模块支持断线诊断功能。通过勾选“Diagnostics:Wire Break(诊断:断线)”选项,可以开启通道0和通道1的断线诊断功能,如下图:

AI_Eanble_Diagnostic.png

硬件组态开启诊断功能后,把组态信息下载到CPU中。

若在某个时刻通道0发生了断线故障,则AI模块会向CPU发出一个中断请求。CPU检测到中断请求后,会调用诊断中断组织块OB82进行处理。

若此时PLC的程序中没有OB82,则PLC会进入停机(STOP)状态。停机的是保证系统安全,防止意外的发生。

若编程人员下载了OB82组织块,但是里面没有任何处理中断的代码,那么PLC不会停机,而是会继续带故障运行。这种方法可以避免因为PLC停机造成的停线,但是并不推荐。因为断线可能产生的危害是未知的,PLC带故障运行存在很大的安全隐患。正确的做法是在OB82中对中断请求进行处理,获取中断地址,判断故障等级,以进行警告或者紧急停机。

OB82是PLC的操作系统和用户程序沟通的桥梁,它有很多的临时变量,如下图:

OB82_Temp_Variables.PNGCPU在调用OB82的时候,会将相应的临时变量赋值。通过读取相应临时变量的值,就可以获取诊断信息。

接下来我们在OB82中写两段简单的代码,将故障发生时模块的地址和事件等级保存到一个全局数据块中。

首先,新建一个全局数据块,命名为DB82。在DB82中新建两个变量“Diagnostic_Address”和“Event_Class”,如下图:

DB82.PNG

然后在OB82中,加入两段代码分别对模块的地址和事件等级进行保存,如下图:

OB82_handle.PNG通过以上的代码,我们可以读取并保存诊断事件的等级及发生故障的模块的地址。可以在需要的时候把故障模块显示在触摸屏上,这样维修人员就可以直观的发现问题的所在,以便尽快处理。

OB82还支持很多诊断功能,比如外部低电压、通信故障、看门狗停止等等,可以根据实际需要读取或保存。

好了,关于S7-300/400的诊断中断组织块OB82就先介绍到这里,欢迎扫描下面的二维码关注我们的微信公众号。


取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论